diff --git a/.gitlab/ci/pipelines/before_merging.yml b/.gitlab/ci/pipelines/before_merging.yml index d90a6638d30db5bf238cb8289ee3a8e99c1a5116..f292906702e39dab391f3bf994b447bd13a95c02 100644 --- a/.gitlab/ci/pipelines/before_merging.yml +++ b/.gitlab/ci/pipelines/before_merging.yml @@ -913,10 +913,8 @@ opam:all_2: - tezos-dac-node-lib - octez-smart-rollup-wasm-debugger-lib - octez-smart-rollup-node-lib - - octez-smart-rollup-node-alpha - octez-smart-rollup-node-PtParisB - octez-smart-rollup-node-PtNairob - - octez-smart-rollup-node-PsParisC - octez-smart-rollup-node-Proxford - octez-protocol-alpha-libs - octez-protocol-020-PsParisC-libs @@ -997,8 +995,82 @@ opam:all_1: parallel: matrix: - package: + - octez-smart-rollup-node-alpha + - octez-smart-rollup-node-PsParisC - octez-evm-node-libs +opam:exec_2: + image: ${ci_image_name}/prebuild:${ci_image_tag} + stage: packaging + tags: + - gcp + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" && $TZ_SCHEDULE_KIND == "EXTENDED_TESTS" + when: delayed + start_in: 2 minutes + - if: $CI_MERGE_REQUEST_LABELS =~ /(?:^|,)ci--opam(?:$|,)/ + when: delayed + start_in: 2 minutes + - changes: + - '**/*.dune.inc' + - '**/*.opam' + - '**/dune' + - '**/dune-project' + - '**/dune-workspace' + - '**/dune.inc' + - .gitlab/ci/jobs/packaging/opam:prepare.yml + - .gitlab/ci/jobs/packaging/opam_package.yml + - manifest/**/*.ml* + - scripts/opam-prepare-repo.sh + - scripts/version.sh + if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: delayed + start_in: 2 minutes + needs: + - oc.docker:ci:amd64 + - opam:prepare + dependencies: + - oc.docker:ci:amd64 + - opam:prepare + cache: + - key: opam-sccache + paths: + - $CI_PROJECT_DIR/_build/_sccache + policy: pull-push + - key: cargo-$CI_JOB_NAME_SLUG + paths: + - $CI_PROJECT_DIR/.cargo/registry/cache + policy: pull-push + before_script: + - eval $(opam env) + - mkdir -p $CI_PROJECT_DIR/opam_logs + - . ./scripts/ci/sccache-start.sh + script: + - opam remote add dev-repo ./_opam-repo-for-release + - opam install --yes ${package}.dev + - opam reinstall --yes --with-test ${package}.dev + after_script: + - eval $(opam env) + - OPAM_LOGS=opam_logs ./scripts/ci/opam_handle_output.sh + - sccache --stop-server || true + variables: + RUNTEZTALIAS: "true" + SCCACHE_DIR: $CI_PROJECT_DIR/_build/_sccache + SCCACHE_ERROR_LOG: $CI_PROJECT_DIR/opam_logs/sccache.log + SCCACHE_IDLE_TIMEOUT: "0" + CARGO_NET_OFFLINE: "false" + artifacts: + expire_in: 1 week + paths: + - opam_logs/ + when: always + retry: 2 + parallel: + matrix: + - package: + - octez-baker-PtParisB + - octez-accuser-PtParisB + opam:all_3: image: ${ci_image_name}/prebuild:${ci_image_tag} stage: packaging @@ -1322,9 +1394,7 @@ opam:exec_1: - octez-dac-client - octez-codec - octez-client - - octez-baker-PtParisB - octez-baker-PsParisC - - octez-accuser-PtParisB - octez-accuser-PsParisC opam:all_5: diff --git a/.gitlab/ci/pipelines/schedule_extended_test.yml b/.gitlab/ci/pipelines/schedule_extended_test.yml index 4f8da0816b39885a5415e7f74f0506d1fdefde4b..8da417cf1c4f3b2ab64cbc6563150ebd1fbb0fc7 100644 --- a/.gitlab/ci/pipelines/schedule_extended_test.yml +++ b/.gitlab/ci/pipelines/schedule_extended_test.yml @@ -855,10 +855,8 @@ opam:all_2: - tezos-dac-node-lib - octez-smart-rollup-wasm-debugger-lib - octez-smart-rollup-node-lib - - octez-smart-rollup-node-alpha - octez-smart-rollup-node-PtParisB - octez-smart-rollup-node-PtNairob - - octez-smart-rollup-node-PsParisC - octez-smart-rollup-node-Proxford - octez-protocol-alpha-libs - octez-protocol-020-PsParisC-libs @@ -939,8 +937,82 @@ opam:all_1: parallel: matrix: - package: + - octez-smart-rollup-node-alpha + - octez-smart-rollup-node-PsParisC - octez-evm-node-libs +opam:exec_2: + image: ${ci_image_name}/prebuild:${ci_image_tag} + stage: packaging + tags: + - gcp + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" && $TZ_SCHEDULE_KIND == "EXTENDED_TESTS" + when: delayed + start_in: 2 minutes + - if: $CI_MERGE_REQUEST_LABELS =~ /(?:^|,)ci--opam(?:$|,)/ + when: delayed + start_in: 2 minutes + - changes: + - '**/*.dune.inc' + - '**/*.opam' + - '**/dune' + - '**/dune-project' + - '**/dune-workspace' + - '**/dune.inc' + - .gitlab/ci/jobs/packaging/opam:prepare.yml + - .gitlab/ci/jobs/packaging/opam_package.yml + - manifest/**/*.ml* + - scripts/opam-prepare-repo.sh + - scripts/version.sh + if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: delayed + start_in: 2 minutes + needs: + - oc.docker:ci:amd64 + - opam:prepare + dependencies: + - oc.docker:ci:amd64 + - opam:prepare + cache: + - key: opam-sccache + paths: + - $CI_PROJECT_DIR/_build/_sccache + policy: pull-push + - key: cargo-$CI_JOB_NAME_SLUG + paths: + - $CI_PROJECT_DIR/.cargo/registry/cache + policy: pull-push + before_script: + - eval $(opam env) + - mkdir -p $CI_PROJECT_DIR/opam_logs + - . ./scripts/ci/sccache-start.sh + script: + - opam remote add dev-repo ./_opam-repo-for-release + - opam install --yes ${package}.dev + - opam reinstall --yes --with-test ${package}.dev + after_script: + - eval $(opam env) + - OPAM_LOGS=opam_logs ./scripts/ci/opam_handle_output.sh + - sccache --stop-server || true + variables: + RUNTEZTALIAS: "true" + SCCACHE_DIR: $CI_PROJECT_DIR/_build/_sccache + SCCACHE_ERROR_LOG: $CI_PROJECT_DIR/opam_logs/sccache.log + SCCACHE_IDLE_TIMEOUT: "0" + CARGO_NET_OFFLINE: "false" + artifacts: + expire_in: 1 week + paths: + - opam_logs/ + when: always + retry: 2 + parallel: + matrix: + - package: + - octez-baker-PtParisB + - octez-accuser-PtParisB + opam:all_3: image: ${ci_image_name}/prebuild:${ci_image_tag} stage: packaging @@ -1264,9 +1336,7 @@ opam:exec_1: - octez-dac-client - octez-codec - octez-client - - octez-baker-PtParisB - octez-baker-PsParisC - - octez-accuser-PtParisB - octez-accuser-PsParisC opam:all_5: diff --git a/devtools/testnet_experiment_tools/testnet_experiment_tools.ml b/devtools/testnet_experiment_tools/testnet_experiment_tools.ml index eccedb17e531c1dd969a126013bfd53248769a05..0a0a465d780d8c525c7fb4f34e3b192fbf9edb6f 100644 --- a/devtools/testnet_experiment_tools/testnet_experiment_tools.ml +++ b/devtools/testnet_experiment_tools/testnet_experiment_tools.ml @@ -95,16 +95,11 @@ let protocol_alpha_parameters_template = let network_activation_parameters_templates protocol_hash = match protocol_hash with - | Tezt_tezos.Protocol.ParisB -> - Some - (Filename.concat - network_parameters_templates_dir - "proto_019_PtParisB_mainnet.json") | Tezt_tezos.Protocol.ParisC -> Some (Filename.concat network_parameters_templates_dir - "proto_019_PtParisC_mainnet.json") + "proto_020_PsParisC_mainnet.json") | Tezt_tezos.Protocol.Alpha -> (* Fetching the network parameters from the src/proto_alpha directory, to be sure that we are in synch with current protocl parameters. *) diff --git a/docs/paris/sapling.rst b/docs/paris/sapling.rst index 84a76aa5ca98970bf9412efaff1a98efdb0b6aa7..a53f2ac82715b15997970e5fd499b3e86dffd145 100644 --- a/docs/paris/sapling.rst +++ b/docs/paris/sapling.rst @@ -271,7 +271,7 @@ Shielded tez ^^^^^^^^^^^^ An example contract implementing a shielded pool of tokens with a 1 to 1 conversion rate to mutez is available in the tests of the protocol at -:src:`src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz`. +:src:`src/proto_020_PsParisC/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz`. Simple Voting Contract ^^^^^^^^^^^^^^^^^^^^^^ @@ -490,7 +490,7 @@ unshielding. # bake a block to include it. # { } represents an empty Sapling state. octez-client originate contract shielded-tez transferring 0 from bootstrap1 \ - running src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz \ + running src/proto_020_PsParisC/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz \ --init '{ }' --burn-cap 3 & octez-client bake for bootstrap1 diff --git a/dune-project b/dune-project index 1e3e1147d4d6d3ef40db0a1c3dc78365acf478e7..d96ad3c762a06eee0d6d443d06b1f21efc9194cb 100644 --- a/dune-project +++ b/dune-project @@ -85,7 +85,6 @@ (package (name octez-version)) (package (name octogram)) (package (name tezos-benchmark)) -(package (name tezos-benchmark-019-PtParisB)) (package (name tezos-benchmark-020-PsParisC)) (package (name tezos-benchmark-alpha)) (package (name tezos-benchmark-examples)) @@ -93,7 +92,6 @@ (package (name tezos-benchmark-type-inference-019-PtParisB)) (package (name tezos-benchmark-type-inference-020-PsParisC)) (package (name tezos-benchmark-type-inference-alpha)) -(package (name tezos-benchmarks-proto-019-PtParisB)) (package (name tezos-benchmarks-proto-020-PsParisC)) (package (name tezos-benchmarks-proto-alpha)) (package (name tezos-client-demo-counter)) @@ -133,7 +131,6 @@ (package (name tezos-protocol-017-PtNairob)) (package (name tezos-protocol-018-Proxford)) (package (name tezos-protocol-019-PtParisB)) -(package (name tezos-protocol-019-PtParisB-tests)(allow_empty)) (package (name tezos-protocol-020-PsParisC)) (package (name tezos-protocol-020-PsParisC-tests)(allow_empty)) (package (name tezos-protocol-alpha)) diff --git a/etherlink/tezt/tests/expected/evm_rollup.ml/Parisb- Regression test for L2 block hash.out b/etherlink/tezt/tests/expected/evm_rollup.ml/Parisb- Regression test for L2 block hash.out deleted file mode 100644 index 17292415f618075a228d58fb53c9ea265e6cc7d4..0000000000000000000000000000000000000000 --- a/etherlink/tezt/tests/expected/evm_rollup.ml/Parisb- Regression test for L2 block hash.out +++ /dev/null @@ -1 +0,0 @@ -Block hash: 0x73ae12394a756b443de566a272e86a7482a7c16c666819d4c075b60b91620070 diff --git a/manifest/product_octez.ml b/manifest/product_octez.ml index 89119d042b706d388ba3e2e1a2a17bdc82a39014..87cf96266ee4b296ea4fc843546a8c83379bb6fa 100644 --- a/manifest/product_octez.ml +++ b/manifest/product_octez.ml @@ -6136,7 +6136,7 @@ let hash = Protocol.hash ~linkall:true in let test_helpers = - only_if active @@ fun () -> + only_if (active && not N.(number == 019)) @@ fun () -> octez_protocol_lib "test-helpers" ~path:(path // "lib_protocol/test/helpers") @@ -6167,7 +6167,7 @@ let hash = Protocol.hash in let _plugin_tests = opt_map (both plugin test_helpers) @@ fun (plugin, test_helpers) -> - only_if active @@ fun () -> + only_if (active && not N.(number == 019)) @@ fun () -> tezt [ "helpers"; @@ -6197,7 +6197,7 @@ let hash = Protocol.hash ] in let _client_tests = - only_if active @@ fun () -> + only_if (active && not N.(number == 019)) @@ fun () -> tezt [ "test_michelson_v1_macros"; @@ -6354,7 +6354,8 @@ let hash = Protocol.hash else ["Baking_commands"; "Baking_commands_registration"]) in let tenderbrute = - only_if (active && N.(number >= 013)) @@ fun () -> + only_if (active && N.(number >= 013) && not N.(number == 019)) + @@ fun () -> octez_protocol_lib "baking.tenderbrute" ~internal_name:(sf "tenderbrute_%s" name_underscore) @@ -6373,7 +6374,8 @@ let hash = Protocol.hash ~bisect_ppx:No in let _tenderbrute_exe = - only_if (active && N.(number >= 013)) @@ fun () -> + only_if (active && N.(number >= 013) && not N.(number == 019)) + @@ fun () -> test "tenderbrute_main" ~alias:"" @@ -6394,7 +6396,7 @@ let hash = Protocol.hash in let _baking_tests = opt_map (both baking test_helpers) @@ fun (baking, test_helpers) -> - only_if N.(number >= 011) @@ fun () -> + only_if ((not N.(number == 019)) && N.(number >= 011)) @@ fun () -> let mockup_simulator = only_if N.(number >= 012) @@ fun () -> octez_protocol_lib @@ -6565,7 +6567,8 @@ let hash = Protocol.hash ~linkall:true in let _dal_tests = - only_if (active && N.(number >= 016)) @@ fun () -> + only_if (active && N.(number >= 016) && not N.(number == 019)) + @@ fun () -> tezt (* test [test_dac_pages_encoding] was removed after 016 *) (if N.(number == 016) then @@ -6617,7 +6620,8 @@ let hash = Protocol.hash ~linkall:true in let _dac_tests = - only_if (active && N.(number >= 017)) @@ fun () -> + only_if (active && N.(number >= 017) && not N.(number == 019)) + @@ fun () -> tezt [ "test_dac_pages_encoding"; @@ -6775,7 +6779,7 @@ let hash = Protocol.hash ] in let _benchmark_type_inference_tests = - only_if active @@ fun () -> + only_if (active && not N.(number == 019)) @@ fun () -> tests ["test_uf"; "test_inference"] ~path:(path // "lib_benchmark/lib_benchmark_type_inference/test") @@ -6822,7 +6826,7 @@ let hash = Protocol.hash in let _benchmark_tests = opt_map (both benchmark test_helpers) @@ fun (benchmark, test_helpers) -> - only_if active @@ fun () -> + only_if (active && not N.(number == 019)) @@ fun () -> (* Note: to enable gprof profiling, manually add the following stanza to lib_benchmark/test/dune: (ocamlopt_flags (:standard -p -ccopt -no-pie)) *) @@ -6894,7 +6898,7 @@ let hash = Protocol.hash ~linkall:true in let _ = - if active then + if active && not N.(number == 019) then Lib_protocol.make_tests ?test_helpers ?parameters diff --git a/opam/octez-protocol-019-PtParisB-libs.opam b/opam/octez-protocol-019-PtParisB-libs.opam index 4e60e55be9827a992176a222bb51074f3f2f3184..59b6f02e9c9f30428778ddc4d514fa824886d8ec 100644 --- a/opam/octez-protocol-019-PtParisB-libs.opam +++ b/opam/octez-protocol-019-PtParisB-libs.opam @@ -15,9 +15,6 @@ depends: [ "tezos-protocol-019-PtParisB" { = version } "octez-shell-libs" { = version } "uri" { >= "3.1.0" } - "tezt" { >= "4.1.0" & < "5.0.0" } - "tezt-tezos" { = version } - "qcheck-alcotest" { >= "0.20" } "octez-proto-libs" { = version } "octez-version" { = version } "tezos-dal-node-services" { = version } @@ -29,8 +26,6 @@ depends: [ "tezos-dac-client-lib" { = version } "octez-injector" { = version } "octez-l2-libs" { = version } - "octez-alcotezt" { with-test & = version } - "tezos-dac-node-lib" { with-test & = version } ] build: [ ["rm" "-r" "vendors" "contrib"] diff --git a/opam/tezos-benchmark-019-PtParisB.opam b/opam/tezos-benchmark-019-PtParisB.opam deleted file mode 100644 index 86a511a4c9acf67f16be142141bb6378d99d4aa2..0000000000000000000000000000000000000000 --- a/opam/tezos-benchmark-019-PtParisB.opam +++ /dev/null @@ -1,27 +0,0 @@ -# This file was automatically generated, do not edit. -# Edit file manifest/main.ml instead. -opam-version: "2.0" -maintainer: "contact@tezos.com" -authors: ["Tezos devteam"] -homepage: "https://www.tezos.com/" -bug-reports: "https://gitlab.com/tezos/tezos/issues" -dev-repo: "git+https://gitlab.com/tezos/tezos.git" -license: "MIT" -depends: [ - "dune" { >= "3.11.1" } - "ocaml" { >= "4.14" } - "octez-libs" { = version } - "tezos-micheline-rewriting" { = version } - "tezos-benchmark" { = version } - "tezos-benchmark-type-inference-019-PtParisB" { = version } - "tezos-protocol-019-PtParisB" { = version } - "hashcons" - "octez-protocol-019-PtParisB-libs" { = version } - "prbnmcn-stats" { = "0.0.6" } -] -build: [ - ["rm" "-r" "vendors" "contrib"] - ["dune" "build" "-p" name "-j" jobs] - ["dune" "runtest" "-p" name "-j" jobs] {with-test} -] -synopsis: "Tezos/Protocol: library for writing benchmarks (protocol-specific part)" diff --git a/opam/tezos-benchmark-type-inference-019-PtParisB.opam b/opam/tezos-benchmark-type-inference-019-PtParisB.opam index dacf9200a6e5f4ca178aa86233c95b93ce465e0e..a711d487d5abccc0ba39a99fb3a5e270246f1efd 100644 --- a/opam/tezos-benchmark-type-inference-019-PtParisB.opam +++ b/opam/tezos-benchmark-type-inference-019-PtParisB.opam @@ -14,7 +14,6 @@ depends: [ "tezos-micheline-rewriting" { = version } "tezos-protocol-019-PtParisB" { = version } "hashcons" - "octez-protocol-019-PtParisB-libs" { with-test & = version } ] build: [ ["rm" "-r" "vendors" "contrib"] diff --git a/opam/tezos-benchmarks-proto-019-PtParisB.opam b/opam/tezos-benchmarks-proto-019-PtParisB.opam deleted file mode 100644 index 7b36524240c69937d6105441966741616f3bc429..0000000000000000000000000000000000000000 --- a/opam/tezos-benchmarks-proto-019-PtParisB.opam +++ /dev/null @@ -1,27 +0,0 @@ -# This file was automatically generated, do not edit. -# Edit file manifest/main.ml instead. -opam-version: "2.0" -maintainer: "contact@tezos.com" -authors: ["Tezos devteam"] -homepage: "https://www.tezos.com/" -bug-reports: "https://gitlab.com/tezos/tezos/issues" -dev-repo: "git+https://gitlab.com/tezos/tezos.git" -license: "MIT" -depends: [ - "dune" { >= "3.11.1" } - "ocaml" { >= "4.14" } - "octez-libs" { = version } - "tezos-protocol-019-PtParisB" { = version } - "tezos-benchmark" { = version } - "tezos-benchmark-019-PtParisB" { = version } - "tezos-benchmark-type-inference-019-PtParisB" { = version } - "octez-shell-libs" { = version } - "octez-protocol-019-PtParisB-libs" { = version } - "octez-proto-libs" { = version } -] -build: [ - ["rm" "-r" "vendors" "contrib"] - ["dune" "build" "-p" name "-j" jobs] - ["dune" "runtest" "-p" name "-j" jobs] {with-test} -] -synopsis: "Tezos/Protocol: protocol benchmarks" diff --git a/opam/tezos-protocol-019-PtParisB-tests.opam b/opam/tezos-protocol-019-PtParisB-tests.opam deleted file mode 100644 index bcbabddee90d21cca215285e0dd02ae937662256..0000000000000000000000000000000000000000 --- a/opam/tezos-protocol-019-PtParisB-tests.opam +++ /dev/null @@ -1,32 +0,0 @@ -# This file was automatically generated, do not edit. -# Edit file manifest/main.ml instead. -opam-version: "2.0" -maintainer: "contact@tezos.com" -authors: ["Tezos devteam"] -homepage: "https://www.tezos.com/" -bug-reports: "https://gitlab.com/tezos/tezos/issues" -dev-repo: "git+https://gitlab.com/tezos/tezos.git" -license: "MIT" -depends: [ - "dune" { >= "3.11.1" } - "ocaml" { >= "4.14" } - "tezt" { with-test & >= "4.1.0" & < "5.0.0" } - "octez-libs" {with-test} - "octez-protocol-019-PtParisB-libs" {with-test} - "tezos-protocol-019-PtParisB" {with-test} - "octez-alcotezt" {with-test} - "tezos-benchmark" {with-test} - "tezos-benchmark-019-PtParisB" {with-test} - "tezos-benchmark-type-inference-019-PtParisB" {with-test} - "qcheck-alcotest" { with-test & >= "0.20" } - "tezt-tezos" {with-test} - "octez-shell-libs" {with-test} - "octez-proto-libs" {with-test} - "octez-l2-libs" {with-test} -] -build: [ - ["rm" "-r" "vendors" "contrib"] - ["dune" "build" "-p" name "-j" jobs] - ["dune" "runtest" "-p" name "-j" jobs] {with-test} -] -synopsis: "Tezos/Protocol: tests for economic-protocol definition" diff --git a/script-inputs/ci-opam-package-tests b/script-inputs/ci-opam-package-tests index a74a766585152384555b5f8f600046afc783ef54..7881f5105779888bf9169ae399aac4a6f1fc9086 100644 --- a/script-inputs/ci-opam-package-tests +++ b/script-inputs/ci-opam-package-tests @@ -1,9 +1,9 @@ bls12-381 all 7 octez-accuser-PsParisC exec 1 -octez-accuser-PtParisB exec 1 +octez-accuser-PtParisB exec 2 octez-alcotezt all 7 octez-baker-PsParisC exec 1 -octez-baker-PtParisB exec 1 +octez-baker-PtParisB exec 2 octez-client exec 1 octez-codec exec 1 octez-crawler all 4 @@ -53,10 +53,10 @@ octez-shell-libs all 6 octez-signer exec 4 octez-smart-rollup-node exec 1 octez-smart-rollup-node-Proxford all 2 -octez-smart-rollup-node-PsParisC all 2 +octez-smart-rollup-node-PsParisC all 1 octez-smart-rollup-node-PtNairob all 2 octez-smart-rollup-node-PtParisB all 2 -octez-smart-rollup-node-alpha all 2 +octez-smart-rollup-node-alpha all 1 octez-smart-rollup-node-lib all 2 octez-smart-rollup-wasm-debugger exec 1 octez-smart-rollup-wasm-debugger-lib all 2 diff --git a/src/proto_019_PtParisB/lib_benchmark/README.md b/src/proto_019_PtParisB/lib_benchmark/README.md deleted file mode 100644 index 8adba76cbf901753ff9f76082b04be90aee0ff90..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# `Tezos_benchmark_alpha` - -This library is dedicated to sampling Michelson values and in particular -Michelson programs. - -## Architecture - -This library provides a sampling-based interface for well-typed -Michelson generation. Internally, this library is built on a sampler for an -intermediate language called Mikhailsky post-composed with a function to -map Mikhailsky terms to Michelson ones. - -### Layer 1: Mikhailsky - Mikhailsky corresponds to "Michelson with typed holes". Mikhailsky terms - are encoded inside Micheline. The library `lib_benchmark_type_inference` - provides the language definition as well as a type inference engine. - -### Layer 2: Sampling Mikhailsky terms - We sample Mikhailsky terms using a Markov chain where transitions correspond - to local rewriting rules. The state space of the Markov chain is defined - in `State_space` module. The rewriting infrastructure is provided in the - `Kernel` module by instantiating `lib_micheline_rewriting`. - Rewrites are checked to preserved well-typedness in the Mikhailsky sense - using the type inference engine provided with Mikhailsky. The `Rules` - module defines all rewriting rules, for both Mikhailsky _programs_ - (submodule `Rules.Instruction`) and _data_ - (submodule `Rules.Data_rewrite_leaves`). The function `Rules.rewriting` - performs the enumeration of possible rewritings. - - The Markov chain is biased to sample terms of a specified - size using the Metropolis-Hasting functors provided by `StaTz`. - The instantiation of this Markov chain is defined in the `Sampler` - module. - -### Layer 3: - Once we can sample Mikhaislky terms of a specified size, we need - to convert them to Michelson ones. This is performed in two steps. - - In the first step, we use the `Autocomplete` module to fill holes - in Mikhailsky terms (resp. data) with well-typed code (resp. data). - This is a relatively ad-hoc process. - - The last step is to convert Mikhaislky to Michelson using the - `Michelson` module. diff --git a/src/proto_019_PtParisB/lib_benchmark/autocomp.ml b/src/proto_019_PtParisB/lib_benchmark/autocomp.ml deleted file mode 100644 index 0b3f0d8b62debbb1bc48a95a505df191e45ccaf4..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/autocomp.ml +++ /dev/null @@ -1,380 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Autocompletion functions (removing holes from Mikhailsky terms). *) - -open Sampling_helpers - -(* ------------------------------------------------------------------------- *) -(* Helpers *) - -let rec stack_length (stack : Type.Stack.t) acc = - match stack.node with - | Empty_t -> acc - | Stack_var_t _ -> acc + 1 - | Item_t (_, tl) -> stack_length tl (acc + 1) - -(* We need to sort and remove duplicate elements - of sets and maps to make them Michelson-compatible. *) -let sort_set_elements elements = - List.sort_uniq - (Structural_compare.compare - ~prim_compare:Mikhailsky.Mikhailsky_signature.compare) - elements - -let sort_map_elements elements = - let open Micheline in - List.sort_uniq - (fun node1 node2 -> - match (node1, node2) with - | ( Prim (_, Mikhailsky_prim.D_Elt, [k1; _v1], _), - Prim (_, Mikhailsky_prim.D_Elt, [k2; _v2], _) ) -> - Structural_compare.compare - ~prim_compare:Mikhailsky.Mikhailsky_signature.compare - k1 - k2 - | _ -> Stdlib.failwith "Autocomp.sort_map_elements: invalid Michelson map") - elements - -(* ------------------------------------------------------------------------- *) -(* Error handling *) - -type error_case = - | Cannot_complete_data of Mikhailsky.node * Kernel.Path.t - | Cannot_complete_code of Mikhailsky.node * Kernel.Path.t - -exception Autocompletion_error of error_case - -let cannot_complete_data node path = - raise (Autocompletion_error (Cannot_complete_data (node, path))) - -let cannot_complete_code node path = - raise (Autocompletion_error (Cannot_complete_code (node, path))) - -(* ------------------------------------------------------------------------- *) -(* Code & data autocompletion *) - -(* By default, comparable values are unit. *) -let default_comparable_type = Type.unit - -let generate_comparable _sp = Mikhailsky.Data.unit - -(* Instantiates variables in a base type, remaining variables - are mapped to some consistent choice of ground type - (this is made complicated by comparability constraints) *) -let rec instantiate_and_set ty = - let open Inference.M in - Inference.instantiate_base ty >>= fun ty -> replace_vars ty - -and replace_vars (ty : Type.Base.t) = - let open Inference.M in - let node = ty.node in - match node with - | Type.Base.Unit_t | Type.Base.Int_t | Type.Base.Nat_t | Type.Base.Bool_t - | Type.Base.String_t | Type.Base.Bytes_t | Type.Base.Key_hash_t - | Type.Base.Timestamp_t | Type.Base.Mutez_t | Type.Base.Key_t -> - return ty - | Type.Base.Var_t v -> ( - get_repr_exn v >>= fun repr -> - match repr with - | Inference.Stack_type _ -> assert false - | Inference.Base_type {comparable = _; repr = Some _} -> assert false - | Inference.Base_type {comparable; repr = None} -> ( - match comparable with - | Inference.Comparable -> return default_comparable_type - | Inference.Unconstrained | Inference.Not_comparable -> - return Type.unit)) - | Type.Base.Option_t ty -> - replace_vars ty >>= fun ty -> return (Type.option ty) - | Type.Base.Pair_t (lt, rt) -> - replace_vars lt >>= fun lt -> - replace_vars rt >>= fun rt -> return (Type.pair lt rt) - | Type.Base.Or_t (lt, rt) -> - replace_vars lt >>= fun lt -> - replace_vars rt >>= fun rt -> return (Type.or_ lt rt) - | Type.Base.List_t ty -> replace_vars ty >>= fun ty -> return (Type.list ty) - | Type.Base.Set_t ty -> replace_vars ty >>= fun ty -> return (Type.set ty) - | Type.Base.Map_t (k, v) -> - replace_vars k >>= fun k -> - replace_vars v >>= fun v -> return (Type.map k v) - | Type.Base.Lambda_t (dom, range) -> - replace_vars dom >>= fun dom -> - replace_vars range >>= fun range -> return (Type.lambda dom range) - -let rec instantiate_and_set_stack (stack_ty : Type.Stack.t) = - let open Inference.M in - let node = stack_ty.node in - match node with - | Type.Stack.Empty_t -> return Type.empty - | Type.Stack.Stack_var_t _ -> return Type.empty - | Type.Stack.Item_t (hd, tl) -> - instantiate_and_set hd >>= fun hd -> - instantiate_and_set_stack tl >>= fun tl -> return (Type.item hd tl) - -(* In the following we perform computations in the composite monad - (sampler o Inference.M.t), it is convenient to define the bind and return - explicitly. *) -module SM = struct - type 'a t = 'a Inference.M.t sampler - - let ( >>= ) : 'a t -> ('a -> 'b t) -> 'b t = - fun m f rng_state s -> - let x, s = m rng_state s in - f x rng_state s - [@@inline] - - let sample : 'a sampler -> 'a Inference.M.t sampler = - fun x rng_state st -> (x rng_state, st) - [@@inline] - - let deterministic : 'a Inference.M.t -> 'a t = fun x _rng_state -> x - - let return x _ s = (x, s) [@@inline] -end - -module Make - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) = -struct - (* Generates minimally sized random data of specified type. - Used in autocompletion. *) - (* /!\ Always call [instantiate_and_set] on the type argument of - [generate_data]. /!\ *) - let rec generate_data : Type.Base.t -> Mikhailsky.node SM.t = - fun ty -> - let open SM in - let open Type.Base in - let desc = ty.node in - match desc with - | Var_t _v -> assert false - | Unit_t -> return Mikhailsky.Data.unit - | Int_t -> - sample @@ Michelson_base.int >>= fun i -> - let i = Protocol.Script_int.to_zint i in - return (Mikhailsky.Data.big_integer i) - | Nat_t -> - sample @@ Michelson_base.nat >>= fun n -> - let n = Protocol.Script_int.to_zint n in - return (Mikhailsky.Data.big_natural n) - | Bool_t -> - sample Base_samplers.uniform_bool >>= fun b -> - if b then return Mikhailsky.Data.true_ - else return Mikhailsky.Data.false_ - | String_t -> - sample Michelson_base.string >>= fun str -> - let str = Protocol.Script_string.to_string str in - return (Mikhailsky.Data.string str) - | Bytes_t -> - sample Michelson_base.bytes >>= fun bytes -> - return (Mikhailsky.Data.bytes bytes) - | Key_hash_t -> - sample Crypto_samplers.pkh >>= fun pkh -> - return (Mikhailsky.Data.key_hash pkh) - | Timestamp_t -> - sample Michelson_base.timestamp >>= fun tstamp -> - return (Mikhailsky.Data.timestamp tstamp) - | Mutez_t -> - sample Michelson_base.tez >>= fun tz -> - return (Mikhailsky.Data.mutez tz) - | Key_t -> - sample Crypto_samplers.pk >>= fun pk -> return (Mikhailsky.Data.key pk) - | Option_t ty -> - sample Base_samplers.uniform_bool >>= fun b -> - if b then return Mikhailsky.Data.none - else generate_data ty >>= fun res -> return (Mikhailsky.Data.some res) - | Pair_t (lty, rty) -> - generate_data lty >>= fun lv -> - generate_data rty >>= fun rv -> return (Mikhailsky.Data.pair lv rv) - | Or_t (lty, rty) -> - sample Base_samplers.uniform_bool >>= fun b -> - if b then generate_data lty >>= fun v -> return (Mikhailsky.Data.left v) - else generate_data rty >>= fun v -> return (Mikhailsky.Data.right v) - | List_t _ty -> return (Mikhailsky.Data.list []) - | Set_t _ty -> return (Mikhailsky.Data.set []) - | Map_t (_kty, _vty) -> return (Mikhailsky.Data.map []) - | Lambda_t (dom, range) -> - invent_term Type.(item dom empty) Type.(item range empty) - >>= fun code -> return (Mikhailsky.Data.lambda code) - - and invent_term (bef : Type.Stack.t) (aft : Type.Stack.t) : - Mikhailsky.node list SM.t = - let open SM in - install_dummy_stack aft [] >>= fun code -> - let terms = drop_stack bef code in - return terms - - and drop_stack (stack : Type.Stack.t) code = - Mikhailsky.Instructions.dropn (stack_length stack 0) :: code - - and install_dummy_stack (stack : Type.Stack.t) (acc : Mikhailsky.node list) = - let open SM in - match stack.node with - | Empty_t -> return acc - | Stack_var_t _ -> - let acc = Mikhailsky.(Instructions.push unit_ty Data.unit) :: acc in - return acc - | Item_t (hd, tl) -> - deterministic @@ instantiate_and_set hd >>= fun hd -> - (match hd.node with - | Lambda_t (dom, range) -> - invent_term Type.(item dom empty) Type.(item range empty) - >>= fun code -> - let instr = Mikhailsky.(prim I_LAMBDA [seq code] []) in - return instr - | _ -> - generate_data hd >>= fun term -> - let ty = Mikhailsky.unparse_ty_exn hd in - return (Mikhailsky.Instructions.push ty term)) - >>= fun instr -> install_dummy_stack tl (instr :: acc) - - (* Autocomplete Mikhailsky data. - When encountering a hole, we lookup its type and instantiate - some random data of the specified type. *) - let rec complete_data : - Mikhailsky.node -> Kernel.Path.t -> Mikhailsky.node SM.t = - let open SM in - fun node path -> - match node with - | Micheline.Int (_, _) | Micheline.String (_, _) | Micheline.Bytes (_, _) - -> - return node - | Micheline.Prim (_, D_Hole, _, _) -> ( - deterministic @@ Inference.M.get_data_annot path >>= fun ty_opt -> - match ty_opt with - | None -> cannot_complete_data node path - | Some ty -> - deterministic @@ instantiate_and_set ty >>= fun ty -> - generate_data ty) - | Micheline.Prim (_, A_Set, [Micheline.Seq (_, elements)], _) -> - complete_data_list (Kernel.Path.at_index 0 path) 0 elements [] - >>= fun elements -> - let elements = sort_set_elements elements in - return (Mikhailsky.Data.set elements) - | Micheline.Prim (_, A_Map, [Micheline.Seq (_, elements)], _) -> - complete_data_list (Kernel.Path.at_index 0 path) 0 elements [] - >>= fun elements -> - let elements = sort_map_elements elements in - return (Mikhailsky.Data.map elements) - | Micheline.Prim (_, prim, subterms, _) -> - complete_data_list path 0 subterms [] >>= fun subterms -> - return (Mikhailsky.prim prim subterms []) - | Micheline.Seq (_, subterms) -> - complete_data_list path 0 subterms [] >>= fun subterms -> - return (Mikhailsky.seq subterms) - - and complete_data_list path i subterms acc = - let open SM in - match subterms with - | [] -> return (List.rev acc) - | subterm :: tl -> - let path' = Kernel.Path.at_index i path in - complete_data subterm path' >>= fun term -> - complete_data_list path (i + 1) tl (term :: acc) - - let complete_data typing node rng_state = - let root_type_opt, _ = Inference.M.get_data_annot Kernel.Path.root typing in - match root_type_opt with - | None -> Stdlib.failwith "Autocomp.complete_data: cannot get type of expr" - | Some ty -> - let _, typing = Inference.instantiate_base ty typing in - let result, _ = - try complete_data node Kernel.Path.root rng_state typing - with Autocompletion_error (Cannot_complete_data (subterm, path)) -> - Format.eprintf "Cannot complete data@." ; - Format.eprintf "at path %s@." (Kernel.Path.to_string path) ; - Format.eprintf "%a@." Mikhailsky.pp subterm ; - Stdlib.failwith "in autocomp.ml: unrecoverable failure" - in - let typ, _typing = - try Inference.infer_data_with_state result - with Inference.Ill_typed_script error -> - Format.eprintf "%a@." Inference.pp_inference_error error ; - Format.eprintf "%a@." Mikhailsky.pp result ; - assert false - in - (result, typ) - - (* Autocomplete Mikhailsky code. *) - - let rec complete_code : - Mikhailsky.node -> Kernel.Path.t -> Mikhailsky.node SM.t = - let open SM in - fun node path -> - match node with - | Micheline.Int (_, _) | Micheline.String (_, _) | Micheline.Bytes (_, _) - -> - return node - | Micheline.Prim (_, I_Hole, _, _) -> ( - deterministic @@ Inference.M.get_instr_annot path >>= function - | None -> cannot_complete_code node path - | Some {bef; aft} -> - deterministic @@ Inference.instantiate bef >>= fun bef -> - deterministic @@ Inference.instantiate aft >>= fun aft -> - invent_term bef aft >>= fun code -> return (Mikhailsky.seq code)) - | Micheline.Prim (_, prim, subterms, _) -> - complete_code_list path 0 subterms [] >>= fun subterms -> - return (Mikhailsky.prim prim subterms []) - | Micheline.Seq (_, subterms) -> - complete_code_list path 0 subterms [] >>= fun subterms -> - return (Mikhailsky.seq subterms) - - and complete_code_list path i subterms acc = - let open SM in - match subterms with - | [] -> return (List.rev acc) - | subterm :: tl -> - let path' = Kernel.Path.at_index i path in - complete_code subterm path' >>= fun term -> - complete_code_list path (i + 1) tl (term :: acc) - - let complete_code typing node rng_state = - let root_type_opt, _ = - Inference.M.get_instr_annot Kernel.Path.root typing - in - match root_type_opt with - | None -> Stdlib.failwith "Autocomp.complete_code: cannot get type of expr" - | Some {bef; aft} -> - let _, typing = Inference.instantiate bef typing in - let _, typing = Inference.instantiate aft typing in - let result, _ = - try complete_code node Kernel.Path.root rng_state typing with - | Autocompletion_error (Cannot_complete_code (subterm, path)) -> - Format.eprintf "Cannot complete code@." ; - Format.eprintf "at path %s@." (Kernel.Path.to_string path) ; - Format.eprintf "%a@." Mikhailsky.pp subterm ; - Stdlib.failwith "in autocomp.ml: unrecoverable failure" - | _ -> assert false - in - let (bef, aft), typing = - try Inference.infer_with_state result - with Inference.Ill_typed_script error -> - Format.eprintf "%a@." Inference.pp_inference_error error ; - Format.eprintf "%a@." Mikhailsky.pp result ; - assert false - in - let bef, typing = instantiate_and_set_stack bef typing in - let aft, typing = instantiate_and_set_stack aft typing in - (result, (bef, aft), typing) -end diff --git a/src/proto_019_PtParisB/lib_benchmark/dune b/src/proto_019_PtParisB/lib_benchmark/dune deleted file mode 100644 index 6e34995fefab580847ab14c06fa373ce8e50faac..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/dune +++ /dev/null @@ -1,33 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name tezos_benchmark_019_PtParisB) - (public_name tezos-benchmark-019-PtParisB) - (libraries - octez-libs.stdlib - octez-libs.base - octez-libs.error-monad - octez-libs.micheline - tezos-micheline-rewriting - tezos-benchmark - tezos-benchmark-type-inference-019-PtParisB - tezos-protocol-019-PtParisB.protocol - octez-libs.crypto - tezos-protocol-019-PtParisB.parameters - hashcons - octez-protocol-019-PtParisB-libs.test-helpers - prbnmcn-stats) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezos_stdlib - -open Tezos_base - -open Tezos_error_monad - -open Tezos_micheline - -open Tezos_micheline_rewriting - -open Tezos_benchmark - -open Tezos_benchmark_type_inference_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_019_PtParisB_test_helpers) - (private_modules kernel rules state_space)) diff --git a/src/proto_019_PtParisB/lib_benchmark/execution_context.ml b/src/proto_019_PtParisB/lib_benchmark/execution_context.ml deleted file mode 100644 index 1dce1b3b59e64c86273916bdf58b49935ed6702e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/execution_context.ml +++ /dev/null @@ -1,103 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -type context = Alpha_context.context * Script_interpreter.step_constants - -let initial_balance = 4_000_000_000_000L - -let context_init_memory ?dal ~rng_state () = - let open Lwt_result_wrap_syntax in - let dal_enable = Option.is_some dal in - let* block, accounts = - Context.init_n - ~rng_state - ~dal_enable - ?dal - ~bootstrap_balances: - [ - initial_balance; - initial_balance; - initial_balance; - initial_balance; - initial_balance; - ] - 5 - () - in - match accounts with - | [bs1; bs2; bs3; bs4; bs5] -> - return (`Mem_block (block, (bs1, bs2, bs3, bs4, bs5))) - | _ -> assert false - -let context_init ?dal ~rng_state () = context_init_memory ?dal ~rng_state () - -let make ?dal ~rng_state () = - let open Lwt_result_wrap_syntax in - let* context = context_init_memory ?dal ~rng_state () in - let amount = Alpha_context.Tez.one in - let chain_id = Tezos_crypto.Hashed.Chain_id.zero in - let now = Script_timestamp.of_zint Z.zero in - let level = Script_int.zero_n in - let open Script_interpreter in - let* block, step_constants = - match context with - | `Mem_block (block, (bs1, _, _, _, _)) -> - let sender = Alpha_context.Destination.Contract bs1 in - let payer = Contract_helpers.default_payer in - let self = Contract_helpers.default_self in - let step_constants = - { - sender; - payer; - self; - amount; - balance = Alpha_context.Tez.of_mutez_exn initial_balance; - chain_id; - now; - level; - } - in - return (block, step_constants) - in - let* csts = Context.get_constants (B block) in - let minimal_block_delay = - Protocol.Alpha_context.Period.to_seconds csts.parametric.minimal_block_delay - in - let* vs = - Incremental.begin_construction - ~timestamp: - (Time.Protocol.add block.header.shell.timestamp minimal_block_delay) - block - in - let ctxt = Incremental.alpha_ctxt vs in - let ctxt = - (* Required for eg Create_contract *) - Protocol.Alpha_context.Origination_nonce.init - ctxt - Tezos_crypto.Hashed.Operation_hash.zero - in - return (ctxt, step_constants) diff --git a/src/proto_019_PtParisB/lib_benchmark/kernel.ml b/src/proto_019_PtParisB/lib_benchmark/kernel.ml deleted file mode 100644 index 0932302aa20b62c763e382067cf97ad4e09a9639..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/kernel.ml +++ /dev/null @@ -1,39 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* ------------------------------------------------------------------------- *) -(* Instantiate rewriting subsystem *) - -module Lang = - Micheline_with_hash_consing.Make - (Mikhailsky.Mikhailsky_signature) - (struct - let initial_size = None - end) - -module Path = Mikhailsky.Path -module Patt = Pattern.Make (Mikhailsky.Mikhailsky_signature) (Lang) (Path) -module Rewriter = - Rewrite.Make (Mikhailsky.Mikhailsky_signature) (Lang) (Path) (Patt) diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/inference.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/inference.ml deleted file mode 100644 index d8e728621fc1f279ba910034b9a6fb231020d35e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/inference.ml +++ /dev/null @@ -1,1150 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Micheline -module UF = Uf.UF - -(* The domain of comparability: - * - * Comparable Not_comparable - * ^ ^ - * \ / - * \ / - * Unconstrained - * - * The higher we go, the more information we have. - * This domain admits all glbs but not all lubs. - *) - -type comparability = Comparable | Not_comparable | Unconstrained - -let pp_comparability fmtr (cmp : comparability) = - match cmp with - | Comparable -> Format.fprintf fmtr "Comparable" - | Not_comparable -> Format.fprintf fmtr "Not_comparable" - | Unconstrained -> Format.fprintf fmtr "Unconstrained" - -let sup_comparability (c1 : comparability) (c2 : comparability) = - match (c1, c2) with - | Unconstrained, c | c, Unconstrained -> Some c - | Comparable, Comparable -> Some Comparable - | Not_comparable, Not_comparable -> Some Not_comparable - | Comparable, Not_comparable | Not_comparable, Comparable -> None - -type michelson_type = - | Base_type of {repr : Type.Base.t option; comparable : comparability} - | Stack_type of Type.Stack.t option - -type transformer = {bef : Type.Stack.t; aft : Type.Stack.t} - -let michelson_type_to_string (x : michelson_type) = - match x with - | Base_type {repr = None; comparable} -> - Format.asprintf "?::[%a]" pp_comparability comparable - | Base_type {repr = Some ty; comparable} -> - Format.asprintf "%a::[%a]" Type.Base.pp ty pp_comparability comparable - | Stack_type None -> "" - | Stack_type (Some sty) -> Format.asprintf "%a" Type.Stack.pp sty - -(* ------------------------------------------------------------------------- *) -(* Typechecking errors *) - -type inference_error = - (* | Expected_data_with_ground_type of Mikhailsky.Path.t * Mikhailsky.node *) - | Unhandled_micheline of Mikhailsky.Path.t * Mikhailsky.node - | Expected_micheline_prim - | Unsatisfiable_comparability_constraint of comparability_error_witness - | Base_types_incompatible of Type.Base.t * Type.Base.t - | Stack_types_incompatible of Type.Stack.t * Type.Stack.t - | Badly_typed_arithmetic of Mikhailsky_prim.prim * Type.Base.t * Type.Base.t - | Ill_formed_arithmetic of Mikhailsky.Path.t * Mikhailsky.node - | Cyclic_stack_type - | Cyclic_base_type - | Invalid_ast of string option * Mikhailsky.Path.t * Mikhailsky.node - -and comparability_error_witness = - | Comparability_error_types of michelson_type * michelson_type - | Comparability_error_tags of Type.Base.t * comparability * comparability - -let pp_inference_error fmtr (err : inference_error) = - match err with - (* | Expected_data_with_ground_type (path, node) -> - * let path = Mikhailsky.Path.to_string path in - * let node = Mikhailsky.to_string node in - * Format.fprintf fmtr "Expected data with ground type: %s at path %s" node path *) - | Unhandled_micheline (path, node) -> - let path = Mikhailsky.Path.to_string path in - let node = Mikhailsky.to_string node in - Format.fprintf fmtr "Unhandled micheline: %s at path %s" node path - | Expected_micheline_prim -> - Format.fprintf fmtr "%s" "Expected_micheline_prim" - | Unsatisfiable_comparability_constraint - (Comparability_error_types (ty1, ty2)) -> - let ty1 = michelson_type_to_string ty1 in - let ty2 = michelson_type_to_string ty2 in - Format.fprintf - fmtr - "Unsatisfiable comparability constraint: %s # %s" - ty1 - ty2 - | Unsatisfiable_comparability_constraint - (Comparability_error_tags (ty, cmp1, cmp2)) -> - Format.fprintf - fmtr - "Unsatisfiable comparability constraint: %a :: %a # %a" - Type.Base.pp - ty - pp_comparability - cmp1 - pp_comparability - cmp2 - | Base_types_incompatible (ty1, ty2) -> - Format.fprintf - fmtr - "Base types incompatible: %a %a" - Type.Base.pp - ty1 - Type.Base.pp - ty2 - | Stack_types_incompatible (sty1, sty2) -> - Format.fprintf - fmtr - "Stack types incompatible: %a %a" - Type.Stack.pp - sty1 - Type.Stack.pp - sty2 - | Badly_typed_arithmetic (prim, ty1, ty2) -> - Format.fprintf - fmtr - "Badly typed arithmetic: %a(%a, %a)" - Mikhailsky_prim.pp - prim - Type.Base.pp - ty1 - Type.Base.pp - ty2 - | Ill_formed_arithmetic (path, node) -> - let path = Mikhailsky.Path.to_string path in - let node = Mikhailsky.to_string node in - Format.fprintf fmtr "Ill formed arithmetic: %s at path %s" node path - | Cyclic_stack_type -> Format.fprintf fmtr "Cyclic stack type" - | Cyclic_base_type -> Format.fprintf fmtr "Cyclic base type" - | Invalid_ast (msg_opt, path, node) -> ( - let path = Mikhailsky.Path.to_string path in - let node = Mikhailsky.to_string node in - match msg_opt with - | None -> Format.fprintf fmtr "Invalid ast: %s at path %s" node path - | Some msg -> - Format.fprintf fmtr "Invalid ast: %s at path %s (%s)" node path msg) - -exception Ill_typed_script of inference_error - -let unsatisfiable_comparability ty cmp1 cmp2 = - raise - (Ill_typed_script - (Unsatisfiable_comparability_constraint - (Comparability_error_tags (ty, cmp1, cmp2)))) - -let invalid_ast ?msg path node = - raise (Ill_typed_script (Invalid_ast (msg, path, node))) - -let () = - Printexc.register_printer (fun exn -> - match exn with - | Ill_typed_script error -> - Some (Format.asprintf "%a" pp_inference_error error) - | _ -> None) - -(* ------------------------------------------------------------------------- *) - -module Repr_store = - Stores.Map - (Int_map) - (struct - type key = int - - type value = michelson_type - - let key_to_string = string_of_int - - let value_to_string = michelson_type_to_string - end) - -module Repr_sm = Monads.Make_state_monad (Repr_store) -module Path_map = Map.Make (Mikhailsky.Path) - -module Annot_instr_store = - Stores.Map - (Path_map) - (struct - type key = Mikhailsky.Path.t - - type value = transformer - - let key_to_string = Mikhailsky.Path.to_string - - let value_to_string {bef; aft} = - Format.asprintf "%a => %a" Type.Stack.pp bef Type.Stack.pp aft - end) - -module Annot_instr_sm = Monads.Make_state_monad (Annot_instr_store) - -module Annot_data_store = - Stores.Map - (Path_map) - (struct - type key = Mikhailsky.Path.t - - type value = Type.Base.t - - let key_to_string = Mikhailsky.Path.to_string - - let value_to_string ty = Format.asprintf "%a" Type.Base.pp ty - end) - -module Annot_data_sm = Monads.Make_state_monad (Annot_data_store) - -type state = { - uf : UF.M.state; - repr : Repr_sm.state; - annot_instr : Annot_instr_sm.state; - annot_data : Annot_data_sm.state; -} - -module M = struct - type 'a t = state -> 'a * state - - let empty : unit -> state = - fun () -> - { - uf = UF.M.empty (); - repr = Repr_sm.empty (); - annot_instr = Annot_instr_sm.empty (); - annot_data = Annot_data_sm.empty (); - } - - let ( >>= ) m f s = - let x, s = m s in - f x s - [@@inline] - - let return x s = (x, s) - - (* let run m = fst (m (empty ())) *) - - let uf_lift : 'a UF.M.t -> 'a t = - fun computation state -> - let res, uf = computation state.uf in - (res, {state with uf}) - [@@inline] - - let repr_lift : 'a Repr_sm.t -> 'a t = - fun computation state -> - let res, repr = computation state.repr in - (res, {state with repr}) - [@@inline] - - let annot_instr_lift : 'a Annot_instr_sm.t -> 'a t = - fun computation state -> - let res, annot_instr = computation state.annot_instr in - (res, {state with annot_instr}) - [@@inline] - - let annot_data_lift : 'a Annot_data_sm.t -> 'a t = - fun computation state -> - let res, annot_data = computation state.annot_data in - (res, {state with annot_data}) - [@@inline] - - let set_repr k v = repr_lift (Repr_sm.set k v) [@@inline] - - let get_repr_exn k = - repr_lift (Repr_sm.get k) >>= function - | None -> Stdlib.failwith "get_repr_exn" - | Some res -> return res - [@@inline] - - let set_instr_annot k v = annot_instr_lift (Annot_instr_sm.set k v) [@@inline] - - let get_instr_annot k = annot_instr_lift (Annot_instr_sm.get k) [@@inline] - - let set_data_annot k v = annot_data_lift (Annot_data_sm.set k v) [@@inline] - - let get_data_annot k = annot_data_lift (Annot_data_sm.get k) [@@inline] - - let get_state state = (state, state) -end - -module S = Set.Make (Int) - -let rec instantiate (encountered : S.t) (stack_ty : Type.Stack.t) : - Type.Stack.t M.t = - let open Type.Stack in - let open M in - if S.mem stack_ty.tag encountered then - raise (Ill_typed_script Cyclic_stack_type) - else - let encountered = S.add stack_ty.tag encountered in - match stack_ty.node with - | Empty_t -> return stack_ty - | Stack_var_t x -> ( - uf_lift (UF.find x) >>= fun root -> - get_repr_exn root >>= function - | Stack_type None -> return (Type.stack_var root) - | Stack_type (Some ty) -> instantiate encountered ty - | _ -> assert false) - | Item_t (head, tail) -> - instantiate_base S.empty head >>= fun head -> - instantiate encountered tail >>= fun tail -> - return (Type.item head tail) - -and instantiate_base (encountered : S.t) (ty : Type.Base.t) : Type.Base.t M.t = - let open Type.Base in - let open M in - if S.mem ty.tag encountered then raise (Ill_typed_script Cyclic_base_type) - else - let encountered = S.add ty.tag encountered in - match ty.node with - | Unit_t | Int_t | Nat_t | Bool_t | String_t | Bytes_t | Key_hash_t | Key_t - | Timestamp_t | Mutez_t -> - return ty - | Option_t ty -> - instantiate_base encountered ty >>= fun ty -> return (Type.option ty) - | List_t ty -> - instantiate_base encountered ty >>= fun ty -> return (Type.list ty) - | Set_t ty -> - instantiate_base encountered ty >>= fun ty -> return (Type.set ty) - | Map_t (kty, vty) -> - instantiate_base encountered kty >>= fun kty -> - instantiate_base encountered vty >>= fun vty -> - return (Type.map kty vty) - | Pair_t (lty, rty) -> - instantiate_base encountered lty >>= fun lty -> - instantiate_base encountered rty >>= fun rty -> - return (Type.pair lty rty) - | Or_t (lty, rty) -> - instantiate_base encountered lty >>= fun lty -> - instantiate_base encountered rty >>= fun rty -> - return (Type.or_ lty rty) - | Lambda_t (dom, range) -> - instantiate_base encountered dom >>= fun dom -> - instantiate_base encountered range >>= fun range -> - return (Type.lambda dom range) - | Var_t x -> ( - uf_lift (UF.find x) >>= fun root -> - get_repr_exn root >>= function - | Base_type {repr = None; _} -> return (Type.var root) - | Base_type {repr = Some ty; _} -> instantiate_base encountered ty - | _ -> assert false) - -let instantiate_base base_ty = instantiate_base S.empty base_ty - -let instantiate stack_ty = instantiate S.empty stack_ty - -let rec unify (x : Type.Stack.t) (y : Type.Stack.t) : unit M.t = - let open Type.Stack in - let open M in - let unify_single_stack v x = - (match Type.Stack.vars x with - | None -> return () - | Some v' -> - if v = v' then raise (Ill_typed_script Cyclic_stack_type) else return ()) - >>= fun () -> - M.uf_lift (UF.find v) >>= fun root -> - get_repr_exn root >>= fun repr -> - merge_reprs (Stack_type (Some x)) repr >>= fun repr -> set_repr root repr - in - if x.tag = y.tag then return () - else - match (x.node, y.node) with - | Empty_t, Empty_t -> return () - | Stack_var_t x, Stack_var_t y -> - M.uf_lift (UF.find x) >>= fun root_x -> - M.uf_lift (UF.find y) >>= fun root_y -> - get_repr_exn root_x >>= fun repr_x -> - get_repr_exn root_y >>= fun repr_y -> - M.uf_lift (UF.union x y) >>= fun root -> - merge_reprs repr_x repr_y >>= fun repr -> set_repr root repr - | Stack_var_t v, _ -> unify_single_stack v y - | _, Stack_var_t v -> unify_single_stack v x - | Item_t (ty1, tail1), Item_t (ty2, tail2) -> - unify_base ty1 ty2 >>= fun () -> - unify tail1 tail2 >>= fun () -> return () - | _ -> raise (Ill_typed_script (Stack_types_incompatible (x, y))) - -and unify_base (x : Type.Base.t) (y : Type.Base.t) : unit M.t = - let open Type.Base in - let open M in - let unify_single_var v x = - (if List.mem v (Type.Base.vars x) then - raise (Ill_typed_script Cyclic_base_type) - else return ()) - >>= fun () -> - M.uf_lift (UF.find v) >>= fun root -> - get_repr_exn root >>= fun repr -> - get_comparability x >>= fun comparable -> - merge_reprs (Base_type {repr = Some x; comparable}) repr >>= fun repr -> - set_repr root repr - in - if x.tag = y.tag then return () - else - match (x.node, y.node) with - | Unit_t, Unit_t - | Int_t, Int_t - | Nat_t, Nat_t - | Bool_t, Bool_t - | String_t, String_t - | Bytes_t, Bytes_t - | Key_hash_t, Key_hash_t - | Timestamp_t, Timestamp_t - | Mutez_t, Mutez_t - | Key_t, Key_t -> - return () - | Option_t x, Option_t y -> unify_base x y - | List_t x, List_t y -> unify_base x y - | Set_t x, Set_t y -> unify_base x y - | Map_t (kx, vx), Map_t (ky, vy) -> - unify_base kx ky >>= fun () -> unify_base vx vy - | Pair_t (x, x'), Pair_t (y, y') -> - unify_base x y >>= fun () -> unify_base x' y' - | Or_t (x, x'), Or_t (y, y') -> - unify_base x y >>= fun () -> unify_base x' y' - | Lambda_t (x, x'), Lambda_t (y, y') -> - unify_base x y >>= fun () -> unify_base x' y' - | Var_t x, Var_t y -> - M.uf_lift (UF.find x) >>= fun root_x -> - M.uf_lift (UF.find y) >>= fun root_y -> - get_repr_exn root_x >>= fun repr_x -> - get_repr_exn root_y >>= fun repr_y -> - M.uf_lift (UF.union x y) >>= fun root -> - merge_reprs repr_x repr_y >>= fun repr -> set_repr root repr - | Var_t v, _ -> unify_single_var v y - | _, Var_t v -> unify_single_var v x - | _ -> - instantiate_base x >>= fun x -> - instantiate_base y >>= fun y -> - raise (Ill_typed_script (Base_types_incompatible (x, y))) - -and merge_reprs (repr1 : michelson_type) (repr2 : michelson_type) : - michelson_type M.t = - let open M in - match (repr1, repr2) with - | (Stack_type None as repr), Stack_type None - | (Stack_type (Some _) as repr), Stack_type None - | Stack_type None, (Stack_type (Some _) as repr) -> - return repr - | (Stack_type (Some sty1) as repr), Stack_type (Some sty2) -> - unify sty1 sty2 >>= fun () -> return repr - | ( Base_type {repr = opt1; comparable = cmp1}, - Base_type {repr = opt2; comparable = cmp2} ) -> ( - let comparable_opt = sup_comparability cmp1 cmp2 in - match comparable_opt with - | None -> - raise - (Ill_typed_script - (Unsatisfiable_comparability_constraint - (Comparability_error_types (repr1, repr2)))) - | Some comparable -> ( - match (opt1, opt2) with - | None, None -> return (Base_type {repr = None; comparable}) - | (Some ty as repr), None -> - assert_comparability comparable ty >>= fun () -> - return (Base_type {repr; comparable}) - | None, (Some ty as repr) -> - assert_comparability comparable ty >>= fun () -> - return (Base_type {repr; comparable}) - | Some ty1, Some ty2 -> - unify_base ty1 ty2 >>= fun () -> - assert_comparability comparable ty1 >>= fun () -> - assert_comparability comparable ty2 >>= fun () -> - return (Base_type {repr = opt1; comparable}))) - | _ -> assert false - -and assert_comparability comparable ty = - assert_comparability_aux comparable ty [] - -and assert_comparability_aux lower_bound (ty : Type.Base.t) - (encountered : int list) : unit M.t = - let open M in - if List.mem ty.tag encountered then raise (Ill_typed_script Cyclic_base_type) - else - let encountered = ty.tag :: encountered in - match ty.node with - | Var_t v -> ( - uf_lift (UF.find v) >>= fun root -> - get_repr_exn root >>= fun repr -> - match repr with - | Base_type {repr = None; comparable} -> ( - match sup_comparability comparable lower_bound with - | None -> unsatisfiable_comparability ty comparable lower_bound - | Some comparable -> - set_repr root (Base_type {repr = None; comparable})) - | Base_type {repr = Some ty; comparable} -> ( - match sup_comparability comparable lower_bound with - | None -> unsatisfiable_comparability ty comparable lower_bound - | Some comparable -> - assert_comparability_aux lower_bound ty encountered - >>= fun () -> - set_repr root (Base_type {repr = Some ty; comparable})) - | Stack_type _ -> assert false) - | List_t _ | Set_t _ | Map_t _ | Lambda_t _ | Key_t -> ( - match lower_bound with - | Unconstrained | Not_comparable -> return () - | Comparable -> unsatisfiable_comparability ty Unconstrained lower_bound - ) - | Unit_t | Int_t | Nat_t | Bool_t | String_t | Bytes_t | Key_hash_t - | Timestamp_t | Mutez_t -> - (* if not (le_comparability lower_bound Comparable) then - * unsatisfiable_comparability ty Comparable lower_bound - * else *) - return () - | Option_t ty -> ( - match lower_bound with - | Comparable -> assert_comparability_aux Comparable ty encountered - | Not_comparable | Unconstrained -> return ()) - | Pair_t (l, r) -> ( - match lower_bound with - | Comparable -> - assert_comparability_aux Comparable l encountered >>= fun () -> - assert_comparability_aux Comparable r encountered - | Unconstrained | Not_comparable -> return ()) - | Or_t (l, r) -> ( - match lower_bound with - | Comparable -> - assert_comparability_aux Comparable l encountered >>= fun () -> - assert_comparability_aux Comparable r encountered - | Unconstrained | Not_comparable -> return ()) - -and get_comparability (ty : Type.Base.t) : comparability M.t = - let open M in - match ty.node with - | Var_t v -> ( - get_repr_exn v >>= fun repr -> - match repr with - | Stack_type _ -> assert false - | Base_type {comparable; _} -> return comparable) - | Unit_t | Int_t | Nat_t | Bool_t | String_t | Bytes_t | Key_hash_t - | Timestamp_t | Mutez_t -> - return Comparable - | List_t _ | Set_t _ | Map_t _ | Lambda_t _ | Key_t -> return Not_comparable - | Option_t ty -> get_comparability ty - | Or_t (lt, rt) | Pair_t (lt, rt) -> ( - get_comparability lt >>= fun lc -> - get_comparability rt >>= fun rc -> - match (lc, rc) with - | Comparable, Comparable -> return Comparable - | _ -> return Unconstrained) - -let fresh = - let x = ref ~-1 in - fun () -> - incr x ; - !x - -let exists_stack : unit -> Type.Stack.t M.t = - let open M in - fun () -> - let fresh = fresh () in - uf_lift (UF.add fresh) >>= fun () -> - set_repr fresh (Stack_type None) >>= fun () -> return (Type.stack_var fresh) - -let exists : unit -> Type.Base.t M.t = - let open M in - fun () -> - let fresh = fresh () in - uf_lift (UF.add fresh) >>= fun () -> - set_repr fresh (Base_type {repr = None; comparable = Unconstrained}) - >>= fun () -> return (Type.var fresh) - -let exists_cmp : unit -> Type.Base.t M.t = - let open M in - fun () -> - let fresh = fresh () in - uf_lift (UF.add fresh) >>= fun () -> - set_repr fresh (Base_type {repr = None; comparable = Comparable}) - >>= fun () -> return (Type.var fresh) - -(* Adapted from [script_ir_translator] *) -let parse_uint30 n : int = - let max_uint30 = 0x3fffffff in - match n with - | Micheline.Int (_, n') - when Compare.Z.(Z.zero <= n') && Compare.Z.(n' <= Z.of_int max_uint30) -> - Z.to_int n' - | _ -> assert false - -(* encodes the per-instruction relationship between input and output types - of binary arithmetic operations. *) -let arith_type (instr : Mikhailsky_prim.prim) (ty1 : Type.Base.t) - (ty2 : Type.Base.t) : Type.Base.t option = - match (instr, ty1.node, ty2.node) with - | (I_ADD | I_MUL), Int_t, Int_t - | (I_ADD | I_MUL), Int_t, Nat_t - | (I_ADD | I_MUL), Nat_t, Int_t -> - Some Type.int - | (I_ADD | I_MUL), Nat_t, Nat_t -> Some Type.nat - | I_SUB, Int_t, Int_t - | I_SUB, Int_t, Nat_t - | I_SUB, Nat_t, Int_t - | I_SUB, Nat_t, Nat_t - | I_SUB, Timestamp_t, Timestamp_t -> - Some Type.int - | I_EDIV, Int_t, Int_t - | I_EDIV, Int_t, Nat_t - | I_EDIV, Nat_t, Int_t - | I_EDIV, Nat_t, Nat_t -> - Some Type.(option (pair nat nat)) - (* Timestamp *) - | I_ADD, Timestamp_t, Int_t - | I_ADD, Int_t, Timestamp_t - | I_SUB, Timestamp_t, Int_t -> - Some Type.timestamp - (* Mutez *) - | I_ADD, Mutez_t, Mutez_t - | I_SUB, Mutez_t, Mutez_t - | I_MUL, Mutez_t, Nat_t - | I_MUL, Nat_t, Mutez_t -> - Some Type.mutez - | I_EDIV, Mutez_t, Nat_t -> Some Type.(option (pair mutez mutez)) - | I_EDIV, Mutez_t, Mutez_t -> Some Type.(option (pair nat mutez)) - | _ -> None - -let rec generate_constraints (path : Mikhailsky.Path.t) (node : Mikhailsky.node) - (bef : Type.Stack.t) (aft : Type.Stack.t) : unit M.t = - let open M in - set_instr_annot path {bef; aft} >>= fun () -> - match node with - | Int (_, _) -> - assert false (* Ints should always be guarded by annotations *) - | String (_, _) | Bytes (_, _) -> - raise (Ill_typed_script Expected_micheline_prim) - (* Hole *) - | Prim (_, I_Hole, [], _) -> return () - (* Stack ops - simple cases *) - | Prim (_loc, I_DROP, [], _annot) -> - exists () >>= fun top -> unify bef (Type.item top aft) - | Prim (_loc, I_DROP, [n], _annot) -> - let n = parse_uint30 n in - generate_constraints_dropn n bef aft - | Prim (_loc, I_DUP, [], _annot) -> - exists () >>= fun top -> - exists_stack () >>= fun rest -> - unify bef Type.(item top rest) >>= fun () -> - unify aft Type.(item top (item top rest)) - | Prim (_loc, I_SWAP, [], _annot) -> - exists () >>= fun a -> - exists () >>= fun b -> - exists_stack () >>= fun rest -> - unify bef Type.(item a (item b rest)) >>= fun () -> - unify aft Type.(item b (item a rest)) - | Prim (_loc, I_PUSH, [t; d], _annot) -> - let ty = - Mikhailsky.parse_ty - ~allow_big_map:false - ~allow_operation:false - ~allow_contract:false - t - in - generate_constraints_data (Mikhailsky.Path.at_index 1 path) d ty - >>= fun () -> - (* assert_data_has_ground_type (Mikhailsky.Path.at_index 1 path) d ty >>= fun () -> *) - unify aft Type.(item ty bef) - | Prim (_loc, I_UNIT, [], _annot) -> unify aft Type.(item unit bef) - | Prim (_loc, I_DIP, [code], _annot) -> - exists () >>= fun top -> - exists_stack () >>= fun bef_rest -> - exists_stack () >>= fun aft_rest -> - unify bef Type.(item top bef_rest) >>= fun () -> - unify aft Type.(item top aft_rest) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - bef_rest - aft_rest - (* TODO: DIGn, etc *) - (* Option-related instructions *) - | Prim (_, I_SOME, [], _) -> - exists () >>= fun top -> - exists_stack () >>= fun rest -> - unify bef Type.(item top rest) >>= fun () -> - unify aft Type.(item (option top) rest) - | Prim (_, I_NONE, [t], _) -> - let ty = - Mikhailsky.parse_ty - ~allow_big_map:true - ~allow_operation:true - ~allow_contract:true - t - in - unify aft Type.(item (option ty) bef) - | Prim (_, I_IF_NONE, [bt; bf], _) -> - exists () >>= fun a -> - exists_stack () >>= fun rest -> - unify bef Type.(item (option a) rest) >>= fun () -> - generate_constraints (Mikhailsky.Path.at_index 0 path) bt rest aft - >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 1 path) - bf - Type.(item a rest) - aft - (* bool-based control flow *) - | Prim (_, I_IF, [bt; bf], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item bool rest) >>= fun () -> - generate_constraints (Mikhailsky.Path.at_index 0 path) bt rest aft - >>= fun () -> - generate_constraints (Mikhailsky.Path.at_index 1 path) bf rest aft - | Prim (_, I_LOOP, [body], _) -> - unify bef Type.(item bool aft) >>= fun () -> - generate_constraints (Mikhailsky.Path.at_index 0 path) body aft bef - (* Boolean binops *) - | Prim (_, I_AND, [], _) | Prim (_, I_OR, [], _) | Prim (_, I_XOR, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item bool (item bool rest)) >>= fun () -> - unify aft Type.(item bool rest) - (* Arithmetic *) - | Prim (_, ((I_ADD | I_SUB | I_MUL | I_EDIV) as instr), [ty1; ty2], _) -> ( - let ty1 = - Mikhailsky.parse_ty - ~allow_big_map:false - ~allow_operation:false - ~allow_contract:false - ty1 - in - let ty2 = - Mikhailsky.parse_ty - ~allow_big_map:false - ~allow_operation:false - ~allow_contract:false - ty2 - in - match arith_type instr ty1 ty2 with - | None -> - raise (Ill_typed_script (Badly_typed_arithmetic (instr, ty1, ty2))) - | Some ret -> - exists_stack () >>= fun rest -> - unify bef Type.(item ty1 (item ty2 rest)) >>= fun () -> - unify aft Type.(item ret rest)) - | Prim (_, (I_ADD | I_SUB | I_MUL | I_EDIV), _, _) -> - raise (Ill_typed_script (Ill_formed_arithmetic (path, node))) - | Prim (_, I_COMPARE, [], _) -> - exists_cmp () >>= fun a -> - exists_stack () >>= fun rest -> - unify bef Type.(item a (item a rest)) >>= fun () -> - unify aft Type.(item int rest) - | Prim (_, I_ABS, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item int rest) >>= fun () -> - unify aft Type.(item nat rest) - | Prim (_, I_GT, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item int rest) >>= fun () -> - unify aft Type.(item bool rest) - (* Strings/bytes *) - | Prim (_, I_CONCAT, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item string (item string rest)) >>= fun () -> - unify aft Type.(item string rest) - | Prim (_, I_SIZE_STRING, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item string rest) >>= fun () -> - unify aft Type.(item nat rest) - | Prim (_, I_SIZE_BYTES, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item bytes rest) >>= fun () -> - unify aft Type.(item nat rest) - (* Crypto *) - | Prim (_, I_SHA256, [], _) - | Prim (_, I_SHA512, [], _) - | Prim (_, I_BLAKE2B, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item bytes rest) >>= fun () -> - unify aft Type.(item bytes rest) - | Prim (_, I_HASH_KEY, [], _) -> - exists_stack () >>= fun rest -> - unify bef Type.(item key rest) >>= fun () -> - unify aft Type.(item key_hash rest) - (* sets *) - | Prim (_, I_EMPTY_SET, [], _) -> - exists_cmp () >>= fun cmpty -> unify aft Type.(item (set cmpty) bef) - | Prim (_, I_UPDATE_SET, [], _) -> - exists_cmp () >>= fun cty -> - exists_stack () >>= fun rest -> - unify bef Type.(item cty (item bool (item (set cty) rest))) >>= fun () -> - unify aft Type.(item (set cty) rest) - | Prim (_, I_SIZE_SET, [], _) -> - exists_cmp () >>= fun cmpty -> - exists_stack () >>= fun rest -> - unify bef Type.(item (set cmpty) rest) >>= fun () -> - unify aft Type.(item nat rest) - | Prim (_, I_ITER_SET, [code], _) -> - exists_cmp () >>= fun cmpty -> - unify bef Type.(item (set cmpty) aft) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - Type.(item cmpty aft) - aft - | Prim (_, I_MEM_SET, [], _) -> - exists_cmp () >>= fun cmpty -> - exists_stack () >>= fun rest -> - unify bef Type.(item cmpty (item (set cmpty) rest)) >>= fun () -> - unify aft Type.(item bool rest) - (* maps *) - | Prim (_, I_EMPTY_MAP, [], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty -> unify aft Type.(item (map kty vty) bef) - | Prim (_, I_UPDATE_MAP, [], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty -> - exists_stack () >>= fun rest -> - unify bef Type.(item kty (item (option vty) (item (map kty vty) rest))) - >>= fun () -> unify aft Type.(item (map kty vty) rest) - | Prim (_, I_SIZE_MAP, [], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty -> - exists_stack () >>= fun rest -> - unify bef Type.(item (map kty vty) rest) >>= fun () -> - unify aft Type.(item nat rest) - | Prim (_, I_ITER_MAP, [code], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty -> - unify bef Type.(item (map kty vty) aft) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - Type.(item (pair kty vty) aft) - aft - | Prim (_, I_MAP_MAP, [code], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty1 -> - exists () >>= fun vty2 -> - exists_stack () >>= fun rest -> - unify bef Type.(item (map kty vty1) rest) >>= fun () -> - unify aft Type.(item (map kty vty2) rest) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - Type.(item (pair kty vty1) rest) - Type.(item vty2 rest) - | Prim (_, I_MEM_MAP, [], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty -> - exists_stack () >>= fun rest -> - unify bef Type.(item kty (item (map kty vty) rest)) >>= fun () -> - unify aft Type.(item bool rest) - | Prim (_, I_GET_MAP, [], _) -> - exists_cmp () >>= fun kty -> - exists () >>= fun vty -> - exists_stack () >>= fun rest -> - unify bef Type.(item kty (item (map kty vty) rest)) >>= fun () -> - unify aft Type.(item (option vty) rest) - (* Pairs *) - | Prim (_, I_PAIR, [], _) -> - exists () >>= fun a -> - exists () >>= fun b -> - exists_stack () >>= fun rest -> - unify bef Type.(item a (item b rest)) >>= fun () -> - unify aft Type.(item (pair a b) rest) - | Prim (_, I_CAR, [], _) -> - exists () >>= fun a -> - exists () >>= fun b -> - exists_stack () >>= fun rest -> - unify bef Type.(item (pair a b) rest) >>= fun () -> - unify aft Type.(item a rest) - | Prim (_, I_CDR, [], _) -> - exists () >>= fun a -> - exists () >>= fun b -> - exists_stack () >>= fun rest -> - unify bef Type.(item (pair a b) rest) >>= fun () -> - unify aft Type.(item b rest) - (* Ors *) - | Prim (_, I_LEFT, [], _) -> - exists () >>= fun lt -> - exists () >>= fun rt -> - exists_stack () >>= fun rest -> - unify bef (Type.item lt rest) >>= fun () -> - unify aft Type.(item (or_ lt rt) rest) >>= fun res -> return res - | Prim (_, I_RIGHT, [], _) -> - exists () >>= fun lt -> - exists () >>= fun rt -> - exists_stack () >>= fun rest -> - unify bef Type.(item rt rest) >>= fun () -> - unify aft Type.(item (or_ lt rt) rest) - | Prim (_, (I_LEFT | I_RIGHT), _ :: _, _) -> - invalid_ast ~msg:__LOC__ path node - | Prim (_, I_LOOP_LEFT, [body], _) -> - exists () >>= fun l -> - exists () >>= fun r -> - exists_stack () >>= fun rest -> - unify bef Type.(item (or_ l r) rest) >>= fun () -> - unify aft Type.(item r rest) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - body - Type.(item l rest) - bef - | Prim (_, I_IF_LEFT, [bt; bf], _) -> - exists () >>= fun a -> - exists () >>= fun b -> - exists_stack () >>= fun rest -> - unify bef Type.(item (or_ a b) rest) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - bt - (Type.item a rest) - aft - >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 1 path) - bf - (Type.item b rest) - aft - (* lambdas *) - | Prim (_, I_LAMBDA, [code], _) -> - exists () >>= fun dom -> - exists () >>= fun range -> - unify aft Type.(item (lambda dom range) bef) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - Type.(item dom empty) - Type.(item range empty) - | Prim (_, I_LAMBDA, _, _) -> invalid_ast ~msg:__LOC__ path node - | Prim (_, I_APPLY, [], _) -> - exists () >>= fun a -> - exists () >>= fun b -> - exists () >>= fun ret -> - exists_stack () >>= fun rest -> - unify bef Type.(item a (item (lambda (pair a b) ret) rest)) >>= fun () -> - unify aft Type.(item (lambda b ret) rest) - | Prim (_, I_EXEC, [], _) -> - exists () >>= fun a -> - exists () >>= fun ret -> - exists_stack () >>= fun rest -> - unify bef Type.(item a (item (lambda a ret) rest)) >>= fun () -> - unify aft Type.(item ret rest) - (* lists *) - | Prim (_, I_NIL, [], _) -> - exists () >>= fun a -> unify aft Type.(item (list a) bef) - | Prim (_, I_CONS, [], _) -> - exists () >>= fun a -> - exists_stack () >>= fun rest -> - unify bef Type.(item a (item (list a) rest)) >>= fun () -> - unify aft Type.(item (list a) rest) - | Prim (_, I_SIZE_LIST, [], _) -> - exists () >>= fun ty -> - exists_stack () >>= fun rest -> - unify bef Type.(item (list ty) rest) >>= fun () -> - unify aft Type.(item nat rest) - | Prim (_, I_ITER_LIST, [code], _) -> - exists () >>= fun ty -> - unify bef Type.(item (list ty) aft) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - Type.(item ty aft) - aft - | Prim (_, I_MAP_LIST, [code], _) -> - exists () >>= fun ty1 -> - exists () >>= fun ty2 -> - exists_stack () >>= fun rest -> - unify bef Type.(item (list ty1) rest) >>= fun () -> - unify aft Type.(item (list ty2) rest) >>= fun () -> - generate_constraints - (Mikhailsky.Path.at_index 0 path) - code - Type.(item ty1 rest) - Type.(item ty2 rest) - (* pack/unpack*) - | Prim (_, I_PACK, [], _) -> - exists () >>= fun ty -> - exists_stack () >>= fun rest -> - unify bef Type.(item ty rest) >>= fun () -> - unify aft Type.(item bytes rest) - | Prim (_, I_UNPACK, [], _) -> - exists () >>= fun ty -> - exists_stack () >>= fun rest -> - unify bef Type.(item bytes rest) >>= fun () -> - unify aft Type.(item (option ty) rest) - (* Others *) - | Seq (_, []) -> unify bef aft - | Seq (_, [single]) -> - generate_constraints (Mikhailsky.Path.at_index 0 path) single bef aft - | Seq (_, instrs) -> generate_constraints_seq path 0 instrs bef aft - | _ -> raise (Ill_typed_script (Unhandled_micheline (path, node))) - -and generate_constraints_seq path index instrs bef aft = - let open M in - match instrs with - | [] -> assert false - | [single] -> - generate_constraints (Mikhailsky.Path.at_index index path) single bef aft - | hd :: tl -> - exists_stack () >>= fun stack_ty -> - generate_constraints (Mikhailsky.Path.at_index index path) hd bef stack_ty - >>= fun () -> generate_constraints_seq path (index + 1) tl stack_ty aft - -and generate_constraints_data (path : Mikhailsky.Path.t) - (node : Mikhailsky.node) (ty : Type.Base.t) : unit M.t = - let open M in - set_data_annot path ty >>= fun () -> - match node with - | Prim (_, D_Hole, [], _) -> return () - | Prim (_, D_Unit, [], _) -> unify_base ty Type.unit - | Prim (_, D_True, [], _) | Prim (_, D_False, [], _) -> - unify_base ty Type.bool - | String _ -> unify_base ty Type.string - | Bytes _ -> unify_base ty Type.bytes - | Prim (_, D_Pair, [vl; vr], _) -> - exists () >>= fun lty -> - exists () >>= fun rty -> - generate_constraints_data (Mikhailsky.Path.at_index 0 path) vl lty - >>= fun () -> - generate_constraints_data (Mikhailsky.Path.at_index 1 path) vr rty - >>= fun () -> unify_base ty (Type.pair lty rty) - | Prim (_, D_Left, [term], _) -> - exists () >>= fun lty -> - exists () >>= fun rty -> - generate_constraints_data (Mikhailsky.Path.at_index 0 path) term lty - >>= fun () -> unify_base ty (Type.or_ lty rty) - | Prim (_, D_Right, [term], _) -> - exists () >>= fun lty -> - exists () >>= fun rty -> - generate_constraints_data (Mikhailsky.Path.at_index 0 path) term rty - >>= fun () -> unify_base ty (Type.or_ lty rty) - | Prim (_, D_None, [], _) -> - exists () >>= fun elt_ty -> unify_base ty (Type.option elt_ty) - | Prim (_, D_Some, [v], _) -> - exists () >>= fun elt_ty -> - generate_constraints_data (Mikhailsky.Path.at_index 0 path) v elt_ty - >>= fun () -> unify_base ty (Type.option elt_ty) - | Prim (_, A_Int, [Int (_, _)], _) -> unify_base ty Type.int - | Prim (_, A_Nat, [Int (_, _)], _) -> unify_base ty Type.nat - | Prim (_, A_Timestamp, [Int (_, _)], _) -> unify_base ty Type.timestamp - | Prim (_, A_Mutez, [Int (_, _)], _) -> unify_base ty Type.mutez - | Prim (_, A_Key_hash, [Bytes (_, _)], _) -> unify_base ty Type.key_hash - | Prim (_, A_Key, [Bytes (_, _)], _) -> unify_base ty Type.key - | Prim (_, A_List, [Seq (_, subterms)], _) -> - exists () >>= fun elt_ty -> - unify_base ty Type.(list elt_ty) >>= fun () -> - (* path' accounts for the fact that the Seq is hidden under an annot. *) - let path' = Mikhailsky.Path.at_index 0 path in - generate_constraints_data_list path' 0 subterms elt_ty - | Prim (_, A_Set, [Seq (_, subterms)], _) -> - exists_cmp () >>= fun elt_ty -> - unify_base ty Type.(set elt_ty) >>= fun () -> - (* path' accounts for the fact that the Seq is hidden under an annot. *) - let path' = Mikhailsky.Path.at_index 0 path in - generate_constraints_data_set path' 0 subterms elt_ty - | Prim (_, A_Map, [Seq (_, subterms)], _) -> - exists_cmp () >>= fun k_ty -> - exists () >>= fun v_ty -> - unify_base ty Type.(map k_ty v_ty) >>= fun () -> - (* path' accounts for the fact that the Seq is hidden under an annot. *) - let path' = Mikhailsky.Path.at_index 0 path in - generate_constraints_data_map path' 0 subterms k_ty v_ty - | Prim (_, A_Lambda, [(Seq (_, _) as node)], _) -> - exists () >>= fun dom -> - exists () >>= fun range -> - unify_base ty Type.(lambda dom range) >>= fun () -> - let path' = Mikhailsky.Path.at_index 0 path in - let bef = Type.(item dom empty) in - let aft = Type.(item range empty) in - generate_constraints path' node bef aft - | Prim (_, (A_Int | A_Nat | A_List), _, _) -> - invalid_ast ~msg:__LOC__ path node - | Int _ - (* Ints should always be guarded by annotations *) - | Seq (_, _) - (* Lists, sets, maps, lambdas, should always be guarded by annotations *) - | _ -> - invalid_ast ~msg:__LOC__ path node - -(* raise (Ill_typed_script (Invalid_ast (path, node))) *) -and generate_constraints_data_list path index data ty = - let open M in - match data with - | [] -> return () - | hd :: tl -> - let hd_path = Mikhailsky.Path.at_index index path in - generate_constraints_data hd_path hd ty >>= fun () -> - generate_constraints_data_list path (index + 1) tl ty - -and generate_constraints_data_set path index data ty = - let open M in - match data with - | [] -> return () - | hd :: tl -> - let hd_path = Mikhailsky.Path.at_index index path in - generate_constraints_data hd_path hd ty >>= fun () -> - generate_constraints_data_list path (index + 1) tl ty - -and generate_constraints_data_map path index data k_ty v_ty = - let open M in - match data with - | [] -> return () - | elt :: tl -> ( - let elt_path = Mikhailsky.Path.at_index index path in - match elt with - | Prim (_, D_Elt, [k; v], _) -> - let k_path = Mikhailsky.Path.at_index 0 elt_path in - generate_constraints_data k_path k k_ty >>= fun () -> - let v_path = Mikhailsky.Path.at_index 1 elt_path in - generate_constraints_data v_path v v_ty >>= fun () -> - generate_constraints_data_map path (index + 1) tl k_ty v_ty - | _ -> invalid_ast ~msg:__LOC__ elt_path elt) - -and generate_constraints_dropn n bef aft = - let open M in - if n = 0 then unify bef aft - else - exists () >>= fun top -> - generate_constraints_dropn (n - 1) bef (Type.item top aft) - -let infer_with_state (node : Mikhailsky.node) : - (Type.Stack.t * Type.Stack.t) * state = - let open M in - ( exists_stack () >>= fun bef -> - exists_stack () >>= fun aft -> - generate_constraints Mikhailsky.Path.root node bef aft >>= fun () -> - instantiate bef >>= fun bef -> - instantiate aft >>= fun aft -> return (bef, aft) ) - (M.empty ()) - -let infer (node : Mikhailsky.node) : Type.Stack.t * Type.Stack.t = - fst (infer_with_state node) - -let infer_data_with_state (node : Mikhailsky.node) : Type.Base.t * state = - let open M in - ( exists () >>= fun ty -> - generate_constraints_data Mikhailsky.Path.root node ty >>= fun () -> - instantiate_base ty >>= fun ty -> return ty ) - (M.empty ()) - -let infer_data (node : Mikhailsky.node) : Type.Base.t = - fst (infer_data_with_state node) diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/inference.mli b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/inference.mli deleted file mode 100644 index e44d83fab0695fa48ed3832c8998aad3b9272880..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/inference.mli +++ /dev/null @@ -1,145 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Errors and their pretty-printing function *) -type inference_error - -exception Ill_typed_script of inference_error - -val pp_inference_error : Format.formatter -> inference_error -> unit - -(** Comparability tag. *) -type comparability = Comparable | Not_comparable | Unconstrained - -(** Michelson types. *) -type michelson_type = - | Base_type of {repr : Type.Base.t option; comparable : comparability} - | Stack_type of Type.Stack.t option - -type transformer = {bef : Type.Stack.t; aft : Type.Stack.t} - -(** State of the type inference module *) - -(** Store implementation for type representatives *) -module Repr_store : Stores.S with type key = int and type value = michelson_type - -(** State monad built on [Repr_store] *) -module Repr_sm : - Monads.State_sig - with type state = Repr_store.state - and type key = int - and type value = michelson_type - -(** Store implementation for instruction type representatives *) -module Annot_instr_store : - Stores.S with type key = Mikhailsky.Path.t and type value = transformer - -(** State monad handling annotations on instructions *) -module Annot_instr_sm : - Monads.State_sig - with type state = Annot_instr_store.state - and type value = transformer - and type key = Mikhailsky.Path.t - -(** Store implementation for data type representatives *) -module Annot_data_store : - Stores.S with type key = Mikhailsky.Path.t and type value = Type.Base.t - -(** State monad handling annotations on data *) -module Annot_data_sm : - Monads.State_sig - with type state = Annot_data_store.state - and type value = Type.Base.t - and type key = Mikhailsky.Path.t - -(** State of the inference module *) -type state = { - uf : Uf.UF.M.state; - repr : Repr_sm.state; - annot_instr : Annot_instr_sm.state; - annot_data : Annot_data_sm.state; -} - -(** State monad of the inference module. *) -module M : sig - type 'a t = state -> 'a * state - - val ( >>= ) : 'a t -> ('a -> 'b t) -> 'b t - - val empty : unit -> state - - val return : 'a -> 'a t - - val set_repr : int -> michelson_type -> unit t - - val get_repr_exn : int -> michelson_type t - - val get_instr_annot : Annot_data_sm.key -> transformer option t - - val get_data_annot : Annot_data_sm.key -> Type.Base.t option t - - val uf_lift : 'a Uf.UF.M.t -> 'a t - - val repr_lift : 'a Repr_sm.t -> 'a t - - val annot_instr_lift : 'a Annot_instr_sm.t -> 'a t - - val annot_data_lift : 'a Annot_data_sm.t -> 'a t - - val get_state : state t -end - -(** Unifies two stack types. *) -val unify : Type.Stack.t -> Type.Stack.t -> unit M.t - -(** Unifies two base types. *) -val unify_base : Type.Base.t -> Type.Base.t -> unit M.t - -(** Instantiate type variables with the associated terms in a base type. *) -val instantiate_base : Type.Base.t -> Type.Base.t M.t - -(** Instantiate type variables with the associated terms in a stack type. *) -val instantiate : Type.Stack.t -> Type.Stack.t M.t - -(** Get comparability flag for a base type. *) -val get_comparability : Type.Base.t -> comparability M.t - -(** Performs inference on the given Mikhailsky term and returns - its type (as a pair of [before] and [after] stack) as well as the - inference engine state. *) -val infer_with_state : Mikhailsky.node -> (Type.Stack.t * Type.Stack.t) * state - -(** Performs inference on the given Mikhailsky term and throws - the inference engine state away. *) -val infer : Mikhailsky.node -> Type.Stack.t * Type.Stack.t - -(** Performs inference on a piece of Mikhailsky [data] and - returns the inference engine state along the inferred type. *) -val infer_data_with_state : Mikhailsky.node -> Type.Base.t * state - -(** Performs inference on a piece of Mikhailsky [data] and - returns the inferred type, throwing the inference engine - state away. *) -val infer_data : Mikhailsky.node -> Type.Base.t diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/int_map.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/int_map.ml deleted file mode 100644 index e9b05fe91caae667479cf7aeee9f14e6dbdbd737..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/int_map.ml +++ /dev/null @@ -1,26 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -include Map.Make (Compare.Int) diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky.ml deleted file mode 100644 index 4cdfbb80b2858fdcf306c6892248349436ffd583..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky.ml +++ /dev/null @@ -1,422 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -exception Term_contains_holes - -module Mikhailsky_signature : - Algebraic_signature.S with type t = Mikhailsky_prim.prim = struct - type t = Mikhailsky_prim.prim - - let compare (x : t) (y : t) = Stdlib.compare x y - - let hash (x : t) = Hashtbl.hash x - - let pp = Mikhailsky_prim.pp -end - -include - Micheline_with_hash_consing.Make - (Mikhailsky_signature) - (struct - let initial_size = None - end) - -module Path = Path.With_hash_consing (struct - let initial_size = None -end) - -(* Prints a Mikhailsky term. *) -let pp fmt node = - let canonical = Micheline.strip_locations node in - let printable = - Micheline_printer.printable Mikhailsky_prim.string_of_prim canonical - in - Micheline_printer.print_expr fmt printable - -let to_string node = - pp Format.str_formatter node ; - Format.flush_str_formatter () - -(* Adapted from Script_ir_translator.parse_ty *) -let rec parse_ty : - allow_big_map:bool -> - allow_operation:bool -> - allow_contract:bool -> - node -> - Type.Base.t = - fun ~allow_big_map ~allow_operation ~allow_contract node -> - match node with - | Prim (_loc, T_unit, [], _annot) -> Type.unit - | Prim (_loc, T_int, [], _annot) -> Type.int - | Prim (_loc, T_nat, [], _annot) -> Type.nat - | Prim (_loc, T_string, [], _annot) -> Type.string - | Prim (_loc, T_bytes, [], _annot) -> Type.bytes - | Prim (_loc, T_bool, [], _annot) -> Type.bool - | Prim (_loc, T_key_hash, [], _annot) -> Type.key_hash - | Prim (_loc, T_timestamp, [], _annot) -> Type.timestamp - | Prim (_loc, T_mutez, [], _annot) -> Type.mutez - | Prim (_loc, T_option, [ut], _annot) -> - let ty = parse_ty ~allow_big_map ~allow_operation ~allow_contract ut in - Type.option ty - | Prim (_loc, T_pair, [utl; utr], _annot) -> - let lty = parse_ty ~allow_big_map ~allow_operation ~allow_contract utl in - let rty = parse_ty ~allow_big_map ~allow_operation ~allow_contract utr in - Type.pair lty rty - | Prim (_loc, T_or, [utl; utr], _annot) -> - let lty = parse_ty ~allow_big_map ~allow_operation ~allow_contract utl in - let rty = parse_ty ~allow_big_map ~allow_operation ~allow_contract utr in - Type.or_ lty rty - | Prim (_loc, T_set, [ut], _annot) -> - let ut = parse_ty ~allow_big_map ~allow_operation ~allow_contract ut in - Type.set ut - | Prim (_loc, T_map, [uta; utb], _annot) -> - let uta = parse_ty ~allow_big_map ~allow_operation ~allow_contract uta in - let utb = parse_ty ~allow_big_map ~allow_operation ~allow_contract utb in - Type.map uta utb - | Prim (_loc, T_lambda, [dom; range], _annot) -> - let dom = parse_ty ~allow_big_map ~allow_operation ~allow_contract dom in - let range = - parse_ty ~allow_big_map ~allow_operation ~allow_contract range - in - Type.lambda dom range - | Prim (_loc, T_list, [elt], _annot) -> - let elt = parse_ty ~allow_big_map ~allow_operation ~allow_contract elt in - Type.list elt - | _ -> - let s = to_string node in - Stdlib.failwith ("Mikhailsky.parse_ty: could not parse " ^ s) - -exception Term_has_variables - -exception Ill_formed_mikhailsky - -let rec map_var f (x : Type.Base.t) = - match x.node with - | Unit_t -> prim T_unit [] [] - | Var_t v -> f v - | Int_t -> prim T_int [] [] - | Nat_t -> prim T_nat [] [] - | Bool_t -> prim T_bool [] [] - | String_t -> prim T_string [] [] - | Bytes_t -> prim T_bytes [] [] - | Key_hash_t -> prim T_key_hash [] [] - | Timestamp_t -> prim T_timestamp [] [] - | Mutez_t -> prim T_mutez [] [] - | Key_t -> prim T_key [] [] - | Option_t ty -> - let mty = map_var f ty in - prim T_option [mty] [] - | Pair_t (lty, rty) -> - let lty = map_var f lty in - let rty = map_var f rty in - prim T_pair [lty; rty] [] - | Or_t (lty, rty) -> - let lty = map_var f lty in - let rty = map_var f rty in - prim T_or [lty; rty] [] - | List_t ty -> - let mty = map_var f ty in - prim T_list [mty] [] - | Set_t ty -> - let mty = map_var f ty in - prim T_set [mty] [] - | Map_t (kty, vty) -> - let mkty = map_var f kty in - let mvty = map_var f vty in - prim T_map [mkty; mvty] [] - | Lambda_t (dom, range) -> - let dom = map_var f dom in - let range = map_var f range in - prim T_lambda [dom; range] [] - -let unparse_ty_exn (x : Type.Base.t) = - map_var (fun _ -> raise Term_has_variables) x - -let unparse_ty (x : Type.Base.t) = - try Some (unparse_ty_exn x) with Term_has_variables -> None - -(* Exports a Mikhailsky term to Michelson. Fails if term contains holes. - Erases annotations, introduces types where missing. *) -let rec to_michelson (n : node) = - match n with - | Micheline.Int (_, i) -> Micheline.Int (0, i) - | Micheline.Prim (_, head, [term], _) - when Mikhailsky_prim.kind head = Annot_kind && head <> A_Lambda -> - to_michelson term - | Micheline.Prim (_, I_Hole, _, _) -> raise Term_contains_holes - | Micheline.Prim (_, D_Hole, _, _) -> raise Term_contains_holes - | Micheline.Prim (_, head, subterms, annots) -> - let head = Mikhailsky_prim.to_michelson head in - Micheline.Prim (0, head, List.map to_michelson subterms, annots) - | Micheline.String (_, s) -> Micheline.String (0, s) - | Micheline.Bytes (_, b) -> Micheline.Bytes (0, b) - | Micheline.Seq (_, subterms) -> - Micheline.Seq (0, List.map to_michelson subterms) - -let to_michelson (n : node) : Script_repr.expr = - Micheline.strip_locations (to_michelson n) - -let rec size : node -> int = - fun node -> - match node with - | Micheline.Int (_, _) -> 1 - | Micheline.String (_, _) -> 1 - | Micheline.Bytes (_, _) -> 1 - | Micheline.Prim (_, _, subterms, _) -> - List.fold_left (fun acc n -> acc + size n) 1 subterms - | Micheline.Seq (_, subterms) -> - List.fold_left (fun acc n -> acc + size n) 1 subterms - -let instr_hole = prim I_Hole [] [] - -let data_hole = prim D_Hole [] [] - -(* types *) -let unit_ty = prim T_unit [] [] - -let bool_ty = prim T_bool [] [] - -let int_ty = prim T_int [] [] - -let nat_ty = prim T_nat [] [] - -let string_ty = prim T_string [] [] - -let bytes_ty = prim T_bytes [] [] - -let key_hash_ty = prim T_key_hash [] [] - -let option_ty x = prim T_option [x] [] - -let list_ty x = prim T_list [x] [] - -(* Unique identifier provided by hash-consing Micheline terms. *) -let tag node = - let l = label node in - l.tag - -(* hash of term *) -let hash node = - let l = label node in - l.hash - -module Instructions = struct - (* arithmetic *) - - let add ty1 ty2 = prim I_ADD [ty1; ty2] [] - - let sub ty1 ty2 = prim I_SUB [ty1; ty2] [] - - let mul ty1 ty2 = prim I_MUL [ty1; ty2] [] - - let ediv ty1 ty2 = prim I_EDIV [ty1; ty2] [] - - let abs = prim I_ABS [] [] - - let gt = prim I_GT [] [] - - (* stack ops *) - let push ty v = prim I_PUSH [ty; v] [] - - let dip code = prim I_DIP [seq [code]] [] - - let dup = prim I_DUP [] [] - - let drop = prim I_DROP [] [] - - let dropn n = prim I_DROP [int (Z.of_int n)] [] - - let swap = prim I_SWAP [] [] - - (* crypto *) - let blake2b = prim I_BLAKE2B [] [] - - let sha256 = prim I_SHA256 [] [] - - let sha512 = prim I_SHA512 [] [] - - let hash_key = prim I_HASH_KEY [] [] - - (* control *) - let if_ bt bf = prim I_IF [seq [bt]; seq [bf]] [] - - let if_left bt bf = prim I_IF_LEFT [seq [bt]; seq [bf]] [] - - let if_none bt bf = prim I_IF_NONE [seq [bt]; seq [bf]] [] - - let loop b = prim I_LOOP [seq [b]] [] - - let loop_left b = prim I_LOOP_LEFT [seq [b]] [] - - (* pairs *) - let car = prim I_CAR [] [] - - let cdr = prim I_CDR [] [] - - let pair = prim I_PAIR [] [] - - (* ors *) - - let left = prim I_LEFT [] [] - - let right = prim I_RIGHT [] [] - - (* boolean *) - let and_ = prim I_AND [] [] - - (* compare *) - let compare = prim I_COMPARE [] [] - - (* map/set *) - let empty_set = prim I_EMPTY_SET [] [] - - let update_set = prim I_UPDATE_SET [] [] - - let size_set = prim I_SIZE_SET [] [] - - let iter_set code = prim I_ITER_SET [seq code] [] - - let mem_set = prim I_MEM_SET [] [] - - let empty_map = prim I_EMPTY_MAP [] [] - - let update_map = prim I_UPDATE_MAP [] [] - - let size_map = prim I_SIZE_MAP [] [] - - let iter_map code = prim I_ITER_MAP [seq code] [] - - let map_map code = prim I_MAP_MAP [seq code] [] - - let get_map = prim I_GET_MAP [] [] - - let mem_map = prim I_MEM_MAP [] [] - - (* lists*) - let nil = prim I_NIL [] [] - - let cons = prim I_CONS [] [] - - let size_list = prim I_SIZE_LIST [] [] - - let iter_list code = prim I_ITER_LIST [seq code] [] - - let map_list code = prim I_MAP_LIST [seq code] [] - - (* strings *) - let concat = prim I_CONCAT [] [] - - let size_string = prim I_SIZE_STRING [] [] - - let size_bytes = prim I_SIZE_BYTES [] [] - - (* Lambdas *) - let lambda code = prim I_LAMBDA [seq code] [] - - let exec = prim I_EXEC [] [] - - let apply = prim I_APPLY [] [] - - (* pack/unpack *) - let pack = prim I_PACK [] [] - - let unpack = prim I_UNPACK [] [] - - (* hole *) - let hole = instr_hole -end - -(* value constructors *) -module Data = struct - let unit = prim D_Unit [] [] - - let false_ = prim D_False [] [] - - let true_ = prim D_True [] [] - - let none = prim D_None [] [] - - let some x = prim D_Some [x] [] - - let pair x y = prim D_Pair [x; y] [] - - let left x = prim D_Left [x] [] - - let right x = prim D_Right [x] [] - - let list elts = prim A_List [seq elts] [] - - let set elts = prim A_Set [seq elts] [] - - let map_elt k v = prim D_Elt [k; v] [] - - let map elts = prim A_Map [seq elts] [] - - let timestamp ts = - let z = Protocol.Script_timestamp.to_zint ts in - prim A_Timestamp [int z] [] - - let mutez (tz : Protocol.Alpha_context.Tez.t) = - let i = Protocol.Alpha_context.Tez.to_mutez tz in - prim A_Mutez [int (Z.of_int64 i)] [] - - let key_hash kh = - let b = - Data_encoding.Binary.to_bytes_exn - Environment.Signature.Public_key_hash.encoding - kh - in - prim A_Key_hash [bytes b] [] - - let key k = - let b = - Data_encoding.Binary.to_bytes_exn - Environment.Signature.Public_key.encoding - k - in - prim A_Key [bytes b] [] - - let integer (i : int) = prim A_Int [int (Z.of_int i)] [] - - let natural (i : int) = - assert (i >= 0) ; - prim A_Nat [int (Z.of_int i)] [] - - let big_integer (i : Z.t) = prim A_Int [int i] [] - - let big_natural (i : Z.t) = - assert (Z.geq i Z.zero) ; - prim A_Nat [int i] [] - - let string = string - - let bytes = bytes - - let lambda code = prim A_Lambda [seq code] [] - - let hole = data_hole -end diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky.mli b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky.mli deleted file mode 100644 index 724bfa299074d04eb4a0743caa9210735a7c550f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky.mli +++ /dev/null @@ -1,331 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(** Mikhailsky: Michelson in Micheline form, with typed holes and annotations. - Mikhailsky terms are hash-consed. *) - -(** - Michelson code is a hard to type-check and generate incrementally due to - the presence of ambiguous constructs, such as literals - like [{ 1 ; 2 ; 3 }]. Is it a list of ints? of nats? of tez? Or a set? - - Thus, we will work with Mikhailsky, a better behaved version of Michelson - allowing local reconstruction of types. - - Differences wrt Michelson: - - 1. non string/byte literals are explicitly annotated with their head type constructor. - Here is an int i: Prim (_, D_int, [Int i], _) - Here is an nat n: Prim (_, D_nat, [Int i], _) - Here is an list of something: Prim (_, D_list, michelson_list, _) - Here is a set: Prim (_, D_set, michelson_set, _) - Here is a map: Prim (_, D_map, michelson_map, _) - etc. - Projecting back from this language to Michelson is trivial. - - 2. Instructions `LEFT/RIGHT` do not need to carry the type of the other - component of the disjunction. These has to be filled in back when - generating Michelson from Mikhailsky. - - 4. The same holds for the input/output type of a lambda as specified in the - `LAMBDA` instruction. - - 3. Some instructions are annotated with the type on which they operate. - Eg if Prim (_, I_ADD, [], []) is the (ad-hoc polymorphic) addition in Michelson, - we will have the following variants in Mikhailsky: - - Prim (_, I_ADD, [ Prim (_, T_mutez, [], []), - Prim (_, T_mutez, [], []) ], []) for mutez addition - - Prim (_, I_ADD, [ Prim (_, T_int, [], []), - Prim (_, T_nat, [], []) ], []) for int+nat addition - etc. -*) - -(** The signature of Mikhailsky terms. *) -module Mikhailsky_signature : - Algebraic_signature.S with type t = Mikhailsky_prim.prim - -(** Elements of type [Path.t] allow to index subterms of Mikhailsky terms. *) -module Path : Path.S - -(** The following types correspond to those provided when instantiating the - functor [Micheline_with_hash_consing.Make] on [Mikhailsky_signature]. *) -type label = Micheline_with_hash_consing.hcons_info - -type head = Mikhailsky_signature.t - -type node = (label, head) Micheline.node - -exception Term_contains_holes - -exception Ill_formed_mikhailsky - -(** [parse_ty] returns a type from a Mikhailsky term. *) -val parse_ty : - allow_big_map:bool -> - allow_operation:bool -> - allow_contract:bool -> - node -> - Type.Base.t - -(** [map_var f x] maps the function f on all variables contained - in the type [x]. *) -val map_var : (int -> node) -> Type.Base.t -> node - -(** [unparse_ty] returns a Mikhailsky term representing a type. *) -val unparse_ty_exn : Type.Base.t -> node - -val unparse_ty : Type.Base.t -> node option - -(** Extracts a Michelson term from a Mikhailsky one. Raises - [Term_contains_holes] if it cannot be done. *) -val to_michelson : node -> Script_repr.expr - -(** Pretty printer. *) -val pp : Format.formatter -> node -> unit - -val to_string : node -> string - -(** Returns the number of nodes of a Mikhailsky term. *) -val size : node -> int - -(** Micheline generic constructors *) -val prim : Mikhailsky_prim.prim -> node list -> string list -> node - -val seq : node list -> node - -val string : string -> node - -val bytes : Bytes.t -> node - -(** Mikhailsky smart constructors*) - -(** Holes *) -val instr_hole : node - -val data_hole : node - -(** Types *) -val unit_ty : node - -val int_ty : node - -val nat_ty : node - -val bool_ty : node - -val string_ty : node - -val bytes_ty : node - -val key_hash_ty : node - -val option_ty : node -> node - -val list_ty : node -> node - -(** Project unique tag out of Mikhailsky node *) -val tag : node -> int - -(** Project hash out of Mikhailsky node *) -val hash : node -> int - -(** Instructions *) -module Instructions : sig - (** Arithmetic. Binary operations take the input types as extra arguments. *) - val add : node -> node -> node - - val sub : node -> node -> node - - val mul : node -> node -> node - - val ediv : node -> node -> node - - val abs : node - - val gt : node - - (** Stack *) - val push : node -> node -> node - - val dip : node -> node - - val dup : node - - val drop : node - - val dropn : int -> node - - val swap : node - - (** Crypto *) - val blake2b : node - - val sha256 : node - - val sha512 : node - - val hash_key : node - - (** Control *) - val if_ : node -> node -> node - - val if_left : node -> node -> node - - val if_none : node -> node -> node - - val loop : node -> node - - val loop_left : node -> node - - (** Pairs *) - val car : node - - val cdr : node - - val pair : node - - (** Unions *) - val left : node - - val right : node - - (** Booleans *) - val and_ : node - - (** Compare *) - val compare : node - - (** Set/Map *) - val empty_set : node - - val update_set : node - - val size_set : node - - val iter_set : node list -> node - - val mem_set : node - - val empty_map : node - - val update_map : node - - val size_map : node - - val iter_map : node list -> node - - val map_map : node list -> node - - val get_map : node - - val mem_map : node - - (** Lists *) - val nil : node - - val cons : node - - val size_list : node - - val iter_list : node list -> node - - val map_list : node list -> node - - (** Strings/bytes *) - val concat : node - - val size_string : node - - val size_bytes : node - - (** Lambdas *) - val lambda : node list -> node - - val exec : node - - val apply : node - - (** pack/unpack *) - - val pack : node - - val unpack : node - - (** Hole *) - val hole : node -end - -(** data *) -module Data : sig - val unit : node - - val false_ : node - - val true_ : node - - val none : node - - val some : node -> node - - val pair : node -> node -> node - - val left : node -> node - - val right : node -> node - - val list : node list -> node - - val set : node list -> node - - val map_elt : node -> node -> node - - val map : node list -> node - - val timestamp : Script_timestamp.t -> node - - val mutez : Alpha_context.Tez.t -> node - - val key_hash : Environment.Signature.Public_key_hash.t -> node - - val key : Environment.Signature.Public_key.t -> node - - val integer : int -> node - - val natural : int -> node - - val big_integer : Z.t -> node - - val big_natural : Z.t -> node - - val string : string -> node - - val bytes : Bytes.t -> node - - val lambda : node list -> node - - val hole : node -end diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky_prim.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky_prim.ml deleted file mode 100644 index cd6689498404dd2fa05288d8c654f86caec6fba3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/mikhailsky_prim.ml +++ /dev/null @@ -1,575 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* Copyright (c) 2024 Marigold, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(** Mikhailsky primitives correspond to Michelson primitives plus special - "holes" for instructions and data. *) - -type prim = - | K_parameter - | K_storage - | K_code - | D_False - | D_Elt - | D_Left - | D_None - | D_Pair - | D_Right - | D_Some - | D_True - | D_Unit - | D_Ticket - | I_PACK - | I_UNPACK - | I_BLAKE2B - | I_SHA256 - | I_SHA512 - | I_ABS - | I_ADD - | I_AMOUNT - | I_AND - | I_BALANCE - | I_CAR - | I_CDR - | I_CHAIN_ID - | I_CHECK_SIGNATURE - | I_COMPARE - | I_CONCAT - | I_CONS - | I_CREATE_ACCOUNT - | I_CREATE_CONTRACT - | I_IMPLICIT_ACCOUNT - | I_DIP - | I_DROP - | I_DUP - | I_EDIV - | I_EMPTY_BIG_MAP - | I_EMPTY_MAP - | I_EMPTY_SET - | I_EQ - | I_EXEC - | I_APPLY - | I_FAILWITH - | I_GE - | I_GET_MAP - | I_GET_AND_UPDATE_MAP - | I_GT - | I_HASH_KEY - | I_IF - | I_IF_CONS - | I_IF_LEFT - | I_IF_NONE - | I_INT - | I_LAMBDA - | I_LE - | I_LEFT - | I_LOOP - | I_LSL - | I_LSR - | I_LT - | I_MAP_MAP - | I_MAP_LIST - | I_MEM_SET - | I_MEM_MAP - | I_MUL - | I_NEG - | I_NEQ - | I_NIL - | I_NONE - | I_NOT - | I_NOW - | I_OR - | I_PAIR - | I_UNPAIR - | I_PUSH - | I_RIGHT - | I_SIZE_SET - | I_SIZE_MAP - | I_SIZE_LIST - | I_SIZE_STRING - | I_SIZE_BYTES - | I_SOME - | I_SOURCE - | I_SENDER - | I_SELF - | I_SLICE - | I_STEPS_TO_QUOTA - | I_SUB - | I_SWAP - | I_TRANSFER_TOKENS - | I_SET_DELEGATE - | I_UNIT - | I_UPDATE_SET - | I_UPDATE_MAP - | I_XOR - | I_ITER_MAP - | I_ITER_LIST - | I_ITER_SET - | I_LOOP_LEFT - | I_ADDRESS - | I_CONTRACT - | I_ISNAT - | I_CAST - | I_RENAME - | I_DIG - | I_DUG - | I_LEVEL - | I_SELF_ADDRESS - | I_NEVER - | I_SAPLING_EMPTY_STATE - | I_SAPLING_VERIFY_UPDATE - | I_VOTING_POWER - | I_TOTAL_VOTING_POWER - | I_KECCAK - | I_SHA3 - | I_PAIRING_CHECK - | I_TICKET - | I_READ_TICKET - | I_SPLIT_TICKET - | I_JOIN_TICKETS - | T_bool - | T_contract - | T_int - | T_key - | T_key_hash - | T_lambda - | T_list - | T_map - | T_big_map - | T_nat - | T_option - | T_or - | T_pair - | T_set - | T_signature - | T_string - | T_bytes - | T_mutez - | T_timestamp - | T_unit - | T_operation - | T_address - | T_chain_id - | T_never - | T_sapling_state - | T_sapling_transaction_deprecated - | T_bls12_381_g1 - | T_bls12_381_g2 - | T_bls12_381_fr - | T_ticket - (* Holes in programs and data. *) - | I_Hole - | D_Hole - (* Annotations. *) - | A_Int - | A_Nat - | A_Timestamp - | A_Mutez - | A_Key_hash - | A_Key - | A_List - | A_Set - | A_Map - | A_Lambda - -let relation = - [ - (K_parameter, Michelson_v1_primitives.K_parameter); - (K_storage, Michelson_v1_primitives.K_storage); - (K_code, Michelson_v1_primitives.K_code); - (D_False, Michelson_v1_primitives.D_False); - (D_Elt, Michelson_v1_primitives.D_Elt); - (D_Left, Michelson_v1_primitives.D_Left); - (D_None, Michelson_v1_primitives.D_None); - (D_Pair, Michelson_v1_primitives.D_Pair); - (D_Right, Michelson_v1_primitives.D_Right); - (D_Some, Michelson_v1_primitives.D_Some); - (D_True, Michelson_v1_primitives.D_True); - (D_Unit, Michelson_v1_primitives.D_Unit); - (I_PACK, Michelson_v1_primitives.I_PACK); - (I_UNPACK, Michelson_v1_primitives.I_UNPACK); - (I_BLAKE2B, Michelson_v1_primitives.I_BLAKE2B); - (I_SHA256, Michelson_v1_primitives.I_SHA256); - (I_SHA512, Michelson_v1_primitives.I_SHA512); - (I_ABS, Michelson_v1_primitives.I_ABS); - (I_ADD, Michelson_v1_primitives.I_ADD); - (I_AMOUNT, Michelson_v1_primitives.I_AMOUNT); - (I_AND, Michelson_v1_primitives.I_AND); - (I_BALANCE, Michelson_v1_primitives.I_BALANCE); - (I_CAR, Michelson_v1_primitives.I_CAR); - (I_CDR, Michelson_v1_primitives.I_CDR); - (I_CHAIN_ID, Michelson_v1_primitives.I_CHAIN_ID); - (I_CHECK_SIGNATURE, Michelson_v1_primitives.I_CHECK_SIGNATURE); - (I_COMPARE, Michelson_v1_primitives.I_COMPARE); - (I_CONCAT, Michelson_v1_primitives.I_CONCAT); - (I_CONS, Michelson_v1_primitives.I_CONS); - (I_CREATE_ACCOUNT, Michelson_v1_primitives.I_CREATE_ACCOUNT); - (I_CREATE_CONTRACT, Michelson_v1_primitives.I_CREATE_CONTRACT); - (I_IMPLICIT_ACCOUNT, Michelson_v1_primitives.I_IMPLICIT_ACCOUNT); - (I_DIP, Michelson_v1_primitives.I_DIP); - (I_DROP, Michelson_v1_primitives.I_DROP); - (I_DUP, Michelson_v1_primitives.I_DUP); - (I_EDIV, Michelson_v1_primitives.I_EDIV); - (I_EMPTY_BIG_MAP, Michelson_v1_primitives.I_EMPTY_BIG_MAP); - (I_EMPTY_MAP, Michelson_v1_primitives.I_EMPTY_MAP); - (I_EMPTY_SET, Michelson_v1_primitives.I_EMPTY_SET); - (I_EQ, Michelson_v1_primitives.I_EQ); - (I_EXEC, Michelson_v1_primitives.I_EXEC); - (I_APPLY, Michelson_v1_primitives.I_APPLY); - (I_FAILWITH, Michelson_v1_primitives.I_FAILWITH); - (I_GE, Michelson_v1_primitives.I_GE); - (I_GET_MAP, Michelson_v1_primitives.I_GET); - (I_GET_AND_UPDATE_MAP, Michelson_v1_primitives.I_GET_AND_UPDATE); - (I_GT, Michelson_v1_primitives.I_GT); - (I_HASH_KEY, Michelson_v1_primitives.I_HASH_KEY); - (I_IF, Michelson_v1_primitives.I_IF); - (I_IF_CONS, Michelson_v1_primitives.I_IF_CONS); - (I_IF_LEFT, Michelson_v1_primitives.I_IF_LEFT); - (I_IF_NONE, Michelson_v1_primitives.I_IF_NONE); - (I_INT, Michelson_v1_primitives.I_INT); - (I_LAMBDA, Michelson_v1_primitives.I_LAMBDA); - (I_LE, Michelson_v1_primitives.I_LE); - (I_LEFT, Michelson_v1_primitives.I_LEFT); - (I_LEVEL, Michelson_v1_primitives.I_LEVEL); - (I_LOOP, Michelson_v1_primitives.I_LOOP); - (I_LSL, Michelson_v1_primitives.I_LSL); - (I_LSR, Michelson_v1_primitives.I_LSR); - (I_LT, Michelson_v1_primitives.I_LT); - (I_MAP_MAP, Michelson_v1_primitives.I_MAP); - (I_MAP_LIST, Michelson_v1_primitives.I_MAP); - (I_MEM_SET, Michelson_v1_primitives.I_MEM); - (I_MEM_MAP, Michelson_v1_primitives.I_MEM); - (I_MUL, Michelson_v1_primitives.I_MUL); - (I_NEG, Michelson_v1_primitives.I_NEG); - (I_NEQ, Michelson_v1_primitives.I_NEQ); - (I_NIL, Michelson_v1_primitives.I_NIL); - (I_NONE, Michelson_v1_primitives.I_NONE); - (I_NOT, Michelson_v1_primitives.I_NOT); - (I_NOW, Michelson_v1_primitives.I_NOW); - (I_OR, Michelson_v1_primitives.I_OR); - (I_PAIR, Michelson_v1_primitives.I_PAIR); - (I_UNPAIR, Michelson_v1_primitives.I_UNPAIR); - (I_PUSH, Michelson_v1_primitives.I_PUSH); - (I_RIGHT, Michelson_v1_primitives.I_RIGHT); - (I_SIZE_SET, Michelson_v1_primitives.I_SIZE); - (I_SIZE_MAP, Michelson_v1_primitives.I_SIZE); - (I_SIZE_LIST, Michelson_v1_primitives.I_SIZE); - (I_SIZE_STRING, Michelson_v1_primitives.I_SIZE); - (I_SIZE_BYTES, Michelson_v1_primitives.I_SIZE); - (I_SOME, Michelson_v1_primitives.I_SOME); - (I_SOURCE, Michelson_v1_primitives.I_SOURCE); - (I_SENDER, Michelson_v1_primitives.I_SENDER); - (I_SELF, Michelson_v1_primitives.I_SELF); - (I_SELF_ADDRESS, Michelson_v1_primitives.I_SELF_ADDRESS); - (I_SLICE, Michelson_v1_primitives.I_SLICE); - (I_STEPS_TO_QUOTA, Michelson_v1_primitives.I_STEPS_TO_QUOTA); - (I_SUB, Michelson_v1_primitives.I_SUB); - (I_SWAP, Michelson_v1_primitives.I_SWAP); - (I_TRANSFER_TOKENS, Michelson_v1_primitives.I_TRANSFER_TOKENS); - (I_SET_DELEGATE, Michelson_v1_primitives.I_SET_DELEGATE); - (I_UNIT, Michelson_v1_primitives.I_UNIT); - (I_UPDATE_SET, Michelson_v1_primitives.I_UPDATE); - (I_UPDATE_MAP, Michelson_v1_primitives.I_UPDATE); - (I_XOR, Michelson_v1_primitives.I_XOR); - (I_ITER_MAP, Michelson_v1_primitives.I_ITER); - (I_ITER_LIST, Michelson_v1_primitives.I_ITER); - (I_ITER_SET, Michelson_v1_primitives.I_ITER); - (I_LOOP_LEFT, Michelson_v1_primitives.I_LOOP_LEFT); - (I_ADDRESS, Michelson_v1_primitives.I_ADDRESS); - (I_CONTRACT, Michelson_v1_primitives.I_CONTRACT); - (I_ISNAT, Michelson_v1_primitives.I_ISNAT); - (I_CAST, Michelson_v1_primitives.I_CAST); - (I_RENAME, Michelson_v1_primitives.I_RENAME); - (I_SAPLING_EMPTY_STATE, Michelson_v1_primitives.I_SAPLING_EMPTY_STATE); - (I_SAPLING_VERIFY_UPDATE, Michelson_v1_primitives.I_SAPLING_VERIFY_UPDATE); - (I_DIG, Michelson_v1_primitives.I_DIG); - (I_DUG, Michelson_v1_primitives.I_DUG); - (I_NEVER, Michelson_v1_primitives.I_NEVER); - (I_VOTING_POWER, Michelson_v1_primitives.I_VOTING_POWER); - (I_TOTAL_VOTING_POWER, Michelson_v1_primitives.I_TOTAL_VOTING_POWER); - (I_KECCAK, Michelson_v1_primitives.I_KECCAK); - (I_SHA3, Michelson_v1_primitives.I_SHA3); - (I_PAIRING_CHECK, Michelson_v1_primitives.I_PAIRING_CHECK); - (I_TICKET, Michelson_v1_primitives.I_TICKET); - (I_READ_TICKET, Michelson_v1_primitives.I_READ_TICKET); - (I_SPLIT_TICKET, Michelson_v1_primitives.I_SPLIT_TICKET); - (I_JOIN_TICKETS, Michelson_v1_primitives.I_JOIN_TICKETS); - (T_bool, Michelson_v1_primitives.T_bool); - (T_contract, Michelson_v1_primitives.T_contract); - (T_int, Michelson_v1_primitives.T_int); - (T_key, Michelson_v1_primitives.T_key); - (T_key_hash, Michelson_v1_primitives.T_key_hash); - (T_lambda, Michelson_v1_primitives.T_lambda); - (T_list, Michelson_v1_primitives.T_list); - (T_map, Michelson_v1_primitives.T_map); - (T_big_map, Michelson_v1_primitives.T_big_map); - (T_nat, Michelson_v1_primitives.T_nat); - (T_option, Michelson_v1_primitives.T_option); - (T_or, Michelson_v1_primitives.T_or); - (T_pair, Michelson_v1_primitives.T_pair); - (T_set, Michelson_v1_primitives.T_set); - (T_signature, Michelson_v1_primitives.T_signature); - (T_string, Michelson_v1_primitives.T_string); - (T_bytes, Michelson_v1_primitives.T_bytes); - (T_mutez, Michelson_v1_primitives.T_mutez); - (T_timestamp, Michelson_v1_primitives.T_timestamp); - (T_unit, Michelson_v1_primitives.T_unit); - (T_operation, Michelson_v1_primitives.T_operation); - (T_address, Michelson_v1_primitives.T_address); - ( T_sapling_transaction_deprecated, - Michelson_v1_primitives.T_sapling_transaction_deprecated ); - (T_sapling_state, Michelson_v1_primitives.T_sapling_state); - (T_chain_id, Michelson_v1_primitives.T_chain_id); - (T_never, Michelson_v1_primitives.T_never); - (T_bls12_381_g1, Michelson_v1_primitives.T_bls12_381_g1); - (T_bls12_381_g2, Michelson_v1_primitives.T_bls12_381_g2); - (T_bls12_381_fr, Michelson_v1_primitives.T_bls12_381_fr); - (T_ticket, Michelson_v1_primitives.T_ticket); - ] - -let relation_table = - let table = Hashtbl.create 269 in - List.iter - (fun (mikhailsky, michelson) -> Hashtbl.add table mikhailsky michelson) - relation ; - table - -exception Primitive_cannot_be_cast_back_to_Michelson of prim - -let to_michelson prim = - match Hashtbl.find relation_table prim with - | exception Not_found -> - raise (Primitive_cannot_be_cast_back_to_Michelson prim) - | res -> res - -let string_of_prim prim = - match prim with - | K_parameter -> "K_parameter" - | K_storage -> "K_storage" - | K_code -> "K_code" - | D_False -> "D_False" - | D_Elt -> "D_Elt" - | D_Left -> "D_Left" - | D_None -> "D_None" - | D_Pair -> "D_Pair" - | D_Right -> "D_Right" - | D_Some -> "D_Some" - | D_True -> "D_True" - | D_Unit -> "D_Unit" - | D_Ticket -> "D_Ticket" - | I_PACK -> "I_PACK" - | I_UNPACK -> "I_UNPACK" - | I_BLAKE2B -> "I_BLAKE2B" - | I_SHA256 -> "I_SHA256" - | I_SHA512 -> "I_SHA512" - | I_ABS -> "I_ABS" - | I_ADD -> "I_ADD" - | I_AMOUNT -> "I_AMOUNT" - | I_AND -> "I_AND" - | I_BALANCE -> "I_BALANCE" - | I_CAR -> "I_CAR" - | I_CDR -> "I_CDR" - | I_CHAIN_ID -> "I_CHAIN_ID" - | I_CHECK_SIGNATURE -> "I_CHECK_SIGNATURE" - | I_COMPARE -> "I_COMPARE" - | I_CONCAT -> "I_CONCAT" - | I_CONS -> "I_CONS" - | I_CREATE_ACCOUNT -> "I_CREATE_ACCOUNT" - | I_CREATE_CONTRACT -> "I_CREATE_CONTRACT" - | I_IMPLICIT_ACCOUNT -> "I_IMPLICIT_ACCOUNT" - | I_DIP -> "I_DIP" - | I_DROP -> "I_DROP" - | I_DUP -> "I_DUP" - | I_EDIV -> "I_EDIV" - | I_EMPTY_BIG_MAP -> "I_EMPTY_BIG_MAP" - | I_EMPTY_MAP -> "I_EMPTY_MAP" - | I_EMPTY_SET -> "I_EMPTY_SET" - | I_EQ -> "I_EQ" - | I_EXEC -> "I_EXEC" - | I_APPLY -> "I_APPLY" - | I_FAILWITH -> "I_FAILWITH" - | I_GE -> "I_GE" - | I_GET_MAP -> "I_GET_MAP" - | I_GET_AND_UPDATE_MAP -> "I_GET_AND_UPDATE_MAP" - | I_GT -> "I_GT" - | I_HASH_KEY -> "I_HASH_KEY" - | I_IF -> "I_IF" - | I_IF_CONS -> "I_IF_CONS" - | I_IF_LEFT -> "I_IF_LEFT" - | I_IF_NONE -> "I_IF_NONE" - | I_INT -> "I_INT" - | I_LAMBDA -> "I_LAMBDA" - | I_LE -> "I_LE" - | I_LEFT -> "I_LEFT" - | I_LOOP -> "I_LOOP" - | I_LSL -> "I_LSL" - | I_LSR -> "I_LSR" - | I_LT -> "I_LT" - | I_MAP_MAP -> "I_MAP_MAP" - | I_MAP_LIST -> "I_MAP_LIST" - | I_MEM_SET -> "I_MEM_SET" - | I_MEM_MAP -> "I_MEM_MAP" - | I_MUL -> "I_MUL" - | I_NEG -> "I_NEG" - | I_NEQ -> "I_NEQ" - | I_NIL -> "I_NIL" - | I_NONE -> "I_NONE" - | I_NOT -> "I_NOT" - | I_NOW -> "I_NOW" - | I_OR -> "I_OR" - | I_PAIR -> "I_PAIR" - | I_UNPAIR -> "I_UNPAIR" - | I_PUSH -> "I_PUSH" - | I_RIGHT -> "I_RIGHT" - | I_SIZE_SET -> "I_SIZE_SET" - | I_SIZE_MAP -> "I_SIZE_MAP" - | I_SIZE_LIST -> "I_SIZE_LIST" - | I_SIZE_STRING -> "I_SIZE_STRING" - | I_SIZE_BYTES -> "I_SIZE_BYTES" - | I_SOME -> "I_SOME" - | I_SOURCE -> "I_SOURCE" - | I_SENDER -> "I_SENDER" - | I_SELF -> "I_SELF" - | I_SLICE -> "I_SLICE" - | I_STEPS_TO_QUOTA -> "I_STEPS_TO_QUOTA" - | I_SUB -> "I_SUB" - | I_SWAP -> "I_SWAP" - | I_TRANSFER_TOKENS -> "I_TRANSFER_TOKENS" - | I_SET_DELEGATE -> "I_SET_DELEGATE" - | I_UNIT -> "I_UNIT" - | I_UPDATE_SET -> "I_UPDATE_SET" - | I_UPDATE_MAP -> "I_UPDATE_MAP" - | I_XOR -> "I_XOR" - | I_ITER_MAP -> "I_ITER_MAP" - | I_ITER_LIST -> "I_ITER_LIST" - | I_ITER_SET -> "I_ITER_SET" - | I_LOOP_LEFT -> "I_LOOP_LEFT" - | I_ADDRESS -> "I_ADDRESS" - | I_CONTRACT -> "I_CONTRACT" - | I_ISNAT -> "I_ISNAT" - | I_CAST -> "I_CAST" - | I_RENAME -> "I_RENAME" - | I_DIG -> "I_DIG" - | I_DUG -> "I_DUG" - | I_LEVEL -> "I_LEVEL" - | I_SELF_ADDRESS -> "I_SELF_ADDRESS" - | I_NEVER -> "I_NEVER" - | I_SAPLING_EMPTY_STATE -> "I_SAPLING_EMPTY_STATE" - | I_SAPLING_VERIFY_UPDATE -> "I_SAPLING_VERIFY_UPDATE" - | I_VOTING_POWER -> "I_VOTING_POWER" - | I_TOTAL_VOTING_POWER -> "I_TOTAL_VOTING_POWER" - | I_KECCAK -> "I_KECCAK" - | I_SHA3 -> "I_SHA3" - | I_PAIRING_CHECK -> "I_PAIRING_CHECK" - | I_TICKET -> "I_TICKET" - | I_READ_TICKET -> "I_READ_TICKET" - | I_SPLIT_TICKET -> "I_SPLIT_TICKET" - | I_JOIN_TICKETS -> "I_JOIN_TICKETS" - | T_bool -> "T_bool" - | T_contract -> "T_contract" - | T_int -> "T_int" - | T_key -> "T_key" - | T_key_hash -> "T_key_hash" - | T_lambda -> "T_lambda" - | T_list -> "T_list" - | T_map -> "T_map" - | T_big_map -> "T_big_map" - | T_nat -> "T_nat" - | T_option -> "T_option" - | T_or -> "T_or" - | T_pair -> "T_pair" - | T_set -> "T_set" - | T_signature -> "T_signature" - | T_string -> "T_string" - | T_bytes -> "T_bytes" - | T_mutez -> "T_mutez" - | T_timestamp -> "T_timestamp" - | T_unit -> "T_unit" - | T_operation -> "T_operation" - | T_address -> "T_address" - | T_chain_id -> "T_chain_id" - | T_never -> "T_never" - | T_sapling_state -> "T_sapling_state" - | T_sapling_transaction_deprecated -> "T_sapling_transaction_deprecated" - | T_bls12_381_g1 -> "T_bls12_381_g1" - | T_bls12_381_g2 -> "T_bls12_381_g2" - | T_bls12_381_fr -> "T_bls12_381_fr" - | T_ticket -> "T_ticket" - | I_Hole -> "I_Hole" - | D_Hole -> "D_Hole" - | A_Int -> "A_Int" - | A_Nat -> "A_Nat" - | A_Timestamp -> "A_Timestamp" - | A_Mutez -> "A_Mutez" - | A_Key_hash -> "A_Key_hash" - | A_Key -> "A_Key" - | A_List -> "A_List" - | A_Set -> "A_Set" - | A_Map -> "A_Map" - | A_Lambda -> "A_Lambda" - -let pp fmtr prim = Format.fprintf fmtr "%s" (string_of_prim prim) - -type kind = Data_kind | Instr_kind | Type_kind | Keyword_kind | Annot_kind - -let kind (x : prim) = - match x with - | K_parameter | K_storage | K_code -> Keyword_kind - | D_Hole | D_False | D_Elt | D_Left | D_None | D_Pair | D_Right | D_Some - | D_True | D_Unit | D_Ticket -> - Data_kind - | I_PACK | I_UNPACK | I_BLAKE2B | I_SHA256 | I_SHA512 | I_ABS | I_ADD - | I_AMOUNT | I_AND | I_BALANCE | I_CAR | I_CDR | I_CHAIN_ID - | I_CHECK_SIGNATURE | I_COMPARE | I_CONCAT | I_CONS | I_CREATE_ACCOUNT - | I_CREATE_CONTRACT | I_IMPLICIT_ACCOUNT | I_DIP | I_DROP | I_DUP | I_EDIV - | I_EMPTY_BIG_MAP | I_EMPTY_MAP | I_EMPTY_SET | I_EQ | I_EXEC | I_APPLY - | I_FAILWITH | I_GE | I_GET_MAP | I_GET_AND_UPDATE_MAP | I_GT | I_HASH_KEY - | I_IF | I_IF_CONS | I_IF_LEFT | I_IF_NONE | I_INT | I_LAMBDA | I_LE | I_LEFT - | I_LOOP | I_LSL | I_LSR | I_LT | I_MAP_MAP | I_MAP_LIST | I_MEM_SET - | I_MEM_MAP | I_MUL | I_NEG | I_NEQ | I_NIL | I_NONE | I_NOT | I_NOW | I_OR - | I_PAIR | I_UNPAIR | I_PUSH | I_RIGHT | I_SIZE_SET | I_SIZE_MAP | I_SIZE_LIST - | I_SIZE_STRING | I_SIZE_BYTES | I_SOME | I_SOURCE | I_SENDER | I_SELF - | I_SLICE | I_STEPS_TO_QUOTA | I_SUB | I_SWAP | I_TRANSFER_TOKENS - | I_SET_DELEGATE | I_UNIT | I_UPDATE_SET | I_UPDATE_MAP | I_XOR | I_ITER_MAP - | I_ITER_LIST | I_ITER_SET | I_LOOP_LEFT | I_ADDRESS | I_CONTRACT | I_ISNAT - | I_CAST | I_RENAME | I_DIG | I_DUG | I_LEVEL | I_SELF_ADDRESS | I_NEVER - | I_SAPLING_EMPTY_STATE | I_SAPLING_VERIFY_UPDATE | I_VOTING_POWER - | I_TOTAL_VOTING_POWER | I_KECCAK | I_SHA3 | I_PAIRING_CHECK | I_TICKET - | I_READ_TICKET | I_SPLIT_TICKET | I_JOIN_TICKETS | I_Hole -> - Instr_kind - | T_bool | T_contract | T_int | T_key | T_key_hash | T_lambda | T_list | T_map - | T_big_map | T_nat | T_option | T_or | T_pair | T_set | T_signature - | T_string | T_bytes | T_mutez | T_timestamp | T_unit | T_operation - | T_address | T_chain_id | T_never | T_sapling_state - | T_sapling_transaction_deprecated | T_bls12_381_g1 | T_bls12_381_g2 - | T_bls12_381_fr | T_ticket -> - Type_kind - (* Holes in programs and data. *) - (* Annotations. *) - | A_Int | A_Nat | A_Timestamp | A_Mutez | A_Key_hash | A_Key | A_List | A_Set - | A_Map | A_Lambda -> - Annot_kind diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/monads.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/monads.ml deleted file mode 100644 index 47273406af50d8114e4e2464c2ac484b187f6f02..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/monads.ml +++ /dev/null @@ -1,83 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* Widely used module types. *) - -module type S = sig - type 'a t - - val ( >>= ) : 'a t -> ('a -> 'b t) -> 'b t - - val return : 'a -> 'a t - - val run : 'a t -> 'a -end - -(* Signature of a state monad. *) -module type State_sig = sig - type state - - type key - - type value - - include S with type 'a t = state -> 'a * state - - val empty : unit -> state - - val set : key -> value -> unit t - - val get : key -> value option t - - val iter_list : ('a -> unit t) -> 'a list -> unit t -end - -module Make_state_monad (X : Stores.S) : - State_sig - with type state = X.state - and type key = X.key - and type value = X.value - and type 'a t = X.state -> 'a * X.state = struct - include X - - type 'a t = state -> 'a * state - - let ( >>= ) m f s = - let x, s = m s in - f x s - - let return x s = (x, s) - - let run m = fst (m (empty ())) - - let set k v s = ((), set k v s) - - let get k s = (get k s, s) - - let rec iter_list (f : 'a -> unit t) (l : 'a list) = - match l with - | [] -> return () - | elt :: tl -> f elt >>= fun () -> iter_list f tl -end diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/stores.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/stores.ml deleted file mode 100644 index dff87824d1b4e657629dd1a4f26071f1a6834094..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/stores.ml +++ /dev/null @@ -1,85 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* Various implementations of Monads.Store_sig *) - -(* Signature of a persistent store. *) -module type S = sig - type state - - type key - - type value - - val empty : unit -> state - - val set : key -> value -> state -> state - - val get : key -> state -> value option - - val map : (value -> value) -> state -> state - - val to_string : state -> string -end - -module type Map_store_param_sig = sig - type key - - type value - - val key_to_string : key -> string - - val value_to_string : value -> string -end - -(* An implemention of [S] using maps. *) -module Map (M : Map.S) (V : Map_store_param_sig with type key = M.key) : - S with type state = V.value M.t and type key = M.key and type value = V.value = -struct - type state = V.value M.t - - type key = M.key - - type value = V.value - - let empty () = M.empty - - let set = M.add - - let get = M.find_opt - - let map = M.map - - let to_string s = - M.fold - (fun key node acc -> - Printf.sprintf - "%s\n%s |-> %s" - acc - (V.key_to_string key) - (V.value_to_string node)) - s - "" -end diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/dune b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/dune deleted file mode 100644 index b8e36d5fc43908c7285abb0e71b473430a13b55d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/dune +++ /dev/null @@ -1,29 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(executables - (names test_uf test_inference) - (libraries - octez-libs.micheline - tezos-micheline-rewriting - tezos-benchmark-type-inference-019-PtParisB - tezos-protocol-019-PtParisB.protocol - octez-libs.error-monad - octez-protocol-019-PtParisB-libs.client) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (flags - (:standard) - -open Tezos_micheline - -open Tezos_benchmark_type_inference_019_PtParisB)) - -(rule - (alias runtest) - (package tezos-benchmark-type-inference-019-PtParisB) - (action (run %{dep:./test_uf.exe}))) - -(rule - (alias runtest) - (package tezos-benchmark-type-inference-019-PtParisB) - (action (run %{dep:./test_inference.exe}))) diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/test_inference.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/test_inference.ml deleted file mode 100644 index 29a59f6fc4bfcec068d382e67c16cdd540bf4a50..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/test_inference.ml +++ /dev/null @@ -1,615 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* open Tezos_rewriting *) -open Mikhailsky - -let unopt x = match x with Some x -> x | None -> assert false - -let time f = - let now = Unix.gettimeofday () in - let res = f () in - let later = Unix.gettimeofday () in - (later -. now, res) - -let add_ii = Instructions.(add Mikhailsky.int_ty Mikhailsky.int_ty) - -let add_in = Instructions.(add Mikhailsky.int_ty Mikhailsky.nat_ty) - -let mul_ii = Instructions.(mul Mikhailsky.int_ty Mikhailsky.int_ty) - -let push_int = Instructions.push int_ty (Data.big_integer (Z.of_int 100)) - -let push_nat = Instructions.push nat_ty (Data.big_natural (Z.of_int 100)) - -module Test1 = struct - open Data - open Instructions - - let program = seq [add_ii; push bool_ty false_; dip instr_hole; dip swap] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test2 = struct - open Instructions - - let program = seq [loop swap; and_] - - let () = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING FAILURE\n" ; - Format.printf "Program: %a\n" Mikhailsky.pp program ; - let exception Test_failed in - try - ignore - ( time @@ fun () -> - ignore @@ Inference.infer program ; - raise Test_failed ) - with - | Inference.Ill_typed_script error -> - Format.printf "Error:\n" ; - Format.printf "%a\n" Inference.pp_inference_error error - | Test_failed -> Format.printf "No type error: Test failed!" - - let _ = print_newline () -end - -module Test3 = struct - open Instructions - - let program = - seq - [ - dip (seq [swap; dup]); - swap; - dip cdr; - loop (seq [dip instr_hole; cdr; loop instr_hole]); - car; - car; - push int_ty (Data.integer 10); - compare; - ] - - let _ = - Format.printf "Testing rewriting and type inference\n" ; - Format.printf "Source program: %a\n" Mikhailsky.pp program - - open Tezos_micheline_rewriting - - module Lang = - Micheline_with_hash_consing.Make - (Mikhailsky.Mikhailsky_signature) - (struct - let initial_size = None - end) - - module Path = Mikhailsky.Path - module Patt = Pattern.Make (Mikhailsky.Mikhailsky_signature) (Lang) (Path) - module Rewriter = - Rewrite.Make (Mikhailsky.Mikhailsky_signature) (Lang) (Path) (Patt) - - let timing, ((bef, aft), state) = - try time @@ fun () -> Inference.infer_with_state program - with Inference.Ill_typed_script error -> - let s = Mikhailsky.to_string program in - Format.printf - "Ill-typed script:%a\n%s\n" - Inference.pp_inference_error - error - s ; - Format.printf "Test failed\n" ; - exit 1 - - let () = - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft - - let () = - try - ignore - ((let open Inference in - let open M in - M.uf_lift Uf.UF.show >>= fun uf_state -> - Inference.M.repr_lift (fun s -> (Inference.Repr_store.to_string s, s)) - >>= fun repr_state -> - Printf.printf "uf_state:\n%s\n" uf_state ; - Printf.printf "repr_state:\n%s\n" repr_state ; - let path = - Path.(at_index 2 (at_index 0 (at_index 0 (at_index 3 root)))) - in - let subterm = Rewriter.get_subterm ~term:program ~path in - Format.printf - "subterm at path %s:\n%a\n" - (Path.to_string path) - Mikhailsky.pp - subterm ; - Inference.M.annot_instr_lift (Inference.Annot_instr_sm.get path) - >>= fun typ -> - (match typ with - | None -> assert false - | Some {bef; aft} -> - Inference.instantiate bef >>= fun bef -> - Inference.instantiate aft >>= fun aft -> - Format.printf "Type of subterm:\n" ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - return ()) - >>= fun () -> return ()) - state) - with Inference.Ill_typed_script error -> - let s = Mikhailsky.to_string program in - Format.printf - "Ill-typed script:\n%a\n%s\n" - Inference.pp_inference_error - error - s - - let _ = print_newline () -end - -module Test4 = struct - open Instructions - - let program = - seq - [ - empty_set; - push Type.(unopt (unparse_ty bool)) Data.true_; - push - Type.(unopt (unparse_ty (pair int int))) - Data.(pair (integer 0) (integer 0)); - update_set; - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test5 = struct - open Instructions - - let unopt x = match x with Some x -> x | None -> assert false - - let program = - seq - [ - empty_map; - push Type.(unopt (unparse_ty (option (set int)))) Data.none; - push - Type.(unopt (unparse_ty (pair int int))) - Data.(pair (integer 0) (integer 0)); - update_map; - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () - - let program = - seq - [ - push - Type.(unopt (unparse_ty (map (pair int int) (set int)))) - Data.( - map - [ - map_elt - (pair (integer 0) (integer 1)) - (set [integer 42; integer 44]); - map_elt - (pair (integer 1) (integer 2)) - (set [integer 42; integer 48]); - ]); - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test6 = struct - open Instructions - - (* We remove a chunk from a well-typed program to make it ill-typed, and - expect the type inference to fail *) - let program = - seq - [ - push int_ty (Data.integer 0); - push int_ty (Data.integer 100); - swap; - drop; - drop; - drop; - push unit_ty Data.unit; - push bool_ty Data.false_; - push unit_ty Data.unit; - push int_ty (Data.integer 4073851221413541140); - push string_ty (string "n"); - push string_ty (string "k"); - push int_ty (Data.integer 1391989767887046289); - (* push int_ty (integer 100); - * abs; - * drop; *) - dip (prim I_CONCAT [] []); - compare; - ] - - let () = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING FAILURE\n" ; - Format.printf "Program: %a\n" Mikhailsky.pp program ; - let exception Test_failed in - try - ignore (Inference.infer program) ; - raise Test_failed - with - | Inference.Ill_typed_script error -> - Format.printf "Got error, as expected:\n" ; - Format.printf "%a@." Inference.pp_inference_error error - | Test_failed -> - Format.printf "No type error: Test failed!" ; - exit 1 -end - -module Test7 = struct - open Instructions - - let program = - seq - [ - push int_ty (Data.integer 42); - left; - push string_ty (Data.string "forty-two"); - right; - pair; - left; - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test8 = struct - open Instructions - - let program = - seq - [ - hole; - add_ii; - push int_ty (Data.big_integer (Z.of_int 100)); - abs; - right; - dup; - push int_ty (Data.big_integer (Z.of_int 100)); - dip (loop_left hole); - push_int; - hole; - mul_ii; - hole; - loop_left left; - sha512; - push_int; - dup; - add_ii; - right; - swap; - hole; - drop; - compare; - mul_ii; - push_int; - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test9 = struct - open Instructions - - let program = seq [car; if_none hole hole] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test10 = struct - open Instructions - - let program = seq [hash_key] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test11 = struct - open Instructions - - let program = - seq [lambda [dup; car; dip cdr; add_in]; push_int; apply; push_nat; exec] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test12 = struct - open Instructions - - let program = seq [dup; dup; if_none hole (seq [drop]); dup; compare] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test13 = struct - open Instructions - - let program = - seq [push Type.(unparse_ty_exn (lambda int int)) (Data.lambda [])] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test14 = struct - open Instructions - - let program = seq [nil; push_int; cons] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test15 = struct - open Instructions - - let program = seq [empty_set; size_set; empty_map; size_map; nil; size_list] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test16 = struct - open Instructions - - let program = - seq - [ - empty_set; - push bool_ty Data.true_; - push_int; - update_set; - iter_set [dup; add_ii; add_ii]; - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test17 = struct - open Instructions - - let program = - seq - [ - empty_map; - push (option_ty (list_ty bool_ty)) Data.(some (list [false_; true_])); - push_int; - update_map; - map_map - [ - cdr; - map_list - [ - if_ - (seq [push bool_ty Data.false_]) - (seq [push bool_ty Data.true_]); - ]; - ]; - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end - -module Test18 = struct - open Instructions - - let program = - seq - [ - empty_map; - push (option_ty (list_ty bool_ty)) Data.(some (list [false_; true_])); - push_int; - update_map; - map_map - [ - cdr; - map_list - [ - if_ - (seq [push bool_ty Data.false_]) - (seq [push bool_ty Data.true_]); - ]; - ]; - dup; - dip push_int; - push_int; - mem_map; - if_ - (seq [get_map]) - (seq [drop; drop; push (option_ty (list_ty bool_ty)) Data.none]); - ] - - let timing, (bef, aft) = time @@ fun () -> Inference.infer program - - let _ = - Format.printf "Testing type inference\n" ; - Format.printf "EXPECTING SUCCESS\n" ; - Format.printf "Program\n" ; - Format.printf "%a\n" Mikhailsky.pp program ; - Format.printf "In %f seconds:\n" timing ; - Format.printf "bef: %a@." Type.Stack.pp bef ; - Format.printf "aft: %a@." Type.Stack.pp aft ; - print_newline () -end diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/test_uf.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/test_uf.ml deleted file mode 100644 index 84fdd856e9ba514520c07c82667f22fd39f34fc5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/test/test_uf.ml +++ /dev/null @@ -1,63 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let _ = - print_newline () ; - Printf.printf "Testing union-find algorithm\n" - -module UF = Uf.UF - -let test = - let open UF.M in - UF.add 0 >>= fun () -> - UF.add 1 >>= fun () -> - UF.add 2 >>= fun () -> - UF.add 3 >>= fun () -> - UF.add 4 >>= fun () -> - UF.find 0 >>= fun v0_repr -> - UF.find 1 >>= fun v1_repr -> - assert (v0_repr <> v1_repr) ; - UF.union 0 1 >>= fun _ -> - UF.find 0 >>= fun v0_repr -> - UF.find 1 >>= fun v1_repr -> - UF.find 2 >>= fun v2_repr -> - assert (v0_repr = v1_repr) ; - assert (v0_repr <> v2_repr) ; - UF.union 2 3 >>= fun _ -> - UF.union 0 3 >>= fun _ -> - UF.find 1 >>= fun v1_repr -> - UF.find 2 >>= fun v2_repr -> - UF.find 3 >>= fun v3_repr -> - UF.find 4 >>= fun v4_repr -> - assert (v1_repr = v2_repr) ; - UF.union 4 4 >>= fun _ -> - assert (v3_repr <> v4_repr) ; - UF.show >>= fun s -> - Printf.printf "UF state:%s\n" s ; - return () - -let () = UF.M.run test - -let _ = Printf.printf "Success.\n" diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/type.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/type.ml deleted file mode 100644 index bc8d164c6c5cbaa382e8730a088abec0278a3539..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/type.ml +++ /dev/null @@ -1,200 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* Michelson types. *) - -module Base = struct - type comparable_tag = Comparable | Maybe_not_comparable - - type t = t_node Hashcons.hash_consed - - and t_node = - | Unit_t - | Var_t of int - | Int_t - | Nat_t - | Bool_t - | String_t - | Bytes_t - | Key_hash_t - | Timestamp_t - | Mutez_t - | Key_t - | Option_t of t - | Pair_t of t * t - | Or_t of t * t - | List_t of t - | Set_t of t - | Map_t of t * t - | Lambda_t of t * t - - module Hashed = struct - type t = t_node - - let equal (t1 : t) (t2 : t) = - match (t1, t2) with - | Var_t v1, Var_t v2 -> v1 = v2 - | Unit_t, Unit_t - | Int_t, Int_t - | Nat_t, Nat_t - | Bool_t, Bool_t - | String_t, String_t - | Bytes_t, Bytes_t - | Key_hash_t, Key_hash_t - | Timestamp_t, Timestamp_t - | Mutez_t, Mutez_t - | Key_t, Key_t -> - true - | Option_t ty1, Option_t ty2 -> ty1.tag = ty2.tag - | Pair_t (l1, r1), Pair_t (l2, r2) -> l1.tag = l2.tag && r1.tag = r2.tag - | Or_t (l1, r1), Or_t (l2, r2) -> l1.tag = l2.tag && r1.tag = r2.tag - | List_t ty1, List_t ty2 -> ty1.tag = ty2.tag - | Set_t ty1, Set_t ty2 -> ty1.tag = ty2.tag - | Map_t (kty1, vty1), Map_t (kty2, vty2) -> - kty1.tag = kty2.tag && vty1.tag = vty2.tag - | Lambda_t (dom1, range1), Lambda_t (dom2, range2) -> - dom1.tag = dom2.tag && range1.tag = range2.tag - | _ -> false - - let hash (t : t) = Hashtbl.hash t - end - - module Table = Hashcons.Make (Hashed) - - let table = Table.create 101 - - let rec pp fmtr x = - match x.Hashcons.node with - | Unit_t -> Format.pp_print_string fmtr "unit" - | Var_t v -> Format.fprintf fmtr "%d" v - | Int_t -> Format.pp_print_string fmtr "int" - | Nat_t -> Format.pp_print_string fmtr "nat" - | Bool_t -> Format.pp_print_string fmtr "bool" - | String_t -> Format.pp_print_string fmtr "string" - | Bytes_t -> Format.pp_print_string fmtr "bytes" - | Key_hash_t -> Format.pp_print_string fmtr "key_hash" - | Timestamp_t -> Format.pp_print_string fmtr "timestamp" - | Mutez_t -> Format.pp_print_string fmtr "mutez" - | Key_t -> Format.pp_print_string fmtr "key" - | Option_t ty -> Format.fprintf fmtr "(option %a)" pp ty - | List_t ty -> Format.fprintf fmtr "(list %a)" pp ty - | Pair_t (lty, rty) -> Format.fprintf fmtr "(pair %a %a)" pp lty pp rty - | Or_t (lty, rty) -> Format.fprintf fmtr "(or %a %a)" pp lty pp rty - | Set_t ty -> Format.fprintf fmtr "(set %a)" pp ty - | Map_t (kty, vty) -> Format.fprintf fmtr "(map %a %a)" pp kty pp vty - | Lambda_t (dom, range) -> - Format.fprintf fmtr "(lambda %a %a)" pp dom pp range - - let rec vars x acc = - match x.Hashcons.node with - | Unit_t | Int_t | Nat_t | Bool_t | String_t | Bytes_t | Key_hash_t - | Timestamp_t | Mutez_t | Key_t -> - acc - | Var_t v -> v :: acc - | Option_t ty | List_t ty | Set_t ty -> vars ty acc - | Pair_t (lty, rty) | Or_t (lty, rty) -> vars lty (vars rty acc) - | Map_t (kty, vty) -> vars kty (vars vty acc) - | Lambda_t (dom, range) -> vars dom (vars range acc) - - let vars x = vars x [] -end - -module Stack = struct - type t = t_node Hashcons.hash_consed - - and t_node = Empty_t | Stack_var_t of int | Item_t of Base.t * t - - module Hashed = struct - type t = t_node - - let equal (t1 : t) (t2 : t) = - match (t1, t2) with - | Empty_t, Empty_t -> true - | Stack_var_t v1, Stack_var_t v2 -> v1 = v2 - | Item_t (h1, tl1), Item_t (h2, tl2) -> h1 == h2 && tl1 == tl2 - | _ -> false - - let hash (t : t) = Hashtbl.hash t - end - - module Table = Hashcons.Make (Hashed) - - let table = Table.create 101 - - let rec pp fmtr x = - match x.Hashcons.node with - | Empty_t -> Format.pp_print_string fmtr "[]" - | Stack_var_t v -> Format.fprintf fmtr "<%d>" v - | Item_t (head, tail) -> Format.fprintf fmtr "%a :: %a" Base.pp head pp tail - - let rec vars x = - match x.Hashcons.node with - | Empty_t -> None - | Stack_var_t v -> Some v - | Item_t (_head, tail) -> vars tail -end - -let unit = Base.Table.hashcons Base.table Unit_t - -let var x = Base.Table.hashcons Base.table (Var_t x) - -let int = Base.Table.hashcons Base.table Int_t - -let nat = Base.Table.hashcons Base.table Nat_t - -let bool = Base.Table.hashcons Base.table Bool_t - -let string = Base.Table.hashcons Base.table String_t - -let bytes = Base.Table.hashcons Base.table Bytes_t - -let key_hash = Base.Table.hashcons Base.table Key_hash_t - -let timestamp = Base.Table.hashcons Base.table Timestamp_t - -let mutez = Base.Table.hashcons Base.table Mutez_t - -let key = Base.Table.hashcons Base.table Key_t - -let option ty = Base.Table.hashcons Base.table (Option_t ty) - -let pair lty rty = Base.Table.hashcons Base.table (Pair_t (lty, rty)) - -let or_ lty rty = Base.Table.hashcons Base.table (Or_t (lty, rty)) - -let list ty = Base.Table.hashcons Base.table (List_t ty) - -let set ty = Base.Table.hashcons Base.table (Set_t ty) - -let map kty vty = Base.Table.hashcons Base.table (Map_t (kty, vty)) - -let lambda dom range = Base.Table.hashcons Base.table (Lambda_t (dom, range)) - -(* Stack smart constructors *) -let empty = Stack.Table.hashcons Stack.table Empty_t - -let stack_var x = Stack.Table.hashcons Stack.table (Stack_var_t x) - -let item head tail = Stack.Table.hashcons Stack.table (Item_t (head, tail)) diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/type.mli b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/type.mli deleted file mode 100644 index bdc806590b25098ef70df154b0e97df27af79375..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/type.mli +++ /dev/null @@ -1,111 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Michelson types, hash-consed. *) - -(** Base types *) -module Base : sig - type comparable_tag = Comparable | Maybe_not_comparable - - type t = t_node Hashcons.hash_consed - - and t_node = private - | Unit_t - | Var_t of int - | Int_t - | Nat_t - | Bool_t - | String_t - | Bytes_t - | Key_hash_t - | Timestamp_t - | Mutez_t - | Key_t - | Option_t of t - | Pair_t of t * t - | Or_t of t * t - | List_t of t - | Set_t of t - | Map_t of t * t - | Lambda_t of t * t - - val pp : Format.formatter -> t -> unit - - val vars : t -> int list -end - -(** Stack types *) -module Stack : sig - type t = t_node Hashcons.hash_consed - - and t_node = private Empty_t | Stack_var_t of int | Item_t of Base.t * t - - val pp : Format.formatter -> t -> unit - - val vars : t -> int option -end - -(** Smart constructors *) -val unit : Base.t - -val var : int -> Base.t - -val int : Base.t - -val nat : Base.t - -val bool : Base.t - -val string : Base.t - -val bytes : Base.t - -val key_hash : Base.t - -val timestamp : Base.t - -val mutez : Base.t - -val key : Base.t - -val option : Base.t -> Base.t - -val pair : Base.t -> Base.t -> Base.t - -val or_ : Base.t -> Base.t -> Base.t - -val list : Base.t -> Base.t - -val set : Base.t -> Base.t - -val map : Base.t -> Base.t -> Base.t - -val lambda : Base.t -> Base.t -> Base.t - -val empty : Stack.t - -val stack_var : int -> Stack.t - -val item : Base.t -> Stack.t -> Stack.t diff --git a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/uf.ml b/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/uf.ml deleted file mode 100644 index f14a166939a772fbb3dd1baa95ccfb3ae9e61cd8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/lib_benchmark_type_inference/uf.ml +++ /dev/null @@ -1,99 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* ------------------------------------------------------------------------- *) -(* Union find parameterized over a persistent store. *) - -module type S = sig - module M : Monads.State_sig - - type key = int - - val add : key -> unit M.t - - val find : key -> key M.t - - val union : key -> key -> key M.t - - val show : string M.t -end - -module UF : S = struct - type node = T of {rank : int} | Ptr of key - - and key = int - - module S = - Stores.Map - (Int_map) - (struct - type key = int - - type value = node - - let key_to_string = string_of_int - - let value_to_string (x : value) = - match x with - | T {rank} -> Printf.sprintf "[%d]" rank - | Ptr k -> Printf.sprintf "ptr(%d)" k - end) - - module M = Monads.Make_state_monad (S) - - let add (k : key) = - let open M in - set k (T {rank = 1}) - - let rec get_root (k : key) (acc : key list) = - let open M in - get k >>= function - | None -> - let msg = Printf.sprintf "UF.get_root: invalid key %d" k in - Stdlib.failwith msg - | Some (T {rank}) -> - let ptr_to_root = Ptr k in - iter_list (fun key -> set key ptr_to_root) acc >>= fun () -> - return (k, rank) - | Some (Ptr k') -> get_root k' (k :: acc) - - let find (k : key) = - let open M in - get_root k [] >>= fun (res, _) -> return res - - let union k1 k2 = - let open M in - get_root k1 [] >>= fun (k1, rank1) -> - get_root k2 [] >>= fun (k2, rank2) -> - if k1 = k2 then return k1 - else if rank1 < rank2 then set k1 (Ptr k2) >>= fun () -> return k2 - else if rank1 > rank2 then set k2 (Ptr k1) >>= fun () -> return k1 - else - let new_root = T {rank = rank1 + 1} in - set k2 (Ptr k1) >>= fun () -> - set k1 new_root >>= fun () -> return k1 - - let show s = (S.to_string s, s) -end diff --git a/src/proto_019_PtParisB/lib_benchmark/micheline_sampler.ml b/src/proto_019_PtParisB/lib_benchmark/micheline_sampler.ml deleted file mode 100644 index 1e4778f856f0fafb2f37645cbec83c549304f183..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/micheline_sampler.ml +++ /dev/null @@ -1,110 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Micheline sampling. *) - -type width_function = depth:int -> int Base_samplers.sampler - -(** [Base_samplers] specifies samplers for leaves, primitives and annotations. *) -module type Base_samplers = sig - (** The type of primitives. *) - type prim - - val sample_prim : prim Base_samplers.sampler - - val sample_annots : string list Base_samplers.sampler - - val sample_string : string Base_samplers.sampler - - val sample_bytes : Bytes.t Base_samplers.sampler - - val sample_z : Z.t Base_samplers.sampler - - val width_function : width_function -end - -module type S = sig - type prim - - val sample : (int, prim) Micheline.node Base_samplers.sampler -end - -type node_kind = Int_node | String_node | Bytes_node | Seq_node | Prim_node - -(* The distribution can be skewed towards non-leaf nodes by repeating their - relevant kind in the array below. *) -let all_kinds = [|Int_node; String_node; Bytes_node; Seq_node; Prim_node|] - -let sample_kind : node_kind Base_samplers.sampler = - fun rng_state -> - let i = Random.State.int rng_state (Array.length all_kinds) in - all_kinds.(i) - -let reasonable_width_function ~depth rng_state = - (* Entirely ad-hoc *) - Base_samplers.( - sample_in_interval - ~range:{min = 0; max = 20 / (Bits.numbits depth + 1)} - rng_state) - -module Make (P : Base_samplers) : S with type prim = P.prim = struct - type prim = P.prim - - let sample (w : width_function) rng_state = - let rec sample depth rng_state k = - match sample_kind rng_state with - | Int_node -> k (Micheline.Int (0, P.sample_z rng_state)) - | String_node -> k (Micheline.String (0, P.sample_string rng_state)) - | Bytes_node -> k (Micheline.Bytes (0, P.sample_bytes rng_state)) - | Seq_node -> - let width = w ~depth rng_state in - sample_list - depth - width - [] - (fun terms -> k (Micheline.Seq (0, terms))) - rng_state - | Prim_node -> - let prim = P.sample_prim rng_state in - let annots = P.sample_annots rng_state in - let width = w ~depth rng_state in - sample_list - depth - width - [] - (fun terms -> k (Micheline.Prim (0, prim, terms, annots))) - rng_state - and sample_list depth width acc k rng_state = - if width < 0 then invalid_arg "sample_list: negative width" - else if width = 0 then k (List.rev acc) - else - sample (depth + 1) rng_state (fun x -> - sample_list depth (width - 1) (x :: acc) k rng_state) - in - sample 0 rng_state (fun x -> x) - - let sample rng_state = sample P.width_function rng_state -end diff --git a/src/proto_019_PtParisB/lib_benchmark/micheline_sampler.mli b/src/proto_019_PtParisB/lib_benchmark/micheline_sampler.mli deleted file mode 100644 index 97e3d4ec1e1273c5f3690d93d6318b6d19341119..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/micheline_sampler.mli +++ /dev/null @@ -1,70 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Micheline sampling. *) - -(** A [width_function] specifies the distribution of node degree as a function - of [depth]. A [width_function] {e must} be supported by the nonnegative - integers. - - Note that picking a [width_function] which doesn't converge fast enough to - the singular distribution on 0 could yield very large terms. *) -type width_function = depth:int -> int Base_samplers.sampler - -(** [reasonable_width_function] is a width function which works well - empirically. *) -val reasonable_width_function : width_function - -(** [Base_samplers] specifies samplers for leaves, primitives and annotations. *) -module type Base_samplers = sig - (** The type of primitives. *) - type prim - - val sample_prim : prim Base_samplers.sampler - - val sample_annots : string list Base_samplers.sampler - - val sample_string : string Base_samplers.sampler - - val sample_bytes : Bytes.t Base_samplers.sampler - - val sample_z : Z.t Base_samplers.sampler - - val width_function : width_function -end - -(** Applying the [Make] functor below yields a module with the following - type. *) -module type S = sig - type prim - - (** [sample w] is a Micheline sampler for the prescribed primitive - type. The sampler uses the provided width function [w]. *) - val sample : (int, prim) Micheline.node Base_samplers.sampler -end - -(** [Make] instantiates a micheline sampler. *) -module Make (P : Base_samplers) : S with type prim = P.prim diff --git a/src/proto_019_PtParisB/lib_benchmark/michelson_mcmc_samplers.ml b/src/proto_019_PtParisB/lib_benchmark/michelson_mcmc_samplers.ml deleted file mode 100644 index a5b66c0f53afcd95e260889a9ef43d0b66504b78..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/michelson_mcmc_samplers.ml +++ /dev/null @@ -1,339 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** MCMC-based Michelson data and code samplers. *) - -open Protocol -open Stats - -type michelson_code = { - term : Script_repr.expr; - bef : Script_repr.expr list; - aft : Script_repr.expr list; -} - -type michelson_data = {term : Script_repr.expr; typ : Script_repr.expr} - -type michelson_sample = Code of michelson_code | Data of michelson_data - -let michelson_sample_list_encoding = - let open Data_encoding in - let e = Script_repr.expr_encoding in - list - @@ union - [ - case - ~title:"Code" - (Tag 0) - (tup3 e (list e) (list e)) - (function - | Code {term; bef; aft} -> Some (term, bef, aft) | _ -> None) - (fun (term, bef, aft) -> Code {term; bef; aft}); - case - ~title:"Data" - (Tag 1) - (tup2 e e) - (function Data {term; typ} -> Some (term, typ) | _ -> None) - (fun (term, typ) -> Data {term; typ}); - ] - -let save ~filename ~terms = - let str = - match - Data_encoding.Binary.to_string michelson_sample_list_encoding terms - with - | Error err -> - Format.eprintf - "Michelson_mcmc_samplers.save: encoding failed (%a); exiting@." - Data_encoding.Binary.pp_write_error - err ; - exit 1 - | Ok res -> res - in - try Lwt_main.run @@ Tezos_stdlib_unix.Lwt_utils_unix.create_file filename str - with exn -> - Format.eprintf - "Michelson_mcmc_samplers.save: create_file %s failed (%s); exiting@." - filename - (Printexc.to_string exn) ; - exit 1 - -let load ~filename = - let open TzPervasives in - let string = - try Lwt_main.run @@ Tezos_stdlib_unix.Lwt_utils_unix.read_file filename - with exn -> - Format.eprintf - "Michelson_mcmc_samplers.load: read_file %s failed (%s); exiting@." - filename - (Printexc.to_string exn) ; - exit 1 - in - let bytes = Bytes.of_string string in - match Data_encoding.Binary.of_bytes michelson_sample_list_encoding bytes with - | Ok result -> result - | Error err -> - Format.eprintf - "Michelson_mcmc_samplers.load: decoding %s failed (%a); exiting@." - filename - Data_encoding.Binary.pp_read_error - err ; - exit 1 - -(* Helpers *) - -let base_type_to_michelson_type (typ : Type.Base.t) = - let typ = Mikhailsky.map_var (fun _ -> Mikhailsky.unit_ty) typ in - Mikhailsky.to_michelson typ - -module type Sampler_parameters_sig = sig - val initial : State_space.t - - val energy : State_space.t -> float - - val rules : Rules.rule_set list - - val infer : Mikhailsky.node -> Inference.state - - val verbosity : [`Silent | `Progress | `Trace] -end - -(* The Markov chain in state [state] *) -type mc_state = { - state : State_space.t; - jump : State_space.t Fin.Float.prb Lazy.t; -} - -module State_hashtbl = Hashtbl.Make (State_space) - -(** Generic MCMC michelson sampler (can be used for code and data) *) -module Make_generic (P : Sampler_parameters_sig) = struct - let uniform (l : State_space.t list) : State_space.t Fin.Float.prb = - match l with - | [] -> - (* This can only happen is the MCMC was driven to a coffin state, - which means that it's not reversible (this is a bug) *) - assert false - | _ -> - let arr = Array.of_list l in - let emp = Emp.of_raw_data arr in - Fin.Float.counts_of_empirical (module State_hashtbl) emp - |> Fin.Float.normalize - - let unrecoverable_failure err current result = - Format.eprintf "Error when typechecking term:@." ; - Format.eprintf "%a@." Inference.pp_inference_error err ; - Format.eprintf "Original state: @[%a@]@." State_space.pp current ; - Format.eprintf "Erroneous term: %a@." Mikhailsky.pp result ; - Stdlib.failwith "in sampler.ml: unrecoverable failure." - - let of_state : State_space.t -> mc_state = - fun state -> - { - state; - jump = - Lazy.from_fun (fun () -> - let current = state in - let rewriting_options = Rules.rewriting current P.rules in - let term = current.term in - let rewritings = - List.fold_left - (fun rewritings (path, replacement) -> - let result = Kernel.Rewriter.subst ~term ~path ~replacement in - let typing = - Lazy.from_fun (fun () -> - try P.infer result - with Inference.Ill_typed_script err -> - unrecoverable_failure err current result) - in - {State_space.typing; term = result} :: rewritings) - [] - rewriting_options - in - uniform rewritings); - } - - module MH_params : Mh.MH_parameters with type t = mc_state = struct - type t = mc_state - - let pp fmtr {state; jump = _} = State_space.pp fmtr state - - let trace state = - match P.verbosity with - | `Silent | `Progress -> () - | `Trace -> - Format.eprintf "@." ; - Format.eprintf "%a" State_space.pp state ; - Format.eprintf "energy:@." ; - Format.eprintf "%f:@." (P.energy state) - - let proposal_log_density s1 s2 = - let jump = Lazy.force s1.jump in - let p = try Fin.Float.eval_prb jump s2.state with Not_found -> 0.0 in - Log_space.of_float p - - let proposal mcmc_state rng_state = - trace mcmc_state.state ; - let dist = Lazy.force mcmc_state.jump in - let next = Fin.Float.sample (Fin.Float.as_measure dist) rng_state in - of_state next - - let log_weight state = Log_space.unsafe_cast (-.P.energy state.state) - end - - module Sampler = Mh.Make (MH_params) - - let generator ~burn_in = - P.(Sampler.mcmc ~verbosity ~initial:(of_state initial) ~burn_in) -end - -module Make_code_sampler - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) (X : sig - val rng_state : Random.State.t - - val target_size : int - - val verbosity : [`Silent | `Progress | `Trace] - end) = -struct - module Autocomp = Autocomp.Make (Michelson_base) (Crypto_samplers) - - module MCMC = Make_generic (struct - let initial = - let term = Mikhailsky.Instructions.hole in - let typing = Lazy.from_val @@ snd (Inference.infer_with_state term) in - {State_space.term; typing} - - let energy state = - let stats = State_space.statistics state in - let size_deficit = - abs_float - (float_of_int X.target_size -. float_of_int stats.State_space.size) - in - let holes_proportion = float stats.holes /. float stats.size in - let holes_deficit = - (* we want at least 1% of holes, above is ok *) - if holes_proportion < 0.01 then - (0.01 -. holes_proportion) *. size_deficit - else 0.0 - in - size_deficit +. holes_deficit - - let rules = Rules.Instruction.rules - - let infer term = snd (Inference.infer_with_state term) - - let verbosity = X.verbosity - end) - - let to_michelson {state = ({typing; term} : State_space.t); jump = _} = - let typing = Lazy.force typing in - let node, (bef, aft), state = - Autocomp.complete_code typing term X.rng_state - in - let node = - Micheline.strip_locations @@ Mikhailsky_to_michelson.convert node state - in - { - term = node; - bef = Type_helpers.stack_type_to_michelson_type_list bef; - aft = Type_helpers.stack_type_to_michelson_type_list aft; - } - - let generator ~burn_in = - Gen.map (MCMC.generator ~burn_in) @@ fun after_burn_in -> - Gen.map after_burn_in to_michelson -end - -module Make_data_sampler - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) (X : sig - val rng_state : Random.State.t - - val target_size : int - - val verbosity : [`Silent | `Progress | `Trace] - end) = -struct - module Autocomp = Autocomp.Make (Michelson_base) (Crypto_samplers) - module Rewrite_rules = - Rules.Data_rewrite_leaves (Michelson_base) (Crypto_samplers) - - module MCMC = Make_generic (struct - let initial = - let term = Mikhailsky.Data.hole in - let typing = - Lazy.from_val @@ snd (Inference.infer_data_with_state term) - in - {State_space.term; typing} - - let energy state = - let stats = State_space.statistics state in - let size_deficit = - abs_float - (float_of_int X.target_size -. float_of_int stats.State_space.size) - in - let holes_proportion = - float_of_int stats.holes /. float_of_int stats.size - in - let holes_deficit = - (* we want at least 10% of holes, above is ok *) - if holes_proportion < 0.5 then (0.5 -. holes_proportion) *. size_deficit - else 0.0 - in - let depth_deficit = - abs_float - ((0.1 *. float_of_int X.target_size) -. float_of_int stats.depth) - in - size_deficit +. holes_deficit +. depth_deficit - - let rules = Rewrite_rules.rules X.rng_state - - let infer term = snd (Inference.infer_data_with_state term) - - let verbosity = X.verbosity - end) - - let to_michelson {state = ({typing; term} : State_space.t); jump = _} = - let typing = Lazy.force typing in - let node, _ = Autocomp.complete_data typing term X.rng_state in - let typ, state = - try Inference.infer_data_with_state node - with _ -> - Format.eprintf "Bug found!@." ; - Format.eprintf "Ill-typed autocompletion. Resulting term:@." ; - Format.eprintf "%a@." Mikhailsky.pp node ; - Stdlib.failwith "in generators.ml: unrecoverable failure" - in - let node = - Micheline.strip_locations @@ Mikhailsky_to_michelson.convert node state - in - {term = node; typ = base_type_to_michelson_type typ} - - let generator ~burn_in = - Gen.map (MCMC.generator ~burn_in) @@ fun after_burn_in -> - Gen.map after_burn_in to_michelson -end diff --git a/src/proto_019_PtParisB/lib_benchmark/michelson_mcmc_samplers.mli b/src/proto_019_PtParisB/lib_benchmark/michelson_mcmc_samplers.mli deleted file mode 100644 index bd67d13e3c165f1a7261a8074c71525c0ca74e24..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/michelson_mcmc_samplers.mli +++ /dev/null @@ -1,115 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** MCMC-based Michelson data and code samplers. *) - -open Protocol - -(** MCMC samplers can either produce data or code. Note that the samplers - natively produce data and code in Micheline (ie untyped) form. *) - -type michelson_code = { - term : Script_repr.expr; - (** [term] is a typeable Michelson program in Micheline form. *) - bef : Script_repr.expr list; - (** [bef] is an input stack type for which [term] is a well-typed script. *) - aft : Script_repr.expr list; - (** [aft] is the stack type corresponding to the execution of [term] - on a stack of type [bef]. *) -} - -type michelson_data = { - term : Script_repr.expr; - (** [term] is a typeable Michelson data in Micheline form. *) - typ : Script_repr.expr; (** [typ] is the type of [term]. *) -} - -(** A [michelson_sample] is either a code sample or a data sample. *) -type michelson_sample = Code of michelson_code | Data of michelson_data - -(** Encoding used for saving or loading data. *) -val michelson_sample_list_encoding : michelson_sample list Data_encoding.t - -(** Saving a list of samples to a file. - Exits with code 1 if an error arises during encoding or file manipulation. *) -val save : filename:string -> terms:michelson_sample list -> unit - -(** Loading a list of samples from a file. - Exits with code 1 if an error arises during decoding or file manipulation. *) -val load : filename:string -> michelson_sample list - -(** [Make_code_sampler] produces a sampler for well-typed Michelson code. - The parameters of the functor are: - - a module [Michelson_base] implementing samplers for basic values - - a module [Crypto_samplers] implementing samplers for pk/pkh/sk triplets - - a module [X] containing some parameters to the Markov chain sampler: - - [rng_state] is the mutable state that will be used during sampling - - [target_size] specifies the size, in terms of Micheline nodes, of the - terms that the sampler should try to produce - - [verbosity] specifies how much information should be written on stdout - during the sampling process. - - The outcome is a [michelson_code] [generator]. The [burn_in] parameter - specifies how much samples should be thrown away before starting to - produce sample (this is used to let the underlying Markov chain reach - its stationary distribution - the value should be commensurate with - the [target_size]. - *) -module Make_code_sampler : functor - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) - (X : sig - val rng_state : Random.State.t - - val target_size : int - - val verbosity : [`Progress | `Silent | `Trace] - end) - -> sig - (** [generator ~burn_in rng_state] performs a burn-in phase consisting of sampling [burn_in] times, - throwing the results away and returns a michelson term sampler. The goal of burn-in is - to drive the underlying Markov chain to its stationary distribution, ie to sample - terms around the specified [X.target_size]. *) - val generator : burn_in:int -> Random.State.t -> michelson_code Stats.Gen.t -end - -(** See documentation for [Make_code_sampler] *) -module Make_data_sampler : functor - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) - (X : sig - val rng_state : Random.State.t - - val target_size : int - - val verbosity : [`Progress | `Silent | `Trace] - end) - -> sig - (** [generator ~burn_in rng_state] performs a burn-in phase consisting of sampling [burn_in] times, - throwing the results away and returns a michelson term sampler. The goal of burn-in is - to drive the underlying Markov chain to its stationary distribution, ie to sample - terms around the specified [X.target_size]. *) - val generator : burn_in:int -> Random.State.t -> michelson_data Stats.Gen.t -end diff --git a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers.ml b/src/proto_019_PtParisB/lib_benchmark/michelson_samplers.ml deleted file mode 100644 index 5929ded858d9254a6fe619c18ef38e96e53ae685..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers.ml +++ /dev/null @@ -1,823 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Script_typed_ir - -type parameters = { - base_parameters : Michelson_samplers_base.parameters; - list_size : Base_samplers.range; - set_size : Base_samplers.range; - map_size : Base_samplers.range; -} - -let parameters_encoding = - let open Data_encoding in - let range_encoding = Base_samplers.range_encoding in - conv - (fun {base_parameters; list_size; set_size; map_size} -> - (base_parameters, (list_size, set_size, map_size))) - (fun (base_parameters, (list_size, set_size, map_size)) -> - {base_parameters; list_size; set_size; map_size}) - (merge_objs - Michelson_samplers_base.parameters_encoding - (obj3 - (req "list_size" range_encoding) - (req "set_size" range_encoding) - (req "map_size" range_encoding))) - -(* ------------------------------------------------------------------------- *) -(* Type names. *) - -(* We only want to generated inhabited types, hence Never is not included. *) - -type type_name = - [ `TUnit - | `TInt - | `TNat - | `TSignature - | `TString - | `TBytes - | `TMutez - | `TKey_hash - | `TKey - | `TTimestamp - | `TAddress - | `TBool - | `TPair - | `TOr - | `TLambda - | `TOption - | `TList - | `TSet - | `TMap - | `TBig_map - | `TContract - | `TSapling_transaction - | `TSapling_transaction_deprecated - | `TSapling_state - | `TOperation - | `TChain_id - | `TBls12_381_g1 - | `TBls12_381_g2 - | `TBls12_381_fr - | `TTicket ] - -type atomic_type_name = - [ `TUnit - | `TInt - | `TNat - | `TSignature - | `TString - | `TBytes - | `TMutez - | `TKey_hash - | `TKey - | `TTimestamp - | `TAddress - | `TBool - | `TSapling_transaction - | `TSapling_transaction_deprecated - | `TSapling_state - | `TChain_id - | `TBls12_381_g1 - | `TBls12_381_g2 - | `TBls12_381_fr ] - -type non_atomic_type_name = - [ `TPair - | `TOr - | `TLambda - | `TOption - | `TList - | `TSet - | `TMap - | `TBig_map - | `TContract - | `TTicket ] - -(* Ensure inclusion of atomic_type_name in type_name *) -let (_ : atomic_type_name -> type_name) = fun x -> (x :> type_name) - -(* Ensure inclusion of non_atomic_type_name in type_name *) -let (_ : non_atomic_type_name -> type_name) = fun x -> (x :> type_name) - -let all_atomic_type_names : atomic_type_name array = - [| - `TUnit; - `TInt; - `TNat; - `TSignature; - `TString; - `TBytes; - `TMutez; - `TKey_hash; - `TKey; - `TTimestamp; - `TAddress; - `TBool; - `TSapling_transaction; - `TSapling_transaction_deprecated; - `TSapling_state; - `TChain_id; - `TBls12_381_g1; - `TBls12_381_g2; - `TBls12_381_fr; - |] - -let all_non_atomic_type_names : non_atomic_type_name array = - [| - `TPair; - `TOr; - `TLambda; - `TOption; - `TList; - `TSet; - `TMap; - `TBig_map; - `TContract; - `TTicket; - |] - -type comparable_type_name = - [ `TUnit - | `TInt - | `TNat - | `TSignature - | `TString - | `TBytes - | `TMutez - | `TBool - | `TKey_hash - | `TKey - | `TTimestamp - | `TChain_id - | `TAddress - | `TPair - | `TOr - | `TOption ] - -(* Ensure inclusion of comparable_type_name in type_name *) -let (_ : comparable_type_name -> type_name) = fun x -> (x :> type_name) - -type 'a comparable_and_atomic = 'a - constraint 'a = [< comparable_type_name] constraint 'a = [< atomic_type_name] - -let all_comparable_atomic_type_names : 'a comparable_and_atomic array = - [| - `TUnit; - `TInt; - `TNat; - `TSignature; - `TString; - `TBytes; - `TMutez; - `TBool; - `TKey_hash; - `TKey; - `TTimestamp; - `TChain_id; - `TAddress; - |] - -type 'a comparable_and_non_atomic = 'a - constraint 'a = [< comparable_type_name] - constraint 'a = [< non_atomic_type_name] - -let all_comparable_non_atomic_type_names : 'a comparable_and_non_atomic array = - [|`TPair; `TOr; `TOption|] - -(* Ensure inclusion of comparable_and_atomic in type_name *) -let (_ : 'a comparable_and_atomic -> type_name) = fun x -> (x :> type_name) - -(* ------------------------------------------------------------------------- *) -(* Uniform type name generators *) - -open Sampling_helpers - -let uniform : ?blacklist:('a -> bool) -> 'a array -> 'a sampler = - fun ?blacklist arr rng_state -> - let arr = - match blacklist with - | None -> arr - | Some blacklist -> - Array.to_seq arr - |> Seq.filter (fun x -> not (blacklist x)) - |> Array.of_seq - in - let i = Random.State.int rng_state (Array.length arr) in - arr.(i) - -let uniform_atomic_type_name ?blacklist : atomic_type_name sampler = - uniform ?blacklist all_atomic_type_names - -let uniform_comparable_atomic_type_name : 'a comparable_and_atomic sampler = - uniform all_comparable_atomic_type_names - -let uniform_comparable_non_atomic_type_name : - 'a comparable_and_non_atomic sampler = - uniform all_comparable_non_atomic_type_names - -(* ------------------------------------------------------------------------- *) -(* Random generation functor. *) - -module type S = sig - module Michelson_base : Michelson_samplers_base.S - - module Random_type : sig - val m_type : - size:int -> - ?blacklist:(type_name -> bool) -> - unit -> - Script_typed_ir.ex_ty sampler - - val m_comparable_type : - size:int -> Script_ir_translator.ex_comparable_ty sampler - end - - module Random_value : sig - val value : ('a, _) Script_typed_ir.ty -> 'a sampler - - val comparable : 'a Script_typed_ir.comparable_ty -> 'a sampler - - val stack : ('a, 'b) Script_typed_ir.stack_ty -> ('a * 'b) sampler - end -end - -exception SamplingError of string - -let fail_sampling error = raise (SamplingError error) - -module Make (P : sig - val parameters : parameters -end) -(Crypto_samplers : Crypto_samplers.Finite_key_pool_S) : S = struct - module Michelson_base = Michelson_samplers_base.Make (struct - let parameters = P.parameters.base_parameters - end) - - let memo_size = - Alpha_context.Sapling.Memo_size.parse_z Z.zero |> Result.get_ok - - (* [pick_split x] randomly splits the integer [x] into two integers [left] - and [right] such that [1 <= left], [1 <= right], and [left + right = x]. - Expects [x >= 2]. *) - let pick_split : int -> (int * int) sampler = - fun x rng_state -> - if x < 2 then invalid_arg "pick_split" - else - (* x >= 2 *) - let left = 1 + Random.State.int rng_state (x - 1) in - let right = x - left in - assert (left + right = x) ; - (left, right) - - (* Random generation of Michelson types. *) - module Random_type = struct - let type_of_atomic_type_name (at_tn : atomic_type_name) : - Script_typed_ir.ex_ty = - match at_tn with - | `TString -> Ex_ty string_t - | `TNat -> Ex_ty nat_t - | `TKey -> Ex_ty key_t - | `TBytes -> Ex_ty bytes_t - | `TBool -> Ex_ty bool_t - | `TAddress -> Ex_ty address_t - | `TTimestamp -> Ex_ty timestamp_t - | `TKey_hash -> Ex_ty key_hash_t - | `TMutez -> Ex_ty mutez_t - | `TSignature -> Ex_ty signature_t - | `TUnit -> Ex_ty unit_t - | `TInt -> Ex_ty int_t - | `TSapling_state -> Ex_ty (sapling_state_t ~memo_size) - | `TSapling_transaction -> Ex_ty (sapling_transaction_t ~memo_size) - | `TSapling_transaction_deprecated -> - Ex_ty (sapling_transaction_deprecated_t ~memo_size) - | `TChain_id -> Ex_ty chain_id_t - | `TBls12_381_g1 -> Ex_ty bls12_381_g1_t - | `TBls12_381_g2 -> Ex_ty bls12_381_g2_t - | `TBls12_381_fr -> Ex_ty bls12_381_fr_t - - let comparable_type_of_comparable_atomic_type_name - (cmp_tn : 'a comparable_and_atomic) : - Script_ir_translator.ex_comparable_ty = - match cmp_tn with - | `TString -> Ex_comparable_ty string_t - | `TNat -> Ex_comparable_ty nat_t - | `TBytes -> Ex_comparable_ty bytes_t - | `TBool -> Ex_comparable_ty bool_t - | `TAddress -> Ex_comparable_ty address_t - | `TTimestamp -> Ex_comparable_ty timestamp_t - | `TKey_hash -> Ex_comparable_ty key_hash_t - | `TMutez -> Ex_comparable_ty mutez_t - | `TInt -> Ex_comparable_ty int_t - | `TUnit -> Ex_comparable_ty unit_t - | `TSignature -> Ex_comparable_ty signature_t - | `TKey -> Ex_comparable_ty key_t - | `TChain_id -> Ex_comparable_ty chain_id_t - - let rec m_type ~size ?blacklist () : Script_typed_ir.ex_ty sampler = - let open Script_ir_translator in - let open M in - let blacklist = - match blacklist with - | None -> None - | Some blacklist -> Some (fun x -> blacklist (x :> type_name)) - in - if size <= 0 then Stdlib.failwith "m_type: size <= 0" - else if size = 1 then - (* only atomic types can have size 1 *) - let* at_tn = uniform_atomic_type_name ?blacklist in - return (type_of_atomic_type_name at_tn) - else if size = 2 then - bind - (uniform [|`TOption; `TList; `TSet; `TTicket; `TContract|] ?blacklist) - @@ function - | `TOption -> ( - let* (Ex_ty t) = m_type ~size:1 ?blacklist () in - match option_t (-1) t with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TList -> ( - let* (Ex_ty t) = m_type ~size:1 ?blacklist () in - match list_t (-1) t with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TSet -> ( - let* (Ex_comparable_ty t) = m_comparable_type ~size:1 in - match set_t (-1) t with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TTicket -> ( - let* (Ex_comparable_ty contents) = m_comparable_type ~size:1 in - match ticket_t (-1) contents with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TContract -> ( - let* (Ex_ty t) = m_type ~size:1 ?blacklist () in - match contract_t (-1) t with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - else - bind (uniform all_non_atomic_type_names ?blacklist) @@ function - | `TPair -> ( - let* lsize, rsize = pick_split (size - 1) in - let* (Ex_ty left) = m_type ~size:lsize ?blacklist () in - let* (Ex_ty right) = m_type ~size:rsize ?blacklist () in - match pair_t (-1) left right with - | Error _ -> assert false - | Ok (Ty_ex_c res_ty) -> return @@ Ex_ty res_ty) - | `TLambda -> ( - let* lsize, rsize = pick_split (size - 1) in - let* (Ex_ty domain) = m_type ~size:lsize ?blacklist () in - let* (Ex_ty range) = m_type ~size:rsize ?blacklist () in - match lambda_t (-1) domain range with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TOr -> ( - let* lsize, rsize = pick_split (size - 1) in - let* (Ex_ty left) = m_type ~size:lsize ?blacklist () in - let* (Ex_ty right) = m_type ~size:rsize ?blacklist () in - match or_t (-1) left right with - | Error _ -> assert false - | Ok (Ty_ex_c res_ty) -> return @@ Ex_ty res_ty) - | `TOption -> ( - let* (Ex_ty t) = m_type ~size:(size - 1) ?blacklist () in - match option_t (-1) t with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TMap -> ( - let* lsize, rsize = pick_split (size - 1) in - let* (Ex_comparable_ty key) = m_comparable_type ~size:lsize in - let* (Ex_ty elt) = m_type ~size:rsize ?blacklist () in - match map_t (-1) key elt with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TSet -> ( - let* (Ex_comparable_ty key_ty) = - m_comparable_type ~size:(size - 1) - in - match set_t (-1) key_ty with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TList -> ( - let* (Ex_ty elt) = m_type ~size:(size - 1) ?blacklist () in - match list_t (-1) elt with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TTicket -> ( - let* (Ex_comparable_ty contents) = - m_comparable_type ~size:(size - 1) - in - match ticket_t (-1) contents with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TContract -> ( - let* (Ex_ty t) = m_type ~size:(size - 1) ?blacklist () in - match contract_t (-1) t with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_ty res_ty) - | `TBig_map -> - (* Don't know what to do with theses. Redraw. *) - m_type ~size ?blacklist () - - and m_comparable_type ~size : Script_ir_translator.ex_comparable_ty sampler - = - let open M in - let open Script_ir_translator in - let atomic_case () = - let* at_tn = uniform_comparable_atomic_type_name in - return (comparable_type_of_comparable_atomic_type_name at_tn) - in - let option_case size = - let size = size - 1 in - let* (Ex_comparable_ty t) = m_comparable_type ~size in - match option_t (-1) t with - | Error _ -> (* what should be done here? *) assert false - | Ok res_ty -> return @@ Ex_comparable_ty res_ty - in - let pair_case size = - let size = size - 1 in - let* size_left = - Base_samplers.sample_in_interval ~range:{min = 1; max = size - 1} - in - let size_right = size - size_left in - let* (Ex_comparable_ty l) = m_comparable_type ~size:size_left in - let* (Ex_comparable_ty r) = m_comparable_type ~size:size_right in - match comparable_pair_t (-1) l r with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_comparable_ty res_ty - in - let or_case size = - let size = size - 1 in - let* size_left = - Base_samplers.sample_in_interval ~range:{min = 1; max = size - 1} - in - let size_right = size - size_left in - let* (Ex_comparable_ty l) = m_comparable_type ~size:size_left in - let* (Ex_comparable_ty r) = m_comparable_type ~size:size_right in - match comparable_or_t (-1) l r with - | Error _ -> assert false - | Ok res_ty -> return @@ Ex_comparable_ty res_ty - in - - if size <= 1 then atomic_case () - else if size = 2 then option_case size - else - let* cmp_tn = uniform_comparable_non_atomic_type_name in - match cmp_tn with - | `TPair -> pair_case size - | `TOr -> or_case size - | `TOption -> option_case size - end - - (* Type-directed generation of random values. *) - module Random_value : sig - val value : ('a, _) Script_typed_ir.ty -> 'a sampler - - val comparable : 'a Script_typed_ir.comparable_ty -> 'a sampler - - val stack : ('a, 'b) Script_typed_ir.stack_ty -> ('a * 'b) sampler - end = struct - let implicit = Crypto_samplers.pkh - - let originated rng_state = - (* For a description of the format, see - tezos-codec describe alpha.contract binary encoding *) - let string = - "\001" ^ Base_samplers.uniform_string ~nbytes:20 rng_state ^ "\000" - in - Data_encoding.Binary.of_string_exn - Alpha_context.Contract.originated_encoding - string - - let sc_rollup rng_state = - let string = Base_samplers.uniform_string ~nbytes:20 rng_state in - Data_encoding.Binary.of_string_exn - Alpha_context.Sc_rollup.Address.encoding - string - - let entrypoint rng_state = - Alpha_context.Entrypoint.of_string_strict_exn - @@ Base_samplers.string ~size:{min = 1; max = 31} rng_state - - let address rng_state = - if Base_samplers.uniform_bool rng_state then - let destination = - Alpha_context.Destination.Contract (Implicit (implicit rng_state)) - in - {destination; entrypoint = Alpha_context.Entrypoint.default} - else - let destination = - Alpha_context.Destination.Contract (Originated (originated rng_state)) - in - let entrypoint = entrypoint rng_state in - {destination; entrypoint} - - let generate_originated_contract : - type arg argc. - (arg, argc) Script_typed_ir.ty -> - arg Script_typed_ir.typed_contract sampler = - fun arg_ty -> - let open M in - let* c = originated in - let* entrypoint in - let destination = Alpha_context.Destination.Contract (Originated c) in - return - (Typed_contract.Internal_for_tests.typed_exn - arg_ty - destination - entrypoint) - - let generate_sc_rollup_contract : - type arg argc. - (arg, argc) Script_typed_ir.ty -> - arg Script_typed_ir.typed_contract sampler = - fun arg_ty -> - let open M in - let* ru = sc_rollup in - let destination = Alpha_context.Destination.Sc_rollup ru in - return - (Typed_contract.Internal_for_tests.typed_exn - arg_ty - destination - Alpha_context.Entrypoint.default) - - let generate_any_type_contract : - type arg argc. - (arg, argc) Script_typed_ir.ty -> - arg Script_typed_ir.typed_contract sampler = - fun arg_ty -> - let open M in - let* b = Base_samplers.uniform_bool in - if b then generate_originated_contract arg_ty - else generate_sc_rollup_contract arg_ty - - let generate_contract : - type arg argc. - (arg, argc) Script_typed_ir.ty -> - arg Script_typed_ir.typed_contract sampler = - fun arg_ty -> - let open M in - match arg_ty with - | Unit_t -> - let* b = Base_samplers.uniform_bool in - if b then - let* pkh = implicit in - let destination = - Alpha_context.Destination.Contract (Implicit pkh) - in - let entrypoint = Alpha_context.Entrypoint.default in - return - (Typed_contract.Internal_for_tests.typed_exn - arg_ty - destination - entrypoint) - else generate_any_type_contract arg_ty - | _ -> generate_any_type_contract arg_ty - - let chain_id rng_state = - let string = Base_samplers.uniform_string ~nbytes:4 rng_state in - Data_encoding.Binary.of_string_exn Script_chain_id.encoding string - - let signature rng_state = - Script_signature.make (Michelson_base.signature rng_state) - - let rec value : type a ac. (a, ac) Script_typed_ir.ty -> a sampler = - let open Script_typed_ir in - fun typ -> - match typ with - | Never_t -> assert false - | Unit_t -> M.return () - | Int_t -> Michelson_base.int - | Nat_t -> Michelson_base.nat - | Signature_t -> signature - | String_t -> Michelson_base.string - | Bytes_t -> Michelson_base.bytes - | Mutez_t -> Michelson_base.tez - | Key_hash_t -> Crypto_samplers.pkh - | Key_t -> Crypto_samplers.pk - | Timestamp_t -> Michelson_base.timestamp - | Bool_t -> Base_samplers.uniform_bool - | Address_t -> address - | Pair_t (left_t, right_t, _, _) -> - M.( - let* left_v = value left_t in - let* right_v = value right_t in - return (left_v, right_v)) - | Or_t (left_t, right_t, _, _) -> - fun rng_state -> - if Base_samplers.uniform_bool rng_state then - L (value left_t rng_state) - else R (value right_t rng_state) - | Lambda_t (arg_ty, ret_ty, _) -> generate_lambda arg_ty ret_ty - | Option_t (ty, _, _) -> - fun rng_state -> - if Base_samplers.uniform_bool rng_state then None - else Some (value ty rng_state) - | List_t (elt_ty, _) -> generate_list elt_ty - | Set_t (elt_ty, _) -> generate_set elt_ty - | Map_t (key_ty, val_ty, _) -> generate_map key_ty val_ty - | Contract_t (arg_ty, _) -> generate_contract arg_ty - | Operation_t -> generate_operation - | Big_map_t (key_ty, val_ty, _) -> generate_big_map key_ty val_ty - | Chain_id_t -> chain_id - | Bls12_381_g1_t -> generate_bls12_381_g1 - | Bls12_381_g2_t -> generate_bls12_381_g2 - | Bls12_381_fr_t -> generate_bls12_381_fr - | Ticket_t (contents_ty, _) -> generate_ticket contents_ty - | Sapling_transaction_t _ -> - fail_sampling - "Michelson_samplers: sapling transactions not handled yet" - | Sapling_transaction_deprecated_t _ -> - fail_sampling - "Michelson_samplers: sapling transactions not handled yet" - | Sapling_state_t _ -> - fail_sampling "Michelson_samplers: sapling state not handled yet" - | Chest_key_t -> - fail_sampling "Michelson_samplers: chest key not handled yet" - | Chest_t -> fail_sampling "Michelson_samplers: chest not handled yet" - - and generate_lambda : - type arg argc ret retc. - (arg, argc) Script_typed_ir.ty -> - (ret, retc) Script_typed_ir.ty -> - (arg, ret) Script_typed_ir.lambda sampler = - fun _arg_ty _ret_ty _rng_state -> - fail_sampling "Michelson_samplers: lambda not handled yet" - - and generate_list : - type elt eltc. - (elt, eltc) Script_typed_ir.ty -> elt Script_list.t sampler = - fun elt_type -> - let open M in - let* _, elements = - Structure_samplers.list - ~range:P.parameters.list_size - ~sampler:(value elt_type) - in - return @@ Script_list.of_list elements - - (* Note that we might very well generate sets smaller than the specified range (consider the - case of a set of type [unit]). *) - and generate_set : - type elt. - elt Script_typed_ir.comparable_ty -> elt Script_typed_ir.set sampler = - fun elt_ty -> - let open M in - let* _, elements = - Structure_samplers.list - ~range:P.parameters.set_size - ~sampler:(value elt_ty) - in - return - @@ List.fold_left - (fun set x -> Script_set.update x true set) - (Script_set.empty elt_ty) - elements - - and generate_map : - type key elt eltc. - key Script_typed_ir.comparable_ty -> - (elt, eltc) Script_typed_ir.ty -> - (key, elt) Script_typed_ir.map sampler = - fun key_ty elt_ty rng_state -> - let size = - Base_samplers.sample_in_interval rng_state ~range:P.parameters.map_size - in - let keys = List.init size (fun _ -> value key_ty rng_state) in - let elts = List.init size (fun _ -> value elt_ty rng_state) in - List.fold_left2 - (fun map key elt -> Script_map.update key (Some elt) map) - (Script_map.empty key_ty) - keys - elts - - and generate_big_map : - type key elt eltc. - key Script_typed_ir.comparable_ty -> - (elt, eltc) Script_typed_ir.ty -> - (key, elt) Script_typed_ir.big_map sampler = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - fun key_ty elt_ty rng_state -> - let open TzPervasives in - let result = - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let big_map = Script_big_map.empty key_ty elt_ty in - (* Cannot have big maps under big maps *) - let*? opt_elt_ty = - option_t (-1) elt_ty |> Environment.wrap_tzresult - in - let map = generate_map key_ty opt_elt_ty rng_state in - let* big_map, _ = - let*! result = - Script_map.fold - (fun k v acc -> - let* bm, ctxt_acc = acc in - Script_big_map.update ctxt_acc k v bm) - map - (return (big_map, ctxt)) - in - Lwt.return @@ Environment.wrap_tzresult result - in - return big_map) - in - match result with - | Ok x -> x - | Error e -> - Format.eprintf - "%a@." - (Error_monad.TzTrace.pp_print Error_monad.pp) - e ; - fail_sampling "raise_if_error" - - and generate_operation : Script_typed_ir.operation sampler = - fun rng_state -> - let transfer = generate_transfer_tokens rng_state in - Script_typed_ir.{piop = transfer; lazy_storage_diff = None} - - and generate_transfer_tokens : - Script_typed_ir.packed_internal_operation sampler = - fun _rng_state -> fail_sampling "generate_transfer_tokens: unimplemented" - - and generate_bls12_381_g1 : Script_bls.G1.t sampler = - fun rng_state -> - let b = Bls12_381.G1.(to_bytes (random ~state:rng_state ())) in - match Script_bls.G1.of_bytes_opt b with - | Some x -> x - | None -> assert false - - and generate_bls12_381_g2 : Script_bls.G2.t sampler = - fun rng_state -> - let b = Bls12_381.G2.(to_bytes (random ~state:rng_state ())) in - match Script_bls.G2.of_bytes_opt b with - | Some x -> x - | None -> assert false - - and generate_bls12_381_fr : Script_bls.Fr.t sampler = - fun rng_state -> - let b = Bls12_381.Fr.(to_bytes (random ~state:rng_state ())) in - match Script_bls.Fr.of_bytes_opt b with - | Some x -> x - | None -> assert false - - and generate_ticket : - type a ac. - (a, ac) Script_typed_ir.ty -> a Script_typed_ir.ticket sampler = - fun ty rng_state -> - let contents = value ty rng_state in - let ticketer = - Alpha_context.Contract.Implicit (Crypto_samplers.pkh rng_state) - in - let amount = - let open Ticket_amount in - match of_n (Michelson_base.nat rng_state) with - | Some amount -> add amount one - | None -> one - in - Script_typed_ir.{ticketer; contents; amount} - - let comparable ty = value ty - - (* Random stack generation. *) - let rec stack : type a b. (a, b) Script_typed_ir.stack_ty -> (a * b) sampler - = - let open M in - let open Script_typed_ir in - fun stack_ty -> - match stack_ty with - | Item_t (ty, tl) -> - let* elt = value ty in - let* tl = stack tl in - return ((elt, tl) : a * b) - | Bot_t -> return (EmptyCell, EmptyCell) - end -end - -module Internal_for_tests = struct - type nonrec type_name = type_name -end diff --git a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers.mli b/src/proto_019_PtParisB/lib_benchmark/michelson_samplers.mli deleted file mode 100644 index 78ee62a3392cc967e415d5aab4d3436291ed42d8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers.mli +++ /dev/null @@ -1,172 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Sampling various Michelson values. *) - -exception SamplingError of string - -open Protocol -open Base_samplers - -(** This module exposes a functor implementing various samplers for Michelson. - These allow to sample: - - types and comparable types (given a target size), - - values and comparable values of a given Michelson type (given some more - parameters fixed at functor instantiation time) - - stacks - - Note that some kind of values might not be supported. At the time of writing, - the value sampler doesn't handle the following types: - - Sapling transaction and states - - Timelock chests and chest keys - - Operations - - Lambdas (ie code) - - For the latter, consider using the samplers in {!Michelson_mcmc_samplers}. -*) - -(** Parameters for the Michelson samplers. *) -type parameters = { - base_parameters : Michelson_samplers_base.parameters; - list_size : Base_samplers.range; - (** The range of the size, measured in number of elements, in which lists must be sampled.*) - set_size : Base_samplers.range; - (** The range of the size, measured in number of elements, in which sets must be sampled.*) - map_size : Base_samplers.range; - (** The range of the size, measured in number of bindings, in which maps must be sampled.*) -} - -(** Encoding for sampler prameters. *) -val parameters_encoding : parameters Data_encoding.t - -type type_name = - [ `TUnit - | `TInt - | `TNat - | `TSignature - | `TString - | `TBytes - | `TMutez - | `TKey_hash - | `TKey - | `TTimestamp - | `TAddress - | `TBool - | `TPair - | `TOr - | `TLambda - | `TOption - | `TList - | `TSet - | `TMap - | `TBig_map - | `TContract - | `TSapling_transaction - | `TSapling_transaction_deprecated - | `TSapling_state - | `TOperation - | `TChain_id - | `TBls12_381_g1 - | `TBls12_381_g2 - | `TBls12_381_fr - | `TTicket ] - -(** The module type produced by the [Make] functor. *) -module type S = sig - (** Basic Michelson samplers, re-exported for convenience by the functor. *) - module Michelson_base : Michelson_samplers_base.S - - (** Samplers for random Michelson types. *) - module Random_type : sig - (** [m_type ~size ?blacklist] samples a type containing exactly - [size] constructors. The [blacklist] is a predicate which can - be used to discard some unwanted cases. *) - val m_type : - size:int -> - ?blacklist:(type_name -> bool) -> - unit -> - Script_typed_ir.ex_ty sampler - - (** [m_comparable_type ~size] samples a comparable type containing - exactly [size] constructors. *) - val m_comparable_type : - size:int -> Script_ir_translator.ex_comparable_ty sampler - end - - (** Samplers for random Michelson values. Restrictions apply on the - supported types as listed at the beginning of this file. *) - module Random_value : sig - (** Sample a value given its type. *) - val value : ('a, _) Script_typed_ir.ty -> 'a sampler - - (** Sample a comparable value given its type. *) - val comparable : 'a Script_typed_ir.comparable_ty -> 'a sampler - - (** Sample a stack given its type. *) - val stack : ('a, 'b) Script_typed_ir.stack_ty -> ('a * 'b) sampler - end -end - -(** Instantiate a module of type {!S}. *) -module Make : functor - (P : sig - val parameters : parameters - end) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) - -> S - -module Internal_for_tests : sig - type type_name = - [ `TAddress - | `TBig_map - | `TBls12_381_fr - | `TBls12_381_g1 - | `TBls12_381_g2 - | `TBool - | `TBytes - | `TChain_id - | `TContract - | `TInt - | `TKey - | `TKey_hash - | `TLambda - | `TList - | `TMap - | `TMutez - | `TNat - | `TOperation - | `TOption - | `TPair - | `TSapling_state - | `TSapling_transaction - | `TSapling_transaction_deprecated - | `TSet - | `TSignature - | `TString - | `TTicket - | `TTimestamp - | `TOr - | `TUnit ] -end diff --git a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers_base.ml b/src/proto_019_PtParisB/lib_benchmark/michelson_samplers_base.ml deleted file mode 100644 index 651a385016bf6beb466c9ba04d328fe2fb0d77d2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers_base.ml +++ /dev/null @@ -1,139 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Sampling_helpers - -(** Parameters for basic samplers *) -type parameters = { - int_size : Base_samplers.range; - string_size : Base_samplers.range; - bytes_size : Base_samplers.range; -} - -(** Encoding for basic samplers parameters *) -let parameters_encoding = - let open Data_encoding in - let range = Base_samplers.range_encoding in - conv - (fun {int_size; string_size; bytes_size} -> - (int_size, string_size, bytes_size)) - (fun (int_size, string_size, bytes_size) -> - {int_size; string_size; bytes_size}) - (obj3 - (req "int_size" range) - (req "string_size" range) - (req "bytes_size" range)) - -(** A module of type [S] packs samplers used to construct basic Michelson values. *) -module type S = sig - val int : Script_int.z Script_int.num sampler - - val nat : Script_int.n Script_int.num sampler - - val signature : Tezos_crypto.Signature.t sampler - - val string : Script_string.t sampler - - val bytes : bytes sampler - - val tez : Alpha_context.Tez.t sampler - - val timestamp : Script_timestamp.t sampler -end - -(* Samplers for basic Michelson types. *) - -module Make (P : sig - val parameters : parameters -end) : S = struct - let int rng_state = - let i = Base_samplers.int ~size:P.parameters.int_size rng_state in - Script_int.of_zint i - - let nat rng_state = - let i = Base_samplers.nat ~size:P.parameters.int_size rng_state in - Script_int.abs (Script_int.of_zint i) - - let signature rng_state = - let i = Random.State.int rng_state 5 in - match i with - | 0 -> ( - let open Tezos_crypto.Signature.Ed25519 in - let bytes = Base_samplers.uniform_bytes ~nbytes:size rng_state in - match of_bytes_opt bytes with - | None -> assert false - | Some s -> Tezos_crypto.Signature.of_ed25519 s) - | 1 -> ( - let open Tezos_crypto.Signature.Secp256k1 in - let bytes = Base_samplers.uniform_bytes ~nbytes:size rng_state in - match of_bytes_opt bytes with - | None -> assert false - | Some s -> Tezos_crypto.Signature.of_secp256k1 s) - | 2 -> ( - let open Tezos_crypto.Signature.P256 in - let bytes = Base_samplers.uniform_bytes ~nbytes:size rng_state in - match of_bytes_opt bytes with - | None -> assert false - | Some s -> Tezos_crypto.Signature.of_p256 s) - | 3 -> - (* BLS checks that signatures are on the curve so we need to generate real - ones by signing a message. *) - let open Tezos_crypto.Signature.Bls in - let msg = Base_samplers.uniform_bytes ~nbytes:32 rng_state in - let seed = Base_samplers.uniform_bytes ~nbytes:32 rng_state in - let _, _, sk = generate_key ~seed () in - Tezos_crypto.Signature.of_bls (sign sk msg) - | _ -> - let open Tezos_crypto.Signature in - let bytes = - Base_samplers.uniform_bytes - ~nbytes:Tezos_crypto.Signature.Ed25519.size - rng_state - in - Unknown bytes - - let string rng_state = - let s = - Base_samplers.readable_ascii_string - ~size:P.parameters.string_size - rng_state - in - match Protocol.Script_string.of_string s with - | Ok s -> s - | Error _ -> assert false - - let bytes = Base_samplers.bytes ~size:P.parameters.bytes_size - - let tez rng_state = - let i = Random.State.int64 rng_state (Int64.of_int max_int) in - match Protocol.Alpha_context.Tez.of_mutez i with - | Some res -> res - | None -> assert false - - let timestamp rng_state = - let i = Base_samplers.int ~size:P.parameters.int_size rng_state in - Script_timestamp.of_zint i -end diff --git a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers_base.mli b/src/proto_019_PtParisB/lib_benchmark/michelson_samplers_base.mli deleted file mode 100644 index 91ebc6b4f10d096a80d5052cfdda85adb922e728..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/michelson_samplers_base.mli +++ /dev/null @@ -1,67 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Samplers for basic Michelson values (not including pairs, ors, tickets, big maps, etc) *) - -open Protocol -open Base_samplers - -(** Parameters for basic samplers *) -type parameters = { - int_size : Base_samplers.range; - (** The range of the size, measured in bytes, in which big integers must be sampled.*) - string_size : Base_samplers.range; - (** The range of the size, measured in bytes, in which strings must be sampled.*) - bytes_size : Base_samplers.range; - (** The range of the size, measured in bytes, in which [bytes] must be sampled.*) -} - -(** Encoding for [parameters] *) -val parameters_encoding : parameters Data_encoding.t - -(** A module of type [S] packs samplers used to construct basic Michelson values. *) -module type S = sig - val int : Script_int.z Script_int.num sampler - - val nat : Script_int.n Script_int.num sampler - - val signature : Tezos_crypto.Signature.t sampler - - val string : Script_string.t sampler - - val bytes : bytes sampler - - val tez : Alpha_context.Tez.t sampler - - val timestamp : Script_timestamp.t sampler -end - -(** The [Make] functor instantiates a module of type [S], where the - samplers satisfy the given parameters. *) -module Make : functor - (P : sig - val parameters : parameters - end) - -> S diff --git a/src/proto_019_PtParisB/lib_benchmark/mikhailsky_to_michelson.ml b/src/proto_019_PtParisB/lib_benchmark/mikhailsky_to_michelson.ml deleted file mode 100644 index 6ee761048306df2a52c5e36148c4f028c10050a3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/mikhailsky_to_michelson.ml +++ /dev/null @@ -1,229 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -exception Cannot_get_type of Mikhailsky.node * Kernel.Path.t - -exception Unexpected_stack_type of string - -exception Unexpected_base_type - -let unparse_type = Mikhailsky.map_var (fun _ -> Mikhailsky.prim T_unit [] []) - -let project_top (aft : Type.Stack.t) = - match aft.node with - | Type.Stack.Empty_t -> raise (Unexpected_stack_type "empty") - | Type.Stack.Stack_var_t _ -> raise (Unexpected_stack_type "var") - | Type.Stack.Item_t (top, _) -> top - -let project_or (aft : Type.Stack.t) = - let top = project_top aft in - match top.node with - | Type.Base.Or_t (l, r) -> (l, r) - | _ -> raise Unexpected_base_type - -let project_lambda (aft : Type.Stack.t) = - let top = project_top aft in - match top.node with - | Type.Base.Lambda_t (dom, range) -> (dom, range) - | _ -> raise Unexpected_base_type - -let project_list (aft : Type.Stack.t) = - let top = project_top aft in - match top.node with - | Type.Base.List_t t -> t - | _ -> raise Unexpected_base_type - -let project_set (aft : Type.Stack.t) = - let top = project_top aft in - match top.node with Type.Base.Set_t t -> t | _ -> raise Unexpected_base_type - -let project_map (aft : Type.Stack.t) = - let top = project_top aft in - match top.node with - | Type.Base.Map_t (k, v) -> (k, v) - | _ -> raise Unexpected_base_type - -let project_option (aft : Type.Stack.t) = - let top = project_top aft in - match top.node with - | Type.Base.Option_t t -> t - | _ -> raise Unexpected_base_type - -let rec convert_raw : Mikhailsky.node -> (int, 'a) Micheline.node = - fun node -> - match node with - | Micheline.Int (_, i) -> Micheline.Int (0, i) - | Micheline.Prim (_, head, subterms, annots) -> - let head = Mikhailsky_prim.to_michelson head in - Micheline.Prim (0, head, List.map convert_raw subterms, annots) - | Micheline.String (_, s) -> Micheline.String (0, s) - | Micheline.Bytes (_, b) -> Micheline.Bytes (0, b) - | Micheline.Seq (_, subterms) -> - Micheline.Seq (0, List.map convert_raw subterms) - -(* We assume that the term has been completed. *) -let rec convert : - Mikhailsky.node -> Kernel.Path.t -> (int, 'a) Micheline.node Inference.M.t = - fun node path -> - let open Inference.M in - match node with - | Micheline.Int (_, i) -> return (Micheline.Int (0, i)) - | Micheline.String (_, s) -> return (Micheline.String (0, s)) - | Micheline.Bytes (_, b) -> return (Micheline.Bytes (0, b)) - (* Remove annotations *) - | Micheline.Prim (_, prim, [term], _) - when Mikhailsky_prim.kind prim = Annot_kind -> - let path = Kernel.Path.at_index 0 path in - convert term path - (* Fail on holes *) - | Micheline.Prim (_, I_Hole, _, _) | Micheline.Prim (_, D_Hole, _, _) -> - raise Mikhailsky.Term_contains_holes - (* Add type information to or injections *) - | Micheline.Prim (_, I_LEFT, [], annots) -> ( - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let _, r = project_or aft in - Inference.instantiate_base r >>= fun r -> - Autocomp.replace_vars r >>= fun r -> - let r = unparse_type r in - let head = Mikhailsky_prim.to_michelson I_LEFT in - return (Micheline.Prim (0, head, [convert_raw r], annots))) - | Micheline.Prim (_, I_RIGHT, [], annots) -> ( - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let l, _ = project_or aft in - Inference.instantiate_base l >>= fun l -> - Autocomp.replace_vars l >>= fun l -> - let l = unparse_type l in - let head = Mikhailsky_prim.to_michelson I_RIGHT in - return (Micheline.Prim (0, head, [convert_raw l], annots))) - | Micheline.Prim (_, (I_LEFT | I_RIGHT), _, _) -> - raise Mikhailsky.Ill_formed_mikhailsky - (* Add type information for lambdas *) - | Micheline.Prim (_, I_LAMBDA, [code], annots) -> ( - convert code (Kernel.Path.at_index 0 path) >>= fun code -> - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let dom, range = project_lambda aft in - Inference.instantiate_base dom >>= fun dom -> - Autocomp.replace_vars dom >>= fun dom -> - Inference.instantiate_base range >>= fun range -> - Autocomp.replace_vars range >>= fun range -> - let dom = unparse_type dom in - let range = unparse_type range in - let head = Mikhailsky_prim.to_michelson I_LAMBDA in - return - (Micheline.Prim - (0, head, [convert_raw dom; convert_raw range; code], annots))) - (* Add type information for empty_set, empty_map *) - | Micheline.Prim (_, I_EMPTY_SET, [], annots) -> ( - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let elt = project_set aft in - Inference.instantiate_base elt >>= fun elt -> - Autocomp.replace_vars elt >>= fun elt -> - let elt = unparse_type elt in - let head = Mikhailsky_prim.to_michelson I_EMPTY_SET in - return (Micheline.Prim (0, head, [convert_raw elt], annots))) - | Micheline.Prim (_, I_EMPTY_MAP, [], annots) -> ( - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let k, v = project_map aft in - Inference.instantiate_base k >>= fun k -> - Autocomp.replace_vars k >>= fun k -> - Inference.instantiate_base v >>= fun v -> - Autocomp.replace_vars v >>= fun v -> - let k = convert_raw (unparse_type k) in - let v = convert_raw (unparse_type v) in - let head = Mikhailsky_prim.to_michelson I_EMPTY_MAP in - return (Micheline.Prim (0, head, [k; v], annots))) - (* Add type information for UNPACK *) - | Micheline.Prim (_, I_UNPACK, [], annots) -> ( - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let elt = project_option aft in - Inference.instantiate_base elt >>= fun elt -> - Autocomp.replace_vars elt >>= fun elt -> - let elt = unparse_type elt in - let head = Mikhailsky_prim.to_michelson I_UNPACK in - return (Micheline.Prim (0, head, [convert_raw elt], annots))) - (* Add type information for NIL *) - | Micheline.Prim (_, I_NIL, [], annots) -> ( - get_instr_annot path >>= fun ty_opt -> - match ty_opt with - | None -> raise (Cannot_get_type (node, path)) - | Some {aft; _} -> - Inference.instantiate aft >>= fun aft -> - let elt = project_list aft in - Inference.instantiate_base elt >>= fun elt -> - Autocomp.replace_vars elt >>= fun elt -> - let elt = unparse_type elt in - let head = Mikhailsky_prim.to_michelson I_NIL in - return (Micheline.Prim (0, head, [convert_raw elt], annots))) - | Micheline.Prim (_, I_NIL, _, _) -> raise Mikhailsky.Ill_formed_mikhailsky - (* Project out type information from arithmetic ops *) - | Prim (_, ((I_ADD | I_SUB | I_MUL | I_EDIV) as instr), [_ty1; _ty2], annots) - -> - let head = Mikhailsky_prim.to_michelson instr in - return (Micheline.Prim (0, head, [], annots)) - | Prim (_, (I_ADD | I_SUB | I_MUL | I_EDIV), _, _) -> - raise Mikhailsky.Ill_formed_mikhailsky - (* Base case *) - | Micheline.Prim (_, head, subterms, annots) -> - let head = Mikhailsky_prim.to_michelson head in - convert_list path 0 subterms [] >>= fun subterms -> - return (Micheline.Prim (0, head, subterms, annots)) - | Micheline.Seq (_, subterms) -> - convert_list path 0 subterms [] >>= fun subterms -> - return (Micheline.Seq (0, subterms)) - -and convert_list path i subterms acc = - let open Inference.M in - match subterms with - | [] -> return (List.rev acc) - | subterm :: tl -> - let path' = Kernel.Path.at_index i path in - convert subterm path' >>= fun term -> - convert_list path (i + 1) tl (term :: acc) - -let convert node state = fst (convert node Kernel.Path.root state) diff --git a/src/proto_019_PtParisB/lib_benchmark/rules.ml b/src/proto_019_PtParisB/lib_benchmark/rules.ml deleted file mode 100644 index 88a148e0213e85c6d26ef93451d104e965915440..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/rules.ml +++ /dev/null @@ -1,975 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Kernel - -type rule_set = {rule_patt : pattern; replacements : guarded_replacement list} - -and guarded_replacement = { - type_constraint : type_constraint; - replacement : replacement list; -} - -and type_constraint = - | No_cnstrnt - | Data_cnstrnt of {cnstrnt : Type.Base.t; fresh : int list} - | Instr_cnstrnt of { - cnstrnt : Inference.transformer; - fresh : var list; - fresh_stack : int list; - } - -and replacement = - | Context_aware of (Mikhailsky.node -> Mikhailsky.node) - | Context_blind of (unit -> Mikhailsky.node) - -and pattern = Pattern of Patt.t | Root - -and var = Plain of int | Cmp of int - -let stack_repr = Inference.Stack_type None - -let base_repr = - Inference.Base_type {repr = None; comparable = Inference.Unconstrained} - -let cmp_repr = - Inference.Base_type {repr = None; comparable = Inference.Comparable} - -let rec add_fresh_stack_variables vars = - let open Inference.M in - match vars with - | [] -> return () - | fresh :: tl -> - uf_lift (Uf.UF.add fresh) >>= fun () -> - set_repr fresh stack_repr >>= fun () -> add_fresh_stack_variables tl - -let rec add_fresh_data_variables vars = - let open Inference.M in - match vars with - | [] -> return () - | fresh :: tl -> - uf_lift (Uf.UF.add fresh) >>= fun () -> - set_repr fresh base_repr >>= fun () -> add_fresh_data_variables tl - -let rec add_fresh_variables vars plain_repr cmp_repr = - let open Inference.M in - match vars with - | [] -> return () - | Plain fresh :: tl -> - uf_lift (Uf.UF.add fresh) >>= fun () -> - set_repr fresh plain_repr >>= fun () -> - add_fresh_variables tl plain_repr cmp_repr - | Cmp fresh :: tl -> - uf_lift (Uf.UF.add fresh) >>= fun () -> - set_repr fresh cmp_repr >>= fun () -> - add_fresh_variables tl plain_repr cmp_repr - -let evaluate_guard_monadic guard path = - let open Inference.M in - match guard with - | No_cnstrnt -> return () - | Data_cnstrnt {cnstrnt = base_type_constraint; fresh} -> ( - add_fresh_data_variables fresh >>= fun () -> - get_data_annot path >>= fun res_opt -> - match res_opt with - | None -> assert false - | Some type_of_expr -> - Inference.unify_base type_of_expr base_type_constraint >>= fun () -> - Inference.instantiate_base type_of_expr >>= fun _ -> return ()) - | Instr_cnstrnt {cnstrnt = {bef = pre; aft = post}; fresh; fresh_stack} -> ( - (* Add base fresh type variables *) - add_fresh_variables fresh base_repr cmp_repr - >>= fun () -> - add_fresh_stack_variables fresh_stack >>= fun () -> - get_instr_annot path >>= fun res_opt -> - match res_opt with - | None -> assert false - | Some {bef; aft} -> - Inference.unify pre bef >>= fun () -> - Inference.unify post aft >>= fun () -> - Inference.instantiate bef >>= fun _bef -> - Inference.instantiate aft >>= fun _aft -> return ()) - -let evaluate_guard typing guard path = - try - let _ = evaluate_guard_monadic guard path typing in - true - with Inference.Ill_typed_script _ -> false - -let filter_matches typing guard matches = - List.filter (evaluate_guard typing guard) matches - -(* Provides a speedup but should better be done in the - rewriting module (so that not only top matches are hash-consed). *) -let matches_with_hash_consing = - let match_table : (int * int, Kernel.Path.t list) Hashtbl.t = - Hashtbl.create 97 - in - fun pattern term -> - match pattern with - | Root -> [Path.root] - | Pattern patt -> ( - let key = (Kernel.Patt.uid patt, Mikhailsky.tag term) in - match Hashtbl.find_opt match_table key with - | None -> - let res = Rewriter.all_matches patt term in - Hashtbl.add match_table key res ; - res - | Some res -> res) - -let matches_without_consing pattern term = - match pattern with - | Root -> [Path.root] - | Pattern patt -> Rewriter.all_matches patt term - -let rewriting (state : State_space.t) (rules : rule_set list) = - List.fold_left - (fun acc rule -> - let matches = matches_without_consing rule.rule_patt state.term in - List.fold_left - (fun acc guarded_replacement -> - let matches = - filter_matches - (Lazy.force state.typing) - guarded_replacement.type_constraint - matches - in - List.fold_left - (fun acc replacement -> - match replacement with - | Context_blind term -> - List.fold_left - (fun acc path -> (path, term ()) :: acc) - acc - matches - | Context_aware f -> - List.fold_left - (fun acc path -> - let term = Rewriter.get_subterm ~term:state.term ~path in - (path, f term) :: acc) - acc - matches) - acc - guarded_replacement.replacement) - acc - rule.replacements) - [] - rules - -module Instruction = struct - (* ----------------------------------------------------------------------- *) - (* Rule: replace instruction by hole. *) - - (* Matches instructions *) - let match_any_instr = - let open Patt in - Pattern - (focus - (prim_pred - (fun prim -> Mikhailsky_prim.kind prim = Mikhailsky_prim.Instr_kind) - list_any)) - - let replace_any_instr_by_hole = - let replace_by_hole = - { - type_constraint = No_cnstrnt; - replacement = [Context_blind (fun () -> Mikhailsky.instr_hole)]; - } - in - {rule_patt = match_any_instr; replacements = [replace_by_hole]} - - (* ----------------------------------------------------------------------- *) - (* Rule: replace instruction hole by instruction satisfying typing - constraints. *) - - (* Matches instruction holes *) - let match_instr_hole = - let open Patt in - Pattern (focus (prim I_Hole list_any)) - - let replacement ?(fresh = []) ?(fresh_stack = []) ~bef ~aft ~replacement () : - guarded_replacement = - { - type_constraint = Instr_cnstrnt {cnstrnt = {bef; aft}; fresh; fresh_stack}; - replacement; - } - - let instructions = - let open Type in - let module M = Mikhailsky in - let module I = Inference in - let alpha = ~-1 in - let beta = ~-2 in - let gamma = ~-3 in - let delta = ~-4 in - [ - replacement - ~fresh_stack:[alpha] - ~bef:(item bytes (stack_var alpha)) - ~aft:(item bytes (stack_var alpha)) - ~replacement: - [ - Context_blind (fun () -> M.Instructions.blake2b); - Context_blind (fun () -> M.Instructions.sha256); - Context_blind (fun () -> M.Instructions.sha512); - ] - (); - replacement - ~fresh_stack:[alpha] - ~bef:(item int (stack_var alpha)) - ~aft:(item bool (stack_var alpha)) - ~replacement:[Context_blind (fun () -> M.Instructions.gt)] - (); - replacement - ~fresh_stack:[alpha] - ~bef:(item int (stack_var alpha)) - ~aft:(item nat (stack_var alpha)) - ~replacement:[Context_blind (fun () -> M.Instructions.abs)] - (); - replacement - ~fresh_stack:[alpha] - ~bef:(item int (item int (stack_var alpha))) - ~aft:(item int (stack_var alpha)) - ~replacement: - [ - Context_blind (fun () -> M.Instructions.add M.int_ty M.int_ty); - Context_blind (fun () -> M.Instructions.mul M.int_ty M.int_ty); - ] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (pair (var alpha) (var beta)) (stack_var gamma)) - ~aft:(item (var alpha) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.car)] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (pair (var alpha) (var beta)) (stack_var gamma)) - ~aft:(item (var beta) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.cdr)] - (); - replacement - ~fresh:[Cmp alpha] - ~fresh_stack:[gamma] - ~bef:(item (var alpha) (item (var alpha) (stack_var gamma))) - ~aft:(item int (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.compare)] - (); - replacement - ~fresh_stack:[gamma] - ~bef:(item string (item string (stack_var gamma))) - ~aft:(item string (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.concat)] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[beta; gamma] - ~bef:(item (var alpha) (stack_var beta)) - ~aft:(item (var alpha) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.(dip hole))] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[beta] - ~bef:(item (var alpha) (stack_var beta)) - ~aft:(stack_var beta) - ~replacement:[Context_blind (fun () -> M.Instructions.drop)] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[beta] - ~bef:(item (var alpha) (stack_var beta)) - ~aft:(item (var alpha) (item (var alpha) (stack_var beta))) - ~replacement:[Context_blind (fun () -> M.Instructions.dup)] - (); - replacement - ~fresh:[] - ~fresh_stack:[alpha] - ~bef:(stack_var alpha) - ~aft:(item int (stack_var alpha)) - ~replacement: - [ - (* TODO : push random integer? *) - Context_blind - (fun () -> M.Instructions.push M.int_ty (M.Data.integer 100)); - ] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (var alpha) (item (var beta) (stack_var gamma))) - ~aft:(item (var beta) (item (var alpha) (stack_var gamma))) - ~replacement:[Context_blind (fun () -> M.Instructions.swap)] - (); - (* control *) - replacement - ~fresh_stack:[alpha] - ~bef:(item bool (stack_var alpha)) - ~aft:(stack_var alpha) - ~replacement:[Context_blind (fun () -> M.Instructions.(loop hole))] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (or_ (var alpha) (var beta)) (stack_var gamma)) - ~aft:(item (var beta) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.(loop_left hole))] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[beta; gamma] - ~bef:(item (option (var alpha)) (stack_var beta)) - ~aft:(stack_var gamma) - ~replacement: - [Context_blind (fun () -> M.Instructions.(if_none hole hole))] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma; delta] - ~bef:(item (or_ (var alpha) (var beta)) (stack_var gamma)) - ~aft:(stack_var delta) - ~replacement: - [Context_blind (fun () -> M.Instructions.(if_left hole hole))] - (); - replacement - ~fresh:[] - ~fresh_stack:[alpha; beta] - ~bef:(item bool (stack_var alpha)) - ~aft:(stack_var beta) - ~replacement:[Context_blind (fun () -> M.Instructions.(if_ hole hole))] - (); - replacement - ~fresh_stack:[alpha; beta] - ~bef:(stack_var alpha) - ~aft:(stack_var beta) - ~replacement: - [ - Context_blind - (fun () -> M.seq [M.Instructions.hole; M.Instructions.hole]); - ] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (var alpha) (stack_var gamma)) - ~aft:(item (or_ (var alpha) (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.left)] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (var beta) (stack_var gamma)) - ~aft:(item (or_ (var alpha) (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.right)] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(stack_var gamma) - ~aft:(item (lambda (var alpha) (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.(lambda [hole]))] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(stack_var gamma) - ~aft:(item (lambda (var alpha) (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.(lambda [hole]))] - (); - (* set/map/list*) - replacement - ~fresh:[Cmp alpha] - ~fresh_stack:[gamma] - ~bef: - (item - (var alpha) - (item bool (item (set (var alpha)) (stack_var gamma)))) - ~aft:(item (set (var alpha)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.update_set)] - (); - replacement - ~fresh:[Cmp alpha] - ~fresh_stack:[gamma] - ~bef:(stack_var gamma) - ~aft:(item (set (var alpha)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.empty_set)] - (); - replacement - ~fresh:[Cmp alpha] - ~fresh_stack:[gamma] - ~bef:(item (set (var alpha)) (stack_var gamma)) - ~aft:(stack_var gamma) - ~replacement: - [Context_blind (fun () -> M.Instructions.(iter_set [hole]))] - (); - replacement - ~fresh:[Cmp alpha] - ~fresh_stack:[gamma] - ~bef:(item (var alpha) (item (set (var alpha)) (stack_var gamma))) - ~aft:(item bool (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.mem_set)] - (); - replacement - ~fresh:[Cmp alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef: - (item - (var alpha) - (item - (option (var beta)) - (item (map (var alpha) (var beta)) (stack_var gamma)))) - ~aft:(item (map (var alpha) (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.update_map)] - (); - replacement - ~fresh:[Cmp alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(stack_var gamma) - ~aft:(item (map (var alpha) (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.empty_map)] - (); - replacement - ~fresh:[Cmp alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (map (var alpha) (var beta)) (stack_var gamma)) - ~aft:(stack_var gamma) - ~replacement: - [Context_blind (fun () -> M.Instructions.(iter_map [hole]))] - (); - replacement - ~fresh:[Cmp alpha; Plain beta; Plain delta] - ~fresh_stack:[gamma] - ~bef:(item (map (var alpha) (var beta)) (stack_var gamma)) - ~aft:(item (map (var alpha) (var delta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.(map_map [hole]))] - (); - replacement - ~fresh:[Cmp alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef: - (item - (var alpha) - (item (map (var alpha) (var beta)) (stack_var gamma))) - ~aft:(item bool (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.mem_map)] - (); - replacement - ~fresh:[Cmp alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef: - (item - (var alpha) - (item (map (var alpha) (var beta)) (stack_var gamma))) - ~aft:(item (option (var beta)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.get_map)] - (); - (* lists *) - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[gamma] - ~bef:(stack_var gamma) - ~aft:(item (list (var alpha)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.nil)] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[gamma] - ~bef:(item (var alpha) (item (list (var alpha)) (stack_var gamma))) - ~aft:(item (list (var alpha)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.cons)] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[gamma] - ~bef:(item (list (var alpha)) (stack_var gamma)) - ~aft:(stack_var gamma) - ~replacement: - [Context_blind (fun () -> M.Instructions.(iter_list [hole]))] - (); - replacement - ~fresh:[Plain alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (list (var alpha)) (stack_var gamma)) - ~aft:(item (list (var beta)) (stack_var gamma)) - ~replacement: - [Context_blind (fun () -> M.Instructions.(map_list [hole]))] - (); - (* sizes *) - replacement - ~fresh:[Cmp alpha] - ~fresh_stack:[gamma] - ~bef:(item (set (var alpha)) (stack_var gamma)) - ~aft:(item nat (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.size_set)] - (); - replacement - ~fresh:[Cmp alpha; Plain beta] - ~fresh_stack:[gamma] - ~bef:(item (map (var alpha) (var beta)) (stack_var gamma)) - ~aft:(item nat (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.size_map)] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[gamma] - ~bef:(item (list (var alpha)) (stack_var gamma)) - ~aft:(item nat (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.size_list)] - (); - replacement - ~fresh:[] - ~fresh_stack:[gamma] - ~bef:(item string (stack_var gamma)) - ~aft:(item nat (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.size_string)] - (); - replacement - ~fresh:[] - ~fresh_stack:[gamma] - ~bef:(item bytes (stack_var gamma)) - ~aft:(item nat (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.size_bytes)] - (); - (* pack/unpack *) - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[gamma] - ~bef:(item (var alpha) (stack_var gamma)) - ~aft:(item bytes (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.pack)] - (); - replacement - ~fresh:[Plain alpha] - ~fresh_stack:[gamma] - ~bef:(item bytes (stack_var gamma)) - ~aft:(item (option (var alpha)) (stack_var gamma)) - ~replacement:[Context_blind (fun () -> M.Instructions.unpack)] - (); - ] - - let rules = - [ - replace_any_instr_by_hole; - {rule_patt = match_instr_hole; replacements = instructions}; - ] -end - -module Data_rewrite_leaves - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) = -struct - let hole_patt = - let open Patt in - prim_pred (fun prim -> prim = D_Hole) list_empty - - (* Matches a data hole *) - let match_hole = - let open Patt in - Pattern (focus hole_patt) - - (* Matches an integer literal *) - let match_int = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_Int) list_any)) - - (* Matches a list literal *) - let match_list = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_List) list_any)) - - (* Matches a set literal *) - let match_set = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_Set) list_any)) - - (* Matches a map literal *) - let match_map = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_Map) list_any)) - - (* Matches a timestamp literal *) - let match_timestamp = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_Timestamp) list_any)) - - (* Matches a mutez literal *) - let match_mutez = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_Mutez) list_any)) - - (* Matches a key_hash literal *) - let match_key_hash = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_Key_hash) list_any)) - - let match_int_mutez_timestamp_key_hash_key_or_none = - let open Patt in - Pattern - (focus - (prim_pred - (function - | A_Int | A_Nat | A_Mutez | A_Timestamp | A_Key_hash | A_Key - | D_None -> - true - | _ -> false) - list_any)) - - (* Matches an empty list, set or map literal *) - let match_empty_list_set_or_map = - let open Patt in - Pattern - (focus - (prim_pred - (function A_List | A_Set | A_Map -> true | _ -> false) - (list_cons (seq list_empty) list_empty))) - - (* Matches a pair containing two holes*) - let match_empty_pair = - let open Patt in - Pattern - (focus - (prim_pred - (fun prim -> prim = D_Pair) - (list_cons hole_patt (list_cons hole_patt list_empty)))) - - (* Match a Some, Left or Right containing a hole *) - let match_empty_some_left_or_right = - let open Patt in - Pattern - (focus - (prim_pred - (function D_Left | D_Right | D_Some -> true | _ -> false) - (list_cons hole_patt list_empty))) - - (* Match a None constructor *) - let match_none = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = D_None) list_empty)) - - (* rules *) - - (* fresh type variables *) - let alpha, beta = (-1, -2) - - let replacement ~fresh ~typ ~replacement = - { - type_constraint = Data_cnstrnt {cnstrnt = typ; fresh}; - replacement = [Context_blind (fun () -> replacement)]; - } - - let replacement_gen ~fresh ~typ ~replacement = - { - type_constraint = Data_cnstrnt {cnstrnt = typ; fresh}; - replacement = [Context_blind replacement]; - } - - let fill_in_hole rng_state = - let replace_by_singleton_list = - replacement - ~fresh:[alpha] - ~typ:Type.(list (var alpha)) - ~replacement:Mikhailsky.Data.(list [hole]) - in - let replace_by_empty_pair = - replacement - ~fresh:[alpha; beta] - ~typ:Type.(pair (var alpha) (var beta)) - ~replacement:Mikhailsky.Data.(pair hole hole) - in - let replace_by_singleton_set = - replacement - ~fresh:[alpha] - ~typ:Type.(set (var alpha)) - ~replacement:Mikhailsky.Data.(set [hole]) - in - let replace_by_singleton_map = - replacement - ~fresh:[alpha; beta] - ~typ:Type.(map (var alpha) (var beta)) - ~replacement:Mikhailsky.Data.(map [map_elt hole hole]) - in - let replace_by_random_int rng_state = - let type_constraint = Data_cnstrnt {cnstrnt = Type.int; fresh = []} in - let replacement = - Context_blind - (fun () -> - Mikhailsky.Data.big_integer - (Protocol.Script_int.to_zint (Michelson_base.int rng_state))) - in - {type_constraint; replacement = [replacement]} - in - let replace_by_left = - replacement - ~fresh:[alpha; beta] - ~typ:Type.(or_ (var alpha) (var beta)) - ~replacement:Mikhailsky.Data.(left hole) - in - let replace_by_right = - replacement - ~fresh:[alpha; beta] - ~typ:Type.(or_ (var alpha) (var beta)) - ~replacement:Mikhailsky.Data.(right hole) - in - let replace_by_some = - replacement - ~fresh:[alpha] - ~typ:Type.(option (var alpha)) - ~replacement:Mikhailsky.Data.(some hole) - in - let replace_by_none = - replacement - ~fresh:[alpha] - ~typ:Type.(option (var alpha)) - ~replacement:Mikhailsky.Data.none - in - let replace_by_mutez rng_state = - replacement_gen ~fresh:[] ~typ:Type.mutez ~replacement:(fun () -> - Mikhailsky.Data.mutez (Michelson_base.tez rng_state)) - in - let replace_by_key_hash rng_state = - replacement_gen ~fresh:[] ~typ:Type.key_hash ~replacement:(fun () -> - Mikhailsky.Data.key_hash (Crypto_samplers.pkh rng_state)) - in - let replace_by_key rng_state = - replacement_gen ~fresh:[] ~typ:Type.key ~replacement:(fun () -> - Mikhailsky.Data.key (Crypto_samplers.pk rng_state)) - in - { - rule_patt = match_hole; - replacements = - [ - replace_by_singleton_list; - replace_by_empty_pair; - replace_by_singleton_set; - replace_by_singleton_map; - replace_by_random_int rng_state; - replace_by_left; - replace_by_right; - replace_by_some; - replace_by_none; - replace_by_mutez rng_state; - replace_by_key_hash rng_state; - replace_by_key rng_state; - ]; - } - - let kill_empty_pair = - { - rule_patt = match_empty_pair; - replacements = - [ - { - type_constraint = No_cnstrnt; - replacement = [Context_blind (fun () -> Mikhailsky.Data.hole)]; - }; - ]; - } - - let kill_int_mutez_timestamp_key_hash_none = - { - rule_patt = match_int_mutez_timestamp_key_hash_key_or_none; - replacements = - [ - { - type_constraint = No_cnstrnt; - replacement = [Context_blind (fun () -> Mikhailsky.Data.hole)]; - }; - ]; - } - - let kill_empty_list_set_or_map = - { - rule_patt = match_empty_list_set_or_map; - replacements = - [ - { - type_constraint = No_cnstrnt; - replacement = [Context_blind (fun () -> Mikhailsky.Data.hole)]; - }; - ]; - } - - let kill_empty_some_left_or_right = - { - rule_patt = match_empty_some_left_or_right; - replacements = - [ - { - type_constraint = No_cnstrnt; - replacement = [Context_blind (fun () -> Mikhailsky.Data.hole)]; - }; - ]; - } - - let modify_set = - let grow_ungrow_set = - { - type_constraint = No_cnstrnt; - replacement = - [ - Context_aware - (fun set -> - match set with - | Micheline.Prim (_, A_Set, [Micheline.Seq (_, elements)], _) -> - Mikhailsky.Data.(set (hole :: elements)) - | _ -> assert false); - Context_aware - (fun set -> - match set with - | Micheline.Prim (_, A_Set, [Micheline.Seq (_, elements)], _) - -> ( - match elements with - | [] -> Mikhailsky.Data.hole - | _ :: tl -> Mikhailsky.Data.set tl) - | _ -> assert false); - ]; - } - in - {rule_patt = match_set; replacements = [grow_ungrow_set]} - - let modify_map = - let grow_ungrow_map = - { - type_constraint = No_cnstrnt; - replacement = - [ - Context_aware - (fun set -> - match set with - | Micheline.Prim (_, A_Map, [Micheline.Seq (_, elements)], _) -> - Mikhailsky.Data.(map (map_elt hole hole :: elements)) - | _ -> assert false); - Context_aware - (fun set -> - match set with - | Micheline.Prim (_, A_Map, [Micheline.Seq (_, elements)], _) - -> ( - match elements with - | [] -> Mikhailsky.Data.hole - | _ :: tl -> Mikhailsky.Data.map tl) - | _ -> assert false); - ]; - } - in - {rule_patt = match_map; replacements = [grow_ungrow_map]} - - let modify_list = - let grow_ungrow_list = - { - type_constraint = No_cnstrnt; - replacement = - [ - Context_aware - (fun list -> - match list with - | Micheline.Prim (_, A_List, [Micheline.Seq (_, terms)], _) -> - Mikhailsky.Data.(list (hole :: terms)) - | _ -> assert false); - Context_aware - (fun list -> - match list with - | Micheline.Prim (_, A_List, [Micheline.Seq (_, terms)], _) -> ( - match terms with - | [] -> Mikhailsky.Data.hole - | _ :: tl -> Mikhailsky.Data.list tl) - | _ -> assert false); - ]; - } - in - {rule_patt = match_list; replacements = [grow_ungrow_list]} - - let rules rng_state = - [ - fill_in_hole rng_state; - kill_empty_pair; - kill_empty_list_set_or_map; - kill_empty_some_left_or_right; - kill_int_mutez_timestamp_key_hash_none; - modify_list; - modify_set; - modify_map; - ] -end - -module Data - (Michelson_base : Michelson_samplers_base.S) - (Crypto_samplers : Crypto_samplers.Finite_key_pool_S) = -struct - let match_data_node = - let open Patt in - Pattern - (focus - (prim_pred - (function - | Mikhailsky_prim.D_Elt | D_Hole -> false - | D_False | D_Left | D_None | D_Pair | D_Right | D_Some | D_True - | D_Unit | A_Int | A_Nat | A_Set | A_List | A_Map | A_Key_hash - | A_Mutez | A_Timestamp | A_Key -> - true - | _ -> false) - list_any)) - - let match_list = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = A_List) list_any)) - - let match_data_hole = - let open Patt in - Pattern (focus (prim_pred (fun prim -> prim = D_Hole) list_any)) - - let replace_by_hole = - let replace_by_hole = - { - type_constraint = No_cnstrnt; - replacement = [Context_blind (fun () -> Mikhailsky.Data.hole)]; - } - in - {rule_patt = match_data_node; replacements = [replace_by_hole]} - - let pack_root = - let replacement = - [ - Context_aware (fun node -> Mikhailsky.Data.list [node]); - Context_aware (fun node -> Mikhailsky.Data.(pair node hole)); - Context_aware (fun node -> Mikhailsky.Data.(pair hole node)); - ] - in - let guarded_replacements = [{type_constraint = No_cnstrnt; replacement}] in - {rule_patt = Root; replacements = guarded_replacements} - - module Data_rewrite_leaves_rules = - Data_rewrite_leaves (Michelson_base) (Crypto_samplers) - - let rules rng_state = - [ - Data_rewrite_leaves_rules.fill_in_hole rng_state; - replace_by_hole; - Data_rewrite_leaves_rules.modify_list; - Data_rewrite_leaves_rules.modify_map; - Data_rewrite_leaves_rules.modify_set; - ] -end diff --git a/src/proto_019_PtParisB/lib_benchmark/sampling_helpers.ml b/src/proto_019_PtParisB/lib_benchmark/sampling_helpers.ml deleted file mode 100644 index 8b36fc09e0bf983a58e280dd2eed654cbd151b67..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/sampling_helpers.ml +++ /dev/null @@ -1,41 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* ------------------------------------------------------------------------- *) - -(* TODO: use Statz's def. of sampler once upstreamed. *) -type 'a sampler = Random.State.t -> 'a - -module M = struct - let ( let* ) : 'a sampler -> ('a -> 'b sampler) -> 'b sampler = - fun sampler f rng_state -> - let x = sampler rng_state in - f x rng_state - [@@inline] - - let bind = ( let* ) - - let return x _ = x -end diff --git a/src/proto_019_PtParisB/lib_benchmark/state_space.ml b/src/proto_019_PtParisB/lib_benchmark/state_space.ml deleted file mode 100644 index 60d14970e610336ca07a3b3976deb9883d38d654..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/state_space.ml +++ /dev/null @@ -1,78 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* The state of rewriting is a typed term *) -type t = {typing : Inference.state lazy_t; term : Mikhailsky.node} - -let compare (term1 : t) (term2 : t) = - let tag1 = Mikhailsky.tag term1.term in - let tag2 = Mikhailsky.tag term2.term in - if tag1 < tag2 then -1 else if tag1 > tag2 then 1 else 0 - -let equal (term1 : t) (term2 : t) = - let tag1 = Mikhailsky.tag term1.term in - let tag2 = Mikhailsky.tag term2.term in - tag1 = tag2 - -let hash (t : t) = Mikhailsky.hash t.term - -type node_statistics = { - mutable size : int; - mutable bytes : int; - mutable holes : int; - mutable depth : int; -} - -let pp_statistics fmtr stats = - Format.fprintf - fmtr - "{ size = %d ; bytes = %d ; holes = %d }" - stats.size - stats.bytes - stats.holes - -let rec statistics stats depth (n : Mikhailsky.node) = - stats.size <- stats.size + 1 ; - stats.depth <- max depth stats.depth ; - match n with - | Micheline.Int (_, z) -> stats.bytes <- stats.bytes + (Z.numbits z / 8) - | Micheline.String (_, s) -> stats.bytes <- stats.bytes + String.length s - | Micheline.Bytes (_, b) -> stats.bytes <- stats.bytes + Bytes.length b - | Micheline.Prim (_, Mikhailsky_prim.I_Hole, _, _) - | Micheline.Prim (_, Mikhailsky_prim.D_Hole, _, _) -> - stats.holes <- stats.holes + 1 - | Micheline.Prim (_, _, subterms, _) | Micheline.Seq (_, subterms) -> - List.iter (statistics stats (depth + 1)) subterms - -let statistics {term; _} = - let stats = {size = 0; bytes = 0; holes = 0; depth = 0} in - statistics stats 0 term ; - stats - -let pp fmtr (state : t) = - Format.fprintf fmtr "current term:@." ; - Format.fprintf fmtr "%a@." Mikhailsky.pp state.term ; - Format.fprintf fmtr "stats:@." ; - Format.fprintf fmtr "%a:@." pp_statistics (statistics state) diff --git a/src/proto_019_PtParisB/lib_benchmark/test/dune b/src/proto_019_PtParisB/lib_benchmark/test/dune deleted file mode 100644 index c679d23d8cbf944e6cdbcb9b523520d135630a73..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/test/dune +++ /dev/null @@ -1,39 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(executables - (names - test_sampling_data - test_sampling_code - test_autocompletion - test_distribution) - (libraries - octez-libs.base - octez-libs.micheline - tezos-micheline-rewriting - tezos-protocol-019-PtParisB.protocol - tezos-benchmark - tezos-benchmark-type-inference-019-PtParisB - tezos-benchmark-019-PtParisB - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.error-monad - prbnmcn-stats) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (flags - (:standard) - -open Tezos_micheline - -open Tezos_protocol_019_PtParisB - -open Tezos_benchmark - -open Tezos_benchmark_type_inference_019_PtParisB - -open Tezos_benchmark_019_PtParisB - -open Tezos_019_PtParisB_test_helpers)) - -(rule - (alias runtest_micheline_rewriting_data) - (action (run %{exe:test_sampling_data.exe} 1234))) - -(rule - (alias runtest_micheline_rewriting_code) - (action (run %{exe:test_sampling_code.exe} 1234))) diff --git a/src/proto_019_PtParisB/lib_benchmark/test/test_autocompletion.ml b/src/proto_019_PtParisB/lib_benchmark/test/test_autocompletion.ml deleted file mode 100644 index c2f3e6c742956c823d50e5a08ea4aeff08fe3c19..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/test/test_autocompletion.ml +++ /dev/null @@ -1,120 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let rng_state = Random.State.make [|42; 987897; 54120|] - -module Crypto_samplers = Crypto_samplers.Make_finite_key_pool (struct - let algo = `Default - - let size = 16 -end) - -module Michelson_base_samplers = Michelson_samplers_base.Make (struct - let parameters = - let size = {Base_samplers.min = 4; max = 32} in - { - Michelson_samplers_base.int_size = size; - string_size = size; - bytes_size = size; - } -end) - -module Autocomp = Autocomp.Make (Michelson_base_samplers) (Crypto_samplers) - -let () = Format.eprintf "===============================@.%!" - -let () = Format.eprintf "Testing dummy program generator@.%!" - -let run x = x rng_state (Inference.M.empty ()) - -let invent_term bef aft = - let term, _state = run (Autocomp.invent_term bef aft) in - Mikhailsky.seq term - -let invent_term bef aft = - Format.eprintf - "requested type: %a => %a@." - Type.Stack.pp - bef - Type.Stack.pp - aft ; - let term = invent_term bef aft in - let bef', aft' = Inference.infer term in - Format.eprintf - "generated type: %a => %a@." - Type.Stack.pp - bef' - Type.Stack.pp - aft' ; - Format.eprintf "%a@." Mikhailsky.pp term - -module T = Type - -let bef = T.(item unit (item unit (item unit empty))) - -let aft = T.(item int (item unit (item (pair nat nat) empty))) - -let () = invent_term bef aft - -let () = Format.eprintf "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@.%!" - -let () = invent_term bef aft - -let () = Format.eprintf "===============================@.%!" - -let () = Format.eprintf "Testing completion@.%!" - -let complete term = - Format.eprintf "term: %a@." Mikhailsky.pp term ; - let (bef, aft), state = Inference.infer_with_state term in - Format.eprintf "Inferred type: %a => %a@." Type.Stack.pp bef Type.Stack.pp aft ; - let term, (bef', aft'), _state = - Autocomp.complete_code state term rng_state - in - Format.eprintf "completed: %a@." Mikhailsky.pp term ; - Format.eprintf - "Inferred type after generation: %a => %a@." - Type.Stack.pp - bef' - Type.Stack.pp - aft' ; - let node = - Micheline.strip_locations @@ Mikhailsky_to_michelson.convert term state - in - let bef' = Type_helpers.stack_type_to_michelson_type_list bef' in - Test_helpers.typecheck_by_tezos bef' node - -open Mikhailsky -open Instructions - -let push_int = Instructions.push int_ty (Data.big_integer (Z.of_int 100)) - -let add_ii = Instructions.(add Mikhailsky.int_ty Mikhailsky.int_ty) - -let () = complete (lambda [if_left right (dip (seq [push_int; hole]))]) - -let () = Format.eprintf "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@.%!" - -let () = complete (seq [push_int; add_ii; lambda [dip (seq [dup; dip hole])]]) diff --git a/src/proto_019_PtParisB/lib_benchmark/test/test_distribution.ml b/src/proto_019_PtParisB/lib_benchmark/test/test_distribution.ml deleted file mode 100644 index c067d74dec094a38eb7b6393732c6ba2e74af4f0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/test/test_distribution.ml +++ /dev/null @@ -1,157 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Michelson_samplers -open Protocol -open Internal_for_tests - -let pp_type_name fmtr (t : type_name) = - Format.pp_print_string fmtr - @@ - match t with - | `TString -> "string" - | `TNat -> "nat" - | `TPair -> "pair" - | `TKey -> "key" - | `TLambda -> "lambda" - | `TOr -> "or" - | `TOperation -> "operation" - | `TOption -> "option" - | `TSapling_state -> "sapling_state" - | `TBytes -> "bytes" - | `TChain_id -> "chain_id" - | `TBool -> "bool" - | `TBls12_381_g2 -> "bls12_381_g2" - | `TTicket -> "ticket" - | `TMap -> "map" - | `TAddress -> "address" - | `TContract -> "contract" - | `TBls12_381_fr -> "bls12_381_fr" - | `TSapling_transaction -> "sapling_transaction" - | `TSapling_transaction_deprecated -> "sapling_transaction_deprecated" - | `TTimestamp -> "timestamp" - | `TKey_hash -> "key_hash" - | `TBig_map -> "big_map" - | `TSet -> "set" - | `TBls12_381_g1 -> "bls12_381_g1" - | `TList -> "list" - | `TMutez -> "mutez" - | `TSignature -> "signature" - | `TUnit -> "unit" - | `TInt -> "int" - -module Type_name = struct - type t = type_name - - let equal (x : t) (y : t) = x = y - - let pp = pp_type_name - - let hash = Stdlib.Hashtbl.hash -end - -module Type_name_hashtbl = Stdlib.Hashtbl.Make (Type_name) - -let rec tnames_of_type : - type a ac. (a, ac) Script_typed_ir.ty -> type_name list -> type_name list = - fun t acc -> - match t with - | Script_typed_ir.Unit_t -> `TUnit :: acc - | Script_typed_ir.Int_t -> `TInt :: acc - | Script_typed_ir.Nat_t -> `TNat :: acc - | Script_typed_ir.Signature_t -> `TSignature :: acc - | Script_typed_ir.String_t -> `TString :: acc - | Script_typed_ir.Bytes_t -> `TBytes :: acc - | Script_typed_ir.Mutez_t -> `TMutez :: acc - | Script_typed_ir.Key_hash_t -> `TKey_hash :: acc - | Script_typed_ir.Key_t -> `TKey :: acc - | Script_typed_ir.Timestamp_t -> `TTimestamp :: acc - | Script_typed_ir.Address_t -> `TAddress :: acc - | Script_typed_ir.Bool_t -> `TBool :: acc - | Script_typed_ir.Pair_t (lty, rty, _, _) -> - tnames_of_type lty (tnames_of_type rty (`TPair :: acc)) - | Script_typed_ir.Or_t (lty, rty, _, _) -> - tnames_of_type lty (tnames_of_type rty (`TOr :: acc)) - | Script_typed_ir.Lambda_t (dom, range, _) -> - tnames_of_type dom (tnames_of_type range (`TLambda :: acc)) - | Script_typed_ir.Option_t (ty, _, _) -> tnames_of_type ty (`TOption :: acc) - | Script_typed_ir.List_t (ty, _) -> tnames_of_type ty (`TList :: acc) - | Script_typed_ir.Set_t (ty, _) -> tnames_of_type ty (`TSet :: acc) - | Script_typed_ir.Map_t (kty, vty, _) -> - tnames_of_type kty (tnames_of_type vty (`TMap :: acc)) - | Script_typed_ir.Big_map_t (kty, vty, _) -> - tnames_of_type kty (tnames_of_type vty (`TBig_map :: acc)) - | Script_typed_ir.Contract_t (ty, _) -> tnames_of_type ty (`TContract :: acc) - | Script_typed_ir.Sapling_transaction_t _ -> `TSapling_transaction :: acc - | Script_typed_ir.Sapling_transaction_deprecated_t _ -> - `TSapling_transaction_deprecated :: acc - | Script_typed_ir.Sapling_state_t _ -> `TSapling_state :: acc - | Script_typed_ir.Operation_t -> `TOperation :: acc - | Script_typed_ir.Chain_id_t -> `TChain_id :: acc - | Script_typed_ir.Never_t -> assert false - | Script_typed_ir.Bls12_381_g1_t -> `TBls12_381_g1 :: acc - | Script_typed_ir.Bls12_381_g2_t -> `TBls12_381_g2 :: acc - | Script_typed_ir.Bls12_381_fr_t -> `TBls12_381_fr :: acc - | Script_typed_ir.Ticket_t (ty, _) -> tnames_of_type ty (`TTicket :: acc) - | Script_typed_ir.Chest_key_t -> assert false - | Script_typed_ir.Chest_t -> assert false - -module Crypto_samplers = Crypto_samplers.Make_finite_key_pool (struct - let algo = `Default - - let size = 16 -end) - -module Sampler = - Michelson_samplers.Make - (struct - let parameters = - { - base_parameters = - { - Michelson_samplers_base.int_size = {min = 8; max = 32}; - string_size = {min = 8; max = 128}; - bytes_size = {min = 8; max = 128}; - }; - list_size = {min = 10; max = 1000}; - set_size = {min = 10; max = 1000}; - map_size = {min = 10; max = 1000}; - } - end) - (Crypto_samplers) - -open Stats - -let tnames_dist : type_name list -> type_name Fin.Float.prb = - fun tnames -> - Emp.of_raw_data (Array.of_list tnames) - |> Fin.Float.counts_of_empirical (module Type_name_hashtbl) - |> Fin.Float.normalize - -let rec sample nsamples acc = - let open Sampling_helpers.M in - if nsamples = 0 then return acc - else - let* size = - Base_samplers.(sample_in_interval ~range:{min = 1; max = 1000}) - in - let* (Ex_ty ty) = Sampler.Random_type.m_type ~size () in - let* acc = sample (nsamples - 1) acc in - return (tnames_of_type ty acc) - -let sample nsamples = sample nsamples [] - -let dist nsamples = - let open Sampling_helpers.M in - let* samples = sample nsamples in - return (tnames_dist samples) - -let () = - Format.printf - "stats:@.%a@." - (Fin.Float.pp_fin_mes Type_name.pp) - (Fin.Float.as_measure (dist 500 (Random.State.make [|0x1337; 0x533D|]))) diff --git a/src/proto_019_PtParisB/lib_benchmark/test/test_helpers.ml b/src/proto_019_PtParisB/lib_benchmark/test/test_helpers.ml deleted file mode 100644 index e3d49fe0ec1c0b0b36de641ab48f30ee6e11e398..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/test/test_helpers.ml +++ /dev/null @@ -1,97 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let rng_state = Random.State.make [|42; 987897; 54120|] - -let print_script_expr fmtr (expr : Protocol.Script_repr.expr) = - Micheline_printer.print_expr - fmtr - (Micheline_printer.printable - Protocol.Michelson_v1_primitives.string_of_prim - expr) - -let print_script_expr_list fmtr (exprs : Protocol.Script_repr.expr list) = - Format.pp_print_list - ~pp_sep:(fun fmtr () -> Format.fprintf fmtr " :: ") - print_script_expr - fmtr - exprs - -let typecheck_by_tezos = - let open Lwt_result_wrap_syntax in - let context_init_memory ~rng_state = - let* block, _accounts = - Context.init_n - ~rng_state - ~bootstrap_balances: - [ - 4_000_000_000_000L; - 4_000_000_000_000L; - 4_000_000_000_000L; - 4_000_000_000_000L; - 4_000_000_000_000L; - ] - 5 - () - in - let* csts = Context.get_constants (B block) in - let minimal_block_delay = - Protocol.Alpha_context.Period.to_seconds - csts.parametric.minimal_block_delay - in - let* vs = - Incremental.begin_construction - ~timestamp: - (Tezos_base.Time.Protocol.add - block.header.shell.timestamp - minimal_block_delay) - block - in - let ctxt = Incremental.alpha_ctxt vs in - (* Required for eg Create_contract *) - return - @@ Protocol.Alpha_context.Origination_nonce.init - ctxt - Tezos_crypto.Hashed.Operation_hash.zero - in - fun bef node -> - Stdlib.Result.get_ok - (Lwt_main.run - (let* ctxt = context_init_memory ~rng_state in - let (Protocol.Script_ir_translator.Ex_stack_ty bef) = - Type_helpers.michelson_type_list_to_ex_stack_ty bef ctxt - in - let*@ (_ : - _ Protocol.Script_ir_translator.judgement - * Protocol.Alpha_context.t) = - Protocol.Script_ir_translator.parse_instr - Protocol.Script_tc_context.data - ctxt - ~elab_conf: - (Protocol.Script_ir_translator_config.make ~legacy:false ()) - (Micheline.root node) - bef - in - return_unit)) diff --git a/src/proto_019_PtParisB/lib_benchmark/test/test_sampling_code.ml b/src/proto_019_PtParisB/lib_benchmark/test/test_sampling_code.ml deleted file mode 100644 index e5e8edf378d5c87a4ab171f387d082a782e2e89d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/test/test_sampling_code.ml +++ /dev/null @@ -1,96 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* Input parameter parsing *) - -let verbose = - if Array.length Sys.argv < 2 then ( - Format.eprintf "Executable expects random seed on input\n%!" ; - exit 1) - else - (Random.init (int_of_string Sys.argv.(1)) ; - List.exists (( = ) "-v")) - (Array.to_list Sys.argv) - -(* ------------------------------------------------------------------------- *) -(* Base sampler parameters *) - -let state = Random.State.make [|42; 987897; 54120|] - -module Crypto_samplers = Crypto_samplers.Make_finite_key_pool (struct - let algo = `Default - - let size = 16 -end) - -module Michelson_base_samplers = Michelson_samplers_base.Make (struct - let parameters = - let size = {Base_samplers.min = 4; max = 32} in - { - Michelson_samplers_base.int_size = size; - string_size = size; - bytes_size = size; - } -end) - -(* ------------------------------------------------------------------------- *) -(* MCMC instantiation *) - -module Code = - Michelson_mcmc_samplers.Make_code_sampler - (Michelson_base_samplers) - (Crypto_samplers) - (struct - let rng_state = state - - let target_size = 500 - - let verbosity = if verbose then `Trace else `Silent - end) - -let start = Unix.gettimeofday () - -let generator = Code.generator ~burn_in:(500 * 7) state - -let stop = Unix.gettimeofday () - -let () = Format.printf "Burn in time: %f seconds@." (stop -. start) - -let _ = - for i = 1 to 1000 do - let Michelson_mcmc_samplers.{term = michelson; bef; aft} = - generator state - in - Test_helpers.typecheck_by_tezos bef michelson ; - if verbose then ( - Format.eprintf "result %d/1000:@." i ; - Format.eprintf - "type: %a => %a@." - Test_helpers.print_script_expr_list - bef - Test_helpers.print_script_expr_list - aft ; - Format.eprintf "%a@." Test_helpers.print_script_expr michelson) - done diff --git a/src/proto_019_PtParisB/lib_benchmark/test/test_sampling_data.ml b/src/proto_019_PtParisB/lib_benchmark/test/test_sampling_data.ml deleted file mode 100644 index fb67a046d1ef33ccfd2970c4419e48a293c74273..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/test/test_sampling_data.ml +++ /dev/null @@ -1,85 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* Input parameter parsing *) - -let verbose = - if Array.length Sys.argv < 2 then ( - Format.eprintf "Executable expects random seed on input\n%!" ; - exit 1) - else - (Random.init (int_of_string Sys.argv.(1)) ; - List.exists (( = ) "-v")) - (Array.to_list Sys.argv) - -(* ------------------------------------------------------------------------- *) -(* MCMC instantiation *) - -let state = Random.State.make [|42; 987897; 54120|] - -module Crypto_samplers = Crypto_samplers.Make_finite_key_pool (struct - let algo = `Default - - let size = 16 -end) - -module Michelson_base_samplers = Michelson_samplers_base.Make (struct - let parameters = - let size = {Base_samplers.min = 4; max = 32} in - { - Michelson_samplers_base.int_size = size; - string_size = size; - bytes_size = size; - } -end) - -module Data = - Michelson_mcmc_samplers.Make_data_sampler - (Michelson_base_samplers) - (Crypto_samplers) - (struct - let rng_state = state - - let target_size = 500 - - let verbosity = if verbose then `Trace else `Silent - end) - -let start = Unix.gettimeofday () - -let generator = Data.generator ~burn_in:(200 * 7) state - -let stop = Unix.gettimeofday () - -let () = Format.printf "Burn in time: %f seconds@." (stop -. start) - -let _ = - for _i = 0 to 1000 do - let Michelson_mcmc_samplers.{term = michelson; typ} = generator state in - if verbose then ( - Format.eprintf "result:@." ; - Format.eprintf "type: %a@." Test_helpers.print_script_expr typ ; - Format.eprintf "%a@." Test_helpers.print_script_expr michelson) - done diff --git a/src/proto_019_PtParisB/lib_benchmark/type_helpers.ml b/src/proto_019_PtParisB/lib_benchmark/type_helpers.ml deleted file mode 100644 index 989ee77829014888dcff9f722c83d51cafbb474b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/type_helpers.ml +++ /dev/null @@ -1,88 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Type conversion helpers *) - -open Protocol - -exception Type_helpers_error of string - -let helpers_error msg = raise (Type_helpers_error msg) - -(* Convert a Micheline-encoded type to its internal GADT format. *) -let michelson_type_to_ex_ty (typ : Alpha_context.Script.expr) - (ctxt : Alpha_context.t) = - Script_ir_translator.parse_ty - ctxt - ~legacy:false - ~allow_lazy_storage:false - ~allow_operation:false - ~allow_contract:false - ~allow_ticket:false - (Micheline.root typ) - |> Environment.wrap_tzresult - |> function - | Ok (ex_ty, _ctxt) -> ex_ty - | Error errs -> - let msg = - Format.asprintf - "Michelson_generation.michelson_type_to_ex_ty (%a)" - Error_monad.pp_print_trace - errs - in - helpers_error msg - -(* Convert a list of Micheline-encoded Michelson types to the - internal GADT format. *) -let rec michelson_type_list_to_ex_stack_ty - (stack_ty : Alpha_context.Script.expr list) ctxt = - let open Script_ir_translator in - let open Script_typed_ir in - match stack_ty with - | [] -> Ex_stack_ty Bot_t - | hd :: tl -> ( - let ex_ty = michelson_type_to_ex_ty hd ctxt in - match ex_ty with - | Ex_ty ty -> ( - let ex_stack_ty = michelson_type_list_to_ex_stack_ty tl ctxt in - match ex_stack_ty with - | Ex_stack_ty tl -> Ex_stack_ty (Item_t (ty, tl)))) - -let base_type_to_michelson_type (typ : Type.Base.t) = - let typ = Mikhailsky.map_var (fun _ -> Mikhailsky.unit_ty) typ in - Mikhailsky.to_michelson typ - -(* Convert a Mikhailsky stack to a list of Micheline-encoded types *) -let rec stack_type_to_michelson_type_list (typ : Type.Stack.t) = - let node = typ.node in - match node with - | Type.Stack.Stack_var_t _ -> - helpers_error "stack_type_to_michelson_type_list: bug found" - | Type.Stack.Empty_t -> [] - | Type.Stack.Item_t (ty, tl) -> - base_type_to_michelson_type ty :: stack_type_to_michelson_type_list tl - -let base_type_to_ex_ty ty = - michelson_type_to_ex_ty (base_type_to_michelson_type ty) diff --git a/src/proto_019_PtParisB/lib_benchmark/type_helpers.mli b/src/proto_019_PtParisB/lib_benchmark/type_helpers.mli deleted file mode 100644 index 0cf310d3afcfead9e171aa0b5cb171527a7c07e1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmark/type_helpers.mli +++ /dev/null @@ -1,57 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Type conversion helpers *) - -open Protocol - -(** Exception raised in case an error occurs in this module. *) -exception Type_helpers_error of string - -(** [michelson_type_list_to_ex_stack_ty] converts a list of types in - Micheline form to a stack type in IR form. - - @raise Type_helpers_error if parsing the Michelson type fails. - *) -val michelson_type_list_to_ex_stack_ty : - Alpha_context.Script.expr list -> - Alpha_context.t -> - Script_ir_translator.ex_stack_ty - -(** [michelson_type_to_ex_ty ty ctxt] parses the type [ty]. - - @raise Type_helpers_error if an error arises during parsing. *) -val michelson_type_to_ex_ty : - Alpha_context.Script.expr -> Alpha_context.t -> Script_typed_ir.ex_ty - -(** [stack_type_to_michelson_type_list] converts a Mikhailsky stack type - to a stack represented as a list of Micheline expressions, each - element denoting a type on the stack type. - - @raise Type_helpers_error if the stack type contains variables. *) -val stack_type_to_michelson_type_list : Type.Stack.t -> Script_repr.expr list - -(** [base_type_to_ex_ty] converts a Mikhailsky type to a Michelson one. *) -val base_type_to_ex_ty : Type.Base.t -> Alpha_context.t -> Script_typed_ir.ex_ty diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/apply_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/apply_benchmarks.ml deleted file mode 100644 index 1e35f214a9343e7f391ba1ddb635f40edc126e4f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/apply_benchmarks.ml +++ /dev/null @@ -1,151 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Tezos_benchmark -open Benchmarks_proto - -let ns = Namespace.make Registration.ns "apply" - -let fv s = Free_variable.of_namespace (ns s) - -let initial_balance = 4_000_000_000_000L - -let make_context ~rng_state = - let open Lwt_result_syntax in - let* block, (_, src, dst) = - Context.init3 - ~rng_state - ~bootstrap_balances:[initial_balance; initial_balance; initial_balance] - () - in - let* csts = Context.get_constants (B block) in - let minimal_block_delay = - Protocol.Alpha_context.Period.to_seconds csts.parametric.minimal_block_delay - in - let* vs = - Incremental.begin_construction - ~timestamp: - (Time.Protocol.add block.header.shell.timestamp minimal_block_delay) - block - in - let ctxt = Incremental.alpha_ctxt vs in - let ctxt = - (* Required for eg Create_contract *) - Protocol.Alpha_context.Origination_nonce.init - ctxt - Tezos_crypto.Hashed.Operation_hash.zero - in - return (ctxt, src, dst) - -(* This benchmark is introduced for !7761 and #4788. Its result is not used in the protocol - therefore we do not need to perform it regularly. -*) -module Take_fees_benchmark = struct - let name = ns "Take_fees" - - let info = "Benchmark for take_fees" - - let module_filename = __FILE__ - - let purpose = - Benchmark.Other_purpose "Measuring the time spent for Apply.take_fees" - - let group = Benchmark.Standalone - - let tags = ["apply"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = {batch_length : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {batch_length} -> batch_length) - (fun batch_length -> {batch_length}) - (obj1 (req "batch_length" int31)) - - let workload_to_vector {batch_length} = - Sparse_vec.String.of_list [("batch_length", float_of_int batch_length)] - - let model = - Model.make ~conv:(fun {batch_length} -> (batch_length, ())) Model.affine - - let create_benchmark ~rng_state _conf = - let open Annotated_manager_operation in - let open Alpha_context in - let open Lwt_result_syntax in - let batch_length = - Base_samplers.sample_in_interval ~range:{min = 1; max = 100} rng_state - in - let workload = {batch_length} in - let closure_result = - Lwt_main.run - (let* ctxt, src, dest = make_context ~rng_state in - let* parameters = Client_proto_context.parse_arg_transfer None in - let transaction = - Transaction - { - amount = Tez.one; - parameters; - entrypoint = Entrypoint_repr.default; - destination = dest; - } - in - let pkh = match src with Implicit pkh -> pkh | _ -> assert false in - let manager_info = - Manager_info - { - source = Some pkh; - fee = Limit.known Tez.one; - gas_limit = Limit.known (Gas.Arith.integral_exn (Z.of_int 2000)); - storage_limit = Limit.known (Z.of_int 10); - counter = Some (Manager_counter.Internal_for_tests.of_int 0); - operation = transaction; - } - in - let tr = Annotated_manager_operation manager_info in - let transaction_list = List.repeat batch_length tr in - let (Manager_list annotated_list) = manager_of_list transaction_list in - let* batch = Lwt.return (manager_list_from_annotated annotated_list) in - let closure () = - Protocol.Apply.Internal_for_benchmark.take_fees ctxt batch - in - return closure) - in - let closure = - match closure_result with - | Ok c -> c - | Error _ -> assert false (* TODO better error *) - in - Generator.Plain {workload; closure} -end - -let () = Benchmarks_proto.Registration.register (module Take_fees_benchmark) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/benchmarks_proto.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/benchmarks_proto.ml deleted file mode 100644 index da8f8ad556a5f5ac4f12f37083c7abcd95ce09e7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/benchmarks_proto.ml +++ /dev/null @@ -1,153 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Benchmark_base = Benchmark - -module Benchmark = struct - type group = Benchmark_base.group = Standalone | Group of string | Generic - - type purpose = Benchmark_base.purpose = - | Other_purpose of string - | Generate_code of string - - module type S = sig - val name : Namespace.t - - val info : string - - val module_filename : string - - val group : group - - val tags : string list - - type config - - val default_config : config - - val config_encoding : config Data_encoding.t - - type workload - - val workload_encoding : workload Data_encoding.t - - val workload_to_vector : workload -> Sparse_vec.String.t - - val model : name:Namespace.t -> workload Model.t - - val purpose : Benchmark_base.purpose - - val create_benchmark : - rng_state:Random.State.t -> config -> workload Generator.benchmark - end - - type t = (module S) -end - -module Registration = struct - let ns = Namespace.root - - let register ((module Bench) : Benchmark.t) = - let module B : Benchmark_base.S = struct - include Bench - - let models = - [ - ( (match Bench.group with - | Generic -> "*" - | Group g -> g - | Standalone -> Namespace.(cons Bench.name "model" |> to_string)), - Bench.model ~name ); - ] - - let create_benchmarks ~rng_state ~bench_num config = - List.repeat bench_num (fun () -> - Bench.create_benchmark ~rng_state config) - end in - Registration_helpers.register (module B) - - let register_simple_with_num ((module Bench) : Benchmark_base.simple_with_num) - = - let module B : Benchmark_base.Simple_with_num = struct - include Bench - - let tags = Tags.common :: tags - end in - Registration.register_simple_with_num (module B) - - let register_as_simple_with_num ~group (module B : Benchmark_base.S) = - let modules = - List.map - (fun (model_name, model) : (module Benchmark_base.Simple_with_num) -> - (module struct - include B - - let name = Namespace.cons name model_name - - let group = group - - let model = model - end)) - B.models - in - List.iter (fun x -> register_simple_with_num x) modules -end - -module Model = struct - include Model - - type 'workload t = 'workload Model.t - - let make ?takes_saturation_reprs ~name ~conv model = - make ?takes_saturation_reprs ~conv (model name) - - let unknown_const1 ?const name = - let ns s = Free_variable.of_namespace (Namespace.cons name s) in - let const = Option.value ~default:(ns "const") const in - unknown_const1 ~name ~const - - let affine ?intercept ?coeff name = - let ns s = Free_variable.of_namespace (Namespace.cons name s) in - let intercept = Option.value ~default:(ns "intercept") intercept in - let coeff = Option.value ~default:(ns "coeff") coeff in - affine ~name ~intercept ~coeff - - let logn ?coeff name = - let ns s = Free_variable.of_namespace (Namespace.cons name s) in - let coeff = Option.value ~default:(ns "coeff") coeff in - logn ~name ~coeff - - let nlogn ?intercept ?coeff name = - let ns s = Free_variable.of_namespace (Namespace.cons name s) in - let coeff = Option.value ~default:(ns "coeff") coeff in - let intercept = Option.value ~default:(ns "intercept") intercept in - nlogn ~name ~intercept ~coeff - - let linear ?coeff name = - let ns s = Free_variable.of_namespace (Namespace.cons name s) in - let coeff = Option.value ~default:(ns "coeff") coeff in - linear ~name ~coeff -end diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/benchmarks_proto.mli b/src/proto_019_PtParisB/lib_benchmarks_proto/benchmarks_proto.mli deleted file mode 100644 index e0ed328124ac93507df27f2cf27fb661c82f1bf7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/benchmarks_proto.mli +++ /dev/null @@ -1,131 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Benchmark_base = Benchmark - -module Benchmark : sig - type group = Benchmark_base.group = Standalone | Group of string | Generic - - type purpose = Benchmark_base.purpose = - | Other_purpose of string - | Generate_code of string - - (** The module type of benchmarks, a simplification of {!Benchmark.S} used by - [registration_simple] below. *) - - module type S = sig - (** Name of the benchmark *) - val name : Namespace.t - - (** Description of the benchmark *) - val info : string - - (** Filename of the benchmark module *) - val module_filename : string - - (** Inference group of the benchmark *) - val group : group - - (** Tags of the benchmark *) - val tags : string list - - (** Configuration of the benchmark (eg sampling parameters, paths, etc) *) - type config - - (** Default configuration of the benchmark *) - val default_config : config - - (** Configuration encoding *) - val config_encoding : config Data_encoding.t - - (** Benchmark workload *) - type workload - - (** Workload encoding *) - val workload_encoding : workload Data_encoding.t - - (** Optional conversion to vector, for report generation purposes *) - val workload_to_vector : workload -> Sparse_vec.String.t - - (** Cost model *) - val model : name:Namespace.t -> workload Model.t - - (** Benchmark purpose. - The developer can submit an explanation as to what the benchmark is for when it's not generating code - (i.e. in the case of [Other_purpose]). *) - val purpose : Benchmark_base.purpose - - (** Creates a benchmark, ready to be run. - The benchmarks are thunked to prevent evaluating the workload until - needed. *) - val create_benchmark : - rng_state:Random.State.t -> config -> workload Generator.benchmark - end - - type t = (module S) -end - -module Registration : sig - val ns : Namespace.cons - - (** Registers a benchmark with a model, model names are uniformely generated - *) - val register : Benchmark.t -> unit - - val register_as_simple_with_num : - group:Benchmark.group -> Benchmark_base.t -> unit -end - -module Model : sig - open Model - - type 'workload t = 'workload Model.t - - val make : - ?takes_saturation_reprs:bool -> - name:Namespace.t -> - conv:('a -> 'b) -> - (Namespace.t -> 'b model) -> - 'a t - - val unknown_const1 : ?const:Free_variable.t -> Namespace.t -> unit model - - val affine : - ?intercept:Free_variable.t -> - ?coeff:Free_variable.t -> - Namespace.t -> - (int * unit) model - - val logn : ?coeff:Free_variable.t -> Namespace.t -> (int * unit) model - - val nlogn : - ?intercept:Free_variable.t -> - ?coeff:Free_variable.t -> - Namespace.t -> - (int * unit) model - - val linear : ?coeff:Free_variable.t -> Namespace.t -> (int * unit) model -end diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/cache_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/cache_benchmarks.ml deleted file mode 100644 index 9706b5507681dc0d054e754d658e5d91e7ca1d72..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/cache_benchmarks.ml +++ /dev/null @@ -1,204 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Benchmarks_proto - -let ns = Namespace.make Registration_helpers.ns "cache" - -let fv s = Free_variable.of_namespace (ns s) - -(** {2 [Alpha_context.Cache]-related benchmarks} *) - -let assert_ok_lwt x = - match Lwt_main.run x with Ok x -> x | Error _ -> assert false - -let assert_ok = function Ok x -> x | Error _ -> assert false - -module Admin = Alpha_context.Cache.Admin - -(** We can't construct a dummy cache client from outside the protocol. - We'll have to benchmark the {!Environment_cache} through the interface - exposed by {!Script_cache}. *) -module Cache = Script_cache - -(** {2 Constructing a dummy cached value} *) - -let make_context ~rng_state = - Execution_context.make ~rng_state () |> assert_ok_lwt |> fst - -let throwaway_context = - let rng_state = Random.State.make [|0x1337; 0x533D|] in - make_context ~rng_state - -let dummy_script : Cache.cached_contract = - let str = "{ parameter unit; storage unit; code FAILWITH }" in - let storage = - let parsed, _ = Michelson_v1_parser.parse_expression "Unit" in - Alpha_context.Script.lazy_expr parsed.expanded - in - let code = - let parsed, _ = Michelson_v1_parser.parse_expression ~check:false str in - Alpha_context.Script.lazy_expr parsed.expanded - in - let script = Alpha_context.Script.{code; storage} in - let ex_script, _ = - Script_ir_translator.parse_script - throwaway_context - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets_in_storage:false - ~allow_forged_lazy_storage_id_in_storage:false - script - |> assert_ok_lwt - in - (script, ex_script) - -(** {2 Creating dummy cache value identifiers.} *) - -(** Configuration shared among all cache benchmarks. *) -module Cache_shared_config = struct - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = {cache_cardinal : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {cache_cardinal} -> cache_cardinal) - (fun cache_cardinal -> {cache_cardinal}) - (obj1 (req "cache_cardinal" int31)) - - let tags = [Tags.cache] - - let workload_to_vector {cache_cardinal} = - Sparse_vec.String.of_list [("cache_cardinal", float_of_int cache_cardinal)] -end - -(* We can't produce a Script_cache.identifier without calling [Script_cache.find]. *) -let identifier_of_contract (c : Contract_hash.t) : Cache.identifier = - let _, id, _ = Cache.find throwaway_context c |> assert_ok_lwt in - id - -let contract_of_int i : Contract_hash.t = - Contract_hash.(of_b58check_exn (to_b58check (hash_string [string_of_int i]))) - -let identifier_of_int i = identifier_of_contract @@ contract_of_int i - -(** Prepare a context with a cache of the prescribed cardinality. A key in the domain of - the cache is returned along the context: this key is used to benchmark - (successful) cache accesses. *) -let prepare_context rng_state cache_cardinal = - assert (cache_cardinal > 0) ; - let ctxt = make_context ~rng_state in - let some_key_in_domain = identifier_of_int 0 in - let rec loop i ctxt = - if Compare.Int.(i = cache_cardinal) then ctxt - else - let key = identifier_of_int i in - loop (i + 1) (Cache.update ctxt key dummy_script 1 |> assert_ok) - in - (loop 0 ctxt, some_key_in_domain) - -(** Benchmark {!Script_cache.update}. This almost directly calls {!Environment_cache.update}. - We also use the result of this benchmark to assign a cost to {!Environment_cache.find}, - which alas can't be directly benchmarked from the interface provided by {!Script_cache}. *) -module Cache_update_benchmark : Benchmarks_proto.Benchmark.S = struct - include Cache_shared_config - - let name = ns "CACHE_UPDATE" - - let info = "Benchmarking the time it takes to update a key in the cache" - - let module_filename = __FILE__ - - let group = Benchmark.Group "cache_repr" - - let purpose = Benchmark.Generate_code "cache_repr" - - (** It is expected that cache keys are non-adversarial, - ie do not share a long common prefix. This is the case for [Script_cache], - for which the keys are B58-encoded contract hashes. - - To rephrase: with high probability, comparing two keys in the domain of the cache is - a constant-time operation (two keys will differ after the first few characters). - We therefore do not take into account the length of the key in the model. *) - let model = - let affine_logn name = - let open Tezos_benchmark.Model in - let param_name param = - Free_variable.of_namespace (Namespace.cons name param) - in - let intercept = param_name "intercept" in - let coeff = param_name "coeff" in - let module M = struct - let name = name - - let takes_saturation_reprs = false - - type arg_type = int * unit - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size - - let arity = arity_1 - - let model = - lam ~name:"size" @@ fun size -> - free ~name:intercept + (free ~name:coeff * log2 (int 1 + size)) - end - end in - (module M : Model_impl with type arg_type = int * unit) - in - (* Looking at the plots, it looks like this benchmark underestimates the constant term. - In the interpreter, this would warrant a dedicated benchmark for the intercept. *) - Benchmarks_proto.Model.make - ~conv:(function {cache_cardinal} -> (cache_cardinal, ())) - affine_logn - - let cache_update_benchmark ctxt some_key_in_domain cache_cardinal = - let workload = {cache_cardinal} in - let closure () = - ignore (Cache.update ctxt some_key_in_domain dummy_script 1) - in - Generator.Plain {workload; closure} - - (** At the time of writing (Protocol H) the worst case execution path for - [Cache.update] is to update a key which is already present. *) - let create_benchmark ~rng_state _cfg = - let cache_cardinal = - Base_samplers.sample_in_interval ~range:{min = 1; max = 100_000} rng_state - in - let ctxt, some_key_in_domain = prepare_context rng_state cache_cardinal in - cache_update_benchmark ctxt some_key_in_domain cache_cardinal -end - -let () = Benchmarks_proto.Registration.register (module Cache_update_benchmark) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/carbonated_map_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/carbonated_map_benchmarks.ml deleted file mode 100644 index a3f54995d788a85c3db5f26cd0eab4857231c0b4..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/carbonated_map_benchmarks.ml +++ /dev/null @@ -1,341 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Trili Tech, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Tezos_benchmark -open Benchmarks_proto - -let ns = Namespace.make Registration.ns "carbonated_map" - -let fv s = Free_variable.of_namespace (ns s) - -let group = Benchmark.Group "carbonated_map" - -let make_context ~rng_state = - match Lwt_main.run @@ Execution_context.make ~rng_state () with - | Ok (ctxt, _) -> ctxt - | Error _ -> assert false - -module Config_and_workload = struct - type config = {size : int} - - let config_encoding = - let open Data_encoding in - conv (fun {size} -> size) (fun size -> {size}) (obj1 (req "size" int31)) - - let default_config = {size = 100_000} - - type workload = config - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "carbonated_map" - - let tags = ["carbonated_map"] - - let group = group - - let workload_encoding = config_encoding - - let workload_to_vector {size} = - Sparse_vec.String.of_list [("size", float_of_int size)] -end - -module Alpha_context_gas = struct - type context = Alpha_context.context - - let consume = Alpha_context.Gas.consume -end - -(** - Benchmarks the [fold] functions of [Carbonated_map]. - This benchmark does not depend on the size of the keys or types of elements. -*) -module Fold_benchmark : Benchmark.S = struct - include Config_and_workload - - module Int = struct - include Int - - (** Dummy value *) - let compare_cost _ = Saturation_repr.safe_int 0 - end - - let name = ns "fold" - - let info = "Carbonated map to list" - - let model = - Model.make - ~conv:(fun {size} -> (size, ())) - (Model.affine - ~intercept:(fv "fold_const") - ~coeff:(fv "fold_cost_per_item")) - - let create_benchmark ~rng_state config = - let module M = Carbonated_map.Make (Alpha_context_gas) (Int) in - let _, list = - let sampler rng_state = - let key = Base_samplers.int rng_state ~size:{min = 1; max = 5} in - (* Value should not be important *) - let value = () in - (Z.to_int key, value) - in - Structure_samplers.list - rng_state - ~range:{min = 1; max = config.size} - ~sampler - in - let ctxt = make_context ~rng_state in - let map = - match - M.of_list - ctxt - ~merge_overlap:(fun ctxt _left right -> Ok (right, ctxt)) - list - with - | Ok (map, _) -> map - | _ -> assert false - in - let workload = {size = M.size map} in - let closure () = - ignore @@ M.fold_e ctxt (fun ctxt _ _ _ -> Ok ((), ctxt)) () map - in - Generator.Plain {workload; closure} -end - -(** Module type that consists of a comparable type along with a sampler - function. *) -module type COMPARABLE_SAMPLER = sig - include Compare.COMPARABLE - - val type_name : string - - val sampler : t Base_samplers.sampler -end - -(** - Functor for constructing a benchmark for the cost of comparing values. This - functor can be used to generate [compare_cost] data for a particular - key-type for [Carbonated_map] instances. -*) -module Make (CS : COMPARABLE_SAMPLER) = struct - let compare_var type_name = fv (Printf.sprintf "compare_%s" type_name) - - module Compare = struct - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = config - - let tags = ["carbonated_map"] - - let workload_encoding = config_encoding - - let workload_to_vector () = Sparse_vec.String.of_list [] - - let name = ns @@ Printf.sprintf "compare_%s" CS.type_name - - let info = - Printf.sprintf "Carbonated map compare cost for %s keys" CS.type_name - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "carbonated_map" - - let group = group - - let model = - Model.make - ~conv:(fun () -> ()) - (Model.unknown_const1 ~const:(compare_var CS.type_name)) - - let create_benchmark ~rng_state _conf = - let key = CS.sampler rng_state in - let workload = () in - let closure () = ignore (CS.compare key key) in - Generator.Plain {workload; closure} - end - - module Find = struct - include Config_and_workload - - module M = - Carbonated_map.Make - (Alpha_context_gas) - (struct - include CS - - (** Dummy cost*) - let compare_cost _ = Saturation_repr.safe_int 0 - end) - - let name = ns "find" - - let info = Printf.sprintf "Carbonated find model" - - let ns s = Free_variable.of_namespace (Namespace.cons name s) - - let fv_intercept = ns "intercept" - - (** - Given the cost of comparing keys, the model is used for deducing [intercept] - and [traversal_overhead] from: - - [intercept + (log2 size * compare_cost) + (log2 size * traversal_overhead)] - *) - let find_model name = - let open Tezos_benchmark in - let traversal_overhead = ns "traversal_overhead" in - let intercept = fv_intercept in - let module M = struct - type arg_type = int * unit - - let name = name - - let takes_saturation_reprs = false - - module Def (L : Costlang.S) = struct - type model_type = L.size -> L.size - - let arity = Model.arity_1 - - let model = - let open L in - lam ~name:"size" @@ fun size -> - let compare_cost = - log2 size * free ~name:(compare_var CS.type_name) - in - let traversal_overhead = - log2 size * free ~name:traversal_overhead - in - free ~name:intercept + compare_cost + traversal_overhead - end - end in - (module M : Model.Model_impl with type arg_type = int * unit) - - let model = Model.make ~conv:(fun {size} -> (size, ())) find_model - - let create_benchmark ~rng_state (config : config) = - let _, list = - let sampler rng_state = (CS.sampler rng_state, ()) in - Structure_samplers.list - rng_state - ~range:{min = 1; max = config.size} - ~sampler - in - let ctxt = make_context ~rng_state in - let map = - match - M.of_list ctxt ~merge_overlap:(fun ctxt _ _ -> Ok ((), ctxt)) list - with - | Ok (map, _) -> map - | _ -> assert false - in - (* Pick the min binding from the map to guarantee longest path. *) - let key = - match M.to_list ctxt map with - | Ok (kvs, _) -> ( - match List.hd kvs with Some (k, _) -> k | None -> assert false) - | Error _ -> assert false - in - let workload = {size = M.size map} in - let closure () = ignore @@ M.find ctxt key map in - Generator.Plain {workload; closure} - end - - module Find_intercept = struct - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = config - - let tags = ["carbonated_map"] - - let workload_encoding = config_encoding - - let workload_to_vector () = Sparse_vec.String.of_list [] - - module M = - Carbonated_map.Make - (Alpha_context_gas) - (struct - include CS - - (** Dummy cost*) - let compare_cost _ = Saturation_repr.safe_int 0 - end) - - let name = ns "find_intercept" - - let info = Printf.sprintf "Carbonated find model (intercept case)" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "carbonated_map" - - let group = group - - let model = - Model.make - ~conv:(fun () -> ()) - (Model.unknown_const1 ~const:Find.fv_intercept) - - let create_benchmark ~rng_state (_config : config) = - let ctxt = make_context ~rng_state in - let map = M.empty in - let key = CS.sampler rng_state in - let workload = () in - let closure () = ignore @@ M.find ctxt key map in - Generator.Plain {workload; closure} - end -end - -(** A comparable and a sampler for [int] values. *) -module Int = struct - type t = int - - let compare = Int.compare - - let type_name = "int" - - let sampler rng_state = - Z.to_int @@ Base_samplers.int rng_state ~size:{min = 1; max = 6} -end - -module Benchmarks_int = Make (Int) - -let () = - let open Registration in - register (module Fold_benchmark) ; - register (module Benchmarks_int.Compare) ; - register (module Benchmarks_int.Find) ; - register (module Benchmarks_int.Find_intercept) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/dal_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/dal_benchmarks.ml deleted file mode 100644 index f33a39394d18d4110d3c2c4daa62e06a64edd2bb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/dal_benchmarks.ml +++ /dev/null @@ -1,142 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let ns = Namespace.make Registration_helpers.ns "dal" - -let fv s = Free_variable.of_namespace (ns s) - -module Publish_commitment : Benchmark.S = struct - let name = ns "Dal_publish_commitment" - - let info = "Estimating the cost of publishing a slot header" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "dal" - - let tags = ["dal"] - - type config = Environment.Dal.parameters - - let default_config = - Default_parameters.constants_mainnet.dal.cryptobox_parameters - - let config_encoding = Tezos_crypto_dal.Cryptobox.parameters_encoding - - type workload = unit - - let workload_encoding = Data_encoding.unit - - let workload_to_vector _ = Sparse_vec.String.of_list [] - - let model = - Model.make - ~conv:(fun () -> ()) - (Model.unknown_const1 ~name ~const:(fv "publish_commitment_const")) - - let models = [("dal", model)] - - let operation_generator cryptobox rng_state = - let open Result_syntax in - let open Alpha_context in - let module Crypto = Tezos_crypto_dal.Cryptobox in - let config = Crypto.parameters cryptobox in - let slot_index = Dal.Slot_index.zero in - let slot = Base_samplers.uniform_bytes ~nbytes:config.slot_size rng_state in - let* polynomial = Crypto.polynomial_from_slot cryptobox slot in - let* commitment = Crypto.commit cryptobox polynomial in - let* commitment_proof = Crypto.prove_commitment cryptobox polynomial in - return - @@ Dal.Operations.Publish_commitment. - {slot_index; commitment; commitment_proof} - - let make_bench rng_state (config : config) () : workload Generator.benchmark = - let open Lwt_result_wrap_syntax in - let bench_promise = - let dal = - {Default_parameters.constants_mainnet.dal with feature_enable = true} - in - let* ctxt, _ = Execution_context.make ~dal ~rng_state () in - let* cryptobox = - match Tezos_crypto_dal.Cryptobox.make config with - | Ok cryptobox -> return cryptobox - | Error (`Fail msg) -> - failwith "Dal_benchmarks: failed to initialize cryptobox (%s)" msg - in - (* Memoize the cryptobox in the context *) - let*?@ ctxt, _abstract_cryptobox = Alpha_context.Dal.make ctxt in - let* op = - match operation_generator cryptobox rng_state with - | Ok op -> return op - | Error err -> - let msg = - match err with - | `Slot_wrong_size s -> Format.asprintf "Slot_wrong_size(%s)" s - | `Invalid_degree_strictly_less_than_expected {given; expected} -> - Format.asprintf - "Invalid_degree_strictly_less_than_expected {given=%d, \ - expected=%d}" - given - expected - | `Prover_SRS_not_loaded -> "Prover_SRS_not_loaded" - in - failwith "Dal_benchmarks: failed to generate operation (%s)" msg - in - let workload = () in - let closure () = - match Dal_apply.apply_publish_commitment ctxt op with - | Error errs -> - Format.eprintf "%a@." Environment.Error_monad.pp_trace errs ; - Stdlib.failwith - "Dal_benchmarks: error raised during closure execution@." - | exception _ -> assert false - | Ok _ -> () - in - return (Generator.Plain {workload; closure}) - in - Lwt_main.run bench_promise |> function - | Ok closure -> closure - | Error errs -> - Format.eprintf "%a@." Error_monad.pp_print_trace errs ; - Stdlib.failwith "Dal_benchmarks: failed to run benchmark" - - let create_benchmarks ~rng_state ~bench_num config = - let () = - Lwt_main.run - @@ Tezos_crypto_dal.Cryptobox.init_prover_dal - ~find_srs_files:(Fun.const (Ok ("", ""))) - () - |> function - | Ok () -> () - | Error errs -> - Format.eprintf "%a@." Error_monad.pp_print_trace errs ; - Stdlib.failwith "Dal_benchmarks: failed to initialize" - in - Format.printf "Initialized DAL@." ; - List.repeat bench_num (make_bench rng_state config) -end - -let () = Registration_helpers.register (module Publish_commitment) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/dune b/src/proto_019_PtParisB/lib_benchmarks_proto/dune deleted file mode 100644 index e03de329df4d08db63336482ee6e7a7be9db5bcb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/dune +++ /dev/null @@ -1,44 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name tezos_benchmarks_proto_019_PtParisB) - (public_name tezos-benchmarks-proto-019-PtParisB) - (instrumentation (backend bisect_ppx)) - (libraries - str - octez-libs.stdlib - octez-libs.base - octez-libs.error-monad - tezos-protocol-019-PtParisB.parameters - octez-libs.lazy-containers - tezos-benchmark - tezos-benchmark-019-PtParisB - tezos-benchmark-type-inference-019-PtParisB - tezos-protocol-019-PtParisB.protocol - octez-libs.crypto - octez-shell-libs.shell-benchmarks - octez-libs.micheline - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.tezos-sapling - octez-protocol-019-PtParisB-libs.client - octez-protocol-019-PtParisB-libs.plugin - octez-proto-libs.protocol-environment) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezos_stdlib - -open Tezos_base - -open Tezos_base.TzPervasives - -open Tezos_error_monad - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_lazy_containers - -open Tezos_benchmark - -open Tezos_benchmark_019_PtParisB - -open Tezos_benchmark_type_inference_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_protocol_019_PtParisB.Protocol - -open Tezos_micheline - -open Tezos_019_PtParisB_test_helpers - -open Tezos_client_019_PtParisB - -open Tezos_protocol_plugin_019_PtParisB)) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/encodings_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/encodings_benchmarks.ml deleted file mode 100644 index ddb82d3c41922d030543b9fdae49a4abf5b59c5b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/encodings_benchmarks.ml +++ /dev/null @@ -1,507 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -module Encodings = -Tezos_shell_benchmarks.Encoding_benchmarks_helpers.Make (struct - let file = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" -end) - -module Size = Gas_input_size - -let ns = Namespace.make Registration_helpers.ns "encoding" - -let fv s = Free_variable.of_namespace (ns s) - -module Micheline_common = struct - let make_printable node = - Micheline_printer.printable - Michelson_v1_primitives.string_of_prim - (Micheline.strip_locations node) - - type phase = Trace_production | In_protocol | Global - - type error = - | Bad_micheline of { - benchmark_name : Namespace.t; - micheline : Alpha_context.Script.node; - phase : phase; - } - - exception Micheline_benchmark of error - - let pp_phase fmtr (phase : phase) = - match phase with - | Trace_production -> Format.fprintf fmtr "trace production" - | In_protocol -> Format.fprintf fmtr "in protocol" - | Global -> Format.fprintf fmtr "global" - - let pp_error fmtr = function - | Bad_micheline {benchmark_name; micheline; phase} -> - Format.open_vbox 1 ; - Format.fprintf fmtr "Bad micheline:@," ; - Format.fprintf fmtr "benchmark = %a@," Namespace.pp benchmark_name ; - Format.fprintf - fmtr - "expression = @[%a@]@," - Micheline_printer.print_expr - (make_printable micheline) ; - Format.fprintf fmtr "phase = %a@," pp_phase phase ; - Format.close_box () - - let bad_micheline benchmark_name micheline phase = - raise - (Micheline_benchmark (Bad_micheline {benchmark_name; micheline; phase})) - - type workload = {size : Size.micheline_size; bytes : int} - - let workload_encoding = - let open Data_encoding in - def "encoding_micheline_trace" - @@ conv - (fun {size; bytes} -> (size, bytes)) - (fun (size, bytes) -> {size; bytes}) - (obj2 - (req "micheline_size" Size.micheline_size_encoding) - (req "micheline_bytes" Size.encoding)) - - let workload_to_vector (workload : workload) = - let keys = - [ - ( "encoding_micheline_traversal", - float_of_int (Size.to_int workload.size.traversal) ); - ( "encoding_micheline_int_bytes", - float_of_int (Size.to_int workload.size.int_bytes) ); - ( "encoding_micheline_string_bytes", - float_of_int (Size.to_int workload.size.string_bytes) ); - ("encoding_micheline_bytes", float_of_int (Size.to_int workload.bytes)); - ] - in - Sparse_vec.String.of_list keys - - let tags = [Tags.encoding] - - let model_size name = - Model.make - ~takes_saturation_reprs:true - ~conv:(fun {size = {Size.traversal; int_bytes; string_bytes}; _} -> - (traversal, (int_bytes, (string_bytes, ())))) - (Model.trilinear - ~name:(ns name) - ~coeff1:(fv (Format.asprintf "%s_micheline_traversal" name)) - ~coeff2:(fv (Format.asprintf "%s_micheline_int_bytes" name)) - ~coeff3:(fv (Format.asprintf "%s_micheline_string_bytes" name))) - - let model_bytes name = - Model.make - ~takes_saturation_reprs:true - ~conv:(fun {bytes; _} -> (bytes, ())) - (Model.linear - ~name:(ns (name ^ "_bytes")) - ~coeff:(fv (Format.asprintf "%s_micheline_bytes" name))) - - let models name = - [("micheline", model_size name); ("micheline_bytes", model_bytes name)] -end - -let group = Benchmark.Group "script_repr" - -module Encoding_micheline : Benchmark.S = struct - include Translator_benchmarks.Config - include Micheline_common - - let name = ns "ENCODING_MICHELINE" - - let info = "Benchmarking strip_location + encoding of Micheline to bytes" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_repr" - - let micheline_serialization_trace (micheline_node : Alpha_context.Script.node) - = - match - Data_encoding.Binary.to_string - Protocol.Script_repr.expr_encoding - (Micheline.strip_locations micheline_node) - with - | Error err -> - Format.eprintf - "micheline_serialization_trace: %a@." - Data_encoding.Binary.pp_write_error - err ; - None - | Ok str -> - let micheline_size = Size.of_micheline micheline_node in - Some {size = micheline_size; bytes = Size.string str} - - let encoding_micheline_benchmark (node : Protocol.Script_repr.expr) = - let node = Micheline.root node in - let workload = - match micheline_serialization_trace node with - | None -> Micheline_common.bad_micheline name node Trace_production - | Some trace -> trace - in - let closure () = - try - ignore - (Data_encoding.Binary.to_string_exn - Protocol.Script_repr.expr_encoding - (Micheline.strip_locations node)) - with _ -> Micheline_common.bad_micheline name node In_protocol - in - Generator.Plain {workload; closure} - - let make_bench rng_state cfg () = - let Michelson_mcmc_samplers.{term; typ = _} = - Michelson_generation.make_data_sampler rng_state cfg.generator_config - in - encoding_micheline_benchmark term - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.map - (function - | Michelson_mcmc_samplers.Data {term; typ = _} - | Michelson_mcmc_samplers.Code {term; bef = _; aft = _} -> - fun () -> encoding_micheline_benchmark term) - terms - | None -> List.repeat bench_num (make_bench rng_state config) - - let models = models (Namespace.basename name) -end - -let () = - Benchmarks_proto.Registration.register_as_simple_with_num - ~group - (module Encoding_micheline) - -module Decoding_micheline : Benchmark.S = struct - include Translator_benchmarks.Config - include Micheline_common - - let name = ns "DECODING_MICHELINE" - - let info = "Decoding of bytes to Micheline" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_repr" - - let micheline_deserialization_trace (micheline_str : string) = - match - Data_encoding.Binary.of_string - Protocol.Script_repr.expr_encoding - micheline_str - with - | Error err -> - Format.eprintf - "micheline_deserialization_trace: %a@." - Data_encoding.Binary.pp_read_error - err ; - None - | Ok micheline_node -> - let micheline_size = - Size.of_micheline (Micheline.root micheline_node) - in - Some {size = micheline_size; bytes = Size.string micheline_str} - - let decoding_micheline_benchmark (node : Protocol.Script_repr.expr) = - let encoded = - Data_encoding.Binary.to_string_exn Protocol.Script_repr.expr_encoding node - in - let node = Micheline.root node in - let workload = - match micheline_deserialization_trace encoded with - | None -> bad_micheline name node Trace_production - | Some trace -> trace - in - let closure () = - try - ignore - (Data_encoding.Binary.of_string_exn - Protocol.Script_repr.expr_encoding - encoded) - with _ -> bad_micheline name node In_protocol - in - Generator.Plain {workload; closure} - - let make_bench rng_state cfg () = - let Michelson_mcmc_samplers.{term; typ = _} = - Michelson_generation.make_data_sampler rng_state cfg.generator_config - in - decoding_micheline_benchmark term - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.map - (function - | Michelson_mcmc_samplers.Data {term; typ = _} - | Michelson_mcmc_samplers.Code {term; bef = _; aft = _} -> - fun () -> decoding_micheline_benchmark term) - terms - | None -> List.repeat bench_num (make_bench rng_state config) - - let models = models (Namespace.basename name) -end - -let () = - Benchmarks_proto.Registration.register_as_simple_with_num - ~group - (module Decoding_micheline) - -module Timestamp = struct - open Encodings - - let () = - Registration_helpers.register_simple_with_num - @@ fixed_size_shared - ~name:"TIMESTAMP_READABLE_ENCODING" - ~generator:(fun rng_state -> - let seconds_in_year = 30_000_000 in - let offset = Random.State.int rng_state seconds_in_year in - Script_timestamp.of_zint (Z.of_int (1597764116 + offset))) - ~make_bench:(fun generator () -> - let tstamp_string = generator () in - let closure () = - ignore (Script_timestamp.to_notation tstamp_string) - in - Generator.Plain {workload = (); closure}) - () - - let () = - let b, b_intercept = - nsqrtn_shared_with_intercept - ~name:"TIMESTAMP_READABLE_DECODING" - ~generator:(fun rng_state -> - let offset = - Base_samplers.nat ~size:{min = 1; max = 100_000} rng_state - in - let tstamp = - Script_timestamp.of_zint Z.(of_int 1597764116 + offset) - in - Script_timestamp.to_string tstamp) - ~make_bench:(fun generator -> - let tstamp_string = generator () in - let bytes = String.length tstamp_string in - let closure () = ignore (Script_timestamp.of_string tstamp_string) in - Generator.Plain {workload = {bytes}; closure}) - ~generator_intercept:(fun rng_state -> - let seconds_in_year = 30_000_000 in - let offset = Random.State.int rng_state seconds_in_year in - let tstamp = - Script_timestamp.of_zint (Z.of_int (1597764116 + offset)) - in - Script_timestamp.to_string tstamp) - ~make_bench_intercept:(fun generator -> - let tstamp_string = generator () in - let closure () = ignore (Script_timestamp.of_string tstamp_string) in - Generator.Plain {workload = {bytes = 0}; closure}) - in - Registration_helpers.register_simple b ; - Registration_helpers.register_simple b_intercept -end - -(* when benchmarking, compile bls12-381 without ADX, see - https://gitlab.com/dannywillems/ocaml-bls12-381/-/blob/71d0b4d467fbfaa6452d702fcc408d7a70916a80/README.md#install -*) -module BLS = struct - open Encodings - - let check () = - if not Bls12_381.built_with_blst_portable then ( - Format.eprintf - "BLS must be built without ADX to run the BLS benchmarks. Try \ - compiling again after setting the environment variable BLST_PORTABLE. \ - Aborting.@." ; - Stdlib.failwith "bls_not_built_with_blst_portable") - - let () = - Registration_helpers.register_simple_with_num - @@ make_encode_fixed_size_to_bytes - ~check - ~name:"ENCODING_BLS_FR" - ~to_bytes:Bls12_381.Fr.to_bytes - ~generator:(fun rng_state -> Bls12_381.Fr.random ~state:rng_state ()) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_encode_fixed_size_to_bytes - ~check - ~name:"ENCODING_BLS_G1" - ~to_bytes:Bls12_381.G1.to_bytes - ~generator:(fun rng_state -> Bls12_381.G1.random ~state:rng_state ()) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_encode_fixed_size_to_bytes - ~check - ~name:"ENCODING_BLS_G2" - ~to_bytes:Bls12_381.G2.to_bytes - ~generator:(fun rng_state -> Bls12_381.G2.random ~state:rng_state ()) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_decode_fixed_size_from_bytes - ~check - ~name:"DECODING_BLS_FR" - ~to_bytes:Bls12_381.Fr.to_bytes - ~from_bytes:Bls12_381.Fr.of_bytes_exn - ~generator:(fun rng_state -> Bls12_381.Fr.random ~state:rng_state ()) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_decode_fixed_size_from_bytes - ~check - ~name:"DECODING_BLS_G1" - ~to_bytes:Bls12_381.G1.to_bytes - ~from_bytes:Bls12_381.G1.of_bytes_exn - ~generator:(fun rng_state -> Bls12_381.G1.random ~state:rng_state ()) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_decode_fixed_size_from_bytes - ~check - ~name:"DECODING_BLS_G2" - ~to_bytes:Bls12_381.G2.to_bytes - ~from_bytes:Bls12_381.G2.of_bytes_exn - ~generator:(fun rng_state -> Bls12_381.G2.random ~state:rng_state ()) - () - - let () = - Registration_helpers.register_simple_with_num - @@ fixed_size_shared - ~check - ~name:"BLS_FR_FROM_Z" - ~generator:(fun rng_state -> Bls12_381.Fr.random ~state:rng_state ()) - ~make_bench:(fun generator () -> - let generated = generator () in - let z = Bls12_381.Fr.to_z generated in - let closure () = ignore (Bls12_381.Fr.of_z z) in - Generator.Plain {workload = (); closure}) - () - - let () = - Registration_helpers.register_simple_with_num - @@ fixed_size_shared - ~check - ~name:"BLS_FR_TO_Z" - ~generator:(fun rng_state -> Bls12_381.Fr.random ~state:rng_state ()) - ~make_bench:(fun generator () -> - let generated = generator () in - let closure () = ignore (Bls12_381.Fr.to_z generated) in - Generator.Plain {workload = (); closure}) - () -end - -module Timelock = struct - open Encodings - - let generator rng_state = - let log_time = - Base_samplers.sample_in_interval ~range:{min = 0; max = 20} rng_state - in - let time = Int.shift_left 1 log_time in - let plaintext_size = - Base_samplers.sample_in_interval ~range:{min = 1; max = 10000} rng_state - in - let chest, chest_key = - Tezos_crypto.Timelock.chest_sampler ~plaintext_size ~time ~rng_state - in - ((chest, chest_key), plaintext_size) - - let () = - Registration_helpers.register_simple_with_num - @@ make_encode_variable_size_to_string - ~name:"ENCODING_Chest" - ~to_string: - (Data_encoding.Binary.to_string_exn - Tezos_crypto.Timelock.chest_encoding) - ~generator:(fun rng_state -> - let (chest, _), plaintext_size = generator rng_state in - (chest, {bytes = plaintext_size})) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_encode_fixed_size_to_string - ~name:"ENCODING_Chest_key" - ~to_string: - (Data_encoding.Binary.to_string_exn - Tezos_crypto.Timelock.chest_key_encoding) - ~generator:(fun rng_state -> - let (_, chest_key), _w = generator rng_state in - chest_key) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_decode_variable_size_from_bytes - ~name:"DECODING_Chest" - ~to_bytes: - (Data_encoding.Binary.to_bytes_exn - Tezos_crypto.Timelock.chest_encoding) - ~from_bytes: - (Data_encoding.Binary.of_bytes_exn - Tezos_crypto.Timelock.chest_encoding) - ~generator:(fun rng_state -> - let (chest, _), _ = generator rng_state in - let b = - Data_encoding.Binary.to_bytes_exn - Tezos_crypto.Timelock.chest_encoding - chest - in - (chest, {bytes = Bytes.length b})) - () - - let () = - Registration_helpers.register_simple_with_num - @@ make_decode_fixed_size_from_bytes - ~name:"DECODING_Chest_key" - ~to_bytes: - (Data_encoding.Binary.to_bytes_exn - Tezos_crypto.Timelock.chest_key_encoding) - ~from_bytes: - (Data_encoding.Binary.of_bytes_exn - Tezos_crypto.Timelock.chest_key_encoding) - ~generator:(fun rng_state -> - let (_, chest_key), _w = generator rng_state in - chest_key) - () -end diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/gas_helpers.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/gas_helpers.ml deleted file mode 100644 index bf8bcde60256bf7b86af90fa07d8cddfb812d6b6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/gas_helpers.ml +++ /dev/null @@ -1,36 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -let set_limit ctxt = - Alpha_context.Gas.set_limit - ctxt - (Alpha_context.Gas.Arith.integral_of_int_exn 999_999_999_999) - -let fp_to_z (fp : Alpha_context.Gas.Arith.fp) = - let open Data_encoding in - Binary.to_bytes_exn Alpha_context.Gas.Arith.z_fp_encoding fp - |> Binary.of_bytes_exn z diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/global_constants_storage_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/global_constants_storage_benchmarks.ml deleted file mode 100644 index db3e3b072362561a5485001f995eb87874858a45..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/global_constants_storage_benchmarks.ml +++ /dev/null @@ -1,667 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022-2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* This module includes benchmarks for [Global_constants_storage.expand] - and [Global_constants_storage.Internal_for_tests.expr_to_address_in_context]. - The other main function exported by [Global_constants_storage] is [register]; - however, [register] calls [expand] and does little else, and thus does - not need to be further carbonated. - - In the process of creating these benchmarks, we benchmarked several OCaml - stdlib functions and [Script_expr_hash.of_b58check_opt]. While these cost - models are not used in the protocol, they are kept here to ensure the - assumptions underlying [register] and [expand] don't change out - from under us.*) - -open Tezos_benchmark -open Benchmarks_proto -open Tezos_micheline -open Protocol - -let ns = Namespace.make Registration_helpers.ns "global_constants_storage" - -let fv s = Free_variable.of_namespace (ns s) - -let assert_ok_lwt x = - match Lwt_main.run x with - | Ok x -> x - | Error errs -> - Format.eprintf "%a@." pp_print_trace errs ; - exit 1 - -let assert_ok = function - | Ok x -> x - | Error errs -> - Format.eprintf "%a@." pp_print_trace errs ; - exit 1 - -(** [seq_of_n_constants n hash] generates a Seq filled - with [n] constant primitives containing [hash] *) -let seq_of_n_constants n hash = - let open Micheline in - Seq - ( -1, - Stdlib.List.init n (fun _ -> - Prim (-1, Michelson_v1_primitives.H_constant, [String (-1, hash)], [])) - ) - -(** Computes the b58check hash of a Micheline node as a string. *) -let node_to_hash node = - let expr_bytes = - Micheline.strip_locations node - |> Script_repr.lazy_expr |> Script_repr.force_bytes |> Stdlib.Result.get_ok - in - Script_expr_hash.hash_bytes [expr_bytes] |> Script_expr_hash.to_b58check - -(* An ad-hoc sampler for Micheline values. Boltzmann sampling would do well - here. - - Copied from lib_micheline and modified to use [Michelson_v1_primitives.prim]. *) -module Micheline_sampler = struct - type node = Alpha_context.Script.node - - let prims = - let open Protocol.Michelson_v1_primitives in - [| - K_parameter; - K_storage; - K_code; - D_False; - D_Elt; - D_Left; - D_None; - D_Pair; - D_Right; - D_Some; - D_True; - D_Unit; - I_PACK; - I_UNPACK; - I_BLAKE2B; - I_SHA256; - I_SHA512; - I_ABS; - I_ADD; - I_AMOUNT; - I_AND; - I_BALANCE; - I_CAR; - I_CDR; - I_CHAIN_ID; - I_CHECK_SIGNATURE; - I_COMPARE; - I_CONCAT; - I_CONS; - I_CREATE_ACCOUNT; - I_CREATE_CONTRACT; - I_IMPLICIT_ACCOUNT; - I_DIP; - I_DROP; - I_DUP; - I_EDIV; - I_EMPTY_BIG_MAP; - I_EMPTY_MAP; - I_EMPTY_SET; - I_EQ; - I_EXEC; - I_APPLY; - I_FAILWITH; - I_GE; - I_GET; - I_GET_AND_UPDATE; - I_GT; - I_HASH_KEY; - I_IF; - I_IF_CONS; - I_IF_LEFT; - I_IF_NONE; - I_INT; - I_LAMBDA; - I_LE; - I_LEFT; - I_LEVEL; - I_LOOP; - I_LSL; - I_LSR; - I_LT; - I_MAP; - I_MEM; - I_MUL; - I_NEG; - I_NEQ; - I_NIL; - I_NONE; - I_NOT; - I_NOW; - I_OR; - I_PAIR; - I_UNPAIR; - I_PUSH; - I_RIGHT; - I_SIZE; - I_SOME; - I_SOURCE; - I_SENDER; - I_SELF; - I_SELF_ADDRESS; - I_SLICE; - I_STEPS_TO_QUOTA; - I_SUB; - I_SWAP; - I_TRANSFER_TOKENS; - I_SET_DELEGATE; - I_UNIT; - I_UPDATE; - I_XOR; - I_ITER; - I_LOOP_LEFT; - I_ADDRESS; - I_CONTRACT; - I_ISNAT; - I_CAST; - I_RENAME; - I_SAPLING_EMPTY_STATE; - I_SAPLING_VERIFY_UPDATE; - I_DIG; - I_DUG; - I_NEVER; - I_VOTING_POWER; - I_TOTAL_VOTING_POWER; - I_KECCAK; - I_SHA3; - I_PAIRING_CHECK; - I_TICKET; - I_READ_TICKET; - I_SPLIT_TICKET; - I_JOIN_TICKETS; - T_bool; - T_contract; - T_int; - T_key; - T_key_hash; - T_lambda; - T_list; - T_map; - T_big_map; - T_nat; - T_option; - T_or; - T_pair; - T_set; - T_signature; - T_string; - T_bytes; - T_mutez; - T_timestamp; - T_unit; - T_operation; - T_address; - T_sapling_transaction_deprecated; - T_sapling_state; - T_chain_id; - T_never; - T_bls12_381_g1; - T_bls12_381_g2; - T_bls12_381_fr; - T_ticket - (* We don't want constants in our generator, else the constants - functions might fail because it's ill-formed. *) - (* H_constant; *); - |] - - module Sampler = Micheline_sampler.Make (struct - type prim = Michelson_v1_primitives.prim - - let sample_prim : Michelson_v1_primitives.prim Base_samplers.sampler = - fun rng_state -> - let i = Random.State.int rng_state (Array.length prims) in - prims.(i) - - let sample_annots : string list Base_samplers.sampler = fun _rng_state -> [] - - let sample_string _ = "" - - let sample_bytes _ = Bytes.empty - - let sample_z _ = Z.zero - - let width_function = Micheline_sampler.reasonable_width_function - end) - - let sample = Sampler.sample - - type size = {nodes : int; bytes : int} - - let int z = {nodes = 1; bytes = (Z.numbits z + 7) / 8} - - let string s = {nodes = 1; bytes = String.length s} - - let bytes b = {nodes = 1; bytes = Bytes.length b} - - let node = {nodes = 1; bytes = 0} - - let ( @+ ) x y = {nodes = x.nodes + y.nodes; bytes = x.bytes + y.bytes} - - let micheline_size (n : node) = - let rec micheline_size n acc = - let open Micheline in - match n with - | Int (_, i) -> acc @+ int i - | String (_, s) -> acc @+ string s - | Bytes (_, b) -> acc @+ bytes b - | Seq (_, terms) -> - List.fold_left - (fun acc term -> micheline_size term acc) - (acc @+ node) - terms - | Prim (_, _, terms, _) -> - List.fold_left - (fun acc term -> micheline_size term acc) - (acc @+ node) - terms - in - micheline_size n {nodes = 0; bytes = 0} -end - -(** Cost model and benchmarks for set element addition from the - OCaml stdlib. - - The cost model is not currently used - in the protocol, but we include the benchmarks to validate our - assumptions about functions that use this. *) -module Set_add : Benchmark.S = struct - let name = ns "Set_add" - - let info = - "Benchmarks and cost model for set element addition from OCaml stdlib." - - let module_filename = __FILE__ - - let purpose = - Benchmark.Other_purpose - "Validate assumptions about functions using Set.add." - - let group = Benchmark.Group "global_constants" - - let tags = ["global_constants"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector : workload -> Sparse_vec.String.t = - fun size -> Sparse_vec.String.of_list [("size", float_of_int size)] - - (* As an OCaml set is a balanced binary tree, complexity is O(log n). *) - let model = Model.(make ~conv:(fun size -> (size, ())) logn) - - module Int_set = Set.Make (Int) - - let create_benchmark ~rng_state _config = - let range : Base_samplers.range = {min = 0; max = 10_000} in - let size = Base_samplers.sample_in_interval ~range rng_state in - let set = Stdlib.List.init size Fun.id |> Int_set.of_list in - let closure () = ignore (Int_set.add (size + 1) set) in - Generator.Plain {workload = size; closure} -end - -let () = Registration.register (module Set_add) - -(** Cost model and benchmarks for set elements from the - OCaml stdlib. - - The cost model is not currently used - in the protocol, but we include the benchmarks to validate our - assumptions about functions that use this. *) -module Set_elements : Benchmark.S = struct - let name = ns "Set_elements" - - let info = "Benchmarks and cost model for set elements from OCaml stdlib." - - let module_filename = __FILE__ - - let purpose = - Benchmark.Other_purpose - "Validate assumptions about functions using Set.elements." - - let group = Benchmark.Group "global_constants" - - let tags = ["global_constants"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector : workload -> Sparse_vec.String.t = - fun size -> Sparse_vec.String.of_list [("size", float_of_int size)] - - (* Cost of retrieving all elements from the set is linear with the size - of the set.*) - let model = Model.(make ~conv:(fun size -> (size, ())) linear) - - module Int_set = Set.Make (Int) - - let create_benchmark ~rng_state _config = - let range : Base_samplers.range = {min = 0; max = 10_000} in - let size = Base_samplers.sample_in_interval ~range rng_state in - let set = Stdlib.List.init size (fun x -> x) |> Int_set.of_list in - let closure () = ignore (Int_set.elements set) in - Generator.Plain {workload = size; closure} -end - -let () = Registration.register (module Set_elements) - -(** Cost model and benchmarks for [Script_expr_hash.of_b58_check_opt]. - Under the hood this function uses the [Blake2b] functor, which uses - the HACL* crypto library. - - The cost model is not currently used - in the protocol, but we include the benchmarks to validate our - assumptions about functions that use this. *) -module Script_expr_hash_of_b58check_opt : Benchmark.S = struct - let name = ns "Script_expr_hash_of_b58check_opt" - - let info = "Benchmark for Script_expr_hash.of_b58check_opt" - - let module_filename = __FILE__ - - let purpose = - Benchmark.Other_purpose - "Validate assumptions about functions using \ - Script_expr_hash.of_b58check_opt." - - let group = Benchmark.Group "script_expr_hash" - - let tags = ["global_constants"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = Micheline_sampler.size - - let workload_encoding = - let open Data_encoding in - conv - (fun Micheline_sampler.{nodes; bytes} -> (nodes, bytes)) - (fun (nodes, bytes) -> {nodes; bytes}) - (obj2 (req "nodes" int31) (req "bytes" int31)) - - let workload_to_vector Micheline_sampler.{nodes; bytes} = - Sparse_vec.String.of_list - [("nodes", float_of_int nodes); ("bytes", float_of_int bytes)] - - (* On testing we found that this function is a constant - time operation. However, to test this, we use an affine model. If - our assumption holds, the coefficient should be near zero. *) - let model = - Model.(make ~conv:(fun Micheline_sampler.{nodes; _} -> (nodes, ())) affine) - - (* To create realistic benchmarks, we generate a random Micheline expression, - hash it, then benchmark the cost of validating the hash. *) - let create_benchmark ~rng_state _config = - let open Protocol in - let term = Micheline_sampler.sample rng_state in - let size = Micheline_sampler.micheline_size term in - let expr_encoding = Alpha_context.Script.expr_encoding in - let lazy_expr = - Data_encoding.make_lazy expr_encoding (Micheline.strip_locations term) - in - let expr_bytes = Data_encoding.force_bytes lazy_expr in - let hash = Script_expr_hash.hash_bytes [expr_bytes] in - let hash_str = Script_expr_hash.to_b58check hash in - let closure () = ignore (Script_expr_hash.of_b58check_opt hash_str) in - Generator.Plain {workload = size; closure} -end - -let () = Registration.register (module Script_expr_hash_of_b58check_opt) - -module Global_constants_storage_expr_to_address_in_context : Benchmark.S = -struct - let name = ns "expr_to_address_in_context" - - let info = - "Benchmark for the \ - Global_constants_storage.Internal_for_tests.expr_to_address_in_context \ - function" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "global_constants" - - let group = Benchmark.Group "global_constants" - - let tags = ["global_constants"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector : workload -> Sparse_vec.String.t = - fun size -> Sparse_vec.String.of_list [("size", float_of_int size)] - - (** The cost of a Blake2b hashing function is linear with the size of the input *) - let model = Model.(make ~conv:(fun size -> (size, ())) linear) - - let create_benchmark ~rng_state _config = - let open Micheline in - let expr = Micheline_sampler.sample rng_state |> strip_locations in - let b = - Script_repr.lazy_expr expr |> Script_repr.force_bytes - |> Environment.wrap_tzresult |> assert_ok - in - let size = Bytes.length b in - - let closure () = ignore (Script_expr_hash.hash_bytes [b]) in - Generator.Plain {workload = size; closure} -end - -let () = - Registration.register - (module Global_constants_storage_expr_to_address_in_context) - -(** [Global_constants_storage.expand] traverses a Micheline node, - searching for constants and replacing them with their values - retrieved from storage. - - There are three branches in the iterations of [Global_constants_storage.expand] - can take, each with different costs: - - Branch 1: The first time a particular constant is found, the hash is parsed with - [Script_expr_hash.of_b58check_opt], and its value is retrieved - from storage. This storage call (implemented [Global_constants_storage.get]) - is already carbonated and dominates the cost in this case, so do not need to - benchmark Branch 1 - the benchmarks for storage access are sufficient. - - Branch 2: If the same constant is found a subsequent time, its value is looked up - in a map. On testing we determined that the cost of [Script_expr_hash.of_b58check_opt] - dominates the cost of this branch - the cost of an OCaml map lookup is O(log 2 n), and - n has to be unreasonably large to catch up to the constant time cost of validating the - hash. - - Branch 3: When no constant is found, the cost is merely that of pattern matching - and calling the continuation (similar to that of [Micheline.strip_locations]). - - Because we don't know the full size of node being traversed ahead of time (because they - are retrieved from storage), it is impossible to calculate the full gas cost upfront. - However, each time we find a new expression to traverse, we can calculate its size upfront - and charge the cost of all Branch 3 cases. We can then do an additional charge for Branch 2 - each time we find a constant, and let storage handle charging for Branch 1. - - Below are models for Branch 2 and 3 respectively. - *) -module Global_constants_storage_expand_models = struct - module Global_constants_storage_expand_constant_branch : Benchmark.S = struct - let name = ns "expand_constant_branch" - - let info = - "Benchmark for the constant branch Global_constants_storage.expand \ - function" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "global_constants" - - let group = Benchmark.Group "global_constants" - - let tags = ["global_constants"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector : workload -> Sparse_vec.String.t = - fun constants -> - Sparse_vec.String.of_list - [("number_of_constants", float_of_int constants)] - - (** The cost of Branch 2 is linear to the number of constants in the expression. As - discussed above, the constant time operation [Script_expr_hash.of_b58check_opt] - dominates the cost of each iteration. *) - let model = Model.(make ~conv:(fun size -> (size, ())) linear) - - (* To test Branch 2 as nearly as possible, we generate a Micheline Seq - consisting of the same constant repeated n times. As n increases, - the benchmark more closely approximates the true cost of Branch 2. *) - let create_benchmark ~rng_state _config = - let open Lwt_syntax in - let open Micheline in - let node = Micheline_sampler.sample rng_state in - let size = (Micheline_sampler.micheline_size node).nodes in - let registered_constant = Int (-1, Z.of_int 1) in - let hash = registered_constant |> node_to_hash in - let context, _ = Execution_context.make ~rng_state () |> assert_ok_lwt in - let context, _, _ = - (let+ result = - Alpha_context.Global_constants_storage.register - context - (strip_locations registered_constant) - in - Environment.wrap_tzresult result) - |> assert_ok_lwt - in - let node = seq_of_n_constants size hash in - let closure () = - ignore - (Lwt_main.run - @@ Alpha_context.Global_constants_storage.expand - context - (strip_locations node)) - in - Generator.Plain {workload = size; closure} - end - - let () = - Registration.register - (module Global_constants_storage_expand_constant_branch) - - module Global_constants_storage_expand_no_constant_branch : Benchmark.S = - struct - let name = ns "expand_no_constant_branch" - - let info = - "Benchmark for the Global_constants_storage.expand function on the case \ - without constants" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "global_constants" - - let group = Benchmark.Group "global_constants" - - let tags = ["global_constants"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector : workload -> Sparse_vec.String.t = - fun size -> - Sparse_vec.String.of_list [("number_of_nodes", float_of_int size)] - - (* The cost of Branch 3 is the cost of traversing a single node. It - is therefore linear to the number of nodes being traversed. This is - very similar to [Micheline.strip_locations]. - - On testing I observed that while the linear model was accurate - for small numbers of nodes, after 1000 nodes the cost seems to increase more - than linearly. I think I would have to fine tune the sampler to better test - past this amount; however, I don't think it's necessary - to get large orders - of nodes, you need to use constants, in which case the cost of - [Script_expr_hash.of_b58check_opt] will dominate. A n*log(n) model seems - accurate enough for the range of values tested. - *) - let model = Model.(make ~conv:(fun size -> (size, ())) nlogn) - - (** We benchmark this by generating a random Micheline expression without constants - and calling [expand] on it. This causes the function to spend all its time in - Branch 3. *) - let create_benchmark ~rng_state _config = - let open Micheline in - let node = Micheline_sampler.sample rng_state in - let size = (Micheline_sampler.micheline_size node).nodes in - let context, _ = Execution_context.make ~rng_state () |> assert_ok_lwt in - let expr = strip_locations node in - let closure () = - ignore - (Lwt_main.run - @@ Alpha_context.Global_constants_storage.expand context expr) - in - Generator.Plain {workload = size; closure} - end - - let () = - Registration.register - (module Global_constants_storage_expand_no_constant_branch) -end diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_benchmarks.ml deleted file mode 100644 index ed15db1546c96b226e1d64ccdabbcbd8e4e01de4..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_benchmarks.ml +++ /dev/null @@ -1,4203 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* Copyright (c) 2022 DaiLambda, Inc. *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let ns = Interpreter_model.ns - -let fv = Interpreter_model.fv - -module Timelock_samplers = Tezos_crypto.Timelock -open Protocol - -(* ------------------------------------------------------------------------- *) - -type ex_stack_and_kinstr = - | Ex_stack_and_kinstr : { - stack : 'a * 'b; - stack_type : ('a, 'b) Script_typed_ir.stack_ty; - kinstr : ('a, 'b, 'c, 'd) Script_typed_ir.kinstr; - } - -> ex_stack_and_kinstr - -type ex_stack_and_continuation = - | Ex_stack_and_cont : { - stack : 'a * 'b; - stack_type : ('a, 'b) Script_typed_ir.stack_ty; - cont : ('a, 'b, 'c, 'd) Script_typed_ir.continuation; - } - -> ex_stack_and_continuation - -type ex_value = - | Ex_value : {value : 'a; ty : ('a, _) Script_typed_ir.ty} -> ex_value - -type benchmark_type = Registration_helpers.benchmark_type = Time | Alloc - -let gas_unit_per_allocation_word = 4 - -(* ------------------------------------------------------------------------- *) - -let sf = Printf.sprintf - -(* End of Stack *) -let eos = Script_typed_ir.(EmptyCell, EmptyCell) - -let info_and_name ~benchmark_type ~intercept ?(salt = "") s = - (* TODO: https://gitlab.com/tezos/tezos/-/issues/6072 - Time benchmarks should be qualified with "time" when we switch to time-alloc cost model - *) - let s = s ^ salt in - - let info = - let type_str = - match benchmark_type with - | Time -> "Time benchmark" - | Alloc -> "Allocation benchmark" - in - let intercept_str = if intercept then " (intercept case)" else "" in - sf "%s %s%s" type_str s intercept_str - in - - let benchmark_type = - match benchmark_type with Time -> [] | Alloc -> ["alloc"] - in - let intercept = if intercept then ["intercept"] else [] in - let name = s :: (benchmark_type @ intercept) in - - let rec make_name ns = function - | [] -> assert false - | [s] -> ns s - | s :: ss -> make_name (Namespace.make ns s) ss - in - - (info, make_name ns name) - -module Default_boilerplate = struct - type workload = Interpreter_workload.t - - let workload_encoding = Interpreter_workload.encoding - - let workload_to_vector = Interpreter_workload.trace_to_sparse_vec - - let tags = [Tags.interpreter] -end - -module Default_config = struct - (* Configuration specific to sapling benchmarks *) - type sapling_config = {sapling_txs_file : string; seed : int option} - - (* Configuration specific to benchmarking Dign/Dipn/Dupn/Dropn/Combs *) - type comb_config = {max_depth : int} - - (* Configuration specific to benchmarking ICompare *) - type compare_config = {type_size : Base_samplers.range} - - type config = { - sampler : Michelson_samplers.parameters; - sapling : sapling_config; - comb : comb_config; - compare : compare_config; - } - - let default_config = - let open Michelson_samplers in - let open Michelson_samplers_base in - let sampler = - { - base_parameters = - { - int_size = {min = 8; max = 100_000}; - string_size = {min = 1 lsl 10; max = 1 lsl 17}; - bytes_size = {min = 1 lsl 10; max = 1 lsl 17}; - }; - list_size = {min = 10; max = 1000}; - set_size = {min = 10; max = 1000}; - map_size = {min = 10; max = 1000}; - } - in - { - sampler; - sapling = {sapling_txs_file = {|/no/such/file|}; seed = None}; - comb = {max_depth = 1000}; - compare = {type_size = {min = 1; max = 15}}; - } - - let sapling_config_encoding = - let open Data_encoding in - conv - (fun {sapling_txs_file; seed} -> (sapling_txs_file, seed)) - (fun (sapling_txs_file, seed) -> {sapling_txs_file; seed}) - (obj2 (req "sapling_txs_file" string) (req "seed" (option int31))) - - let comb_config_encoding = - let open Data_encoding in - conv - (fun {max_depth} -> max_depth) - (fun max_depth -> {max_depth}) - (obj1 (req "max_depth" int31)) - - let compare_config_encoding = - let open Data_encoding in - conv - (fun {type_size} -> type_size) - (fun type_size -> {type_size}) - (obj1 (req "type_size" Base_samplers.range_encoding)) - - let config_encoding = - let open Data_encoding in - conv - (fun {sampler; sapling; comb; compare} -> - (sampler, sapling, comb, compare)) - (fun (sampler, sapling, comb, compare) -> - {sampler; sapling; comb; compare}) - (obj4 - (req "sampler" Michelson_samplers.parameters_encoding) - (req "sapling" sapling_config_encoding) - (req "comb" comb_config_encoding) - (req "compare" compare_config_encoding)) -end - -let make_default_samplers ?(algo = `Default) cfg : - (module Crypto_samplers.Finite_key_pool_S) * (module Michelson_samplers.S) = - let module Crypto_samplers = Crypto_samplers.Make_finite_key_pool (struct - let size = 16 - - let algo = algo - end) in - let module Michelson_samplers = - Michelson_samplers.Make - (struct - let parameters = cfg - end) - (Crypto_samplers) - in - ((module Crypto_samplers), (module Michelson_samplers)) - -(* ------------------------------------------------------------------------- *) -(* Helpers for creating benchmarks for the interpreter *) - -(* Register only a model for code generation *) -let register_model_for_code_generation model = - let model = Model.make ~conv:Fun.id model in - Registration.register_model_for_code_generation - "interpreter" - model - ~destination:"michelson_v1_gas" - -let register_time_alloc_codegen_model instr_or_cont_name = - let (Model.Model codegen_model) = - Interpreter_model.make_time_alloc_codegen_model instr_or_cont_name - in - register_model_for_code_generation codegen_model - -let prepare_workload ?amplification ctxt step_constants stack_type kinstr stack - = - let workload = - Interpreter_workload.extract_deps - ctxt - step_constants - stack_type - kinstr - stack - in - match amplification with - | None -> workload - | Some n -> List.repeat n workload |> List.flatten - -let time_benchmark_from_kinstr_and_stack : - ?amplification:int -> - Alpha_context.context -> - Protocol.Script_interpreter.step_constants -> - ex_stack_and_kinstr -> - Interpreter_workload.ir_sized_step list Generator.benchmark = - fun ?amplification ctxt step_constants stack_kinstr -> - let ctxt = Gas_helpers.set_limit ctxt in - let (Ex_stack_and_kinstr {stack = bef_top, bef; stack_type; kinstr}) = - stack_kinstr - in - let workload = - prepare_workload - ?amplification - ctxt - step_constants - stack_type - kinstr - (bef_top, bef) - in - let _gas_counter, outdated_ctxt = - Local_gas_counter.local_gas_counter_and_outdated_context ctxt - in - - let closure = - match amplification with - | None -> - let closure () = - (* Lwt_main.run *) - ignore - (Script_interpreter.Internals.step - (outdated_ctxt, step_constants) - (Local_gas_counter 9_999_999_999) - kinstr - bef_top - bef) - in - closure - | Some amplification_factor -> - assert (amplification_factor > 0) ; - let closure () = - for _i = 1 to amplification_factor do - ignore - (* Lwt_main.run *) - (Script_interpreter.Internals.step - (outdated_ctxt, step_constants) - (Local_gas_counter 9_999_999_999) - kinstr - bef_top - bef) - done - in - closure - in - Generator.Plain {workload; closure} - -let alloc_benchmark_from_kinstr_and_stack : - Alpha_context.context -> - Protocol.Script_interpreter.step_constants -> - ex_stack_and_kinstr -> - Interpreter_workload.ir_sized_step list Generator.benchmark = - fun ctxt step_constants stack_kinstr -> - let ctxt = Gas_helpers.set_limit ctxt in - let (Ex_stack_and_kinstr {stack = bef_top, bef; stack_type; kinstr}) = - stack_kinstr - in - let workload = - prepare_workload ctxt step_constants stack_type kinstr (bef_top, bef) - in - let _gas_counter, outdated_ctxt = - Local_gas_counter.local_gas_counter_and_outdated_context ctxt - in - - let measure () = - let result = - Lwt_main.run - @@ Script_interpreter.Internals.step - (outdated_ctxt, step_constants) - (Local_gas_counter 9_999_999_999) - kinstr - bef_top - bef - in - Result.fold - ~error:(fun _ -> 0.0) - ~ok:(fun (stack_top, stack, _, _) -> - let size_after = - Obj.reachable_words (Obj.repr (stack_top, stack, bef_top, bef)) - in - let size_before = - Obj.reachable_words (Obj.repr (bef_top, bef, bef_top, bef)) - in - - float_of_int ((size_after - size_before) * gas_unit_per_allocation_word)) - result - in - - Generator.Calculated {workload; measure} - -let benchmark_from_kinstr_and_stack : - ?amplification:int -> - benchmark_type -> - Alpha_context.context -> - Protocol.Script_interpreter.step_constants -> - ex_stack_and_kinstr -> - Interpreter_workload.ir_sized_step list Generator.benchmark = - fun ?amplification benchmark_type -> - match benchmark_type with - | Time -> time_benchmark_from_kinstr_and_stack ?amplification - | Alloc -> - (* amplification wouldn't make sense, - because the measurement resolution doesn't matter for the allocation *) - assert (amplification = None) ; - alloc_benchmark_from_kinstr_and_stack - -let time_and_alloc (f : benchmark_type -> unit) = - f Time ; - f Alloc - -let make_benchmark : - ?amplification:int -> - ?intercept:bool -> - ?salt:string -> - ?more_tags:string list -> - ?check:(unit -> unit) -> - name:Interpreter_workload.instruction_name -> - benchmark_type:benchmark_type -> - kinstr_and_stack_sampler: - (Default_config.config -> Random.State.t -> unit -> ex_stack_and_kinstr) -> - unit -> - Benchmark.t = - fun ?amplification - ?(intercept = false) - ?salt - ?(more_tags = []) - ?(check = fun () -> ()) - ~name - ~benchmark_type - ~kinstr_and_stack_sampler - () -> - let module B : Benchmark.S = struct - include Default_config - include Default_boilerplate - - let tags = tags @ more_tags - - let models = - (* [intercept = true] implies there's a benchmark with [intercept = false]. - No need to register the model twice. *) - Interpreter_model.make_model - benchmark_type - ?amplification - (Instr_name name) - - let info, name = - info_and_name - ~benchmark_type - ~intercept - ?salt - (Interpreter_workload.string_of_instruction_name name) - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let benchmark kinstr_and_stack_sampler ctxt step_constants () = - let stack_instr = kinstr_and_stack_sampler () in - benchmark_from_kinstr_and_stack - ?amplification - benchmark_type - ctxt - step_constants - stack_instr - - let create_benchmarks ~rng_state ~bench_num (config : config) = - check () ; - match Lwt_main.run (Execution_context.make ~rng_state ()) with - | Error _errs -> assert false - | Ok (ctxt, step_constants) -> - let kinstr_and_stack_sampler = - kinstr_and_stack_sampler config rng_state - in - List.repeat - bench_num - (benchmark kinstr_and_stack_sampler ctxt step_constants) - end in - (module B : Benchmark.S) - -let make_simple_benchmark : - type bef_top bef res_top res. - ?amplification:int -> - ?intercept:bool -> - ?more_tags:string list -> - ?salt:string -> - ?check:(unit -> unit) -> - name:Interpreter_workload.instruction_name -> - benchmark_type:benchmark_type -> - stack_type:(bef_top, bef) Script_typed_ir.stack_ty -> - kinstr:(bef_top, bef, res_top, res) Script_typed_ir.kinstr -> - unit -> - Benchmark.t = - fun ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~stack_type - ~kinstr - () -> - let kinstr_and_stack_sampler config rng_state = - let _, (module Samplers) = - make_default_samplers config.Default_config.sampler - in - fun () -> - Ex_stack_and_kinstr - { - stack = Samplers.Random_value.stack stack_type rng_state; - stack_type; - kinstr; - } - in - make_benchmark - ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~kinstr_and_stack_sampler - () - -let benchmark ?(benchmark_type = Time) ?amplification ?intercept ?more_tags - ?salt ?check ~name ~kinstr_and_stack_sampler () = - let bench = - make_benchmark - ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~kinstr_and_stack_sampler - () - in - Registration_helpers.register ~benchmark_type bench - -let time_alloc_benchmark ?amplification ?intercept ?more_tags ?salt ?check ~name - ~kinstr_and_stack_sampler () = - benchmark - ~benchmark_type:Time - ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~kinstr_and_stack_sampler - () ; - benchmark - ~benchmark_type:Alloc - ?intercept - ?more_tags - ?salt - ?check - ~name - ~kinstr_and_stack_sampler - () ; - register_time_alloc_codegen_model (Instr_name name) - -let benchmark_with_stack_sampler ?(benchmark_type = Time) ?amplification - ?intercept ?more_tags ?salt ?check ~stack_type ~name ~kinstr ~stack_sampler - () = - let kinstr_and_stack_sampler config rng_state = - let stack_sampler = stack_sampler config rng_state in - fun () -> Ex_stack_and_kinstr {stack = stack_sampler (); stack_type; kinstr} - in - let bench = - make_benchmark - ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~kinstr_and_stack_sampler - () - in - Registration_helpers.register ~benchmark_type bench - -let benchmark_with_fixed_stack ?(benchmark_type = Time) ?amplification - ?intercept ?more_tags ?salt ?check ~name ~stack_type ~stack ~kinstr () = - benchmark_with_stack_sampler - ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~stack_type - ~benchmark_type - ~kinstr - ~stack_sampler:(fun _cfg _rng_state () -> stack) - () - -let time_alloc_benchmark_with_fixed_stack ?amplification ?intercept ?more_tags - ?salt ?check ~name ~stack_type ~stack ~kinstr () = - benchmark_with_fixed_stack - ~benchmark_type:Time - ?amplification - ?intercept - ?more_tags - ?salt - ?check - ~name - ~stack_type - ~stack - ~kinstr - () ; - benchmark_with_fixed_stack - ~benchmark_type:Alloc - ?intercept - ?more_tags - ?salt - ?check - ~name - ~stack_type - ~stack - ~kinstr - () ; - register_time_alloc_codegen_model (Instr_name name) - -let simple_benchmark_with_stack_sampler ?(benchmark_type = Time) ?amplification - ?intercept_stack ?salt ?more_tags ?check ~name ~stack_type ~kinstr - ~stack_sampler () = - benchmark_with_stack_sampler - ?amplification - ~intercept:false - ?salt - ?more_tags - ?check - ~name - ~benchmark_type - ~stack_type - ~kinstr - ~stack_sampler - () ; - Option.iter - (fun stack -> - benchmark_with_fixed_stack - ?amplification - ~intercept:true - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~stack_type - ~stack - ~kinstr - ()) - intercept_stack - -let simple_time_alloc_benchmark_with_stack_sampler ?amplification - ?intercept_stack ?(alloc_intercept = true) ?salt ?more_tags ?check ~name - ~stack_type ~kinstr ~stack_sampler () = - simple_benchmark_with_stack_sampler - ~benchmark_type:Time - ?amplification - ?intercept_stack - ?salt - ?more_tags - ?check - ~name - ~stack_type - ~kinstr - ~stack_sampler - () ; - simple_benchmark_with_stack_sampler - ~benchmark_type:Alloc - ?intercept_stack:(if alloc_intercept then intercept_stack else None) - ?salt - ?more_tags - ?check - ~name - ~stack_type - ~kinstr - ~stack_sampler - () ; - register_time_alloc_codegen_model (Instr_name name) - -let simple_benchmark ?(benchmark_type = Time) ?amplification ?intercept_stack - ?more_tags ?salt ?check ~name ~stack_type ~kinstr () = - let bench = - make_simple_benchmark - ?amplification - ~intercept:false - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~stack_type - ~kinstr - () - in - Registration_helpers.register ~benchmark_type bench ; - Option.iter - (fun stack -> - benchmark_with_fixed_stack - ?amplification - ~intercept:true - ?more_tags - ?salt - ?check - ~name - ~benchmark_type - ~stack_type - ~stack - ~kinstr - ()) - intercept_stack - -let simple_time_alloc_benchmark ?amplification ?intercept_stack ?more_tags ?salt - ?check ~name ~stack_type ~kinstr () = - simple_benchmark - ~benchmark_type:Time - ?amplification - ?intercept_stack - ?more_tags - ?salt - ?check - ~name - ~stack_type - ~kinstr - () ; - simple_benchmark - ~benchmark_type:Alloc - ?intercept_stack - ?more_tags - ?salt - ?check - ~name - ~stack_type - ~kinstr - () ; - register_time_alloc_codegen_model (Instr_name name) - -(* ------------------------------------------------------------------------- *) -(* Helpers for creating benchmarks for [Script_interpreter.next] *) - -let time_benchmark_from_continuation : - ?amplification:int -> - Alpha_context.context -> - Protocol.Script_interpreter.step_constants -> - ex_stack_and_continuation -> - Interpreter_workload.ir_sized_step list Generator.benchmark = - fun ?amplification ctxt step_constants stack_cont -> - let ctxt = Gas_helpers.set_limit ctxt in - match stack_cont with - | Ex_stack_and_cont {stack = bef_top, bef; cont; stack_type} -> - let workload, closure = - match amplification with - | None -> - let workload = - Interpreter_workload.extract_deps_continuation - ctxt - step_constants - stack_type - cont - (bef_top, bef) - in - let _gas_counter, outdated_ctxt = - Local_gas_counter.local_gas_counter_and_outdated_context ctxt - in - let closure () = - ignore - (* Lwt_main.run *) - (Script_interpreter.Internals.next - None - (outdated_ctxt, step_constants) - (Local_gas_counter 9_999_999_999) - stack_type - cont - bef_top - bef) - in - (workload, closure) - | Some amplification_factor -> - assert (amplification_factor > 0) ; - let workload = - Interpreter_workload.extract_deps_continuation - ctxt - step_constants - stack_type - cont - (bef_top, bef) - in - let workload = - List.repeat amplification_factor workload |> List.flatten - in - let _gas_counter, outdated_ctxt = - Local_gas_counter.local_gas_counter_and_outdated_context ctxt - in - let closure () = - for _i = 1 to amplification_factor do - ignore - (* Lwt_main.run *) - (Script_interpreter.Internals.next - None - (outdated_ctxt, step_constants) - (Local_gas_counter 9_999_999_999) - stack_type - cont - bef_top - bef) - done - in - (workload, closure) - in - Generator.Plain {workload; closure} - -let alloc_benchmark_from_continuation : - Alpha_context.context -> - Protocol.Script_interpreter.step_constants -> - ex_stack_and_continuation -> - Interpreter_workload.ir_sized_step list Generator.benchmark = - fun ctxt step_constants stack_cont -> - let ctxt = Gas_helpers.set_limit ctxt in - let (Ex_stack_and_cont {stack = bef_top, bef; cont; stack_type}) = - stack_cont - in - let workload = - Interpreter_workload.extract_deps_continuation - ctxt - step_constants - stack_type - cont - (bef_top, bef) - in - let _gas_counter, outdated_ctxt = - Local_gas_counter.local_gas_counter_and_outdated_context ctxt - in - let measure () = - let result = - Lwt_main.run - @@ Script_interpreter.Internals.next - None - (outdated_ctxt, step_constants) - (Local_gas_counter 9_999_999_999) - stack_type - cont - bef_top - bef - in - Result.fold - ~error:(fun _ -> 0.0) - ~ok:(fun (stack_top, stack, _, _) -> - let size_after = - Obj.reachable_words (Obj.repr (stack_top, stack, bef_top, bef, cont)) - in - let size_before = - Obj.reachable_words (Obj.repr (bef_top, bef, bef_top, bef, cont)) - in - - float_of_int ((size_after - size_before) * gas_unit_per_allocation_word)) - result - in - Generator.Calculated {workload; measure} - -let benchmark_from_continuation : - ?amplification:int -> - benchmark_type -> - Alpha_context.context -> - Protocol.Script_interpreter.step_constants -> - ex_stack_and_continuation -> - Interpreter_workload.ir_sized_step list Generator.benchmark = - fun ?amplification benchmark_type -> - match benchmark_type with - | Time -> time_benchmark_from_continuation ?amplification - | Alloc -> - (* amplification wouldn't make sense, - because the measurement resolution doesn't matter for the allocation *) - assert (amplification = None) ; - alloc_benchmark_from_continuation - -let make_continuation_benchmark : - ?amplification:int -> - ?intercept:bool -> - ?salt:string -> - ?more_tags:string list -> - ?check:(unit -> unit) -> - name:Interpreter_workload.continuation_name -> - benchmark_type:benchmark_type -> - cont_and_stack_sampler: - (Default_config.config -> - Random.State.t -> - unit -> - ex_stack_and_continuation) -> - unit -> - Benchmark.t = - fun ?amplification - ?(intercept = false) - ?salt - ?(more_tags = []) - ?(check = fun () -> ()) - ~name - ~benchmark_type - ~cont_and_stack_sampler - () -> - let module B : Benchmark.S = struct - include Default_config - include Default_boilerplate - - let tags = tags @ more_tags - - let models = - Interpreter_model.make_model - benchmark_type - ?amplification - (Cont_name name) - - let info, name = - info_and_name - ~benchmark_type - ~intercept - ?salt - (Interpreter_workload.string_of_continuation_name name) - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let benchmark cont_and_stack_sampler ctxt step_constants () = - let stack_instr = cont_and_stack_sampler () in - benchmark_from_continuation - ?amplification - benchmark_type - ctxt - step_constants - stack_instr - - let create_benchmarks ~rng_state ~bench_num (config : config) = - check () ; - match Lwt_main.run (Execution_context.make ~rng_state ()) with - | Error _errs -> assert false - | Ok (ctxt, step_constants) -> - let cont_and_stack_sampler = - cont_and_stack_sampler config rng_state - in - List.repeat - bench_num - (benchmark cont_and_stack_sampler ctxt step_constants) - end in - (module B : Benchmark.S) - -let continuation_benchmark ?(benchmark_type = Time) ?amplification ?intercept - ?salt ?more_tags ?check ~name ~cont_and_stack_sampler () = - let bench = - make_continuation_benchmark - ?amplification - ?intercept - ?salt - ?more_tags - ?check - ~name - ~benchmark_type - ~cont_and_stack_sampler - () - in - Registration_helpers.register ~benchmark_type bench - -let continuation_time_alloc_benchmark ?amplification ?intercept ?salt ?more_tags - ?check ~name ~cont_and_stack_sampler () = - continuation_benchmark - ?amplification - ?intercept - ?salt - ?more_tags - ?check - ~name - ~benchmark_type:Time - ~cont_and_stack_sampler - () ; - continuation_benchmark - ?intercept - ?salt - ?more_tags - ?check - ~name - ~benchmark_type:Alloc - ~cont_and_stack_sampler - () ; - register_time_alloc_codegen_model (Cont_name name) - -(* ------------------------------------------------------------------------- *) -(* Sampling helpers *) - -let nat_of_positive_int (i : int) = - let open Script_int in - match is_nat (of_int i) with None -> assert false | Some x -> x - -let adversarial_ints rng_state (cfg : Default_config.config) n = - let _common_prefix, ls = - Base_samplers.Adversarial.integers - ~prefix_size:cfg.sampler.base_parameters.int_size - ~card:n - rng_state - in - List.map Script_int.of_zint ls - -(* ------------------------------------------------------------------------- *) -(* Error helpers *) - -let raise_if_error = function - | Ok x -> x - | Error e -> - Format.eprintf "%a@." (Error_monad.TzTrace.pp_print Error_monad.pp) e ; - Stdlib.failwith "raise_if_error" - -(* ------------------------------------------------------------------------- *) - -(** [Registration_section] contains all interpreter benchmarks. The goal of - a benchmark is to gather enough data to reliably estimate the parameters - of the cost model associated to each instruction. In general, it can - take several distinct benchmarks to properly cover all the execution - paths. - - In particular, for affine cost model, it is often worth estimating the - intercept separately from the size-dependent coefficients. - *) - -module Registration_section = struct - open Script_typed_ir - open Michelson_types - - let sf = Printf.sprintf - - let dummy_loc = 0 - - let halt = IHalt dummy_loc - - let () = - (* KHalt *) - simple_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_IHalt - ~stack_type:(unit @$ bot) - ~kinstr:halt - () - - module Amplification = struct - module Loop : Benchmark.S = struct - let name = ns "amplification_loop" - - let info = "Benchmarking the cost of an empty loop" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let tags = [Tags.interpreter] - - type config = {max_iterations : int} - - let config_encoding = - let open Data_encoding in - conv - (fun {max_iterations} -> max_iterations) - (fun max_iterations -> {max_iterations}) - (obj1 (req "max_iterations" int31)) - - let default_config = {max_iterations = 100000} - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector n = - Sparse_vec.String.of_list [("iterations", float_of_int n)] - - let models = [("interpreter", Interpreter_model.amplification_loop_model)] - - let benchmark rng_state config () = - let workload = Random.State.int rng_state config.max_iterations in - let closure () = - for _i = 1 to workload do - Sys.opaque_identity () - done - in - Generator.Plain {workload; closure} - - let create_benchmarks ~rng_state ~bench_num (config : config) = - List.repeat bench_num (benchmark rng_state config) - end - end - - let () = Registration_helpers.register (module Amplification.Loop) - - module Stack = struct - let () = - (* KDrop ; KHalt *) - simple_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_IDrop - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(IDrop (dummy_loc, halt)) - () - - let () = - (* IDup ; IHalt *) - simple_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_IDup - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(IDup (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_ISwap - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(ISwap (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_IPush - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(IPush (dummy_loc, unit, (), halt)) - () - - let () = - simple_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_IUnit - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(IUnit (dummy_loc, halt)) - () - - (* deep stack manipulation *) - - (* Constructing these instructions is made especially painful by the - fact that they include "stack preservation witnesses", which are not - exposed in Script_ir_translator. - We must go through [Script_ir_translator.parse_instr] to construct - the corresponding terms. *) - type ex_stack = - | Ex_stack : ('a, 'b) Script_typed_ir.stack_ty * ('a * 'b) -> ex_stack - - let rec make_stack (depth : int) = - if depth = 0 then assert false - else if depth = 1 then Ex_stack (unit @$ Script_typed_ir.Bot_t, ((), eos)) - else - let stack = make_stack (depth - 1) in - match stack with - | Ex_stack (stack_ty, stack) -> Ex_stack (unit @$ stack_ty, ((), stack)) - - let parse_instr rng_state node stack = - let open Lwt_result_syntax in - match stack with - | Ex_stack (stack_ty, stack) -> - raise_if_error - (Lwt_main.run - (let* ctxt, _step_constants = - Execution_context.make ~rng_state () - in - let* judgement, _ = - let*! result = - Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf: - (Script_ir_translator_config.make ~legacy:false ()) - node - stack_ty - in - Lwt.return (Environment.wrap_tzresult result) - in - match judgement with - | Script_ir_translator.Typed descr -> - let kinstr = descr.instr.apply (IHalt dummy_loc) in - return - (Ex_stack_and_kinstr - {stack; kinstr; stack_type = descr.bef}) - | Script_ir_translator.Failed _ -> assert false)) - - open Protocol.Michelson_v1_primitives - - (* The size parameter of a deep stack instruction must fit on 10 bits. See - [Script_ir_translator.parse_uint10]. *) - let stack_size = 1023 - - let long_stack = make_stack stack_size - - let sample_depth rng_state = - Base_samplers.( - sample_in_interval rng_state ~range:{min = 0; max = stack_size - 2}) - - let () = - let dig = Micheline.(Prim (0, I_DIG, [Int (0, Z.of_int 0)], [])) in - benchmark - ~amplification:100 - ~intercept:true - ~name:Interpreter_workload.N_IDig - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dig in - parse_instr rng_state node long_stack) - () - - let () = - let dig n = Micheline.(Prim (0, I_DIG, [Int (0, Z.of_int n)], [])) in - time_alloc_benchmark - ~name:Interpreter_workload.N_IDig - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dig (sample_depth rng_state) in - parse_instr rng_state node long_stack) - () - - let () = - let dug = Micheline.(Prim (0, I_DUG, [Int (0, Z.of_int 0)], [])) in - benchmark - ~intercept:true - ~name:Interpreter_workload.N_IDug - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dug in - parse_instr rng_state node long_stack) - () - - let () = - let dug n = Micheline.(Prim (0, I_DUG, [Int (0, Z.of_int n)], [])) in - time_alloc_benchmark - ~name:Interpreter_workload.N_IDug - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dug (sample_depth rng_state) in - parse_instr rng_state node long_stack) - () - - let () = - let nop = Micheline.Seq (0, []) in - let dip = Micheline.(Prim (0, I_DIP, [Int (0, Z.of_int 0); nop], [])) in - benchmark - ~intercept:true - ~name:Interpreter_workload.N_IDipN - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dip in - parse_instr rng_state node long_stack) - () - - let () = - let nop = Micheline.Seq (0, []) in - let dip n = Micheline.(Prim (0, I_DIP, [Int (0, Z.of_int n); nop], [])) in - time_alloc_benchmark - ~name:Interpreter_workload.N_IDipN - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dip (sample_depth rng_state) in - parse_instr rng_state node long_stack) - () - - let () = - let drop = Micheline.(Prim (0, I_DROP, [Int (0, Z.of_int 0)], [])) in - benchmark - ~intercept:true - ~name:Interpreter_workload.N_IDropN - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = drop in - parse_instr rng_state node long_stack) - () - - let () = - let drop n = Micheline.(Prim (0, I_DROP, [Int (0, Z.of_int n)], [])) in - time_alloc_benchmark - ~name:Interpreter_workload.N_IDropN - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = drop (sample_depth rng_state) in - parse_instr rng_state node long_stack) - () - - let () = - let pair n = Micheline.(Prim (0, I_PAIR, [Int (0, Z.of_int n)], [])) in - ( time_and_alloc @@ fun benchmark_type -> - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_IComb - ~kinstr_and_stack_sampler:(fun cfg rng_state () -> - let width = - Base_samplers.( - sample_in_interval - rng_state - ~range:{min = 2; max = cfg.comb.max_depth}) - in - let node = pair width in - parse_instr rng_state node long_stack) - () ) ; - benchmark - ~name:Interpreter_workload.N_IComb - ~intercept:true - ~kinstr_and_stack_sampler:(fun _ rng_state () -> - let node = pair 2 in - parse_instr rng_state node long_stack) - () ; - register_time_alloc_codegen_model - (Instr_name Interpreter_workload.N_IComb) - - let rec make_comb_stack (comb_width : int) (depth : int) acc = - if depth = 0 then - match acc with - | Ex_stack (stack_ty, stack) -> ( - match make_comb comb_width (Ex_value {value = (); ty = unit}) with - | Ex_value {value; ty} -> Ex_stack (ty @$ stack_ty, (value, stack))) - else - match acc with - | Ex_stack (stack_ty, stack) -> - make_comb_stack - comb_width - (depth - 1) - (Ex_stack (unit @$ stack_ty, ((), stack))) - - and make_comb comb_width comb_acc = - if comb_width = 0 then assert false - else if comb_width = 1 then comb_acc - else - match comb_acc with - | Ex_value {value; ty} -> - let (Ty_ex_c ty) = pair unit ty in - make_comb (comb_width - 1) (Ex_value {value = ((), value); ty}) - - let () = - let unpair n = - Micheline.(Prim (0, I_UNPAIR, [Int (0, Z.of_int n)], [])) - in - ( time_and_alloc @@ fun benchmark_type -> - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_IUncomb - ~kinstr_and_stack_sampler:(fun cfg rng_state () -> - let width = - Base_samplers.( - sample_in_interval - rng_state - ~range:{min = 2; max = cfg.comb.max_depth - 2}) - in - let node = unpair width in - let stack = - make_comb_stack width 1 (Ex_stack (unit @$ bot, ((), eos))) - in - parse_instr rng_state node stack) - () ) ; - benchmark - ~name:Interpreter_workload.N_IUncomb - ~intercept:true - ~kinstr_and_stack_sampler:(fun _ rng_state () -> - let width = 2 in - let node = unpair width in - let stack = - make_comb_stack width 1 (Ex_stack (unit @$ bot, ((), eos))) - in - parse_instr rng_state node stack) - () ; - register_time_alloc_codegen_model - (Instr_name Interpreter_workload.N_IUncomb) - - let () = - let comb_get n = Micheline.(Prim (0, I_GET, [Int (0, Z.of_int n)], [])) in - ( time_and_alloc @@ fun benchmark_type -> - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_IComb_get - ~kinstr_and_stack_sampler:(fun cfg rng_state () -> - let width = - Base_samplers.( - sample_in_interval - rng_state - ~range:{min = 2; max = cfg.comb.max_depth - 2}) - in - let index = - Base_samplers.( - sample_in_interval rng_state ~range:{min = 0; max = width}) - in - let node = comb_get index in - let stack = - make_comb_stack width 1 (Ex_stack (unit @$ bot, ((), eos))) - in - parse_instr rng_state node stack) - () ) ; - benchmark - ~name:Interpreter_workload.N_IComb_get - ~intercept:true - ~kinstr_and_stack_sampler:(fun _ rng_state () -> - let node = comb_get 0 in - let stack = make_comb_stack 2 1 (Ex_stack (unit @$ bot, ((), eos))) in - parse_instr rng_state node stack) - () ; - - register_time_alloc_codegen_model - (Instr_name Interpreter_workload.N_IComb_get) - - let () = - let comb_set n = - Micheline.(Prim (0, I_UPDATE, [Int (0, Z.of_int n)], [])) - in - ( time_and_alloc @@ fun benchmark_type -> - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_IComb_set - ~kinstr_and_stack_sampler:(fun cfg rng_state () -> - let width = - Base_samplers.( - sample_in_interval - rng_state - ~range:{min = 2; max = cfg.comb.max_depth - 2}) - in - let index = - Base_samplers.( - sample_in_interval rng_state ~range:{min = 0; max = width}) - in - let node = comb_set index in - let stack = - let (Ex_stack (stack_ty, stack)) = - make_comb_stack width 1 (Ex_stack (unit @$ bot, ((), eos))) - in - Ex_stack (unit @$ stack_ty, ((), stack)) - in - parse_instr rng_state node stack) - () ; - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_IComb_set - ~intercept:true - ~kinstr_and_stack_sampler:(fun _ rng_state () -> - let node = comb_set 0 in - let stack = - let (Ex_stack (stack_ty, stack)) = - make_comb_stack 2 1 (Ex_stack (unit @$ bot, ((), eos))) - in - Ex_stack (unit @$ stack_ty, ((), stack)) - in - parse_instr rng_state node stack) - () ) ; - - register_time_alloc_codegen_model - (Instr_name Interpreter_workload.N_IComb_set) - - let () = - let dup n = Micheline.(Prim (0, I_DUP, [Int (0, Z.of_int n)], [])) in - time_alloc_benchmark - ~name:Interpreter_workload.N_IDupN - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dup (1 + sample_depth rng_state) in - parse_instr rng_state node long_stack) - () ; - time_alloc_benchmark - ~name:Interpreter_workload.N_IDupN - ~intercept:true - ~kinstr_and_stack_sampler:(fun _cfg rng_state () -> - let node = dup 1 in - parse_instr rng_state node long_stack) - () - end - - module Pairs = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICons_pair - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(ICons_pair (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICar - ~stack_type:(cpair unit unit @$ bot) - ~kinstr:(ICar (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICdr - ~stack_type:(cpair unit unit @$ bot) - ~kinstr:(ICdr (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IUnpair - ~stack_type:(cpair unit unit @$ bot) - ~kinstr:(IUnpair (dummy_loc, halt)) - () - end - - module Options = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICons_some - ~stack_type:(unit @$ bot) - ~kinstr:(ICons_some (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICons_none - ~stack_type:(unit @$ bot) - ~kinstr:(ICons_none (dummy_loc, unit, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IIf_none - ~stack_type:(option unit @$ bot) - ~kinstr: - (IIf_none - { - loc = dummy_loc; - branch_if_none = halt; - branch_if_some = IDrop (dummy_loc, halt); - k = halt; - }) - () - - let () = - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_IOpt_map_none - ~stack:(None, ((), eos)) - ~stack_type:(option unit @$ unit @$ bot) - ~kinstr:(IOpt_map {loc = dummy_loc; body = halt; k = halt}) - () - - let () = - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_IOpt_map_some - ~stack:(Some (), ((), eos)) - ~stack_type:(option unit @$ unit @$ bot) - ~kinstr:(IOpt_map {loc = dummy_loc; body = halt; k = halt}) - () - - let () = - let model = - Interpreter_model.Models.max_branching_model - ~case_0:"none_const" - ~case_1:"some_const" - "N_IOpt_map" - in - register_model_for_code_generation model - end - - module Ors = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ILeft - ~stack_type:(unit @$ bot) - ~kinstr:(ICons_left (dummy_loc, unit, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IRight - ~stack_type:(unit @$ bot) - ~kinstr:(ICons_right (dummy_loc, unit, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IIf_left - ~stack_type:(cor unit unit @$ bot) - ~kinstr: - (IIf_left - { - loc = dummy_loc; - branch_if_left = halt; - branch_if_right = halt; - k = halt; - }) - () - end - - module Lists = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICons_list - ~stack_type:(unit @$ list unit @$ bot) - ~kinstr:(ICons_list (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INil - ~stack_type:(unit @$ bot) - ~kinstr:(INil (dummy_loc, unit, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IIf_cons - ~stack_type:(list unit @$ unit @$ bot) - ~kinstr: - (IIf_cons - { - loc = dummy_loc; - branch_if_cons = IDrop (dummy_loc, IDrop (dummy_loc, halt)); - branch_if_nil = halt; - k = halt; - }) - () - - module Mapping = struct - let () = - (* - IList_map -> - IList_enter_body (empty case) -> - IHalt - *) - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_IList_map - ~stack:(Script_list.empty, ((), eos)) - ~stack_type:(list unit @$ unit @$ bot) - ~kinstr:(IList_map (dummy_loc, halt, Some (list unit), halt)) - () - end - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IList_size - ~stack_type:(list unit @$ bot) - ~kinstr:(IList_size (dummy_loc, halt)) - () - - let () = - (* - IList_iter -> - IIter (empty case) -> - IHalt - *) - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_IList_iter - ~stack:(Script_list.empty, ((), eos)) - ~stack_type:(list unit @$ unit @$ bot) - ~kinstr: - (IList_iter (dummy_loc, Some unit, IDrop (dummy_loc, halt), halt)) - () - end - - module Sets = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEmpty_set - ~stack_type:(unit @$ bot) - ~kinstr:(IEmpty_set (dummy_loc, unit, halt)) - () - - let set_iter_code = - ISet_iter (dummy_loc, Some int, IDrop (dummy_loc, halt), halt) - - let () = - (* - ISet_iter -> - (List.rev (set_fold)) -> - { - IIter -> - IDrop -> - ICons -> - ... - } - *) - simple_benchmark - ~name:Interpreter_workload.N_ISet_iter - ~intercept_stack:(Script_set.empty int, ((), eos)) - ~stack_type:(set int @$ unit @$ bot) - ~kinstr:set_iter_code - () ; - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_ISet_iter - ~stack_type:(set int @$ unit @$ bot) - ~kinstr:set_iter_code - () ; - register_time_alloc_codegen_model (Instr_name N_ISet_iter) - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ISet_mem - ~stack_type:(int @$ set int @$ unit @$ bot) - ~kinstr:(ISet_mem (dummy_loc, halt)) - ~intercept_stack:(Script_int.zero, (Script_set.empty int, ((), eos))) - ~alloc_intercept:false - ~stack_sampler:(fun cfg rng_state () -> - assert (cfg.sampler.set_size.min >= 1) ; - let n = - Base_samplers.sample_in_interval - rng_state - ~range:cfg.sampler.set_size - in - let elts = adversarial_ints rng_state cfg n in - let set = - List.fold_left - (fun set elt -> Script_set.update elt true set) - (Script_set.empty int) - elts - in - let elt = - List.nth_opt elts (Random.State.int rng_state n) - |> WithExceptions.Option.get ~loc:__LOC__ - in - (elt, (set, ((), eos)))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ISet_update - ~stack_type:(int @$ bool @$ set int @$ bot) - ~kinstr:(ISet_update (dummy_loc, halt)) - ~intercept_stack:(Script_int.zero, (false, (Script_set.empty int, eos))) - ~stack_sampler:(fun cfg rng_state () -> - assert (cfg.sampler.set_size.min >= 2) ; - let n = - Base_samplers.sample_in_interval - rng_state - ~range:cfg.sampler.set_size - in - let elts = adversarial_ints rng_state cfg (n + 1) in - let out_of_set, in_set = - match elts with [] -> assert false | hd :: tl -> (hd, tl) - in - let set = - List.fold_left - (fun set elt -> Script_set.update elt true set) - (Script_set.empty int) - in_set - in - let stack = - let flip = Random.State.bool rng_state in - if flip then - (* add an element not in the set *) - (out_of_set, (true, (set, eos))) - else - (* remove an element in the set *) - let elt = out_of_set in - let set = Script_set.update elt true set in - (elt, (flip, (set, eos))) - in - stack) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISet_size - ~stack_type:(set unit @$ bot) - ~kinstr:(ISet_size (dummy_loc, halt)) - () - end - - module Maps = struct - let generate_map_and_key_in_map (cfg : Default_config.config) rng_state = - let n = - Base_samplers.sample_in_interval rng_state ~range:cfg.sampler.set_size - in - let keys = adversarial_ints rng_state cfg n in - let map = - List.fold_left - (fun map i -> Script_map.update i (Some ()) map) - (Script_map.empty int) - keys - in - let (module M) = Script_map.get_module map in - let key = - M.OPS.fold (fun k _ -> function None -> Some k | x -> x) M.boxed None - |> WithExceptions.Option.get ~loc:__LOC__ - in - (key, map) - - let generate_map_and_key_not_in_map (cfg : Default_config.config) rng_state - = - (* [adversarial_ints] could return a non-distinct list, - so the returned [key] may be bound in the [map] in a low probability. *) - let n = - Base_samplers.sample_in_interval rng_state ~range:cfg.sampler.set_size - in - let keys = adversarial_ints rng_state cfg n in - let key, keys = - match keys with [] -> assert false | x :: xs -> (x, xs) - in - let map = - List.fold_left - (fun map i -> Script_map.update i (Some ()) map) - (Script_map.empty int) - keys - in - (key, map) - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEmpty_map - ~stack_type:(unit @$ bot) - ~kinstr:(IEmpty_map (dummy_loc, unit, Some unit, halt)) - () - - (* - let map_map_code = - IMap_map - ( dummy_loc, - ICdr (dummy_loc, halt_unitunit), - halt ) - *) - - let map_map_code () = - IMap_map - ( dummy_loc, - Some (map int unit), - IFailwith (dummy_loc, cpair int unit), - halt ) - - let () = - (* - Map_map (nonempty case) -> - (List.rev (map_fold nonempty_map)) -> - KMap_enter_body (nonempty case) -> - fail (early interruption) - *) - simple_benchmark - ~name:Interpreter_workload.N_IMap_map - ~intercept_stack: - (let map = Script_map.empty int in - (map, ((), eos))) - ~stack_type:(map int unit @$ unit @$ bot) - ~kinstr:(map_map_code ()) - () ; - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_IMap_map - ~stack_type:(map int unit @$ unit @$ bot) - ~kinstr:(map_map_code ()) - () ; - register_time_alloc_codegen_model (Instr_name N_IMap_map) - - let kmap_iter_code = - IMap_iter (dummy_loc, Some (cpair int unit), IDrop (dummy_loc, halt), halt) - - let () = - (* - IMap_iter (nonempty case) -> - (List.rev (map_fold (nonempty))) -> - IIter (nonempty case) -> - ... - *) - simple_benchmark - ~name:Interpreter_workload.N_IMap_iter - ~intercept_stack: - (let map = Script_map.empty int in - (map, ((), eos))) - ~stack_type:(map int unit @$ unit @$ bot) - ~kinstr:kmap_iter_code - () ; - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_IMap_iter - ~stack_type:(map int unit @$ unit @$ bot) - ~kinstr:kmap_iter_code - () ; - register_time_alloc_codegen_model (Instr_name N_IMap_iter) - - let () = - (* - IMap_mem -> - (map_mem) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMap_mem - ~stack_type:(int @$ map int unit @$ unit @$ bot) - ~kinstr:(IMap_mem (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_map.empty int in - (Script_int.zero, (map, ((), eos)))) - ~alloc_intercept:false - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_map_and_key_in_map cfg rng_state in - (key, (map, ((), eos)))) - () - - let () = - (* - IMap_get -> - (map_get) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMap_get - ~stack_type:(int @$ map int unit @$ unit @$ bot) - ~kinstr:(IMap_get (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_map.empty int in - (Script_int.zero, (map, ((), eos)))) - ~alloc_intercept:false - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_map_and_key_in_map cfg rng_state in - (key, (map, ((), eos)))) - () - - let () = - (* - IMap_update -> - (map_update) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMap_update - ~stack_type:(int @$ option unit @$ map int unit @$ bot) - ~kinstr:(IMap_update (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_map.empty int in - (Script_int.zero, (None, (map, eos)))) - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_map_and_key_not_in_map cfg rng_state in - (key, (Some (), (map, eos)))) - () - - let () = - (* - IMap_get_and_update -> - (map_update) -> - (map_get) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMap_get_and_update - ~stack_type:(int @$ option unit @$ map int unit @$ bot) - ~kinstr:(IMap_get_and_update (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_map.empty int in - (Script_int.zero, (None, (map, eos)))) - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_map_and_key_not_in_map cfg rng_state in - (key, (Some (), (map, eos)))) - () - - let () = - (* - IMap_size -> - (map_update) -> - (map_get) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMap_size - ~stack_type:(map int unit @$ bot) - ~kinstr:(IMap_size (dummy_loc, halt)) - ~stack_sampler:(fun _cfg _rng_state -> - let map = Script_map.empty int in - fun () -> (map, eos)) - () - end - - module Big_maps = struct - let generate_big_map_and_key_in_map (cfg : Default_config.config) rng_state - = - let open Lwt_result_syntax in - let n = - Base_samplers.sample_in_interval rng_state ~range:cfg.sampler.set_size - in - let keys = adversarial_ints rng_state cfg n in - let key, keys = - match keys with [] -> assert false | hd :: tl -> (hd, tl) - in - let big_map = - raise_if_error - (Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let big_map = Script_big_map.empty int unit_t in - let* big_map, _ = - let*! result = - List.fold_left_es - (fun (bm, ctxt_acc) k -> - Script_big_map.update ctxt_acc k (Some ()) bm) - (big_map, ctxt) - keys - in - Lwt.return (Environment.wrap_tzresult result) - in - return big_map)) - in - (key, big_map) - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEmpty_big_map - ~stack_type:(unit @$ bot) - ~kinstr:(IEmpty_big_map (dummy_loc, unit, unit, halt)) - () - - let () = - (* - IBig_map_mem -> - (update context with gas) - (big_map_mem) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IBig_map_mem - ~stack_type:(int @$ big_map int unit @$ unit @$ bot) - ~kinstr:(IBig_map_mem (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_big_map.empty int unit in - (Script_int.zero, (map, ((), eos)))) - ~alloc_intercept:false - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_big_map_and_key_in_map cfg rng_state in - (key, (map, ((), eos)))) - () - - let () = - (* - IBig_map_get -> - (big_map_get) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IBig_map_get - ~stack_type:(int @$ big_map int unit @$ unit @$ bot) - ~kinstr:(IBig_map_get (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_big_map.empty int unit in - (Script_int.zero, (map, ((), eos)))) - ~alloc_intercept:false - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_big_map_and_key_in_map cfg rng_state in - (key, (map, ((), eos)))) - () - - let () = - (* - IBig_map_update -> - (big_map_update) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IBig_map_update - ~stack_type:(int @$ option unit @$ big_map int unit @$ bot) - ~kinstr:(IBig_map_update (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_big_map.empty int unit in - (Script_int.zero, (None, (map, eos)))) - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_big_map_and_key_in_map cfg rng_state in - (key, (Some (), (map, eos)))) - () - - let () = - (* - IBig_map_get_and_update -> - (big_map_update) -> - (big_map_get) -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IBig_map_get_and_update - ~stack_type:(int @$ option unit @$ big_map int unit @$ bot) - ~kinstr:(IBig_map_get_and_update (dummy_loc, halt)) - ~intercept_stack: - (let map = Script_big_map.empty int unit in - (Script_int.zero, (None, (map, eos)))) - ~stack_sampler:(fun cfg rng_state () -> - let key, map = generate_big_map_and_key_in_map cfg rng_state in - (key, (Some (), (map, eos)))) - () - end - - module Strings = struct - open Script_string - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IConcat_string - ~intercept_stack:(Script_list.empty, eos) - ~stack_type:(list string @$ bot) - ~kinstr:(IConcat_string (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IConcat_string_pair - ~intercept_stack:(empty, (empty, eos)) - ~stack_type:(string @$ string @$ bot) - ~kinstr:(IConcat_string_pair (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ISlice_string - ~stack_type:(nat @$ nat @$ string @$ bot) - ~kinstr:(ISlice_string (dummy_loc, halt)) - ~intercept_stack: - (let z = Script_int.zero_n in - (z, (z, (empty, eos)))) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let string = - Samplers.Random_value.value Script_typed_ir.string_t rng_state - in - let len = nat_of_positive_int (length string) in - (* worst case: offset = 0 *) - (nat_of_positive_int 0, (len, (string, eos)))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IString_size - ~stack_type:(string @$ bot) - ~kinstr:(IString_size (dummy_loc, halt)) - () - end - - module Bytes = struct - (* Copy of [String] modulo renaming string to bytes. *) - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IConcat_bytes - ~intercept_stack:(Script_list.empty, eos) - ~stack_type:(list bytes @$ bot) - ~kinstr:(IConcat_bytes (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IConcat_bytes_pair - ~intercept_stack:(Bytes.empty, (Bytes.empty, eos)) - ~stack_type:(bytes @$ bytes @$ bot) - ~kinstr:(IConcat_bytes_pair (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ISlice_bytes - ~stack_type:(nat @$ nat @$ bytes @$ bot) - ~kinstr:(ISlice_bytes (dummy_loc, halt)) - ~intercept_stack: - (let z = Script_int.zero_n in - (z, (z, (Bytes.empty, eos)))) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let bytes = - Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - let len = nat_of_positive_int (Bytes.length bytes) in - (* worst case: offset = 0 *) - (nat_of_positive_int 0, (len, (bytes, eos)))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IBytes_size - ~stack_type:(bytes @$ bot) - ~kinstr:(IBytes_size (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAnd_bytes - ~intercept_stack:(Bytes.empty, (Bytes.empty, eos)) - ~stack_type:(bytes @$ bytes @$ bot) - ~kinstr:(IAnd_bytes (dummy_loc, halt)) - () - - let stack_sampler_for_or_and_xor_on_bytes cfg rng_state = - let _, (module Samplers) = - make_default_samplers cfg.Default_config.sampler - in - fun () -> - (* We benchmark the worst cases: when the two bytes have - the same length *) - let bytes1 = - Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - let bytes2 = - Bytes.init (Bytes.length bytes1) (fun _ -> - Char.chr (Random.State.int rng_state 256)) - in - (bytes1, (bytes2, eos)) - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IOr_bytes - ~intercept_stack:(Bytes.empty, (Bytes.empty, eos)) - ~stack_type:(bytes @$ bytes @$ bot) - ~kinstr:(IOr_bytes (dummy_loc, halt)) - ~stack_sampler:stack_sampler_for_or_and_xor_on_bytes - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IXor_bytes - ~intercept_stack:(Bytes.empty, (Bytes.empty, eos)) - ~stack_type:(bytes @$ bytes @$ bot) - ~kinstr:(IXor_bytes (dummy_loc, halt)) - ~stack_sampler:stack_sampler_for_or_and_xor_on_bytes - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INot_bytes - ~intercept_stack:(Bytes.empty, eos) - ~stack_type:(bytes @$ bot) - ~kinstr:(INot_bytes (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ILsl_bytes - ~intercept_stack:(Bytes.empty, (Script_int.one_n, eos)) - ~stack_type:(bytes @$ nat @$ bot) - ~kinstr:(ILsl_bytes (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let bytes = - Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - (* Avoid [n mod 8 = 0] which runs faster than the others. *) - let n = - (* 0-63999 without multiples of 8 *) - let n = Random.State.int rng_state 56000 in - (n / 7 * 8) + (n mod 7) + 1 - in - let shift = Script_int.(abs (of_int n)) in - (bytes, (shift, eos))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ILsr_bytes - ~intercept_stack:(Bytes.empty, (Script_int.one_n, eos)) - ~stack_type:(bytes @$ nat @$ bot) - ~kinstr:(ILsr_bytes (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let bytes = - Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - (* No need of samples of shift > bytes * 8 which are equivalent with - the case of shift = bytes * 8 where LSR returns empty bytes immediately *) - (* Avoid [n mod 8 = 0] which runs faster than the others. *) - let n = - let n = - Random.State.int rng_state ((Bytes.length bytes * 7) + 1) - in - (n / 7 * 8) + (n mod 7) + 1 - in - let shift = Script_int.(abs (of_int n)) in - (bytes, (shift, eos))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IBytes_nat - ~stack_type:(nat @$ bot) - ~kinstr:(IBytes_nat (dummy_loc, halt)) - ~intercept_stack:(Script_int.one_n, eos) - (* Avoid the optimized case of 0 *) - ~stack_sampler:(fun cfg rng_state -> - let base_parameters = - {cfg.sampler.base_parameters with int_size = {min = 0; max = 4096}} - in - let sampler = {cfg.sampler with base_parameters} in - let _, (module Samplers) = make_default_samplers sampler in - fun () -> - let nat = - Samplers.Random_value.value Script_typed_ir.nat_t rng_state - in - (nat, eos)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_INat_bytes - ~stack_type:(bytes @$ bot) - ~kinstr:(INat_bytes (dummy_loc, halt)) - ~intercept_stack:(Bytes.empty, eos) - ~stack_sampler:(fun cfg rng_state -> - let base_parameters = - { - cfg.sampler.base_parameters with - bytes_size = {min = 0; max = 4096}; - } - in - let sampler = {cfg.sampler with base_parameters} in - let _, (module Samplers) = make_default_samplers sampler in - fun () -> - let bytes = - Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - (bytes, eos)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IBytes_int - ~stack_type:(int @$ bot) - ~kinstr:(IBytes_int (dummy_loc, halt)) - ~intercept_stack:(Script_int.one, eos) - (* Avoid the optimized case of 0 *) - ~stack_sampler:(fun cfg rng_state -> - let base_parameters = - {cfg.sampler.base_parameters with int_size = {min = 0; max = 4096}} - in - let sampler = {cfg.sampler with base_parameters} in - let _, (module Samplers) = make_default_samplers sampler in - fun () -> - let int = - Samplers.Random_value.value Script_typed_ir.int_t rng_state - in - (int, eos)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IInt_bytes - ~stack_type:(bytes @$ bot) - ~kinstr:(IInt_bytes (dummy_loc, halt)) - ~intercept_stack:(Bytes.empty, eos) - ~stack_sampler:(fun cfg rng_state -> - let base_parameters = - { - cfg.sampler.base_parameters with - bytes_size = {min = 0; max = 4096}; - } - in - let sampler = {cfg.sampler with base_parameters} in - let _, (module Samplers) = make_default_samplers sampler in - fun () -> - let bytes = - Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - (bytes, eos)) - () - end - - module Timestamps = struct - let zero_timestamp = Script_timestamp.of_zint Z.zero - - let zero_int = Script_int.zero - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAdd_seconds_to_timestamp - ~intercept_stack:(zero_int, (zero_timestamp, eos)) - ~stack_type:(int @$ timestamp @$ bot) - ~kinstr:(IAdd_seconds_to_timestamp (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAdd_timestamp_to_seconds - ~intercept_stack:(zero_timestamp, (zero_int, eos)) - ~stack_type:(timestamp @$ int @$ bot) - ~kinstr:(IAdd_timestamp_to_seconds (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISub_timestamp_seconds - ~intercept_stack:(zero_timestamp, (zero_int, eos)) - ~stack_type:(timestamp @$ int @$ bot) - ~kinstr:(ISub_timestamp_seconds (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IDiff_timestamps - ~intercept_stack:(zero_timestamp, (zero_timestamp, eos)) - ~stack_type:(timestamp @$ timestamp @$ bot) - ~kinstr:(IDiff_timestamps (dummy_loc, halt)) - () - end - - module Tez = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAdd_tez - ~stack_type:(mutez @$ mutez @$ bot) - ~kinstr:(IAdd_tez (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ISub_tez - ~stack_type:(mutez @$ mutez @$ bot) - ~kinstr:(ISub_tez (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = - make_default_samplers cfg.Default_config.sampler - in - fun () -> - let a = Samplers.Random_value.value mutez rng_state in - let b = - match Alpha_context.Tez.(a /? 2L) with - | Error _ -> assert false - | Ok x -> x - in - (a, (b, eos))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ISub_tez_legacy - ~stack_type:(mutez @$ mutez @$ bot) - ~kinstr:(ISub_tez_legacy (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = - make_default_samplers cfg.Default_config.sampler - in - fun () -> - let a = Samplers.Random_value.value mutez rng_state in - let b = - match Alpha_context.Tez.(a /? 2L) with - | Error _ -> assert false - | Ok x -> x - in - (a, (b, eos))) - () - - let sample_tez_nat (module Samplers : Michelson_samplers.S) rng_state = - let mutez = Samplers.Random_value.value mutez rng_state in - let mutez_int64 = Alpha_context.Tez.to_mutez mutez in - let int64 = Int64.(div max_int (mul mutez_int64 2L)) in - let nat = - match Script_int.(is_nat (of_int64 int64)) with - | None -> assert false - | Some nat -> nat - in - (mutez, nat) - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMul_teznat - ~stack_type:(mutez @$ nat @$ bot) - ~kinstr:(IMul_teznat (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, samplers = make_default_samplers cfg.sampler in - fun () -> - let mutez, nat = sample_tez_nat samplers rng_state in - (mutez, (nat, eos))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IMul_nattez - ~stack_type:(nat @$ mutez @$ bot) - ~kinstr:(IMul_nattez (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, samplers = make_default_samplers cfg.sampler in - fun () -> - let mutez, nat = sample_tez_nat samplers rng_state in - (nat, (mutez, eos))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IEdiv_teznat - ~stack_type:(mutez @$ nat @$ bot) - ~kinstr:(IEdiv_teznat (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, samplers = make_default_samplers cfg.sampler in - fun () -> - let mutez, nat = sample_tez_nat samplers rng_state in - (mutez, (nat, eos))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEdiv_tez - ~stack_type:(mutez @$ mutez @$ bot) - ~kinstr:(IEdiv_tez (dummy_loc, halt)) - () - end - - module Booleans = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IOr - ~stack_type:(bool @$ bool @$ bot) - ~kinstr:(IOr (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAnd - ~stack_type:(bool @$ bool @$ bot) - ~kinstr:(IAnd (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IXor - ~stack_type:(bool @$ bool @$ bot) - ~kinstr:(IXor (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INot - ~stack_type:(bool @$ bot) - ~kinstr:(INot (dummy_loc, halt)) - () - end - - module Integers = struct - let zero = Script_int.zero - - let zero_n = Script_int.zero_n - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IIs_nat - ~stack_type:(int @$ bot) - ~kinstr:(IIs_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INeg - ~intercept_stack:(zero, eos) - ~stack_type:(int @$ bot) - ~kinstr:(INeg (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IAbs_int - ~stack_type:(int @$ bot) - ~kinstr:(IAbs_int (dummy_loc, halt)) - ~intercept_stack:(zero, eos) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let x = Samplers.Michelson_base.nat rng_state in - let neg_x = Script_int.neg x in - (neg_x, eos)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IInt_nat - ~stack_type:(nat @$ bot) - ~kinstr:(IInt_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAdd_int - ~intercept_stack:(zero, (zero, eos)) - ~stack_type:(int @$ int @$ bot) - ~kinstr:(IAdd_int (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAdd_nat - ~intercept_stack:(zero_n, (zero_n, eos)) - ~stack_type:(nat @$ nat @$ bot) - ~kinstr:(IAdd_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISub_int - ~intercept_stack:(zero, (zero, eos)) - ~stack_type:(int @$ int @$ bot) - ~kinstr:(ISub_int (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IMul_int - ~intercept_stack:(zero, (zero, eos)) - ~stack_type:(int @$ int @$ bot) - ~kinstr:(IMul_int (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IMul_nat - ~intercept_stack:(zero_n, (zero, eos)) - ~stack_type:(nat @$ int @$ bot) - ~kinstr:(IMul_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IEdiv_int - ~intercept_stack:(zero, (zero, eos)) - ~stack_type:(int @$ int @$ bot) - ~kinstr:(IEdiv_int (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - (* When x > 0 and size(x) < size(y), EDIV x y evaluates to (0,x) and nothing is allocated. - The following sampler avoids such cases that lead to underestimation. *) - let x = Script_int.neg @@ Samplers.Michelson_base.nat rng_state in - let y = Samplers.Michelson_base.int rng_state in - (x, (y, eos))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEdiv_nat - ~intercept_stack:(zero_n, (zero, eos)) - ~stack_type:(nat @$ int @$ bot) - ~kinstr:(IEdiv_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ILsl_nat - ~intercept_stack:(zero_n, (zero_n, eos)) - ~stack_type:(nat @$ nat @$ bot) - ~kinstr:(ILsl_nat (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let x = Samplers.Michelson_base.nat rng_state in - (* shift must be in [0;256]: 1 byte max *) - let shift = - Script_int.(abs (of_int (Random.State.int rng_state 256))) - in - (x, (shift, eos))) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ILsr_nat - ~intercept_stack:(zero_n, (zero_n, eos)) - ~stack_type:(nat @$ nat @$ bot) - ~kinstr:(ILsr_nat (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let x = Samplers.Michelson_base.nat rng_state in - (* shift must be in [0;256]: 1 byte max *) - let shift = - Script_int.(abs (of_int (Random.State.int rng_state 256))) - in - (x, (shift, eos))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IOr_nat - ~intercept_stack:(zero_n, (zero_n, eos)) - ~stack_type:(nat @$ nat @$ bot) - ~kinstr:(IOr_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAnd_nat - ~intercept_stack:(zero_n, (zero_n, eos)) - ~stack_type:(nat @$ nat @$ bot) - ~kinstr:(IAnd_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IAnd_int_nat - ~intercept_stack:(zero, (zero_n, eos)) - ~stack_type:(int @$ nat @$ bot) - ~kinstr:(IAnd_int_nat (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - (* The worst case is size(and(x,y)) = size(y) when x < 0. *) - let x = Script_int.neg @@ Samplers.Michelson_base.nat rng_state in - let y = Samplers.Michelson_base.nat rng_state in - (x, (y, eos))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IXor_nat - ~intercept_stack:(zero_n, (zero_n, eos)) - ~stack_type:(nat @$ nat @$ bot) - ~kinstr:(IXor_nat (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INot_int - ~intercept_stack:(zero, eos) - ~stack_type:(int @$ bot) - ~kinstr:(INot_int (dummy_loc, halt)) - () - end - - module Control = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IIf - ~stack_type:(bool @$ unit @$ bot) - ~kinstr: - (IIf - { - loc = dummy_loc; - branch_if_true = halt; - branch_if_false = halt; - k = halt; - }) - () - - let () = - let push_false = IPush (dummy_loc, bool, false, halt) in - (* The case true is on top of stack - ILoop -> - IPush false -> - IHalt - *) - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_ILoop_in - ~stack:(true, eos) - ~stack_type:(bool @$ bot) - ~kinstr:(ILoop (dummy_loc, push_false, halt)) - () ; - (* The case false is on top of stack - ILoop -> - IHalt - *) - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_ILoop_out - ~stack:(false, eos) - ~stack_type:(bool @$ bot) - ~kinstr:(ILoop (dummy_loc, push_false, halt)) - () - - let () = - let model = - Interpreter_model.Models.max_branching_model - ~case_0:"in_const" - ~case_1:"out_const" - "N_ILoop" - in - register_model_for_code_generation model - - let () = - let cons_r = ICons_right (dummy_loc, unit, halt) in - (* - ILoop_left -> - ICons_right -> - IHalt - *) - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_ILoop_left_in - ~stack:(L (), eos) - ~stack_type:(cor unit unit @$ bot) - ~kinstr:(ILoop_left (dummy_loc, cons_r, halt)) - () ; - (* - ILoop_left -> - IHalt - *) - time_alloc_benchmark_with_fixed_stack - ~name:Interpreter_workload.N_ILoop_left_out - ~stack:(R (), eos) - ~stack_type:(cor unit unit @$ bot) - ~kinstr:(ILoop_left (dummy_loc, cons_r, halt)) - () - - let () = - let model = - Interpreter_model.Models.max_branching_model - ~case_0:"in_const" - ~case_1:"out_const" - "N_ILoop_left" - in - register_model_for_code_generation model - - let () = - (* - IDip -> - IHalt -> - IPush -> - IHalt - *) - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IDip - ~stack_type:(unit @$ unit @$ bot) - ~kinstr:(IDip (dummy_loc, halt, Some unit, halt)) - () - - let dummy_lambda = - let open Script_typed_ir in - let descr = - { - kloc = dummy_loc; - kbef = unit @$ bot; - kaft = unit @$ bot; - kinstr = halt; - } - in - Lam (descr, Micheline.Int (dummy_loc, Z.zero)) - - let dummy_lambda_rec = - let open Script_typed_ir in - let descr = - { - kloc = dummy_loc; - kbef = unit @$ lambda unit unit @$ bot; - kaft = unit @$ bot; - kinstr = - IDrop - (dummy_loc, IDrop (dummy_loc, IPush (dummy_loc, unit, (), halt))); - } - in - LamRec (descr, Micheline.Int (dummy_loc, Z.zero)) - - let () = - (* - IExec -> - (switch to in-context gas-counting) -> - interp lambda code -> - IHalt - *) - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IExec - ~stack_type:(unit @$ lambda unit unit @$ bot) - ~kinstr:(IExec (dummy_loc, Some (unit @$ bot), halt)) - ~stack_sampler:(fun _cfg rng_state () -> - if Base_samplers.uniform_bool rng_state then ((), (dummy_lambda, eos)) - else ((), (dummy_lambda_rec, eos))) - () - - let () = - (* - IApply -> - unparse unit -> - unparse unit_ty -> - construct term -> - IHalt - *) - let dummy_lambda_pair = - let open Script_typed_ir in - let descr = - { - kloc = dummy_loc; - kbef = cpair unit unit @$ bot; - kaft = unit @$ bot; - kinstr = ICdr (dummy_loc, halt); - } - in - Lam (descr, Micheline.Int (dummy_loc, Z.zero)) - in - let dummy_lambda_pair_rec = - let open Script_typed_ir in - let descr = - { - kloc = dummy_loc; - kbef = cpair unit unit @$ lambda (cpair unit unit) unit @$ bot; - kaft = unit @$ bot; - kinstr = - IDrop - (dummy_loc, IDrop (dummy_loc, IPush (dummy_loc, unit, (), halt))); - } - in - LamRec (descr, Micheline.Int (dummy_loc, Z.zero)) - in - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_IApply - ~stack_type:(unit @$ lambda (cpair unit unit) unit @$ bot) - ~kinstr:(IApply (dummy_loc, unit, halt)) - ~stack_sampler:(fun _cfg rng_state () -> - if Base_samplers.uniform_bool rng_state then - ((), (dummy_lambda_pair, eos)) - else ((), (dummy_lambda_pair_rec, eos))) - () - - let () = - (* - ILambda -> - IHalt - *) - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ILambda_lam - ~stack_type:(unit @$ bot) - ~kinstr:(ILambda (dummy_loc, dummy_lambda, halt)) - () - - let () = - (* - ILambda (rec) -> - IHalt - *) - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ILambda_lamrec - ~stack_type:(unit @$ bot) - ~kinstr:(ILambda (dummy_loc, dummy_lambda_rec, halt)) - () - - let () = - let model = - Interpreter_model.Models.max_branching_model - ~case_0:"lam_const" - ~case_1:"lamrec_const" - "N_ILambda" - in - register_model_for_code_generation model - - let () = - (* - IFailwith -> - (unparse_data Unit) -> - (strip_locations) -> - fail - *) - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IFailwith - ~amplification:100 - ~stack_type:(unit @$ bot) - ~kinstr:(IFailwith (dummy_loc, unit)) - () - end - - module Comparison = struct - let () = - benchmark - ~name:Interpreter_workload.N_ICompare - ~kinstr_and_stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let size = - Base_samplers.sample_in_interval - rng_state - ~range:cfg.compare.type_size - in - let (Script_ir_translator.Ex_comparable_ty ty) = - Samplers.Random_type.m_comparable_type ~size rng_state - in - let value = Samplers.Random_value.comparable ty rng_state in - let kinstr = ICompare (dummy_loc, ty, halt) in - Ex_stack_and_kinstr - { - stack = (value, (value, eos)); - stack_type = ty @$ ty @$ bot; - kinstr; - }) - () - - let () = - benchmark - ~name:Interpreter_workload.N_ICompare - ~salt:"_intercepts" - ~kinstr_and_stack_sampler:(fun cfg rng_state -> - (* Sample from values whose [size_of_comparable_value] is 1. *) - (* [unit] and [bool] are excluded since they are relatively quick. *) - let sampler = - { - cfg.sampler with - base_parameters = - { - int_size = {min = 1; max = 1}; - string_size = {min = 1; max = 1}; - bytes_size = {min = 1; max = 1}; - }; - } - in - let _, (module Samplers) = make_default_samplers sampler in - fun () -> - let ty : Script_ir_translator.ex_comparable_ty = - match Random.State.int rng_state 4 with - | 0 -> Ex_comparable_ty String_t - | 1 -> Ex_comparable_ty Bytes_t - | 2 -> Ex_comparable_ty Int_t - | 3 -> Ex_comparable_ty Nat_t - | _ -> assert false - in - let (Ex_comparable_ty ty) = ty in - let value = Samplers.Random_value.comparable ty rng_state in - let kinstr = ICompare (dummy_loc, ty, halt) in - Ex_stack_and_kinstr - { - stack = (value, (value, eos)); - stack_type = ty @$ ty @$ bot; - kinstr; - }) - () - - let () = - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_ICompare - ~stack_type:(string @$ string @$ bot) - ~kinstr:(ICompare (dummy_loc, String_t, halt)) - () - - let () = register_time_alloc_codegen_model (Instr_name N_ICompare) - end - - module Comparators = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEq - ~stack_type:(int @$ bot) - ~kinstr:(IEq (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INeq - ~stack_type:(int @$ bot) - ~kinstr:(INeq (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ILt - ~stack_type:(int @$ bot) - ~kinstr:(ILt (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IGt - ~stack_type:(int @$ bot) - ~kinstr:(IGt (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ILe - ~stack_type:(int @$ bot) - ~kinstr:(ILe (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IGe - ~stack_type:(int @$ bot) - ~kinstr:(IGe (dummy_loc, halt)) - () - end - - module Proto = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAddress - ~stack_type:(contract unit @$ bot) - ~kinstr:(IAddress (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IContract - ~stack_type:(address @$ bot) - ~kinstr: - (IContract (dummy_loc, unit, Alpha_context.Entrypoint.default, halt)) - () - - let () = - simple_time_alloc_benchmark_with_stack_sampler - ~name:Interpreter_workload.N_ITransfer_tokens - ~stack_type:(unit @$ mutez @$ contract unit @$ bot) - ~kinstr:(ITransfer_tokens (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - fun () -> - let contract = - Samplers.Random_value.value (contract unit) rng_state - in - let amount = - match contract with - | Typed_implicit _ | Typed_originated _ -> - Samplers.Random_value.value mutez rng_state - | Typed_sc_rollup _ -> Alpha_context.Tez.zero - in - ((), (amount, (contract, eos)))) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IImplicit_account - ~stack_type:(key_hash @$ bot) - ~kinstr:(IImplicit_account (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ICreate_contract - ~stack_type:(option key_hash @$ mutez @$ unit @$ bot) - ~kinstr: - (ICreate_contract - { - loc = dummy_loc; - storage_type = unit; - code = Micheline.(strip_locations @@ Seq (0, [])); - k = halt; - }) - () - - let () = - let name = - match Protocol.Script_string.of_string "view" with - | Ok s -> s - | Error _ -> assert false - in - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IView - ~stack_type:(unit @$ address @$ bot) - ~kinstr: - (IView - ( dummy_loc, - View_signature {name; input_ty = unit; output_ty = unit}, - Some bot, - halt )) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISet_delegate - ~stack_type:(option key_hash @$ bot) - ~kinstr:(ISet_delegate (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_INow - ~stack_type:(unit @$ bot) - ~kinstr:(INow (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IMin_block_time - ~stack_type:bot - ~kinstr:(IMin_block_time (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IBalance - ~stack_type:(unit @$ bot) - ~kinstr:(IBalance (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ILevel - ~stack_type:(unit @$ bot) - ~kinstr:(ILevel (dummy_loc, halt)) - () - - let name_of_algo = function - | Signature.Ed25519 -> Interpreter_workload.N_ICheck_signature_ed25519 - | Signature.Secp256k1 -> Interpreter_workload.N_ICheck_signature_secp256k1 - | Signature.P256 -> Interpreter_workload.N_ICheck_signature_p256 - | Signature.Bls -> Interpreter_workload.N_ICheck_signature_bls - - let check_signature (algo : Signature.algo) ~benchmark_type ~for_intercept = - benchmark_with_stack_sampler - ~benchmark_type - ~intercept:for_intercept - ~name:(name_of_algo algo) - ~stack_type:(public_key @$ signature @$ bytes @$ bot) - ~kinstr:(ICheck_signature (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let (module Crypto_samplers), (module Samplers) = - make_default_samplers ~algo:(`Algo algo) cfg.Default_config.sampler - in - fun () -> - let _pkh, pk, sk = Crypto_samplers.all rng_state in - let unsigned_message = - if for_intercept then Environment.Bytes.empty - else Samplers.Random_value.value Script_typed_ir.bytes_t rng_state - in - let signed_message = Signature.sign sk unsigned_message in - let signed_message = Script_signature.make signed_message in - (pk, (signed_message, (unsigned_message, eos)))) - () - - let check_signature algo = - check_signature algo ~benchmark_type:Time ~for_intercept:true ; - check_signature algo ~benchmark_type:Time ~for_intercept:false ; - check_signature algo ~benchmark_type:Alloc ~for_intercept:false ; - register_time_alloc_codegen_model (Instr_name (name_of_algo algo)) - - let () = check_signature Signature.Ed25519 - - let () = check_signature Signature.Secp256k1 - - let () = check_signature Signature.P256 - - let () = check_signature Signature.Bls - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IHash_key - ~stack_type:(public_key @$ bot) - ~kinstr:(IHash_key (dummy_loc, halt)) - () - - let () = - time_alloc_benchmark - ~name:Interpreter_workload.N_IPack - ~kinstr_and_stack_sampler:(fun _cfg _rng_state -> - let kinstr = IPack (dummy_loc, unit, halt) in - fun () -> - Ex_stack_and_kinstr - {stack = ((), eos); stack_type = unit @$ bot; kinstr}) - () - - let () = - let open Lwt_result_syntax in - time_alloc_benchmark - ~name:Interpreter_workload.N_IUnpack - ~kinstr_and_stack_sampler:(fun _cfg rng_state -> - let b = - raise_if_error - (Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let* bytes, _ = - let*! result = - Script_ir_translator.pack_data ctxt unit () - in - Lwt.return (Environment.wrap_tzresult result) - in - return bytes)) - in - let kinstr = IUnpack (dummy_loc, unit, halt) in - fun () -> - Ex_stack_and_kinstr - {stack = (b, eos); stack_type = bytes @$ bot; kinstr}) - () - - let () = - simple_benchmark - ~benchmark_type:Time - ~name:Interpreter_workload.N_IBlake2b - ~intercept_stack:(Environment.Bytes.empty, eos) - ~stack_type:(bytes @$ bot) - ~kinstr:(IBlake2b (dummy_loc, halt)) - () ; - (* no intercept for alloc *) - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_IBlake2b - ~stack_type:(bytes @$ bot) - ~kinstr:(IBlake2b (dummy_loc, halt)) - () ; - register_time_alloc_codegen_model (Instr_name N_IBlake2b) - - let () = - simple_benchmark - ~benchmark_type:Time - ~name:Interpreter_workload.N_ISha256 - ~intercept_stack:(Environment.Bytes.empty, eos) - ~stack_type:(bytes @$ bot) - ~kinstr:(ISha256 (dummy_loc, halt)) - () ; - (* no intercept for alloc *) - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_ISha256 - ~stack_type:(bytes @$ bot) - ~kinstr:(ISha256 (dummy_loc, halt)) - () ; - register_time_alloc_codegen_model (Instr_name N_ISha256) - - let () = - simple_benchmark - ~benchmark_type:Time - ~name:Interpreter_workload.N_ISha512 - ~intercept_stack:(Environment.Bytes.empty, eos) - ~stack_type:(bytes @$ bot) - ~kinstr:(ISha512 (dummy_loc, halt)) - () ; - (* no intercept for alloc *) - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_ISha512 - ~stack_type:(bytes @$ bot) - ~kinstr:(ISha512 (dummy_loc, halt)) - () ; - register_time_alloc_codegen_model (Instr_name N_ISha512) - - let () = - simple_benchmark - ~benchmark_type:Time - ~name:Interpreter_workload.N_IKeccak - ~intercept_stack:(Environment.Bytes.empty, eos) - ~stack_type:(bytes @$ bot) - ~kinstr:(IKeccak (dummy_loc, halt)) - () ; - (* no intercept for alloc *) - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_IKeccak - ~stack_type:(bytes @$ bot) - ~kinstr:(IKeccak (dummy_loc, halt)) - () ; - register_time_alloc_codegen_model (Instr_name N_IKeccak) - - let () = - simple_benchmark - ~benchmark_type:Time - ~name:Interpreter_workload.N_ISha3 - ~intercept_stack:(Environment.Bytes.empty, eos) - ~stack_type:(bytes @$ bot) - ~kinstr:(ISha3 (dummy_loc, halt)) - () ; - (* no intercept for alloc *) - simple_benchmark - ~benchmark_type:Alloc - ~name:Interpreter_workload.N_ISha3 - ~stack_type:(bytes @$ bot) - ~kinstr:(ISha3 (dummy_loc, halt)) - () ; - register_time_alloc_codegen_model (Instr_name N_ISha3) - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISource - ~stack_type:(unit @$ bot) - ~kinstr:(ISource (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISender - ~stack_type:(unit @$ bot) - ~kinstr:(ISender (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISelf - ~stack_type:(unit @$ bot) - ~kinstr: - (ISelf (dummy_loc, unit, Alpha_context.Entrypoint.default, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISelf_address - ~stack_type:(unit @$ bot) - ~kinstr:(ISelf_address (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IAmount - ~stack_type:(unit @$ bot) - ~kinstr:(IAmount (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IChainId - ~stack_type:(unit @$ bot) - ~kinstr:(IChainId (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IVoting_power - ~stack_type:(key_hash @$ bot) - ~kinstr:(IVoting_power (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ITotal_voting_power - ~stack_type:(unit @$ bot) - ~kinstr:(ITotal_voting_power (dummy_loc, halt)) - () - end - - let () = - let memo_size = - match Alpha_context.Sapling.Memo_size.parse_z Z.zero with - | Error _ -> assert false - | Ok sz -> sz - in - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ISapling_empty_state - ~stack_type:(unit @$ bot) - ~kinstr:(ISapling_empty_state (dummy_loc, memo_size, halt)) - () - - module type Type_transaction = sig - val type_transaction : Sapling_generation.type_transaction - - val suffix : string - end - - module Register_Sapling_benchmark (Type_transaction : Type_transaction) = - struct - let is_empty = - match Type_transaction.type_transaction with Empty -> true | _ -> false - - let () = - (* Note that memo_size is hardcoded to 0 in module [Sapling_generation]. *) - let memo_size = - match Alpha_context.Sapling.Memo_size.parse_z Z.zero with - | Error _ -> assert false - | Ok sz -> sz - in - let module B (BenchmarkType : sig - val value : benchmark_type - end) : Benchmark.S = struct - let info, name = - info_and_name - ~benchmark_type:BenchmarkType.value - ~intercept:is_empty - ("ISapling_verify_update_" ^ Type_transaction.suffix) - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - include Default_config - include Default_boilerplate - - let models = - Interpreter_model.make_model - BenchmarkType.value - (Instr_name Interpreter_workload.N_ISapling_verify_update) - - let stack_type = - let spl_state = sapling_state memo_size in - let spl_tx = sapling_transaction memo_size in - spl_tx @$ spl_state @$ bot - - let kinstr = ISapling_verify_update (dummy_loc, halt) - - let prepare_sapling_execution_environment sapling_forge_rng_seed - sapling_transition = - let open Lwt_result_syntax in - let sapling_forge_rng_state = - Random.State.make - @@ Option.fold - ~none:Sapling_generation.shared_seed - ~some:(fun seed -> [|seed|]) - sapling_forge_rng_seed - in - (* Prepare context. We _must_ reuse the same seed as the one used for - the context when generating the transactions. This ensures that the - bootstrap account match and that the transactions can be replayed. *) - let result = - Lwt_main.run - (let* ctxt, step_constants = - Execution_context.make ~rng_state:sapling_forge_rng_state () - in - (* Prepare a sapling state able to replay the transition. *) - let* _, _, _, _, ctxt, state_id = - Sapling_generation.prepare_seeded_state sapling_transition ctxt - in - let* state, ctxt = - let*! result = - Alpha_context.Sapling.( - state_from_id ctxt (Id.parse_z state_id)) - in - Lwt.return (Environment.wrap_tzresult result) - in - return (ctxt, state, step_constants)) - in - match result with - | Ok r -> r - | Error _ -> - Format.eprintf - "Error in prepare_sapling_execution_environment, aborting@." ; - Stdlib.failwith "prepare_sapling_execution_environment" - - let create_benchmarks ~rng_state ~bench_num (config : config) = - ignore rng_state ; - match config.sapling with - | {sapling_txs_file; seed} -> - let transitions = - Sapling_generation.load - ~filename:sapling_txs_file - Type_transaction.type_transaction - in - let length = List.length transitions in - if length < bench_num && not is_empty then - Format.eprintf - "ISapling_verify_update: warning, only %d available \ - transactions (requested %d)@." - length - bench_num ; - let transitions = - List.take_n (min bench_num length) transitions - in - List.map - (fun (_, transition) () -> - let ctxt, state, step_constants = - prepare_sapling_execution_environment seed transition - in - let address = - Alpha_context.Contract.( - to_b58check (Originated step_constants.self)) - in - let chain_id = - Environment.Chain_id.to_b58check step_constants.chain_id - in - let anti_replay = address ^ chain_id in - (* Checks that the transaction is correct*) - let () = - match - Sapling_validator.verify_update - (Sapling_generation.alpha_to_raw ctxt) - (Obj.magic state) - transition.sapling_tx - anti_replay - |> Lwt_main.run - with - | Ok (_, Some _) -> () - | Ok (_, None) -> - Stdlib.failwith "benchmarked transaction is incorrect" - | _ -> assert false - in - let stack_instr = - Ex_stack_and_kinstr - { - stack = (transition.sapling_tx, (state, eos)); - stack_type; - kinstr; - } - in - benchmark_from_kinstr_and_stack - BenchmarkType.value - ctxt - step_constants - stack_instr) - transitions - end in - Registration_helpers.register - (module B (struct - let value = Time - end)) ; - Registration_helpers.register - (module B (struct - let value = Alloc - end)) ; - register_time_alloc_codegen_model - (Instr_name Interpreter_workload.N_ISapling_verify_update) - end - - module Sapling_empty = struct - let module A = Register_Sapling_benchmark (struct - let type_transaction = Sapling_generation.Empty - - let suffix = "empty" - end) in - () - end - - module Sapling_non_empty = struct - let module A = Register_Sapling_benchmark (struct - let type_transaction = Sapling_generation.Non_empty - - let suffix = "non_empty" - end) in - () - end - - (* when benchmarking, compile bls12-381-unix without ADX, see - https://gitlab.com/dannywillems/ocaml-bls12-381/-/blob/71d0b4d467fbfaa6452d702fcc408d7a70916a80/README.md#install - *) - module Bls12_381 = struct - let check () = - if not Bls12_381.built_with_blst_portable then ( - Format.eprintf - "BLS must be built without ADX to run the BLS benchmarks. Try \ - compiling again after setting the environment variable \ - BLST_PORTABLE. Aborting.@." ; - Stdlib.failwith "bls_not_built_with_blst_portable") - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IAdd_bls12_381_g1 - ~stack_type:(bls12_381_g1 @$ bls12_381_g1 @$ bot) - ~kinstr:(IAdd_bls12_381_g1 (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IAdd_bls12_381_g2 - ~stack_type:(bls12_381_g2 @$ bls12_381_g2 @$ bot) - ~kinstr:(IAdd_bls12_381_g2 (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IAdd_bls12_381_fr - ~stack_type:(bls12_381_fr @$ bls12_381_fr @$ bot) - ~kinstr:(IAdd_bls12_381_fr (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_g1 - ~stack_type:(bls12_381_g1 @$ bls12_381_fr @$ bot) - ~kinstr:(IMul_bls12_381_g1 (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_g2 - ~stack_type:(bls12_381_g2 @$ bls12_381_fr @$ bot) - ~kinstr:(IMul_bls12_381_g2 (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_fr - ~stack_type:(bls12_381_fr @$ bls12_381_fr @$ bot) - ~kinstr:(IMul_bls12_381_fr (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_z_fr - ~stack_type:(bls12_381_fr @$ int @$ bot) - ~kinstr:(IMul_bls12_381_z_fr (dummy_loc, halt)) - () - - let () = - benchmark_with_stack_sampler - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_z_fr - ~intercept:true - ~stack_type:(bls12_381_fr @$ int @$ bot) - ~kinstr:(IMul_bls12_381_z_fr (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - let fr_sampler = Samplers.Random_value.value bls12_381_fr in - let zero = Script_int.zero in - fun () -> (fr_sampler rng_state, (zero, eos))) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_fr_z - ~stack_type:(int @$ bls12_381_fr @$ bot) - ~kinstr:(IMul_bls12_381_fr_z (dummy_loc, halt)) - () - - let () = - benchmark_with_stack_sampler - ~check - ~name:Interpreter_workload.N_IMul_bls12_381_fr_z - ~intercept:true - ~stack_type:(int @$ bls12_381_fr @$ bot) - ~kinstr:(IMul_bls12_381_fr_z (dummy_loc, halt)) - ~stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - let fr_sampler = Samplers.Random_value.value bls12_381_fr in - let zero = Script_int.zero in - fun () -> (zero, (fr_sampler rng_state, eos))) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_IInt_bls12_381_z_fr - ~stack_type:(bls12_381_fr @$ bot) - ~kinstr:(IInt_bls12_381_fr (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_INeg_bls12_381_g1 - ~stack_type:(bls12_381_g1 @$ bot) - ~kinstr:(INeg_bls12_381_g1 (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_INeg_bls12_381_g2 - ~stack_type:(bls12_381_g2 @$ bot) - ~kinstr:(INeg_bls12_381_g2 (dummy_loc, halt)) - () - - let () = - simple_time_alloc_benchmark - ~check - ~name:Interpreter_workload.N_INeg_bls12_381_fr - ~stack_type:(bls12_381_fr @$ bot) - ~kinstr:(INeg_bls12_381_fr (dummy_loc, halt)) - () - - let () = - let (Ty_ex_c p) = pair bls12_381_g1 bls12_381_g2 in - simple_benchmark - ~benchmark_type:Time - ~check - ~name:Interpreter_workload.N_IPairing_check_bls12_381 - ~intercept_stack:(Script_list.empty, eos) - ~stack_type:(list p @$ bot) - ~kinstr:(IPairing_check_bls12_381 (dummy_loc, halt)) - () ; - (* no intercept for alloc *) - simple_benchmark - ~benchmark_type:Alloc - ~check - ~name:Interpreter_workload.N_IPairing_check_bls12_381 - ~stack_type:(list p @$ bot) - ~kinstr:(IPairing_check_bls12_381 (dummy_loc, halt)) - () ; - register_time_alloc_codegen_model (Instr_name N_IPairing_check_bls12_381) - end - - module Tickets = struct - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_ITicket - ~stack_type:(unit @$ nat @$ bot) - ~kinstr:(ITicket (dummy_loc, Some unit, halt)) - () - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IRead_ticket - ~stack_type:(ticket unit @$ bot) - ~kinstr:(IRead_ticket (dummy_loc, Some unit, halt)) - () - - let split_ticket_instr = ISplit_ticket (dummy_loc, halt) - - let stack_type = ticket unit @$ cpair nat nat @$ bot - - let () = - let one = Script_int.one_n in - let ticket = - { - ticketer = - Alpha_context.Contract.Implicit - Environment.Signature.Public_key_hash.zero; - contents = (); - amount = Ticket_amount.(add one one); - } - in - benchmark_with_fixed_stack - ~intercept:true - ~name:Interpreter_workload.N_ISplit_ticket - ~stack_type - ~stack:(ticket, ((one, one), eos)) - ~kinstr:split_ticket_instr - () - - let () = - time_and_alloc (fun benchmark_type -> - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_ISplit_ticket - ~kinstr_and_stack_sampler:(fun config rng_state -> - let _, (module Samplers) = - make_default_samplers config.Default_config.sampler - in - fun () -> - let x_amount = - Script_int.succ_n @@ Samplers.Random_value.value nat rng_state - in - let y_amount = - Script_int.succ_n @@ Samplers.Random_value.value nat rng_state - in - let amount = Script_int.add_n x_amount y_amount in - let amount = - (* this is safe because x_amount > 0 and y_amount > 0 *) - WithExceptions.Option.get ~loc:__LOC__ - @@ Ticket_amount.of_n amount - in - let ticket = - Samplers.Random_value.value (ticket unit) rng_state - in - let ticket = {ticket with amount} in - Ex_stack_and_kinstr - { - stack = (ticket, ((x_amount, y_amount), eos)); - stack_type; - kinstr = split_ticket_instr; - }) - ()) ; - register_time_alloc_codegen_model (Instr_name N_ISplit_ticket) - - let join_tickets_instr = IJoin_tickets (dummy_loc, string, halt) - - let ticket_str = ticket string - - let stack_type = - let (Ty_ex_c p) = pair ticket_str ticket_str in - p @$ bot - - let () = - benchmark - ~intercept:true - ~name:Interpreter_workload.N_IJoin_tickets - ~kinstr_and_stack_sampler:(fun config rng_state -> - let _, (module Samplers) = - make_default_samplers config.Default_config.sampler - in - fun () -> - let ticket = - Samplers.Random_value.value (ticket string) rng_state - in - let ticket = - { - ticket with - contents = Script_string.empty; - amount = Ticket_amount.one; - } - in - Ex_stack_and_kinstr - { - stack = ((ticket, ticket), eos); - stack_type; - kinstr = join_tickets_instr; - }) - () - - let () = - time_and_alloc (fun benchmark_type -> - benchmark - ~benchmark_type - ~name:Interpreter_workload.N_IJoin_tickets - ~kinstr_and_stack_sampler:(fun config rng_state -> - let _, (module Samplers) = - make_default_samplers config.Default_config.sampler - in - fun () -> - let ticket = - Samplers.Random_value.value (ticket string) rng_state - in - let alt_amount = - let amount = Samplers.Random_value.value nat rng_state in - let open Ticket_amount in - match of_n amount with - | Some amount -> add amount one - | None -> one - in - let ticket' = {ticket with amount = alt_amount} in - Ex_stack_and_kinstr - { - stack = ((ticket, ticket'), eos); - stack_type; - kinstr = join_tickets_instr; - }) - ()) ; - register_time_alloc_codegen_model (Instr_name N_IJoin_tickets) - end - - module Timelock = struct - let name = Interpreter_workload.N_IOpen_chest - - let stack_type = - Michelson_types.chest_key @$ Michelson_types.chest @$ nat @$ bot - - let kinstr = IOpen_chest (dummy_loc, halt) - - let resulting_stack chest chest_key time = - let chest = Script_timelock.make_chest chest in - let chest_key = Script_timelock.make_chest_key chest_key in - ( chest_key, - ( chest, - ( Script_int.is_nat (Script_int.of_int time) - |> WithExceptions.Option.get ~loc:"Timelock:gas benchmarks", - eos ) ) ) - - let () = - benchmark_with_stack_sampler - ~intercept:true - ~name - ~kinstr - ~stack_type - ~stack_sampler:(fun _ rng_state () -> - let time = 1 in - let chest, chest_key = - Timelock_samplers.chest_sampler ~plaintext_size:1 ~time ~rng_state - in - resulting_stack chest chest_key time) - () - - let () = - time_and_alloc @@ fun benchmark_type -> - benchmark_with_stack_sampler - ~benchmark_type - ~name - ~kinstr - ~stack_type - ~stack_sampler:(fun _ rng_state () -> - let log_time = - (* Chest generation takes too long time for [log_time > 20] *) - Base_samplers.sample_in_interval - ~range:{min = 0; max = 20} - rng_state - in - let time = Int.shift_left 1 log_time in - let plaintext_size = - Base_samplers.sample_in_interval - ~range:{min = 1; max = 10000} - rng_state - in - - let chest, chest_key = - Timelock_samplers.chest_sampler ~plaintext_size ~time ~rng_state - in - resulting_stack chest chest_key time) - () - - let () = register_time_alloc_codegen_model (Instr_name name) - end - - module Continuations = struct - let () = - (* - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KNil - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KNil in - let stack = eos in - let stack_type = bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KCons -> step - KHalt -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KCons - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KCons (halt, KNil) in - let stack = ((), eos) in - let stack_type = unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KReturn -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KReturn - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KReturn (eos, Some (unit @$ bot), KNil) in - let stack = ((), eos) in - let stack_type = unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KView_exit -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KView_exit - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let open Script_typed_ir in - let open Alpha_context in - let step_constants = - { - sender = Contract (Implicit Signature.Public_key_hash.zero); - payer = Signature.Public_key_hash.zero; - self = Contract_hash.zero; - amount = Tez.zero; - balance = Tez.zero; - chain_id = Chain_id.zero; - now = Script_timestamp.of_zint Z.zero; - level = Script_int.zero_n; - } - in - let cont = KView_exit (step_constants, KNil) in - let stack = ((), eos) in - let stack_type = unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KLoop_in -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KLoop_in - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KLoop_in (IPush (dummy_loc, bool, false, halt), KNil) in - let stack = (false, ((), eos)) in - let stack_type = bool @$ unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KLoop_in_left -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KLoop_in_left - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = - KLoop_in_left (ICons_right (dummy_loc, unit, halt), KNil) - in - let stack = (R (), eos) in - let stack_type = cor unit unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KUndip -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KUndip - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KUndip ((), Some unit, KNil) in - let stack = eos in - let stack_type = bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KIter (empty case) -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KIter_empty - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KIter (IDrop (dummy_loc, halt), Some unit, [], KNil) in - let stack = ((), eos) in - let stack_type = unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - (* - KIter (nonempty case) -> step - KDrop -> step - KHalt -> next - KIter (empty case) -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KIter_nonempty - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let cont = KIter (IDrop (dummy_loc, halt), Some unit, [()], KNil) in - let stack = ((), eos) in - let stack_type = unit @$ bot in - fun () -> Ex_stack_and_cont {stack; cont; stack_type}) - () - - let () = - let model = - Interpreter_model.Models.max_branching_model - ~case_0:"empty_const" - ~case_1:"nonempty_const" - "N_KIter" - in - register_model_for_code_generation model - - let () = - (* - KList_enter_body ([()], bot accumulator case) -> step - KHalt -> next - KList_exit_body ([], []) -> - KList_enter_body ([], [()] -> - List.rev singleton - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KList_enter_body - ~salt:"_singleton_list" - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let kbody = halt in - fun () -> - let cont = - KList_enter_body - (kbody, [()], Script_list.empty, Some (list unit), 1, KNil) - in - Ex_stack_and_cont - {stack = ((), eos); stack_type = unit @$ bot; cont}) - () - - let () = - (* - KList_enter_body (empty list, nonempty accumulator case) -> - {List.rev n elements} -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KList_enter_body - ~salt:"_terminal" - ~cont_and_stack_sampler:(fun cfg rng_state -> - let _, (module Samplers) = make_default_samplers cfg.sampler in - let kbody = halt in - fun () -> - let ys = Samplers.Random_value.value (list unit) rng_state in - let cont = - KList_enter_body (kbody, [], ys, Some (list unit), ys.length, KNil) - in - Ex_stack_and_cont - {stack = ((), eos); stack_type = unit @$ bot; cont}) - () - - let () = - (* - KList_enter_body (empty list, bot accumulator case) -> - {List.rev singleton} -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~intercept:true - ~name:Interpreter_workload.N_KList_enter_body - ~salt:"_terminal" - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let kbody = halt in - fun () -> - let cont = - KList_enter_body - (kbody, [], Script_list.empty, Some (list unit), 1, KNil) - in - Ex_stack_and_cont - {stack = ((), eos); stack_type = unit @$ bot; cont}) - () - - let () = - (* - KList_exit_body (empty list) -> next - KList_enter_body -> - {List.rev 1 element} -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~intercept:true - ~name:Interpreter_workload.N_KList_exit_body - ~salt:"_terminal" - ~cont_and_stack_sampler:(fun _cfg _rng_state -> - let kbody = halt in - let cont = - KList_exit_body - (kbody, [], Script_list.empty, Some (list unit), 1, KNil) - in - fun () -> - Ex_stack_and_cont - {stack = ((), ((), eos)); stack_type = unit @$ unit @$ bot; cont}) - () - - let stack_type = cpair int unit @$ unit @$ bot - - let map_enter_body_code = - let kbody = ICdr (dummy_loc, halt) in - fun accu -> - KMap_enter_body - (kbody, accu, Script_map.empty int, Some (map int unit), KNil) - - let () = - (* - KMap_enter_body (empty case) -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KMap_enter_body - ~salt:"_empty" - ~cont_and_stack_sampler:(fun _cfg _rng_state () -> - Ex_stack_and_cont - { - stack = ((), eos); - stack_type = unit @$ bot; - cont = map_enter_body_code []; - }) - () - - let () = - (* - KMap_enter_body (singleton case) -> step - KCdr -> step - KHalt -> next - KMap_exit_body -> next - (map_update) - KMap_enter_body (empty case) -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KMap_enter_body - ~salt:"_singleton" - ~cont_and_stack_sampler:(fun _cfg _rng_state () -> - Ex_stack_and_cont - { - stack = ((), eos); - stack_type = unit @$ bot; - cont = map_enter_body_code [(Script_int.zero, ())]; - }) - () - - let () = - (* - KMap_exit_body -> - (map_update) -> next - KMap_enter_body (empty case) -> next - KNil - *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KMap_exit_body - ~cont_and_stack_sampler:(fun cfg rng_state -> - let kbody = ICdr (dummy_loc, halt) in - fun () -> - let ty = map int unit in - let key, map = Maps.generate_map_and_key_not_in_map cfg rng_state in - let cont = KMap_exit_body (kbody, [], map, key, Some ty, KNil) in - Ex_stack_and_cont - {stack = ((), ((), eos)); stack_type = unit @$ unit @$ bot; cont}) - () - - let () = - (* KMap_head -> KNil *) - continuation_time_alloc_benchmark - ~amplification:100 - ~name:Interpreter_workload.N_KMap_head - ~cont_and_stack_sampler:(fun _cfg _rng_state () -> - let cont = KMap_head (Option.some, KNil) in - Ex_stack_and_cont - {stack = ((), ((), eos)); stack_type = unit @$ unit @$ bot; cont}) - () - end - - let () = - simple_time_alloc_benchmark - ~name:Interpreter_workload.N_IEmit - ~stack_type:(unit_t @$ bot) - ~kinstr: - (IEmit - { - ty = unit_t; - k = halt; - loc = dummy_loc; - tag = Entrypoint_repr.default; - unparsed_ty = Script_repr.unit; - }) - () -end diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_model.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_model.ml deleted file mode 100644 index 0100cd5898be64031ed19ead734791f786a5aea6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_model.ml +++ /dev/null @@ -1,851 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let ns = Namespace.make Registration_helpers.ns "interpreter" - -let fv s = Free_variable.of_namespace (ns s) - -(* ------------------------------------------------------------------------- *) - -let trace_error expected given = - let open Interpreter_workload in - let exp = string_of_instr_or_cont expected in - let given = string_of_instr_or_cont given in - let msg = - Format.asprintf - "Interpreter_model: trace error, expected %s, given %s" - exp - given - in - Stdlib.failwith msg - -let arity_error instr expected given = - let open Interpreter_workload in - let s = string_of_instr_or_cont instr in - let msg = - Format.asprintf - "Interpreter_model: arity error (%s), expected %d, given %a" - s - expected - Interpreter_workload.pp_args - given - in - Stdlib.failwith msg - -(* ------------------------------------------------------------------------- *) - -let arity_to_int : type a b c. (a, b, c) Model.arity -> int = - fun arity -> - let rec aux : type x y z. int -> (x, y, z) Model.arity -> int = - fun i -> function - | Model.Zero_arity -> i - | Succ_arity arity -> aux (i + 1) arity - in - aux 0 arity - -let model_with_conv : - type a. - Interpreter_workload.instr_or_cont_name -> - a Model.model -> - Interpreter_workload.ir_sized_step Model.t = - fun instr model -> - let open Interpreter_workload in - let module M = (val model) in - let module I = Model.Instantiate (Costlang.Void) (M) in - let arity_init = I.arity in - let rec make_args : - type x y z. arg list -> arg list -> (x, y, z) Model.arity -> z = - fun args_init args arity -> - match (args, arity) with - | [], Zero_arity -> () - | {arg; _} :: l, Succ_arity arity -> (arg, make_args args_init l arity) - | _ -> arity_error instr (arity_to_int arity_init) args_init - in - let conv {name; args} = - if name = instr then make_args args args arity_init - else trace_error instr name - in - Model.make ~conv model - -let sf = Format.asprintf - -let division_cost name = - let const = fv (sf "%s_const" name) in - let size1_coeff = fv (sf "%s_size1_coeff" name) in - let q_coeff = fv (sf "%s_q_coeff" name) in - let q_size2_coeff = fv (sf "%s_q_size2_coeff" name) in - let module M = struct - type arg_type = int * (int * unit) - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - (* Actual [ediv] implementation uses different algorithms - depending on the size of the arguments. - Ideally, the cost function should be the combination of - multiple affine functions branching on the arguments, - but the current model fits with only one affine function for simplicity. - For more discussion, see https://gitlab.com/tezos/tezos/-/issues/5480 *) - let model = - lam ~name:"size1" @@ fun size1 -> - lam ~name:"size2" @@ fun size2 -> - (* Note that [q] is guaranteed to be non-negative because we use - saturated subtraction. When [size1 < size2], the model evaluates to - [const] as expected. *) - let_ ~name:"q" (sat_sub size1 size2) @@ fun q -> - (free ~name:q_size2_coeff * q * size2) - + (free ~name:size1_coeff * size1) - + (free ~name:q_coeff * q) - + free ~name:const - end - - let name = ns name - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - -let ediv_nat_alloc name = - let const = fv (sf "%s_const" name) in - let coeff1 = fv (sf "%s_coeff1" name) in - let coeff2 = fv (sf "%s_coeff2" name) in - let module M = struct - type arg_type = int * (int * unit) - - let name = ns name - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun size1 -> - lam ~name:"size2" @@ fun size2 -> - if_ - (lt size2 size1) - ((free ~name:coeff1 * size1) + (free ~name:coeff2 * size2)) - (int 0) - + free ~name:const - end - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - -let get_mem_alloc_const_model name = - let const = fv (sf "%s_const" name) in - let module M = struct - type arg_type = int * (int * unit) - - let name = ns name - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun (_size1 : size repr) -> - lam ~name:"size2" @@ fun (_size1 : size repr) -> free ~name:const - end - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - -let update_alloc_model name = - let const = fv (sf "%s_const" name) in - let coeff = fv (sf "%s_coeff" name) in - let module M = struct - type arg_type = int * (int * unit) - - let name = ns name - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun (_size1 : size repr) -> - lam ~name:"size2" @@ fun size2 -> - (free ~name:coeff * log2 (int 1 + size2)) + free ~name:const - end - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - -let addlogadd name = - let const = fv (sf "%s_const" name) in - let coeff = fv (sf "%s_coeff" name) in - let module M = struct - type arg_type = int * (int * unit) - - let name = ns name - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun size1 -> - lam ~name:"size2" @@ fun size2 -> - let_ ~name:"a" (size1 + size2) @@ fun a -> - (free ~name:coeff * (a * log2 (int 1 + a))) + free ~name:const - end - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - -let name_of_instr_or_cont instr_or_cont = - Interpreter_workload.string_of_instr_or_cont instr_or_cont - -module Models = struct - let const1_model name = - (* For constant-time instructions *) - Model.unknown_const1 ~name:(ns name) ~const:(fv (sf "%s_const" name)) - - let const1_skip1_model name = - (* For constant-time instructions *) - Model.unknown_const1_skip1 ~name:(ns name) ~const:(fv (sf "%s_const" name)) - - let const1_skip2_model name = - (* For constant-time instructions *) - Model.unknown_const1_skip2 ~name:(ns name) ~const:(fv (sf "%s_const" name)) - - let affine_model name = - (* For instructions with cost function - [\lambda size. const + coeff * size] *) - Model.affine - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - - let affine_offset_model name ~offset = - (* For instructions with cost function - [\lambda size. const + coeff * (size - offset)] *) - Model.affine_offset - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - ~offset - - let break_model name break = - Model.breakdown - ~name:(ns name) - ~coeff1:(fv (sf "%s_coeff1" name)) - ~coeff2:(fv (sf "%s_coeff2" name)) - ~break - - let break_model_2 name break1 break2 = - Model.breakdown2 - ~name:(ns name) - ~coeff1:(fv (sf "%s_coeff1" name)) - ~coeff2:(fv (sf "%s_coeff2" name)) - ~coeff3:(fv (sf "%s_coeff3" name)) - ~break1 - ~break2 - - let break_model_2_const name break1 break2 = - Model.breakdown2_const - ~name:(ns name) - ~coeff1:(fv (sf "%s_coeff1" name)) - ~coeff2:(fv (sf "%s_coeff2" name)) - ~coeff3:(fv (sf "%s_coeff3" name)) - ~const:(fv (sf "%s_const" name)) - ~break1 - ~break2 - - let break_model_2_const_offset name break1 break2 ~offset = - Model.breakdown2_const_offset - ~name:(ns name) - ~coeff1:(fv (sf "%s_coeff1" name)) - ~coeff2:(fv (sf "%s_coeff2" name)) - ~coeff3:(fv (sf "%s_coeff3" name)) - ~const:(fv (sf "%s_const" name)) - ~break1 - ~break2 - ~offset - - let nlogm_model name = - (* For instructions with cost function - [\lambda size1. \lambda size2. const + coeff * size1 log2(size2)] *) - Model.nlogm - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - - let concat_model name = - Model.bilinear_affine - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff1:(fv (sf "%s_total_bytes" name)) - ~coeff2:(fv (sf "%s_list_length" name)) - - let bilinear_affine_model name = - Model.bilinear_affine - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff1:(fv (sf "%s_coeff1" name)) - ~coeff2:(fv (sf "%s_coeff2" name)) - - let affine_skip1_model name = - Model.affine_skip1 - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - - let linear_sum_model name = - Model.linear_sum - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - - let linear_max_model name = - (* For instructions with cost function - [\lambda size1. \lambda size2. const + coeff * max(size1,size2)] *) - Model.linear_max - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - - let linear_min_model name = - (* For instructions with cost function - [\lambda size1. \lambda size2. const + coeff * min(size1,size2)] *) - Model.linear_min - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - - let linear_min_offset_model name ~offset = - (* For instructions with cost function - [\lambda size1. \lambda size2. const + coeff * (min(size1,size2) - offset)] *) - Model.linear_min_offset - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff:(fv (sf "%s_coeff" name)) - ~offset - - let pack_model name = - Model.trilinear - ~name:(ns name) - ~coeff1:(fv (sf "%s_micheline_nodes" name)) - ~coeff2:(fv (sf "%s_micheline_int_bytes" name)) - ~coeff3:(fv (sf "%s_micheline_string_bytes" name)) - - let open_chest_model name = - let module M = struct - type arg_type = int * (int * unit) - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun size1 -> - lam ~name:"size2" @@ fun size2 -> - free ~name:(fv (sf "%s_const" name)) - + free ~name:(fv (sf "%s_log_time_coeff" name)) - * sat_sub size1 (int 1) - + (free ~name:(fv (sf "%s_plaintext_coeff" name)) * size2) - end - - let name = ns name - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - - let verify_update_model name = - Model.bilinear_affine - ~name:(ns name) - ~intercept:(fv (sf "%s_const" name)) - ~coeff1:(fv (sf "%s_inputs" name)) - ~coeff2:(fv (sf "%s_outputs" name)) - - let list_enter_body_model name = - let module M = struct - type arg_type = int * (int * unit) - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size_xs" @@ fun size_xs -> - lam ~name:"size_ys" @@ fun size_ys -> - if_ - (eq size_xs (int 0)) - (free ~name:(fv (sf "%s_const" name)) - + (free ~name:(fv (sf "%s_coeff" name)) * size_ys)) - (free ~name:(fv (sf "%s_iter" name))) - end - - let name = ns name - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - - let branching_model ~case_0 ~case_1 name = - let module M = struct - type arg_type = int * unit - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size - - let arity = Model.arity_1 - - let model = - lam ~name:"size" @@ fun size -> - if_ - (eq size (int 0)) - (free ~name:(fv (sf "%s_%s" name case_0))) - (free ~name:(fv (sf "%s_%s" name case_1))) - end - - let name = ns name - end in - (module M : Model.Model_impl with type arg_type = int * unit) - - let empty_branch_model name = - branching_model ~case_0:"empty" ~case_1:"nonempty" name - - let max_branching_model ~case_0 ~case_1 name = - let module M = struct - type arg_type = unit - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size - - let arity = Model.arity_0 - - let model = - max - (free ~name:(fv (sf "%s_%s" name case_0))) - (free ~name:(fv (sf "%s_%s" name case_1))) - end - - let name = ns name - end in - (module M : Model.Model_impl with type arg_type = unit) - - let lambda_model name = - (* branch whether lambda is rec or nonrec *) - branching_model ~case_0:"lam" ~case_1:"lamrec" name - - let join_tickets_model name = - let module M = struct - type arg_type = int * (int * (int * (int * unit))) - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size -> size -> size - - let arity = Model.Succ_arity Model.arity_3 - - let model = - lam ~name:"content_size_x" @@ fun content_size_x -> - lam ~name:"content_size_y" @@ fun content_size_y -> - lam ~name:"amount_size_x" @@ fun amount_size_x -> - lam ~name:"amount_size_y" @@ fun amount_size_y -> - free ~name:(fv (sf "%s_const" name)) - + free ~name:(fv (sf "%s_compare_coeff" name)) - * min content_size_x content_size_y - + free ~name:(fv (sf "%s_add_coeff" name)) - * max amount_size_x amount_size_y - end - - let name = ns name - end in - (module M : Model.Model_impl - with type arg_type = int * (int * (int * (int * unit)))) - - let join_tickets_alloc_model name = - let module M = struct - type arg_type = int * (int * (int * (int * unit))) - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size -> size -> size - - let arity = Model.Succ_arity Model.arity_3 - - let model = - lam ~name:"content_size_x" @@ fun (_ : size repr) -> - lam ~name:"content_size_y" @@ fun (_ : size repr) -> - lam ~name:"amount_size_x" @@ fun amount_size_x -> - lam ~name:"amount_size_y" @@ fun amount_size_y -> - free ~name:(fv (sf "%s_const" name)) - + free ~name:(fv (sf "%s_add_coeff" name)) - * max amount_size_x amount_size_y - end - - let name = ns name - end in - (module M : Model.Model_impl - with type arg_type = int * (int * (int * (int * unit)))) - - (* Almost [Model.bilinear_affine] but the intercept is not at 0s - but size1=0 and size2=1 *) - let lsl_bytes_model name = - let intercept = fv (sf "%s_const" name) in - let coeff1 = fv (sf "%s_bytes" name) in - let coeff2 = fv (sf "%s_shift" name) in - let module M = struct - type arg_type = int * (int * unit) - - let name = ns name - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun size1 -> - lam ~name:"size2" @@ fun size2 -> - free ~name:intercept - + (free ~name:coeff1 * size1) - + (free ~name:coeff2 * sat_sub size2 (int 1)) - end - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) - - (* The intercept is not at 0s but size1=0 and size2=1 *) - let lsr_bytes_model name = - let const = fv (sf "%s_const" name) in - let coeff = fv (sf "%s_coeff" name) in - let module M = struct - type arg_type = int * (int * unit) - - let takes_saturation_reprs = false - - module Def (X : Costlang.S) = struct - open X - - type model_type = size -> size -> size - - let arity = Model.arity_2 - - let model = - lam ~name:"size1" @@ fun size1 -> - lam ~name:"size2" @@ fun size2 -> - (* Note that [q] is guaranteed to be non-negative because we use - saturated subtraction. When [size1 < size2], the model evaluates to - [const] as expected. *) - let_ ~name:"q" (sat_sub size1 (size2 * float 0.125)) @@ fun q -> - free ~name:const + (free ~name:coeff * q) - end - - let name = ns name - end in - (module M : Model.Model_impl with type arg_type = int * (int * unit)) -end - -type ir_model = - | TimeModel : 'a Model.model -> ir_model - | TimeAllocModel : { - name : Namespace.t; (* name for synthesized model *) - time : 'a Model.model; - alloc : 'a Model.model; - } - -> ir_model - -let ir_model instr_or_cont = - let open Interpreter_workload in - let open Models in - let name = name_of_instr_or_cont instr_or_cont in - let m2 name (time, alloc) = - (* TODO: https://gitlab.com/tezos/tezos/-/issues/6072 - Change naming convention. - The current naming convention is for backward compatibility. - When we finally switch to the time-allocation model, - "_synthesized" should be removed and the time model should be qualified with "_time" - *) - TimeAllocModel - { - name = ns (name ^ "_synthesized"); - time = time name; - alloc = alloc (name ^ "_alloc"); - } - in - match instr_or_cont with - | Instr_name instr -> ( - match instr with - | N_IDrop | N_IDup | N_ISwap | N_IPush | N_IUnit | N_ICons_pair | N_ICar - | N_ICdr | N_ICons_some | N_ICons_none | N_IIf_none | N_ILeft | N_IRight - | N_IIf_left | N_ICons_list | N_INil | N_IIf_cons | N_IEmpty_set - | N_IEmpty_map | N_IEmpty_big_map | N_IOr | N_IAnd | N_IXor | N_INot - | N_IIf | N_ILoop_in | N_ILoop_out | N_ILoop_left_in | N_ILoop_left_out - | N_IDip | N_IExec | N_IView | N_IFailwith | N_IAddress - | N_ICreate_contract | N_ISet_delegate | N_INow | N_IMin_block_time - | N_IBalance | N_IHash_key | N_IUnpack | N_ISource | N_ISender | N_ISelf - | N_IAmount | N_IChainId | N_ILevel | N_ISelf_address | N_INever - | N_IUnpair | N_IVoting_power | N_ITotal_voting_power | N_IList_size - | N_ISet_size | N_IMap_size | N_ISapling_empty_state -> - (const1_model, const1_model) |> m2 name - | N_ISet_mem | N_IMap_mem | N_IMap_get | N_IBig_map_mem | N_IBig_map_get - -> - (nlogm_model, get_mem_alloc_const_model) |> m2 name - | N_ISet_update | N_IMap_update | N_IBig_map_update - | N_IMap_get_and_update | N_IBig_map_get_and_update -> - (nlogm_model, update_alloc_model) |> m2 name - | N_IConcat_string -> (concat_model, concat_model) |> m2 name - | N_IConcat_string_pair -> (linear_sum_model, linear_sum_model) |> m2 name - | N_ISlice_string -> (affine_model, affine_model) |> m2 name - | N_IString_size -> (const1_model, const1_model) |> m2 name - | N_IConcat_bytes -> (concat_model, concat_model) |> m2 name - | N_IConcat_bytes_pair -> (linear_sum_model, linear_sum_model) |> m2 name - | N_ISlice_bytes -> (affine_model, affine_model) |> m2 name - | N_IBytes_size -> (const1_model, const1_model) |> m2 name - | N_IOr_bytes -> (linear_max_model, linear_max_model) |> m2 name - | N_IAnd_bytes -> (linear_min_model, linear_min_model) |> m2 name - | N_IXor_bytes -> (linear_max_model, linear_max_model) |> m2 name - | N_INot_bytes -> (affine_model, affine_model) |> m2 name - | N_ILsl_bytes -> (lsl_bytes_model, lsl_bytes_model) |> m2 name - | N_ILsr_bytes -> (lsr_bytes_model, lsr_bytes_model) |> m2 name - | N_IBytes_nat | N_INat_bytes | N_IBytes_int | N_IInt_bytes -> - (affine_model, affine_model) |> m2 name - | N_IAdd_seconds_to_timestamp | N_IAdd_timestamp_to_seconds - | N_ISub_timestamp_seconds | N_IDiff_timestamps -> - (linear_max_model, linear_max_model) |> m2 name - | N_IAdd_tez | N_ISub_tez | N_ISub_tez_legacy | N_IEdiv_tez - | N_IMul_teznat | N_IMul_nattez | N_IEdiv_teznat -> - (const1_model, const1_model) |> m2 name - | N_IIs_nat -> (const1_model, const1_model) |> m2 name - | N_INeg -> (affine_model, affine_model) |> m2 name - | N_IAbs_int -> (affine_model, affine_model) |> m2 name - | N_IInt_nat -> (const1_model, const1_model) |> m2 name - | N_IAdd_int -> (linear_max_model, linear_max_model) |> m2 name - | N_IAdd_nat -> (linear_max_model, linear_max_model) |> m2 name - | N_ISub_int -> (linear_max_model, linear_max_model) |> m2 name - | N_IMul_int -> (addlogadd, linear_sum_model) |> m2 name - | N_IMul_nat -> (addlogadd, linear_sum_model) |> m2 name - | N_IEdiv_int -> (division_cost, linear_max_model) |> m2 name - | N_IEdiv_nat -> (division_cost, ediv_nat_alloc) |> m2 name - | N_ILsl_nat -> - (* The interpreter limits the amount of shfit to 256 *) - (affine_model, affine_model) |> m2 name - | N_ILsr_nat -> (affine_model, affine_model) |> m2 name - | N_IOr_nat -> (linear_max_model, linear_max_model) |> m2 name - | N_IAnd_nat -> (linear_min_model, linear_min_model) |> m2 name - | N_IAnd_int_nat -> (linear_min_model, affine_skip1_model) |> m2 name - | N_IXor_nat -> (linear_max_model, linear_max_model) |> m2 name - | N_INot_int -> (affine_model, affine_model) |> m2 name - | N_ICompare -> - (linear_min_offset_model ~offset:1, const1_skip2_model) |> m2 name - | N_IEq | N_INeq | N_ILt | N_IGt | N_ILe | N_IGe -> - (const1_model, const1_model) |> m2 name - | N_IPack -> (pack_model, pack_model) |> m2 name - | N_IBlake2b | N_ISha256 | N_ISha512 | N_IKeccak | N_ISha3 -> - (affine_model, const1_skip1_model) |> m2 name - | N_ICheck_signature_ed25519 | N_ICheck_signature_secp256k1 - | N_ICheck_signature_p256 | N_ICheck_signature_bls -> - (affine_model, const1_skip1_model) |> m2 name - | N_IContract | N_ITransfer_tokens | N_IImplicit_account -> - (const1_model, const1_model) |> m2 name - (* The following two instructions are expected to have an affine model. However, - we observe 3 affine parts, on [0;300], [300;400] and [400;\inf[. *) - | N_IDupN -> - ( (fun name -> break_model_2_const_offset name 300 400 ~offset:1), - fun name -> break_model_2_const_offset name 300 400 ~offset:1 ) - |> m2 name - | N_IDropN -> - ( (fun name -> break_model_2_const name 300 400), - fun name -> break_model_2_const name 300 400 ) - |> m2 name - | N_IDig | N_IDug | N_IDipN -> (affine_model, affine_model) |> m2 name - | N_IAdd_bls12_381_g1 | N_IAdd_bls12_381_g2 | N_IAdd_bls12_381_fr - | N_IMul_bls12_381_g1 | N_IMul_bls12_381_g2 | N_IMul_bls12_381_fr - | N_INeg_bls12_381_g1 | N_INeg_bls12_381_g2 | N_INeg_bls12_381_fr - | N_IInt_bls12_381_z_fr -> - (const1_model, const1_model) |> m2 name - | N_IMul_bls12_381_fr_z | N_IMul_bls12_381_z_fr - | N_IPairing_check_bls12_381 -> - (affine_model, const1_skip1_model) |> m2 name - | N_IComb | N_IUncomb -> - (affine_offset_model ~offset:2, affine_model) |> m2 name - | N_IComb_get | N_IComb_set -> (affine_model, affine_model) |> m2 name - | N_ITicket | N_IRead_ticket -> (const1_model, const1_model) |> m2 name - | N_ISplit_ticket -> (linear_max_model, const1_skip2_model) |> m2 name - | N_IJoin_tickets -> - (join_tickets_model, join_tickets_alloc_model) |> m2 name - | N_ISapling_verify_update -> - (verify_update_model, verify_update_model) |> m2 name - | N_IList_map -> (const1_model, const1_model) |> m2 name - | N_IList_iter | N_IIter -> (const1_model, const1_model) |> m2 name - | N_IMap_map -> (affine_model, const1_skip1_model) |> m2 name - | N_IMap_iter -> (affine_model, const1_skip1_model) |> m2 name - | N_ISet_iter -> (affine_model, const1_skip1_model) |> m2 name - | N_IHalt -> (const1_model, const1_model) |> m2 name - | N_IApply -> (lambda_model, lambda_model) |> m2 name - | N_ILambda_lam | N_ILambda_lamrec | N_ILog -> - (const1_model, const1_model) |> m2 name - | N_IOpen_chest -> (open_chest_model, open_chest_model) |> m2 name - | N_IEmit | N_IOpt_map_none | N_IOpt_map_some -> - (const1_model, const1_model) |> m2 name) - | Cont_name cont -> ( - match cont with - | N_KNil | N_KCons | N_KReturn | N_KView_exit | N_KMap_head | N_KUndip - | N_KLoop_in | N_KLoop_in_left | N_KIter_empty | N_KIter_nonempty -> - (const1_model, const1_model) |> m2 name - | N_KList_enter_body -> - (list_enter_body_model, list_enter_body_model) |> m2 name - | N_KList_exit_body -> (const1_model, const1_model) |> m2 name - | N_KMap_enter_body -> (empty_branch_model, empty_branch_model) |> m2 name - | N_KMap_exit_body -> (nlogm_model, update_alloc_model) |> m2 name - | N_KLog -> (const1_model, const1_model) |> m2 name) - -module SynthesizeTimeAlloc : Model.Binary_operation = struct - module Def (X : Costlang.S) = struct - let op time alloc = X.(max time alloc) - end -end - -let pack_time_model = function - | TimeModel m -> Model.Model m - | TimeAllocModel {time; _} -> Model.Model time - -let pack_alloc_model = function - | TimeModel _ -> assert false - | TimeAllocModel {alloc; _} -> Model.Model alloc - -let pack_time_alloc_model = function - | TimeModel _ -> assert false - | TimeAllocModel {name; time; alloc} -> - Model.Model - (Model.synthesize - ~name - ~binop:(module SynthesizeTimeAlloc) - ~x_label:"time" - ~x_model:time - ~y_label:"alloc" - ~y_model:alloc) - -let amplification_loop_iteration = fv "amplification_loop_iteration" - -let amplification_loop_model = - Model.make - ~conv:(fun iterations -> (iterations, ())) - (Model.linear - ~name:(ns "amplification_loop_model") - ~coeff:amplification_loop_iteration) - -(* The following model stitches together the per-instruction models and - adds a term corresponding to the amplification (if needed). *) -let interpreter_model ?amplification pack_model sub_model = - Model.make_aggregated - ~model:(fun trace -> - let module Def (X : Costlang.S) = struct - type t = X.size X.repr - - let applied = - let initial = - match amplification with - | None -> X.int 0 - | Some amplification_factor -> - let (module Amplification_applied) = - Model.apply amplification_loop_model amplification_factor - in - let module Amplification_result = Amplification_applied (X) in - Amplification_result.applied - in - List.fold_left - (fun (acc : X.size X.repr) instr_trace -> - let name = instr_trace.Interpreter_workload.name in - let (Model.Model model) = pack_model (ir_model name) in - let (module Applied_instr) = - Model.apply (model_with_conv name model) instr_trace - in - let module R = Applied_instr (X) in - X.(acc + R.applied)) - initial - trace - end in - ((module Def) : Model.applied)) - ~sub_models:[pack_model sub_model] - -type benchmark_type = Registration_helpers.benchmark_type = Time | Alloc - -let make_time_model ?amplification instr_name = - let ir_model = ir_model instr_name in - [("interpreter", interpreter_model ?amplification pack_time_model ir_model)] - -let make_alloc_model instr_name = - let ir_model = ir_model instr_name in - [("interpreter", interpreter_model pack_alloc_model ir_model)] - -let make_model ?amplification benchmark_type instr_name = - match benchmark_type with - | Time -> make_time_model ?amplification instr_name - | Alloc -> - (* amplification wouldn't make sense, - because the measurement resolution doesn't matter for the allocation *) - assert (amplification = None) ; - make_alloc_model instr_name - -let make_time_alloc_codegen_model instr_name = - pack_time_alloc_model (ir_model instr_name) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_workload.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_workload.ml deleted file mode 100644 index c7c16d355f913efd36cb3ce008a4efe196719529..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/interpreter_workload.ml +++ /dev/null @@ -1,1717 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* Copyright (c) 2022 DaiLambda, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -module Size = Gas_input_size - -(* ------------------------------------------------------------------------- *) - -type id = string - -let pp_id = Format.pp_print_string - -let equal_id = String.equal - -(* ------------------------------------------------------------------------- *) -(* Names of IR instructions together with sizes of their operands as - encountered during evaluation. *) - -type instruction_name = - (* stack ops *) - | N_IDrop - | N_IDup - | N_ISwap - | N_IPush - | N_IUnit - (* pairs *) - | N_ICons_pair - | N_ICar - | N_ICdr - | N_IUnpair - (* options *) - | N_ICons_some - | N_ICons_none - | N_IIf_none - | N_IOpt_map_none - | N_IOpt_map_some - (* ors *) - | N_ILeft - | N_IRight - | N_IIf_left - (* lists *) - | N_ICons_list - | N_INil - | N_IIf_cons - | N_IList_map - | N_IList_iter - | N_IIter - | N_IList_size - (* sets *) - | N_IEmpty_set - | N_ISet_iter - | N_ISet_mem - | N_ISet_update - | N_ISet_size - (* maps *) - | N_IEmpty_map - | N_IMap_map - | N_IMap_iter - | N_IMap_mem - | N_IMap_get - | N_IMap_update - | N_IMap_get_and_update - | N_IMap_size - (* big maps *) - | N_IEmpty_big_map - | N_IBig_map_mem - | N_IBig_map_get - | N_IBig_map_update - | N_IBig_map_get_and_update - (* string operations *) - | N_IConcat_string - | N_IConcat_string_pair - | N_ISlice_string - | N_IString_size - (* bytes operations *) - | N_IConcat_bytes - | N_IConcat_bytes_pair - | N_ISlice_bytes - | N_IBytes_size - | N_IOr_bytes - | N_IAnd_bytes - | N_IXor_bytes - | N_INot_bytes - | N_ILsl_bytes - | N_ILsr_bytes - | N_IBytes_nat - | N_INat_bytes - | N_IBytes_int - | N_IInt_bytes - (* timestamp operations *) - | N_IAdd_seconds_to_timestamp - | N_IAdd_timestamp_to_seconds - | N_ISub_timestamp_seconds - | N_IDiff_timestamps - (* currency operations *) - | N_IAdd_tez - | N_ISub_tez - | N_ISub_tez_legacy - | N_IMul_teznat - | N_IMul_nattez - | N_IEdiv_teznat - | N_IEdiv_tez - (* boolean operations - assumed O(1) *) - | N_IOr - | N_IAnd - | N_IXor - | N_INot - (* integer operations *) - | N_IIs_nat - | N_INeg - | N_IAbs_int - | N_IInt_nat - | N_IAdd_int - | N_IAdd_nat - | N_ISub_int - | N_IMul_int - | N_IMul_nat - | N_IEdiv_int - | N_IEdiv_nat - | N_ILsl_nat - | N_ILsr_nat - | N_IOr_nat - | N_IAnd_nat - | N_IAnd_int_nat - | N_IXor_nat - | N_INot_int - (* control *) - | N_IIf - | N_ILoop_in - | N_ILoop_out - | N_ILoop_left_in - | N_ILoop_left_out - | N_IDip - | N_IExec - | N_IApply - | N_ILambda_lam - | N_ILambda_lamrec - | N_IFailwith - (* comparison, warning: ad-hoc polymorphic instruction *) - | N_ICompare - (* comparators *) - | N_IEq - | N_INeq - | N_ILt - | N_IGt - | N_ILe - | N_IGe - (* protocol *) - | N_IAddress - | N_IContract - | N_ITransfer_tokens - | N_IImplicit_account - | N_ICreate_contract - | N_ISet_delegate - (* time *) - | N_INow - | N_IMin_block_time - (* other *) - | N_IBalance - | N_ILevel - | N_IView - (* We specialize the check-signature instruction for each crypto scheme. *) - | N_ICheck_signature_ed25519 - | N_ICheck_signature_secp256k1 - | N_ICheck_signature_p256 - | N_ICheck_signature_bls - | N_IHash_key - | N_IPack - | N_IUnpack - | N_IBlake2b - | N_ISha256 - | N_ISha512 - | N_ISource - | N_ISender - | N_ISelf - | N_ISelf_address - | N_IAmount - | N_ISapling_empty_state - | N_ISapling_verify_update - | N_IDig - | N_IDug - | N_IDipN - | N_IDropN - | N_IChainId - | N_INever - | N_IVoting_power - | N_ITotal_voting_power - | N_IKeccak - | N_ISha3 - (* Elliptic curves *) - | N_IAdd_bls12_381_g1 - | N_IAdd_bls12_381_g2 - | N_IAdd_bls12_381_fr - | N_IMul_bls12_381_g1 - | N_IMul_bls12_381_g2 - | N_IMul_bls12_381_fr - | N_INeg_bls12_381_g1 - | N_INeg_bls12_381_g2 - | N_INeg_bls12_381_fr - | N_IMul_bls12_381_fr_z - | N_IMul_bls12_381_z_fr - | N_IInt_bls12_381_z_fr - | N_IPairing_check_bls12_381 - (* Combs *) - | N_IComb - | N_IUncomb - | N_IComb_get - | N_IComb_set - | N_IDupN - (* Tickets *) - | N_ITicket - | N_IRead_ticket - | N_ISplit_ticket - | N_IJoin_tickets - (* Misc *) - | N_IHalt - | N_ILog - (* Timelock*) - | N_IOpen_chest - (* Event *) - | N_IEmit - -type continuation_name = - | N_KNil - | N_KCons - | N_KReturn - | N_KView_exit - | N_KMap_head - | N_KUndip - | N_KLoop_in - | N_KLoop_in_left - | N_KIter_empty - | N_KIter_nonempty - | N_KList_enter_body - | N_KList_exit_body - | N_KMap_enter_body - | N_KMap_exit_body - | N_KLog - -and instr_or_cont_name = - | Instr_name of instruction_name - | Cont_name of continuation_name - -(* ------------------------------------------------------------------------- *) -(* Code that ought to be auto-generated *) - -let string_of_instruction_name : instruction_name -> string = - fun ir -> - match ir with - | N_IDrop -> "N_IDrop" - | N_IDup -> "N_IDup" - | N_ISwap -> "N_ISwap" - | N_IPush -> "N_IPush" - | N_IUnit -> "N_IUnit" - | N_ICons_pair -> "N_ICons_pair" - | N_ICar -> "N_ICar" - | N_ICdr -> "N_ICdr" - | N_ICons_some -> "N_ICons_some" - | N_ICons_none -> "N_ICons_none" - | N_IIf_none -> "N_IIf_none" - | N_IOpt_map_none -> "N_IOpt_map_none" - | N_IOpt_map_some -> "N_IOpt_map_some" - | N_ILeft -> "N_ILeft" - | N_IRight -> "N_IRight" - | N_IIf_left -> "N_IIf_left" - | N_ICons_list -> "N_ICons_list" - | N_INil -> "N_INil" - | N_IIf_cons -> "N_IIf_cons" - | N_IList_map -> "N_IList_map" - | N_IList_iter -> "N_IList_iter" - | N_IIter -> "N_IIter" - | N_IList_size -> "N_IList_size" - | N_IEmpty_set -> "N_IEmpty_set" - | N_ISet_iter -> "N_ISet_iter" - | N_ISet_mem -> "N_ISet_mem" - | N_ISet_update -> "N_ISet_update" - | N_ISet_size -> "N_ISet_size" - | N_IEmpty_map -> "N_IEmpty_map" - | N_IMap_map -> "N_IMap_map" - | N_IMap_iter -> "N_IMap_iter" - | N_IMap_mem -> "N_IMap_mem" - | N_IMap_get -> "N_IMap_get" - | N_IMap_update -> "N_IMap_update" - | N_IMap_size -> "N_IMap_size" - | N_IEmpty_big_map -> "N_IEmpty_big_map" - | N_IBig_map_mem -> "N_IBig_map_mem" - | N_IBig_map_get -> "N_IBig_map_get" - | N_IBig_map_update -> "N_IBig_map_update" - | N_IConcat_string -> "N_IConcat_string" - | N_IConcat_string_pair -> "N_IConcat_string_pair" - | N_ISlice_string -> "N_ISlice_string" - | N_IString_size -> "N_IString_size" - | N_IConcat_bytes -> "N_IConcat_bytes" - | N_IConcat_bytes_pair -> "N_IConcat_bytes_pair" - | N_ISlice_bytes -> "N_ISlice_bytes" - | N_IBytes_size -> "N_IBytes_size" - | N_IOr_bytes -> "N_IOr_bytes" - | N_IAnd_bytes -> "N_IAnd_bytes" - | N_IXor_bytes -> "N_IXor_bytes" - | N_INot_bytes -> "N_INot_bytes" - | N_ILsl_bytes -> "N_ILsl_bytes" - | N_ILsr_bytes -> "N_ILsr_bytes" - | N_IBytes_nat -> "N_IBytes_nat" - | N_INat_bytes -> "N_INat_bytes" - | N_IBytes_int -> "N_IBytes_int" - | N_IInt_bytes -> "N_IInt_bytes" - | N_IAdd_seconds_to_timestamp -> "N_IAdd_seconds_to_timestamp" - | N_IAdd_timestamp_to_seconds -> "N_IAdd_timestamp_to_seconds" - | N_ISub_timestamp_seconds -> "N_ISub_timestamp_seconds" - | N_IDiff_timestamps -> "N_IDiff_timestamps" - | N_IAdd_tez -> "N_IAdd_tez" - | N_ISub_tez -> "N_ISub_tez" - | N_ISub_tez_legacy -> "N_ISub_tez_legacy" - | N_IMul_teznat -> "N_IMul_teznat" - | N_IMul_nattez -> "N_IMul_nattez" - | N_IEdiv_teznat -> "N_IEdiv_teznat" - | N_IEdiv_tez -> "N_IEdiv_tez" - | N_IOr -> "N_IOr" - | N_IAnd -> "N_IAnd" - | N_IXor -> "N_IXor" - | N_INot -> "N_INot" - | N_IIs_nat -> "N_IIs_nat" - | N_INeg -> "N_INeg" - | N_IAbs_int -> "N_IAbs_int" - | N_IInt_nat -> "N_IInt_nat" - | N_IAdd_int -> "N_IAdd_int" - | N_IAdd_nat -> "N_IAdd_nat" - | N_ISub_int -> "N_ISub_int" - | N_IMul_int -> "N_IMul_int" - | N_IMul_nat -> "N_IMul_nat" - | N_IEdiv_int -> "N_IEdiv_int" - | N_IEdiv_nat -> "N_IEdiv_nat" - | N_ILsl_nat -> "N_ILsl_nat" - | N_ILsr_nat -> "N_ILsr_nat" - | N_IOr_nat -> "N_IOr_nat" - | N_IAnd_nat -> "N_IAnd_nat" - | N_IAnd_int_nat -> "N_IAnd_int_nat" - | N_IXor_nat -> "N_IXor_nat" - | N_INot_int -> "N_INot_int" - | N_IIf -> "N_IIf" - | N_ILoop_in -> "N_ILoop_in" - | N_ILoop_out -> "N_ILoop_out" - | N_ILoop_left_in -> "N_ILoop_left_in" - | N_ILoop_left_out -> "N_ILoop_left_out" - | N_IDip -> "N_IDip" - | N_IExec -> "N_IExec" - | N_IApply -> "N_IApply" - | N_ILambda_lam -> "N_ILambda_lam" - | N_ILambda_lamrec -> "N_ILambda_lamrec" - | N_IFailwith -> "N_IFailwith" - | N_ICompare -> "N_ICompare" - | N_IEq -> "N_IEq" - | N_INeq -> "N_INeq" - | N_ILt -> "N_ILt" - | N_IGt -> "N_IGt" - | N_ILe -> "N_ILe" - | N_IGe -> "N_IGe" - | N_IAddress -> "N_IAddress" - | N_IContract -> "N_IContract" - | N_ITransfer_tokens -> "N_ITransfer_tokens" - | N_IImplicit_account -> "N_IImplicit_account" - | N_ICreate_contract -> "N_ICreate_contract" - | N_ISet_delegate -> "N_ISet_delegate" - | N_INow -> "N_INow" - | N_IMin_block_time -> "N_IMin_block_time" - | N_IBalance -> "N_IBalance" - | N_ICheck_signature_ed25519 -> "N_ICheck_signature_ed25519" - | N_ICheck_signature_secp256k1 -> "N_ICheck_signature_secp256k1" - | N_ICheck_signature_p256 -> "N_ICheck_signature_p256" - | N_ICheck_signature_bls -> "N_ICheck_signature_bls" - | N_IHash_key -> "N_IHash_key" - | N_IPack -> "N_IPack" - | N_IUnpack -> "N_IUnpack" - | N_IBlake2b -> "N_IBlake2b" - | N_ISha256 -> "N_ISha256" - | N_ISha512 -> "N_ISha512" - | N_ISource -> "N_ISource" - | N_ISender -> "N_ISender" - | N_ISelf -> "N_ISelf" - | N_IAmount -> "N_IAmount" - | N_IDig -> "N_IDig" - | N_IDug -> "N_IDug" - | N_IDipN -> "N_IDipN" - | N_IDropN -> "N_IDropN" - | N_IDupN -> "N_IDupN" - | N_IChainId -> "N_IChainId" - | N_ILevel -> "N_ILevel" - | N_IView -> "N_IView" - | N_ISelf_address -> "N_ISelf_address" - | N_INever -> "N_INever" - | N_IUnpair -> "N_IUnpair" - | N_IVoting_power -> "N_IVoting_power" - | N_ITotal_voting_power -> "N_ITotal_voting_power" - | N_IKeccak -> "N_IKeccak" - | N_ISha3 -> "N_ISha3" - | N_IAdd_bls12_381_g1 -> "N_IAdd_bls12_381_g1" - | N_IAdd_bls12_381_g2 -> "N_IAdd_bls12_381_g2" - | N_IAdd_bls12_381_fr -> "N_IAdd_bls12_381_fr" - | N_IMul_bls12_381_g1 -> "N_IMul_bls12_381_g1" - | N_IMul_bls12_381_g2 -> "N_IMul_bls12_381_g2" - | N_IMul_bls12_381_fr -> "N_IMul_bls12_381_fr" - | N_INeg_bls12_381_g1 -> "N_INeg_bls12_381_g1" - | N_INeg_bls12_381_g2 -> "N_INeg_bls12_381_g2" - | N_INeg_bls12_381_fr -> "N_INeg_bls12_381_fr" - | N_IPairing_check_bls12_381 -> "N_IPairing_check_bls12_381" - | N_IMul_bls12_381_fr_z -> "N_IMul_bls12_381_fr_z" - | N_IMul_bls12_381_z_fr -> "N_IMul_bls12_381_z_fr" - | N_IInt_bls12_381_z_fr -> "N_IInt_bls12_381_z_fr" - | N_IComb -> "N_IComb" - | N_IUncomb -> "N_IUncomb" - | N_IComb_get -> "N_IComb_get" - | N_IComb_set -> "N_IComb_set" - | N_ITicket -> "N_ITicket" - | N_IRead_ticket -> "N_IRead_ticket" - | N_ISplit_ticket -> "N_ISplit_ticket" - | N_IJoin_tickets -> "N_IJoin_tickets" - | N_ISapling_empty_state -> "N_ISapling_empty_state" - | N_ISapling_verify_update -> "N_ISapling_verify_update" - | N_IMap_get_and_update -> "N_IMap_get_and_update" - | N_IBig_map_get_and_update -> "N_IBig_map_get_and_update" - | N_IHalt -> "N_IHalt" - | N_ILog -> "N_ILog" - | N_IOpen_chest -> "N_IOpen_chest" - | N_IEmit -> "N_IEmit" - -let string_of_continuation_name : continuation_name -> string = - fun c -> - match c with - | N_KNil -> "N_KNil" - | N_KCons -> "N_KCons" - | N_KReturn -> "N_KReturn" - | N_KView_exit -> "N_KView_exit" - | N_KMap_head -> "N_KMap_head" - | N_KUndip -> "N_KUndip" - | N_KLoop_in -> "N_KLoop_in" - | N_KLoop_in_left -> "N_KLoop_in_left" - | N_KIter_empty -> "N_KIter_empty" - | N_KIter_nonempty -> "N_KIter_nonempty" - | N_KList_enter_body -> "N_KList_enter_body" - | N_KList_exit_body -> "N_KList_exit_body" - | N_KMap_enter_body -> "N_KMap_enter_body" - | N_KMap_exit_body -> "N_KMap_exit_body" - | N_KLog -> "N_KLog" - -let string_of_instr_or_cont name = - match name with - | Instr_name instr_name -> string_of_instruction_name instr_name - | Cont_name cont_name -> string_of_continuation_name cont_name - -(* ------------------------------------------------------------------------- *) - -type args = arg list - -and arg = {name : id; arg : Size.t} - -let nullary : args = [] - -let unary xn x : args = [{name = xn; arg = x}] - -let binary xn x yn y : args = {name = xn; arg = x} :: unary yn y - -let ternary xn x yn y zn z : args = {name = xn; arg = x} :: binary yn y zn z - -let quaternary wn w xn x yn y zn z : args = - {name = wn; arg = w} :: ternary xn x yn y zn z - -let pp_arg fmtr {name; arg} = Format.fprintf fmtr "%s = %a" name Size.pp arg - -let pp_args fmtr args = - Format.pp_print_list - ~pp_sep:(fun fmtr () -> Format.fprintf fmtr ";") - pp_arg - fmtr - args - -type ir_sized_step = {name : instr_or_cont_name; args : args} - -type t = ir_sized_step list - -let ir_sized_step instr_name args = {name = Instr_name instr_name; args} - -let cont_sized_step cont_name args = {name = Cont_name cont_name; args} - -(* ------------------------------------------------------------------------- *) - -(* Changing the ordering breaks the workload file compatibility *) -let all_instructions = - [ - N_IDrop; - N_IDup; - N_ISwap; - N_IPush; - N_ICons_pair; - N_ICar; - N_ICdr; - N_ICons_some; - N_ICons_none; - N_IIf_none; - N_IOpt_map_none; - N_IOpt_map_some; - N_ILeft; - N_IRight; - N_IIf_left; - N_ICons_list; - N_INil; - N_IIf_cons; - N_IList_map; - N_IList_iter; - N_IIter; - N_IList_size; - N_IEmpty_set; - N_ISet_iter; - N_ISet_mem; - N_ISet_update; - N_ISet_size; - N_IEmpty_map; - N_IMap_map; - N_IMap_iter; - N_IMap_mem; - N_IMap_get; - N_IMap_update; - N_IMap_size; - N_IEmpty_big_map; - N_IBig_map_mem; - N_IBig_map_get; - N_IBig_map_update; - N_IConcat_string; - N_IConcat_string_pair; - N_ISlice_string; - N_IString_size; - N_IConcat_bytes; - N_IConcat_bytes_pair; - N_ISlice_bytes; - N_IBytes_size; - N_IBytes_nat; - N_INat_bytes; - N_IBytes_int; - N_IInt_bytes; - N_IAdd_seconds_to_timestamp; - N_IAdd_timestamp_to_seconds; - N_ISub_timestamp_seconds; - N_IDiff_timestamps; - N_IAdd_tez; - N_ISub_tez; - N_ISub_tez_legacy; - N_IMul_teznat; - N_IMul_nattez; - N_IEdiv_teznat; - N_IEdiv_tez; - N_IOr; - N_IAnd; - N_IXor; - N_INot; - N_IIs_nat; - N_INeg; - N_IAbs_int; - N_IInt_nat; - N_IAdd_int; - N_IAdd_nat; - N_ISub_int; - N_IMul_int; - N_IMul_nat; - N_IEdiv_int; - N_IEdiv_nat; - N_ILsl_nat; - N_ILsr_nat; - N_IOr_nat; - N_IAnd_nat; - N_IAnd_int_nat; - N_IXor_nat; - N_INot_int; - N_IIf; - N_ILoop_in; - N_ILoop_out; - N_ILoop_left_in; - N_ILoop_left_out; - N_IDip; - N_IExec; - N_IApply; - N_ILambda_lam; - N_ILambda_lamrec; - N_IFailwith; - N_ICompare; - N_IEq; - N_INeq; - N_ILt; - N_IGt; - N_ILe; - N_IGe; - N_IAddress; - N_IContract; - N_ITransfer_tokens; - N_IImplicit_account; - N_ICreate_contract; - N_ISet_delegate; - N_INow; - N_IMin_block_time; - N_IBalance; - N_ICheck_signature_ed25519; - N_ICheck_signature_secp256k1; - N_ICheck_signature_p256; - N_ICheck_signature_bls; - N_IHash_key; - N_IPack; - N_IUnpack; - N_IBlake2b; - N_ISha256; - N_ISha512; - N_ISource; - N_ISender; - N_ISelf; - N_IAmount; - N_IDig; - N_IDug; - N_IDipN; - N_IDropN; - N_IDupN; - N_IChainId; - N_ILevel; - N_IView; - N_ISelf_address; - N_INever; - N_IUnpair; - N_IVoting_power; - N_ITotal_voting_power; - N_IKeccak; - N_ISha3; - N_IAdd_bls12_381_g1; - N_IAdd_bls12_381_g2; - N_IAdd_bls12_381_fr; - N_IMul_bls12_381_g1; - N_IMul_bls12_381_g2; - N_IMul_bls12_381_fr; - N_INeg_bls12_381_g1; - N_INeg_bls12_381_g2; - N_INeg_bls12_381_fr; - N_IPairing_check_bls12_381; - N_IMul_bls12_381_fr_z; - N_IMul_bls12_381_z_fr; - N_IInt_bls12_381_z_fr; - N_IComb; - N_IUncomb; - N_IComb_get; - N_IComb_set; - N_ITicket; - N_IRead_ticket; - N_ISplit_ticket; - N_IJoin_tickets; - N_ISapling_empty_state; - N_ISapling_verify_update; - N_IMap_get_and_update; - N_IBig_map_get_and_update; - N_IHalt; - N_ILog; - N_IOpen_chest; - N_IEmit; - N_ILsl_bytes; - N_ILsr_bytes; - N_IOr_bytes; - N_IAnd_bytes; - N_IXor_bytes; - N_INot_bytes; - N_IUnit; - ] - -(* Changing the ordering breaks the workload file compatibility *) -let all_continuations = - [ - N_KNil; - N_KCons; - N_KReturn; - N_KView_exit; - N_KMap_head; - N_KUndip; - N_KLoop_in; - N_KLoop_in_left; - N_KIter_empty; - N_KIter_nonempty; - N_KList_enter_body; - N_KList_exit_body; - N_KMap_enter_body; - N_KMap_exit_body; - N_KLog; - ] - -let instruction_name_encoding = - let open Data_encoding in - def "instruction_name_encoding" - @@ string_enum - (List.map - (fun instr_name -> - (string_of_instruction_name instr_name, instr_name)) - all_instructions) - -let continuation_name_encoding = - let open Data_encoding in - def "continuation_name_encoding" - @@ string_enum - (List.map - (fun cont_name -> (string_of_continuation_name cont_name, cont_name)) - all_continuations) - -let args_encoding = - let open Data_encoding in - def "args_encoding" - @@ list - (conv - (fun {name; arg} -> (name, arg)) - (fun (name, arg) -> {name; arg}) - (tup2 string Size.encoding)) - -let instr_or_cont_name_encoding = - let open Data_encoding in - def "instr_or_cont_name" - @@ union - [ - case - ~title:"instr_name" - (Tag 0) - instruction_name_encoding - (function Instr_name name -> Some name | _ -> None) - (fun name -> Instr_name name); - case - ~title:"cont_name" - (Tag 1) - continuation_name_encoding - (function Cont_name name -> Some name | _ -> None) - (fun name -> Cont_name name); - ] - -let ir_sized_step_encoding = - let open Data_encoding in - def "ir_sized_step_encoding" - @@ conv - (fun {name; args} -> (name, args)) - (fun (name, args) -> {name; args}) - (tup2 instr_or_cont_name_encoding args_encoding) - -let encoding = - let open Data_encoding in - def "interpreter_trace_encoding" @@ list ir_sized_step_encoding - -(* ------------------------------------------------------------------------- *) - -module Instructions = struct - let drop = ir_sized_step N_IDrop nullary - - let dup = ir_sized_step N_IDup nullary - - let swap = ir_sized_step N_ISwap nullary - - let push = ir_sized_step N_IPush nullary - - let unit = ir_sized_step N_IUnit nullary - - let cons_pair = ir_sized_step N_ICons_pair nullary - - let car = ir_sized_step N_ICar nullary - - let cdr = ir_sized_step N_ICdr nullary - - let cons_some = ir_sized_step N_ICons_some nullary - - let cons_none = ir_sized_step N_ICons_none nullary - - let if_none = ir_sized_step N_IIf_none nullary - - let opt_map ~is_some = - if is_some then ir_sized_step N_IOpt_map_some nullary - else ir_sized_step N_IOpt_map_none nullary - - let left = ir_sized_step N_ILeft nullary - - let right = ir_sized_step N_IRight nullary - - let if_left = ir_sized_step N_IIf_left nullary - - let cons_list = ir_sized_step N_ICons_list nullary - - let nil = ir_sized_step N_INil nullary - - let if_cons = ir_sized_step N_IIf_cons nullary - - let list_map = ir_sized_step N_IList_map nullary - - let list_iter = ir_sized_step N_IList_iter nullary - - let iter = ir_sized_step N_IIter nullary - - let list_size _list = ir_sized_step N_IList_size nullary - - let empty_set = ir_sized_step N_IEmpty_set nullary - - let set_iter set = ir_sized_step N_ISet_iter (unary "set" set) - - let set_mem elt set = ir_sized_step N_ISet_mem (binary "elt" elt "set" set) - - let set_update elt set = - ir_sized_step N_ISet_update (binary "elt" elt "set" set) - - let set_size _set = ir_sized_step N_ISet_size nullary - - let empty_map = ir_sized_step N_IEmpty_map nullary - - let map_map map = ir_sized_step N_IMap_map (unary "map" map) - - let map_iter map = ir_sized_step N_IMap_iter (unary "map" map) - - let map_mem key map = ir_sized_step N_IMap_mem (binary "key" key "map" map) - - let map_get key map = ir_sized_step N_IMap_get (binary "key" key "map" map) - - let map_update key map = - ir_sized_step N_IMap_update (binary "key" key "map" map) - - let map_size _map = ir_sized_step N_IMap_size nullary - - let empty_big_map = ir_sized_step N_IEmpty_big_map nullary - - let big_map_mem key big_map = - ir_sized_step N_IBig_map_mem (binary "key" key "big_map" big_map) - - let big_map_get key big_map = - ir_sized_step N_IBig_map_get (binary "key" key "big_map" big_map) - - let big_map_update key big_map = - ir_sized_step N_IBig_map_update (binary "key" key "big_map" big_map) - - let big_map_get_and_update key big_map = - ir_sized_step N_IBig_map_get_and_update (binary "key" key "big_map" big_map) - - let concat_string total_bytes list = - ir_sized_step - N_IConcat_string - (binary "total_bytes" total_bytes "list" list) - - let concat_string_pair str1 str2 = - ir_sized_step N_IConcat_string_pair (binary "str1" str1 "str2" str2) - - let slice_string string = - ir_sized_step N_ISlice_string (unary "string" string) - - let string_size _string = ir_sized_step N_IString_size nullary - - let concat_bytes total_bytes list = - ir_sized_step N_IConcat_bytes (binary "total_bytes" total_bytes "list" list) - - let concat_bytes_pair str1 str2 = - ir_sized_step N_IConcat_bytes_pair (binary "str1" str1 "str2" str2) - - let slice_bytes bytes = ir_sized_step N_ISlice_bytes (unary "bytes" bytes) - - let bytes_size = ir_sized_step N_IBytes_size nullary - - let lsl_bytes bytes shift = - ir_sized_step N_ILsl_bytes (binary "bytes" bytes "shift" shift) - - let lsr_bytes bytes shift = - ir_sized_step N_ILsr_bytes (binary "bytes" bytes "shift" shift) - - let or_bytes bytes1 bytes2 = - ir_sized_step N_IOr_bytes (binary "bytes1" bytes1 "bytes2" bytes2) - - let and_bytes bytes1 bytes2 = - ir_sized_step N_IAnd_bytes (binary "bytes1" bytes1 "bytes2" bytes2) - - let xor_bytes bytes1 bytes2 = - ir_sized_step N_IXor_bytes (binary "bytes1" bytes1 "bytes2" bytes2) - - let not_bytes bytes = ir_sized_step N_INot_bytes (unary "bytes" bytes) - - let bytes_nat nat = ir_sized_step N_IBytes_nat (unary "nat" nat) - - let nat_bytes bytes = ir_sized_step N_INat_bytes (unary "bytes" bytes) - - let bytes_int int = ir_sized_step N_IBytes_int (unary "int" int) - - let int_bytes bytes = ir_sized_step N_IInt_bytes (unary "bytes" bytes) - - let add_seconds_to_timestamp seconds tstamp = - ir_sized_step - N_IAdd_seconds_to_timestamp - (binary "seconds" seconds "tstamp" tstamp) - - let add_timestamp_to_seconds tstamp seconds = - ir_sized_step - N_IAdd_timestamp_to_seconds - (binary "tstamp" tstamp "seconds" seconds) - - let sub_timestamp_seconds tstamp seconds = - ir_sized_step - N_ISub_timestamp_seconds - (binary "tstamp" tstamp "seconds" seconds) - - let diff_timestamps tstamp1 tstamp2 = - ir_sized_step - N_IDiff_timestamps - (binary "tstamp1" tstamp1 "tstamp2" tstamp2) - - let add_tez _tez1 _tez2 = ir_sized_step N_IAdd_tez nullary - - let sub_tez _tez1 _tez2 = ir_sized_step N_ISub_tez nullary - - let sub_tez_legacy _tez1 _tez2 = ir_sized_step N_ISub_tez_legacy nullary - - let mul_teznat _tez _nat = ir_sized_step N_IMul_teznat nullary - - let mul_nattez _nat _tez = ir_sized_step N_IMul_nattez nullary - - let ediv_teznat _tez _nat = ir_sized_step N_IEdiv_teznat nullary - - let ediv_tez _tez1 _tez2 = ir_sized_step N_IEdiv_tez nullary - - let or_ = ir_sized_step N_IOr nullary - - let and_ = ir_sized_step N_IAnd nullary - - let xor_ = ir_sized_step N_IXor nullary - - let not_ = ir_sized_step N_INot nullary - - let is_nat _int = ir_sized_step N_IIs_nat nullary - - let neg int = ir_sized_step N_INeg (unary "int" int) - - let abs_int int = ir_sized_step N_IAbs_int (unary "int" int) - - let int_nat _nat = ir_sized_step N_IInt_nat nullary - - let add_int int1 int2 = - ir_sized_step N_IAdd_int (binary "int1" int1 "int2" int2) - - let add_nat nat1 nat2 = - ir_sized_step N_IAdd_nat (binary "nat1" nat1 "nat2" nat2) - - let sub_int int1 int2 = - ir_sized_step N_ISub_int (binary "int1" int1 "int2" int2) - - let mul_int int1 int2 = - ir_sized_step N_IMul_int (binary "int1" int1 "int2" int2) - - let mul_nat nat int = ir_sized_step N_IMul_nat (binary "nat" nat "int" int) - - let ediv_int int1 int2 = - ir_sized_step N_IEdiv_int (binary "int1" int1 "int2" int2) - - let ediv_nat nat int = ir_sized_step N_IEdiv_nat (binary "nat" nat "int" int) - - let lsl_nat nat1 _shift = ir_sized_step N_ILsl_nat (unary "nat" nat1) - - let lsr_nat nat1 _shift = ir_sized_step N_ILsr_nat (unary "nat" nat1) - - let or_nat nat1 nat2 = - ir_sized_step N_IOr_nat (binary "nat1" nat1 "nat2" nat2) - - let and_nat nat1 nat2 = - ir_sized_step N_IAnd_nat (binary "nat1" nat1 "nat2" nat2) - - let and_int_nat int nat = - ir_sized_step N_IAnd_int_nat (binary "int" int "nat" nat) - - let xor_nat nat1 nat2 = - ir_sized_step N_IXor_nat (binary "nat1" nat1 "nat2" nat2) - - let not_int int = ir_sized_step N_INot_int (unary "int" int) - - let if_ = ir_sized_step N_IIf nullary - - let loop bool = - if bool then ir_sized_step N_ILoop_in nullary - else ir_sized_step N_ILoop_out nullary - - let loop_left or_ = - if or_ then ir_sized_step N_ILoop_left_in nullary - else ir_sized_step N_ILoop_left_out nullary - - let dip = ir_sized_step N_IDip nullary - - let exec = ir_sized_step N_IExec nullary - - let apply ~(rec_flag : bool) = - ir_sized_step N_IApply (unary "rec" (if rec_flag then 1 else 0)) - - let lambda ~(rec_flag : bool) = - if rec_flag then ir_sized_step N_ILambda_lamrec nullary - else ir_sized_step N_ILambda_lam nullary - - let failwith_ = ir_sized_step N_IFailwith nullary - - let compare arg1 arg2 = - ir_sized_step N_ICompare (binary "arg1" arg1 "arg2" arg2) - - let eq = ir_sized_step N_IEq nullary - - let neq = ir_sized_step N_INeq nullary - - let lt = ir_sized_step N_ILt nullary - - let gt = ir_sized_step N_IGt nullary - - let le = ir_sized_step N_ILe nullary - - let ge = ir_sized_step N_IGe nullary - - let address = ir_sized_step N_IAddress nullary - - let contract = ir_sized_step N_IContract nullary - - let transfer_tokens = ir_sized_step N_ITransfer_tokens nullary - - let implicit_account = ir_sized_step N_IImplicit_account nullary - - let create_contract = ir_sized_step N_ICreate_contract nullary - - let set_delegate = ir_sized_step N_ISet_delegate nullary - - let now = ir_sized_step N_INow nullary - - let min_block_time = ir_sized_step N_IMin_block_time nullary - - let balance = ir_sized_step N_IBalance nullary - - let check_signature_ed25519 _pk _signature message = - ir_sized_step N_ICheck_signature_ed25519 (unary "message" message) - - let check_signature_secp256k1 _pk _signature message = - ir_sized_step N_ICheck_signature_secp256k1 (unary "message" message) - - let check_signature_p256 _pk _signature message = - ir_sized_step N_ICheck_signature_p256 (unary "message" message) - - let check_signature_bls _pk _signature message = - ir_sized_step N_ICheck_signature_bls (unary "message" message) - - let hash_key = ir_sized_step N_IHash_key nullary - - let pack (micheline_size : Size.micheline_size) = - ir_sized_step - N_IPack - (ternary - "micheline_nodes" - micheline_size.traversal - "micheline_int_bytes" - micheline_size.int_bytes - "micheline_string_bytes" - micheline_size.string_bytes) - - let unpack = ir_sized_step N_IUnpack nullary - - let blake2b bytes = ir_sized_step N_IBlake2b (unary "bytes" bytes) - - let sha256 bytes = ir_sized_step N_ISha256 (unary "bytes" bytes) - - let sha512 bytes = ir_sized_step N_ISha512 (unary "bytes" bytes) - - let source = ir_sized_step N_ISource nullary - - let sender = ir_sized_step N_ISender nullary - - let self = ir_sized_step N_ISelf nullary - - let amount = ir_sized_step N_IAmount nullary - - let dig depth = ir_sized_step N_IDig (unary "depth" depth) - - let dug depth = ir_sized_step N_IDug (unary "depth" depth) - - let dipn depth = ir_sized_step N_IDipN (unary "depth" depth) - - let dropn depth = ir_sized_step N_IDropN (unary "depth" depth) - - let dupn depth = ir_sized_step N_IDupN (unary "depth" depth) - - let chain_id = ir_sized_step N_IChainId nullary - - let level = ir_sized_step N_ILevel nullary - - let view = ir_sized_step N_IView nullary - - let self_address = ir_sized_step N_ISelf_address nullary - - let never = ir_sized_step N_INever nullary - - let unpair = ir_sized_step N_IUnpair nullary - - let voting_power = ir_sized_step N_IVoting_power nullary - - let total_voting_power = ir_sized_step N_ITotal_voting_power nullary - - let keccak bytes = ir_sized_step N_IKeccak (unary "bytes" bytes) - - let sha3 bytes = ir_sized_step N_ISha3 (unary "bytes" bytes) - - let add_bls12_381_g1 = ir_sized_step N_IAdd_bls12_381_g1 nullary - - let add_bls12_381_g2 = ir_sized_step N_IAdd_bls12_381_g2 nullary - - let add_bls12_381_fr = ir_sized_step N_IAdd_bls12_381_fr nullary - - let mul_bls12_381_g1 = ir_sized_step N_IMul_bls12_381_g1 nullary - - let mul_bls12_381_g2 = ir_sized_step N_IMul_bls12_381_g2 nullary - - let mul_bls12_381_fr = ir_sized_step N_IMul_bls12_381_fr nullary - - let neg_bls12_381_g1 = ir_sized_step N_INeg_bls12_381_g1 nullary - - let neg_bls12_381_g2 = ir_sized_step N_INeg_bls12_381_g2 nullary - - let neg_bls12_381_fr = ir_sized_step N_INeg_bls12_381_fr nullary - - let pairing_check_bls12_381 length = - ir_sized_step N_IPairing_check_bls12_381 (unary "length" length) - - let mul_bls12_381_fr_z nat = - ir_sized_step N_IMul_bls12_381_fr_z (unary "nat" nat) - - let mul_bls12_381_z_fr nat = - ir_sized_step N_IMul_bls12_381_z_fr (unary "nat" nat) - - let int_bls12_381_z_fr = ir_sized_step N_IInt_bls12_381_z_fr nullary - - let comb depth = ir_sized_step N_IComb (unary "depth" depth) - - let uncomb depth = ir_sized_step N_IUncomb (unary "depth" depth) - - let comb_get key = ir_sized_step N_IComb_get (unary "key" key) - - let comb_set key = ir_sized_step N_IComb_set (unary "key" key) - - let ticket = ir_sized_step N_ITicket nullary - - let read_ticket = ir_sized_step N_IRead_ticket nullary - - let split_ticket nat1 nat2 = - ir_sized_step N_ISplit_ticket (binary "nat1" nat1 "nat2" nat2) - - let join_tickets size1 size2 size3 size4 = - ir_sized_step - N_IJoin_tickets - (quaternary - "contents1" - size1 - "contents2" - size2 - "amount1" - size3 - "amount2" - size4) - - let sapling_empty_state = ir_sized_step N_ISapling_empty_state nullary - - let sapling_verify_update inputs outputs _bound_data _state = - ir_sized_step - N_ISapling_verify_update - (binary "inputs" inputs "outputs" outputs) - - let map_get_and_update key_size map_size = - ir_sized_step - N_IMap_get_and_update - (binary "key_size" key_size "map_size" map_size) - - let halt = ir_sized_step N_IHalt nullary - - let log = ir_sized_step N_ILog nullary - - let open_chest log_time size = - ir_sized_step N_IOpen_chest (binary "log_time" log_time "size" size) - - (** cost model for the EMIT instruction *) - let emit = ir_sized_step N_IEmit nullary -end - -module Control = struct - let nil = cont_sized_step N_KNil nullary - - let cons = cont_sized_step N_KCons nullary - - let return = cont_sized_step N_KReturn nullary - - let view_exit = cont_sized_step N_KView_exit nullary - - let map_head = cont_sized_step N_KMap_head nullary - - let undip = cont_sized_step N_KUndip nullary - - let loop_in = cont_sized_step N_KLoop_in nullary - - let loop_in_left = cont_sized_step N_KLoop_in_left nullary - - let iter size = - if size = 0 then cont_sized_step N_KIter_empty nullary - else cont_sized_step N_KIter_nonempty nullary - - let list_enter_body xs_size ys_size = - cont_sized_step - N_KList_enter_body - (binary "xs_size" xs_size "ys_size" ys_size) - - let list_exit_body = cont_sized_step N_KList_exit_body nullary - - let map_enter_body size = - cont_sized_step N_KMap_enter_body (unary "size" size) - - let map_exit_body key_size map_size = - cont_sized_step N_KMap_exit_body (binary "key" key_size "map" map_size) - - let log = cont_sized_step N_KLog nullary -end - -(* ------------------------------------------------------------------------- *) - -open Script_typed_ir - -let extract_compare_sized_step : - type a. a comparable_ty -> a -> a -> ir_sized_step = - fun comparable_ty x y -> - Instructions.compare - (Size.size_of_comparable_value comparable_ty x) - (Size.size_of_comparable_value comparable_ty y) - -let extract_ir_sized_step : - type bef_top bef res_top res. - Alpha_context.t -> - (bef_top, bef, res_top, res) Script_typed_ir.kinstr -> - bef_top * bef -> - ir_sized_step = - fun ctxt instr stack -> - let open Script_typed_ir in - match (instr, stack) with - | IDrop (_, _), _ -> Instructions.drop - | IDup (_, _), _ -> Instructions.dup - | ISwap (_, _), _ -> Instructions.swap - | IPush (_, _, _, _), _ -> Instructions.push - | IUnit (_, _), _ -> Instructions.unit - | ICons_pair (_, _), _ -> Instructions.cons_pair - | ICar (_, _), _ -> Instructions.car - | ICdr (_, _), _ -> Instructions.cdr - | IUnpair (_, _), _ -> Instructions.unpair - | ICons_some (_, _), _ -> Instructions.cons_some - | ICons_none (_, _, _), _ -> Instructions.cons_none - | IIf_none _, _ -> Instructions.if_none - | IOpt_map _, (opt, _) -> - let is_some = match opt with None -> false | Some _ -> true in - Instructions.opt_map ~is_some - | ICons_left (_, _, _), _ -> Instructions.left - | ICons_right (_, _, _), _ -> Instructions.right - | IIf_left _, _ -> Instructions.if_left - | ICons_list (_, _), _ -> Instructions.cons_list - | INil (_, _, _), _ -> Instructions.nil - | IIf_cons _, _ -> Instructions.if_cons - | IList_iter (_, _, _, _), _ -> Instructions.list_iter - | IList_map (_, _, _, _), _ -> Instructions.list_map - | IList_size (_, _), (list, _) -> Instructions.list_size (Size.list list) - | IEmpty_set (_, _, _), _ -> Instructions.empty_set - | ISet_iter _, (set, _) -> Instructions.set_iter (Size.set set) - | ISet_mem (_, _), (v, (set, _)) -> - let (module S) = Script_set.get set in - let sz = S.OPS.elt_size v in - Instructions.set_mem sz (Size.set set) - | ISet_update (_, _), (v, (_flag, (set, _))) -> - let (module S) = Script_set.get set in - let sz = S.OPS.elt_size v in - Instructions.set_update sz (Size.set set) - | ISet_size (_, _), (set, _) -> Instructions.set_size (Size.set set) - | IEmpty_map (_, _, _, _), _ -> Instructions.empty_map - | IMap_map _, (map, _) -> Instructions.map_map (Size.map map) - | IMap_iter _, (map, _) -> Instructions.map_iter (Size.map map) - | IMap_mem (_, _), (v, (map, _)) -> - let (module Map) = Script_map.get_module map in - let key_size = Map.OPS.key_size v in - Instructions.map_mem key_size (Size.map map) - | IMap_get (_, _), (v, (map, _)) -> - let (module Map) = Script_map.get_module map in - let key_size = Map.OPS.key_size v in - Instructions.map_get key_size (Size.map map) - | IMap_update (_, _), (v, (_elt_opt, (map, _))) -> - let (module Map) = Script_map.get_module map in - let key_size = Map.OPS.key_size v in - Instructions.map_update key_size (Size.map map) - | IMap_get_and_update (_, _), (v, (_elt_opt, (map, _))) -> - let (module Map) = Script_map.get_module map in - let key_size = Map.OPS.key_size v in - Instructions.map_get_and_update key_size (Size.map map) - | IMap_size (_, _), (map, _) -> Instructions.map_size (Size.map map) - | IEmpty_big_map (_, _, _, _), _ -> Instructions.empty_big_map - | IBig_map_mem (_, _), (v, (Big_map {diff = {size; _}; key_type; _}, _)) -> - let key_size = Size.size_of_comparable_value key_type v in - Instructions.big_map_mem key_size (Size.of_int size) - | IBig_map_get (_, _), (v, (Big_map {diff = {size; _}; key_type; _}, _)) -> - let key_size = Size.size_of_comparable_value key_type v in - Instructions.big_map_get key_size (Size.of_int size) - | ( IBig_map_update (_, _), - (v, (_, (Big_map {diff = {size; _}; key_type; _}, _))) ) -> - let key_size = Size.size_of_comparable_value key_type v in - Instructions.big_map_update key_size (Size.of_int size) - | ( IBig_map_get_and_update (_, _), - (v, (_, (Big_map {diff = {size; _}; key_type; _}, _))) ) -> - let key_size = Size.size_of_comparable_value key_type v in - Instructions.big_map_get_and_update key_size (Size.of_int size) - | IConcat_string (_, _), (ss, _) -> - let list_size = Size.list ss in - let total_bytes = - List.fold_left - (fun x s -> Size.(add x (script_string s))) - Size.zero - ss.elements - in - Instructions.concat_string list_size total_bytes - | IConcat_string_pair (_, _), (s1, (s2, _)) -> - Instructions.concat_string_pair - (Size.script_string s1) - (Size.script_string s2) - | ISlice_string (_, _), (_off, (_len, (s, _))) -> - Instructions.slice_string (Size.script_string s) - | IString_size (_, _), (s, _) -> - Instructions.string_size (Size.script_string s) - | IConcat_bytes (_, _), (ss, _) -> - let list_size = Size.list ss in - let total_bytes = - List.fold_left (fun x s -> Size.(add x (bytes s))) Size.zero ss.elements - in - Instructions.concat_bytes list_size total_bytes - | IConcat_bytes_pair (_, _), (s1, (s2, _)) -> - Instructions.concat_bytes_pair (Size.bytes s1) (Size.bytes s2) - | ISlice_bytes (_, _), (_off, (_len, (s, _))) -> - Instructions.slice_bytes (Size.bytes s) - | IBytes_size (_, _), _ -> Instructions.bytes_size - | IBytes_nat (_, _), (n, _) -> Instructions.bytes_nat (Size.integer n) - | INat_bytes (_, _), (b, _) -> Instructions.nat_bytes (Size.bytes b) - | IBytes_int (_, _), (n, _) -> Instructions.bytes_int (Size.integer n) - | IInt_bytes (_, _), (b, _) -> Instructions.int_bytes (Size.bytes b) - | IAdd_seconds_to_timestamp (_, _), (s, (t, _)) -> - Instructions.add_seconds_to_timestamp (Size.timestamp t) (Size.integer s) - | IAdd_timestamp_to_seconds (_, _), (t, (s, _)) -> - Instructions.add_timestamp_to_seconds (Size.timestamp t) (Size.integer s) - | ISub_timestamp_seconds (_, _), (t, (s, _)) -> - Instructions.sub_timestamp_seconds (Size.timestamp t) (Size.integer s) - | IDiff_timestamps (_, _), (t1, (t2, _)) -> - Instructions.diff_timestamps (Size.timestamp t1) (Size.timestamp t2) - | IAdd_tez (_, _), (x, (y, _)) -> - Instructions.add_tez (Size.mutez x) (Size.mutez y) - | ISub_tez (_, _), (x, (y, _)) -> - Instructions.sub_tez (Size.mutez x) (Size.mutez y) - | ISub_tez_legacy (_, _), (x, (y, _)) -> - Instructions.sub_tez_legacy (Size.mutez x) (Size.mutez y) - | IMul_teznat (_, _), (x, (y, _)) -> - Instructions.mul_teznat (Size.mutez x) (Size.integer y) - | IMul_nattez (_, _), (x, (y, _)) -> - Instructions.mul_nattez (Size.integer x) (Size.mutez y) - | IEdiv_teznat (_, _), (x, (y, _)) -> - Instructions.ediv_teznat (Size.mutez x) (Size.integer y) - | IEdiv_tez (_, _), (x, (y, _)) -> - Instructions.ediv_tez (Size.mutez x) (Size.mutez y) - | IOr (_, _), _ -> Instructions.or_ - | IAnd (_, _), _ -> Instructions.and_ - | IXor (_, _), _ -> Instructions.xor_ - | INot (_, _), _ -> Instructions.not_ - | IIs_nat (_, _), (x, _) -> Instructions.is_nat (Size.integer x) - | INeg (_, _), (x, _) -> Instructions.neg (Size.integer x) - | IAbs_int (_, _), (x, _) -> Instructions.abs_int (Size.integer x) - | IInt_nat (_, _), (x, _) -> Instructions.int_nat (Size.integer x) - | IAdd_int (_, _), (x, (y, _)) -> - Instructions.add_int (Size.integer x) (Size.integer y) - | IAdd_nat (_, _), (x, (y, _)) -> - Instructions.add_nat (Size.integer x) (Size.integer y) - | ISub_int (_, _), (x, (y, _)) -> - Instructions.sub_int (Size.integer x) (Size.integer y) - | IMul_int (_, _), (x, (y, _)) -> - Instructions.mul_int (Size.integer x) (Size.integer y) - | IMul_nat (_, _), (x, (y, _)) -> - Instructions.mul_nat (Size.integer x) (Size.integer y) - | IEdiv_int (_, _), (x, (y, _)) -> - Instructions.ediv_int (Size.integer x) (Size.integer y) - | IEdiv_nat (_, _), (x, (y, _)) -> - Instructions.ediv_nat (Size.integer x) (Size.integer y) - | ILsl_nat (_, _), (x, (y, _)) -> - Instructions.lsl_nat (Size.integer x) (Size.integer y) - | ILsr_nat (_, _), (x, (y, _)) -> - Instructions.lsr_nat (Size.integer x) (Size.integer y) - | IOr_nat (_, _), (x, (y, _)) -> - Instructions.or_nat (Size.integer x) (Size.integer y) - | IAnd_nat (_, _), (x, (y, _)) -> - Instructions.and_nat (Size.integer x) (Size.integer y) - | IAnd_int_nat (_, _), (x, (y, _)) -> - Instructions.and_int_nat (Size.integer x) (Size.integer y) - | IXor_nat (_, _), (x, (y, _)) -> - Instructions.xor_nat (Size.integer x) (Size.integer y) - | INot_int (_, _), (x, _) -> Instructions.not_int (Size.integer x) - | IIf _, _ -> Instructions.if_ - | ILoop (_, _, _), (b, _) -> Instructions.loop b - | ILoop_left (_, _, _), (or_, _) -> - let or_ = match or_ with L _ -> true | R _ -> false in - Instructions.loop_left or_ - | IDip (_, _, _, _), _ -> Instructions.dip - | IExec (_, _, _), _ -> Instructions.exec - | IApply (_, _, _), (_, (l, _)) -> - let rec_flag = match l with Lam _ -> false | LamRec _ -> true in - Instructions.apply ~rec_flag - | ILambda (_, l, _), _ -> - let rec_flag = match l with Lam _ -> false | LamRec _ -> true in - Instructions.lambda ~rec_flag - | IFailwith (_, _), _ -> Instructions.failwith_ - | ICompare (_, cmp_ty, _), (a, (b, _)) -> - extract_compare_sized_step cmp_ty a b - | IEq (_, _), _ -> Instructions.eq - | INeq (_, _), _ -> Instructions.neq - | ILt (_, _), _ -> Instructions.lt - | IGt (_, _), _ -> Instructions.gt - | ILe (_, _), _ -> Instructions.le - | IGe (_, _), _ -> Instructions.ge - | IAddress (_, _), _ -> Instructions.address - | IContract (_, _, _, _), _ -> Instructions.contract - | ITransfer_tokens (_, _), _ -> Instructions.transfer_tokens - | IView (_, _, _, _), _ -> Instructions.view - | IImplicit_account (_, _), _ -> Instructions.implicit_account - | ICreate_contract _, _ -> Instructions.create_contract - | ISet_delegate (_, _), _ -> Instructions.set_delegate - | INow (_, _), _ -> Instructions.now - | IBalance (_, _), _ -> Instructions.balance - | ILevel (_, _), _ -> Instructions.level - | ICheck_signature (_, _), (public_key, (_signature, (message, _))) -> ( - match public_key with - | Signature.Ed25519 pk -> - let pk = Size.of_int (Signature.Ed25519.Public_key.size pk) in - let signature = Size.of_int Signature.Ed25519.size in - let message = Size.bytes message in - Instructions.check_signature_ed25519 pk signature message - | Signature.Secp256k1 pk -> - let pk = Size.of_int (Signature.Secp256k1.Public_key.size pk) in - let signature = Size.of_int Signature.Secp256k1.size in - let message = Size.bytes message in - Instructions.check_signature_secp256k1 pk signature message - | Signature.P256 pk -> - let pk = Size.of_int (Signature.P256.Public_key.size pk) in - let signature = Size.of_int Signature.P256.size in - let message = Size.bytes message in - Instructions.check_signature_p256 pk signature message - | Signature.Bls pk -> - let pk = Size.of_int (Signature.Bls.Public_key.size pk) in - let signature = Size.of_int Signature.Bls.size in - let message = Size.bytes message in - Instructions.check_signature_bls pk signature message) - | IHash_key (_, _), _ -> Instructions.hash_key - | IPack (_, ty, _), (v, _) -> ( - let script_res = - Lwt_main.run (Script_ir_translator.unparse_data ctxt Optimized ty v) - in - match script_res with - | Ok (node, _ctxt) -> - Instructions.pack (Size.of_micheline (Micheline.root node)) - | Error _ -> Stdlib.failwith "IPack workload: could not unparse") - | IUnpack (_, _, _), _ -> Instructions.unpack - | IBlake2b (_, _), (bytes, _) -> Instructions.blake2b (Size.bytes bytes) - | ISha256 (_, _), (bytes, _) -> Instructions.sha256 (Size.bytes bytes) - | ISha512 (_, _), (bytes, _) -> Instructions.sha512 (Size.bytes bytes) - | ISource (_, _), _ -> Instructions.source - | ISender (_, _), _ -> Instructions.sender - | ISelf (_, _, _, _), _ -> Instructions.self - | ISelf_address (_, _), _ -> Instructions.self_address - | IAmount (_, _), _ -> Instructions.amount - | ISapling_empty_state (_, _, _), _ -> Instructions.sapling_empty_state - | ISapling_verify_update (_, _), (transaction, (_state, _)) -> - let inputs = Size.sapling_transaction_inputs transaction in - let outputs = Size.sapling_transaction_outputs transaction in - let bound_data = Size.sapling_transaction_bound_data transaction in - let state = Size.zero in - Instructions.sapling_verify_update inputs outputs bound_data state - | ISapling_verify_update_deprecated (_, _), (transaction, (_state, _)) -> - let inputs = List.length transaction.inputs in - let outputs = List.length transaction.outputs in - let bound_data = Size.zero in - let state = Size.zero in - Instructions.sapling_verify_update inputs outputs bound_data state - | IDig (_, n, _, _), _ -> Instructions.dig (Size.of_int n) - | IDug (_, n, _, _), _ -> Instructions.dug (Size.of_int n) - | IDipn (_, n, _, _, _), _ -> Instructions.dipn (Size.of_int n) - | IDropn (_, n, _, _), _ -> Instructions.dropn (Size.of_int n) - | IChainId (_, _), _ -> Instructions.chain_id - | INever _, _ -> . - | IVoting_power (_, _), _ -> Instructions.voting_power - | ITotal_voting_power (_, _), _ -> Instructions.total_voting_power - | IKeccak (_, _), (bytes, _) -> Instructions.keccak (Size.bytes bytes) - | ISha3 (_, _), (bytes, _) -> Instructions.sha3 (Size.bytes bytes) - | IAdd_bls12_381_g1 (_, _), _ -> Instructions.add_bls12_381_g1 - | IAdd_bls12_381_g2 (_, _), _ -> Instructions.add_bls12_381_g2 - | IAdd_bls12_381_fr (_, _), _ -> Instructions.add_bls12_381_fr - | IMul_bls12_381_g1 (_, _), _ -> Instructions.mul_bls12_381_g1 - | IMul_bls12_381_g2 (_, _), _ -> Instructions.mul_bls12_381_g2 - | IMul_bls12_381_fr (_, _), _ -> Instructions.mul_bls12_381_fr - | IMul_bls12_381_z_fr (_, _), (_fr, (z, _)) -> - Instructions.mul_bls12_381_z_fr (Size.integer z) - | IMul_bls12_381_fr_z (_, _), (z, _) -> - Instructions.mul_bls12_381_fr_z (Size.integer z) - | IInt_bls12_381_fr (_, _), _ -> Instructions.int_bls12_381_z_fr - | INeg_bls12_381_g1 (_, _), _ -> Instructions.neg_bls12_381_g1 - | INeg_bls12_381_g2 (_, _), _ -> Instructions.neg_bls12_381_g2 - | INeg_bls12_381_fr (_, _), _ -> Instructions.neg_bls12_381_fr - | IPairing_check_bls12_381 (_, _), (list, _) -> - Instructions.pairing_check_bls12_381 (Size.list list) - | IComb (_, n, _, _), _ -> Instructions.comb (Size.of_int n) - | IUncomb (_, n, _, _), _ -> Instructions.uncomb (Size.of_int n) - | IComb_get (_, n, _, _), _ -> Instructions.comb_get (Size.of_int n) - | IComb_set (_, n, _, _), _ -> Instructions.comb_set (Size.of_int n) - | IDup_n (_, n, _, _), _ -> Instructions.dupn (Size.of_int n) - | ITicket (_, _, _), _ | ITicket_deprecated (_, _, _), _ -> - Instructions.ticket - | IRead_ticket (_, _, _), _ -> Instructions.read_ticket - | ISplit_ticket (_, _), (_ticket, ((amount_a, amount_b), _)) -> - Instructions.split_ticket (Size.integer amount_a) (Size.integer amount_b) - | IJoin_tickets (_, cmp_ty, _), ((ticket1, ticket2), _) -> - let size1 = Size.size_of_comparable_value cmp_ty ticket1.contents in - let size2 = Size.size_of_comparable_value cmp_ty ticket2.contents in - let tez1 = Size.integer (ticket1.amount :> Script_int.n Script_int.num) in - let tez2 = Size.integer (ticket2.amount :> Script_int.n Script_int.num) in - Instructions.join_tickets size1 size2 tez1 tez2 - | IHalt _, _ -> Instructions.halt - | ILog _, _ -> Instructions.log - | IOpen_chest (_, _), (_, (chest, (time, _))) -> - let plaintext_size = - Script_timelock.get_plaintext_size chest - 1 |> Size.of_int - in - let log_time = Z.log2 Z.(one + Script_int.to_zint time) |> Size.of_int in - Instructions.open_chest log_time plaintext_size - | IMin_block_time _, _ -> Instructions.min_block_time - | IEmit _, _ -> Instructions.emit - | ILsl_bytes (_, _), (x, (y, _)) -> - let y = - match Script_int.to_int y with - | Some y -> y - | None -> (* overflow *) assert false - in - Instructions.lsl_bytes (Size.bytes x) y - | ILsr_bytes (_, _), (x, (y, _)) -> - let y = - match Script_int.to_int y with - | Some y -> y - | None -> (* overflow *) assert false - in - Instructions.lsr_bytes (Size.bytes x) y - | IOr_bytes (_, _), (x, (y, _)) -> - Instructions.or_bytes (Size.bytes x) (Size.bytes y) - | IAnd_bytes (_, _), (x, (y, _)) -> - Instructions.and_bytes (Size.bytes x) (Size.bytes y) - | IXor_bytes (_, _), (x, (y, _)) -> - Instructions.xor_bytes (Size.bytes x) (Size.bytes y) - | INot_bytes (_, _), (x, _) -> Instructions.not_bytes (Size.bytes x) - -let extract_control_trace (type bef_top bef aft_top aft) - (cont : (bef_top, bef, aft_top, aft) Script_typed_ir.continuation) = - match cont with - | KNil -> Control.nil - | KCons _ -> Control.cons - | KReturn _ -> Control.return - | KMap_head (_, _) -> Control.map_head - | KUndip _ -> Control.undip - | KLoop_in _ -> Control.loop_in - | KLoop_in_left _ -> Control.loop_in_left - | KIter (_, _, xs, _) -> Control.iter (Size.of_int (List.length xs)) - | KList_enter_body (_, xs, ys, _, _, _) -> - Control.list_enter_body - (Size.of_int (List.length xs)) - (Size.of_int (Script_list.length ys)) - | KList_exit_body (_, _, _, _, _, _) -> Control.list_exit_body - | KMap_enter_body (_, xs, _, _, _) -> - Control.map_enter_body (Size.of_int (List.length xs)) - | KMap_exit_body (_, _, map, k, _, _) -> - let (module Map) = Script_map.get_module map in - let key_size = Map.OPS.key_size k in - Control.map_exit_body key_size (Size.map map) - | KView_exit _ -> Control.view_exit - | KLog _ -> Control.log - -(** [Stop_bench] gets raised when a [IFailwith] would be the next instruction. - This allows us to recover the full execution trace, including the trace of - the [IFailwith]. - - The actual benchmark will follow the same execution branch, but instead will - raise an [error] which will be ignored. Thus it is safe to end a benchmark - with [IFailwith], but timings are expected to be different from ending with - [IHalt]. This means that, if we choose to include this behavior in any - benchmark, [IFailwith] must be benched. *) -exception Stop_bench - -let extract_deps (type bef_top bef aft_top aft) ctxt step_constants - (sty : (bef_top, bef) Script_typed_ir.stack_ty) - (kinstr : (bef_top, bef, aft_top, aft) Script_typed_ir.kinstr) - (stack : bef_top * bef) = - let trace = ref [] in - (* Logger definition *) - let logger = - Script_interpreter_logging.make - (module struct - let log_interp _instr _ctxt _log _stack_ty _stack = () - - let log_entry : - type a s b f. (a, s, b, f, a, s) Script_typed_ir.logging_function = - fun kinstr ctxt _loc _stack_ty stack -> - trace := extract_ir_sized_step ctxt kinstr stack :: !trace ; - match kinstr with IFailwith _ -> raise Stop_bench | _ -> () - - let log_control kont = trace := extract_control_trace kont :: !trace - - let log_exit _instr _ctxt _log _stack_ty _stack = () - - let get_log () = Environment.Error_monad.return_none - end) - in - try - let res = - Lwt_main.run - (Script_interpreter.Internals.kstep - (Some logger) - ctxt - step_constants - sty - kinstr - (fst stack) - (snd stack)) - in - match Environment.wrap_tzresult res with - | Error errs -> - Format.eprintf "%a@." Error_monad.pp_print_trace errs ; - raise (Failure "Interpreter_workload.extract_deps: error in step") - | Ok (_aft_top, _aft, _ctxt) -> - (* ((aft_top, aft), List.rev !trace, ctxt) *) - List.rev !trace - with Stop_bench -> List.rev !trace - -let extract_deps_continuation (type bef_top bef aft_top aft) ctxt step_constants - (stack_type : (bef_top, bef) stack_ty) - (cont : (bef_top, bef, aft_top, aft) Script_typed_ir.continuation) - (stack : bef_top * bef) = - let trace = ref [] in - (* Logger definition *) - let logger = - Script_interpreter_logging.make - (module struct - let log_interp _instr _ctxt _log _stack_ty _stack = () - - let log_entry : - type a s b f. (a, s, b, f, a, s) Script_typed_ir.logging_function = - fun kinstr ctxt _loc _stack_ty stack -> - trace := extract_ir_sized_step ctxt kinstr stack :: !trace ; - match kinstr with IFailwith _ -> raise Stop_bench | _ -> () - - let log_control kont = trace := extract_control_trace kont :: !trace - - let log_exit _instr _ctxt _log _stack_ty _stack = () - - let get_log () = Environment.Error_monad.return_none - end) - in - try - let res = - let _gas_counter, outdated_ctxt = - Local_gas_counter.local_gas_counter_and_outdated_context ctxt - in - Lwt_main.run - (Script_interpreter.Internals.next - (Some logger) - (outdated_ctxt, step_constants) - (Local_gas_counter 0xFF_FF_FF_FF) - stack_type - cont - (fst stack) - (snd stack)) - in - match Environment.wrap_tzresult res with - | Error errs -> - Format.eprintf "%a@." Error_monad.pp_print_trace errs ; - raise (Failure "Interpreter_workload.extract_deps: error in step") - | Ok (_aft_top, _aft, _outdated_ctxt, _gas) -> - (* ((aft_top, aft), List.rev !trace, outdated_ctxt, gas) *) - List.rev !trace - with Stop_bench -> List.rev !trace - -let sized_step_to_sparse_vec {name; args} = - let s = string_of_instr_or_cont name in - match args with - | [] -> Sparse_vec.String.of_list [(s, float_of_int 1)] - | _ -> - List.fold_left - (fun acc {name; arg} -> - Sparse_vec.String.( - add acc (of_list [(s ^ "_" ^ name, float_of_int (Size.to_int arg))]))) - Sparse_vec.String.zero - args - -let trace_to_sparse_vec trace = - List.fold_left - (fun acc step -> Sparse_vec.String.add acc (sized_step_to_sparse_vec step)) - Sparse_vec.String.zero - trace diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_commands.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_commands.ml deleted file mode 100644 index b53daf1b8e5bfd8d3b309ccc53d87280471dca2f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_commands.ml +++ /dev/null @@ -1,213 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Michelson_generation - -let group = - { - Tezos_clic.name = "Michelson generation"; - title = "Command for generating random Michelson code and data"; - } - -module Michelson_concat_cmd = struct - let handler () file1 file2 file3 () = - let open Lwt_result_syntax in - let trace1 = Michelson_mcmc_samplers.load ~filename:file1 in - let trace2 = Michelson_mcmc_samplers.load ~filename:file2 in - let terms = trace1 @ trace2 in - let l1 = List.length trace1 in - let l2 = List.length trace2 in - Format.eprintf - "Loaded %d terms from %s, %d terms from %s, total %d@." - l1 - file1 - l2 - file2 - (l1 + l2) ; - Michelson_mcmc_samplers.save ~filename:file3 ~terms ; - return_unit - - let params = - Tezos_clic.( - prefixes [Protocol.name; "michelson"; "concat"; "files"] - @@ string ~name:"FILENAME" ~desc:"First file" - @@ prefixes ["and"] - @@ string ~name:"FILENAME" ~desc:"Second file" - @@ prefixes ["into"] - @@ string ~name:"FILENAME" ~desc:"Target file" - @@ stop) - - let command = - Tezos_clic.command - ~group - ~desc:"Michelson generation" - Tezos_clic.no_options - params - handler -end - -let () = Registration.add_command Michelson_concat_cmd.command - -module Michelson_gen_cmd = struct - let lift_opt f opt_arg state = - match opt_arg with None -> state | Some arg -> f arg state - - let handler (min_size, max_size, burn_in, seed) terms_count terms_kind - filename () = - let open Lwt_result_syntax in - let default = Michelson_generation.default_generator_config in - let min = Option.value ~default:default.target_size.min min_size in - let max = Option.value ~default:default.target_size.max max_size in - let burn_in_multiplier = - Option.value ~default:default.burn_in_multiplier burn_in - in - let rng_state = - match seed with - | None -> - Format.eprintf "Self-initialization of PRNG@." ; - let state = Random.State.make_self_init () in - Format.(eprintf "PRNG state hash: %d@." (Hashtbl.hash state)) ; - state - | Some seed -> - Format.eprintf "PRNG initialized with seed %d@." seed ; - Random.State.make [|seed|] - in - let cfg = - {Michelson_generation.target_size = {min; max}; burn_in_multiplier} - in - let terms_count = - match int_of_string terms_count with - | exception Failure _ -> - Format.eprintf "TERMS-COUNT must be an integer, exiting@." ; - exit 1 - | terms_count -> - if terms_count <= 0 then ( - Format.eprintf "TERMS-COUNT must be strictly positive, exiting@." ; - exit 1) - else terms_count - in - let progress = - Benchmark_helpers.make_progress_printer - Format.err_formatter - terms_count - "Generating term" - in - let terms = - match terms_kind with - | "data" -> - Stdlib.List.init terms_count (fun _i -> - progress () ; - Michelson_mcmc_samplers.Data - (Michelson_generation.make_data_sampler rng_state cfg)) - | "code" -> - Stdlib.List.init terms_count (fun _i -> - progress () ; - Michelson_mcmc_samplers.Code - (Michelson_generation.make_code_sampler rng_state cfg)) - | _ -> - Format.eprintf "Term kind must be either \"data\" or \"code\"@." ; - exit 1 - in - Michelson_mcmc_samplers.save ~filename ~terms ; - return_unit - - let min_size_arg = - let open Lwt_result_syntax in - let min_size = - Tezos_clic.parameter (fun (_ : unit) parsed -> - try return (int_of_string parsed) - with _ -> - Format.eprintf "Error while parsing --min-size argument.@." ; - exit 1) - in - Tezos_clic.arg - ~doc:"Lower bound for target size of terms" - ~long:"min-size" - ~placeholder:"int" - min_size - - let max_size_arg = - let open Lwt_result_syntax in - let max_size = - Tezos_clic.parameter (fun (_ : unit) parsed -> - try return (int_of_string parsed) - with _ -> - Format.eprintf "Error while parsing --max-size argument.@." ; - exit 1) - in - Tezos_clic.arg - ~doc:"Lower bound for target size of terms" - ~long:"max-size" - ~placeholder:"int" - max_size - - let burn_in_arg = - let open Lwt_result_syntax in - let target_size = - Tezos_clic.parameter (fun (_ : unit) parsed -> - try return (int_of_string parsed) - with _ -> - Format.eprintf "Error while parsing --burn-in argument.@." ; - exit 1) - in - Tezos_clic.arg - ~doc:"Burn-in multiplier" - ~long:"burn-in" - ~placeholder:"int" - target_size - - let seed_arg = - let open Lwt_result_syntax in - let seed = - Tezos_clic.parameter (fun (_ : unit) parsed -> - try return (int_of_string parsed) - with _ -> - Format.eprintf "Error while parsing --seed argument.@." ; - exit 1) - in - Tezos_clic.arg ~doc:"RNG seed" ~long:"seed" ~placeholder:"int" seed - - let options = Tezos_clic.args4 min_size_arg max_size_arg burn_in_arg seed_arg - - let params = - Tezos_clic.( - prefixes [Protocol.name; "michelson"; "generate"] - @@ string ~name:"TERMS-COUNT" ~desc:"Number of terms to generate" - @@ prefixes ["terms"; "of"; "kind"] - @@ string ~name:"{data|code}" ~desc:"Kind of term to generate" - @@ prefixes ["in"] - @@ string ~name:"FILENAME" ~desc:"File where to save Michelson terms" - @@ stop) - - let command = - Tezos_clic.command - ~group - ~desc:"Michelson generation" - options - params - handler -end - -let () = Registration.add_command Michelson_gen_cmd.command diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_generation.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_generation.ml deleted file mode 100644 index d1422930010aa84e1f20e06e14f4763745f68599..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_generation.ml +++ /dev/null @@ -1,113 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -type generator_config = { - target_size : Base_samplers.range; - burn_in_multiplier : int; -} - -let default_generator_config = - {target_size = {Base_samplers.min = 100; max = 1000}; burn_in_multiplier = 5} - -let generator_config_encoding = - let open Data_encoding in - conv - (fun {target_size; burn_in_multiplier} -> (target_size, burn_in_multiplier)) - (fun (target_size, burn_in_multiplier) -> {target_size; burn_in_multiplier}) - (obj2 - (req "target_size" Base_samplers.range_encoding) - (req "burn_in_multiplier" int31)) - -(* ----------------------------------------------------------------------- *) - -(* ----------------------------------------------------------------------- *) - -module Crypto_samplers = Crypto_samplers.Make_finite_key_pool (struct - let size = 16 - - let algo = `Default -end) - -module Samplers = - Michelson_samplers.Make - (struct - let parameters = - { - Michelson_samplers.base_parameters = - { - int_size = {min = 8; max = 32}; - string_size = {min = 8; max = 128}; - bytes_size = {min = 8; max = 128}; - }; - list_size = {min = 0; max = 1000}; - set_size = {min = 0; max = 1000}; - map_size = {min = 0; max = 1000}; - } - end) - (Crypto_samplers) - -module Michelson_base_samplers = Samplers.Michelson_base - -(* ----------------------------------------------------------------------- *) - -let make_data_sampler rng_state config = - let target_size = - Base_samplers.sample_in_interval rng_state ~range:config.target_size - in - let module Data = - Michelson_mcmc_samplers.Make_data_sampler - (Michelson_base_samplers) - (Crypto_samplers) - (struct - let rng_state = rng_state - - let target_size = target_size - - let verbosity = `Silent - end) - in - let burn_in = target_size * config.burn_in_multiplier in - let generator = Data.generator ~burn_in rng_state in - generator rng_state - -let make_code_sampler rng_state config = - let target_size = - Base_samplers.sample_in_interval rng_state ~range:config.target_size - in - let module Code = - Michelson_mcmc_samplers.Make_code_sampler - (Michelson_base_samplers) - (Crypto_samplers) - (struct - let rng_state = rng_state - - let target_size = target_size - - let verbosity = `Silent - end) - in - let burn_in = target_size * config.burn_in_multiplier in - let generator = Code.generator ~burn_in rng_state in - generator rng_state diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_generation.mli b/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_generation.mli deleted file mode 100644 index 89868e6f58b1eee6164ea500e3e8ceeba4c70876..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_generation.mli +++ /dev/null @@ -1,61 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** {2 Wrappers around some Michelson generators and related helpers} *) - -(** [generator_config] specifies some parameters to the - {!Tezos_benchmark_alpha.Michelson_mcmc_samplers} Michelson code and data generators. *) -type generator_config = { - target_size : Base_samplers.range; - (** The target size of the terms, in number of nodes, is sampled uniformly - in [target_size]. *) - burn_in_multiplier : int; - (** The generators are based on a Markov chain, which must be - "heated-up" until it reaches its stationary state. A prefix of samples - are therefore thrown away: this is called the {e burn-in} phase. - The number of thrown away terms is proportional to [burn_in_multiplier] - and [target_size]. *) -} - -(** Default configuration for the generators. *) -val default_generator_config : generator_config - -val generator_config_encoding : generator_config Data_encoding.t - -(** Samplers *) - -(** [make_data_sampler] constructs a Michelson data sampler based on the - infrastructure available in {!Tezos_benchmark_alpha.Michelson_mcmc_samplers}. *) -val make_data_sampler : - Random.State.t -> generator_config -> Michelson_mcmc_samplers.michelson_data - -(** [make_code_sampler] constructs a Michelson code sampler based on the - infrastructure available in {!Tezos_benchmark_alpha.Michelson_mcmc_samplers}. *) -val make_code_sampler : - Random.State.t -> generator_config -> Michelson_mcmc_samplers.michelson_code - -(** [Samplers] is an instance of the direct-style (non-MCMC based) samplers - implemented in {!Tezos_benchmark_alpha.Michelson_samplers}. *) -module Samplers : Michelson_samplers.S diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_types.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_types.ml deleted file mode 100644 index 74a49958dbfe5ff81ce75218a3826df43926bda6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/michelson_types.ml +++ /dev/null @@ -1,130 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Script_typed_ir - -[@@@ocaml.warning "-32"] - -let ( @$ ) x y = Item_t (x, y) - -let bot = Bot_t - -let unit = unit_t - -(* the type of integers *) -let int = int_t - -(* the type of naturals *) -let nat = nat_t - -(* the type of strings *) -let string = string_t - -(* the type of bytes *) -let bytes = bytes_t - -(* the type of booleans *) -let bool = bool_t - -(* the type of mutez *) -let mutez = mutez_t - -(* the type of public key *) -let public_key = key_t - -(* the type of key hashes *) -let key_hash = key_hash_t - -(* the type of signatures *) -let signature = signature_t - -(* the type of addresses *) -let address = address_t - -(* the type of chain ids *) -let chain_id = chain_id_t - -(* the type of timestamps *) -let timestamp = timestamp_t - -(* list type constructor *) -let list x = match list_t (-1) x with Error _ -> assert false | Ok t -> t - -(* option type constructor *) -let option x = match option_t (-1) x with Error _ -> assert false | Ok t -> t - -(* map type constructor*) -let map k v = match map_t (-1) k v with Error _ -> assert false | Ok t -> t - -(* map type constructor*) -let big_map k v = - match big_map_t (-1) k v with Error _ -> assert false | Ok t -> t - -(* set type constructor*) -let set k = match set_t (-1) k with Error _ -> assert false | Ok t -> t - -(* pair type constructor*) -let pair k1 k2 = - match pair_t (-1) k1 k2 with Error _ -> assert false | Ok t -> t - -(* comparable pair type constructor *) -let cpair k1 k2 = - match comparable_pair_t (-1) k1 k2 with Error _ -> assert false | Ok t -> t - -(* or type constructor*) -let or_ k1 k2 = match or_t (-1) k1 k2 with Error _ -> assert false | Ok t -> t - -(* comparable or type constructor *) -let cor k1 k2 = - match comparable_or_t (-1) k1 k2 with Error _ -> assert false | Ok t -> t - -let lambda x y = - match lambda_t (-1) x y with Error _ -> assert false | Ok t -> t - -let contract arg_ty = - match contract_t (-1) arg_ty with Error _ -> assert false | Ok t -> t - -let operation = operation_t - -let sapling_state memo_size = sapling_state_t ~memo_size - -let sapling_transaction memo_size = sapling_transaction_t ~memo_size - -let sapling_transaction_deprecated memo_size = - sapling_transaction_deprecated_t ~memo_size - -let bls12_381_g1 = bls12_381_g1_t - -let bls12_381_g2 = bls12_381_g2_t - -let bls12_381_fr = bls12_381_fr_t - -let ticket ty = - match ticket_t (-1) ty with Error _ -> assert false | Ok t -> t - -let chest_key = chest_key_t - -let chest = chest_t diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/registration_helpers.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/registration_helpers.ml deleted file mode 100644 index 51056b6746e041f607c2a0c8a473dd4b7a00e2ba..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/registration_helpers.ml +++ /dev/null @@ -1,58 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let ns = Namespace.root - -let adjust_tags tags = Tags.common :: tags - -type benchmark_type = Time | Alloc - -let register ?(benchmark_type = Time) ((module Bench) : Benchmark.t) = - let module B : Benchmark.S = struct - include Bench - - let tags = adjust_tags tags - end in - Registration.register ~add_timer:(benchmark_type = Time) (module B) - -let register_simple ?(benchmark_type = Time) (module Bench : Benchmark.Simple) = - let module B = struct - include Bench - - let tags = adjust_tags tags - end in - Registration.register_simple ~add_timer:(benchmark_type = Time) (module B) - -let register_simple_with_num ?(benchmark_type = Time) - (module Bench : Benchmark.Simple_with_num) = - let module B = struct - include Bench - - let tags = adjust_tags tags - end in - Registration.register_simple_with_num - ~add_timer:(benchmark_type = Time) - (module B) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_benchmarks.ml deleted file mode 100644 index a11db0599a259377d4610d52fc4e1c7a7a4971bb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_benchmarks.ml +++ /dev/null @@ -1,171 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -module Size = Gas_input_size - -let ns = Namespace.make Registration_helpers.ns "sapling" - -let fv s = Free_variable.of_namespace (ns s) - -module Apply_diff_bench : Benchmark.S = struct - include Interpreter_benchmarks.Default_config - include Interpreter_benchmarks.Default_boilerplate - - let name = ns "SAPLING_APPLY_DIFF" - - let info = "Benchmarking SAPLING_APPLY_DIFF" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "sapling_storage" - - let tags = ["sapling"] - - let diff_from_tx (tx : Alpha_context.Sapling.transaction) = - let open Environment.Sapling.UTXO in - let commitments_and_ciphertexts = - List.map (fun x -> (x.cm, x.ciphertext)) tx.outputs - in - { - Protocol.Sapling_repr.commitments_and_ciphertexts; - nullifiers = List.map (fun (x : input) -> x.nf) tx.inputs; - } - - type workload = {nb_input : int; nb_output : int; nb_cm : int; nb_nf : int} - - let workload_encoding : workload Data_encoding.t = - let open Data_encoding in - def "diff_arg_encoding" - @@ conv - (fun {nb_input; nb_output; nb_cm; nb_nf} -> - (nb_input, nb_output, nb_cm, nb_nf)) - (fun (nb_input, nb_output, nb_cm, nb_nf) -> - {nb_input; nb_output; nb_cm; nb_nf}) - (tup4 Size.encoding Size.encoding Size.encoding Size.encoding) - - let workload_to_vector {nb_input; nb_output; nb_cm = _; nb_nf = _} = - let l = - [ - ("nb_input", float_of_int nb_input); - ("nb_output", float_of_int nb_output); - ] - in - Sparse_vec.String.of_list l - - let model = - Model.make - ~conv:(fun {nb_input; nb_output; _} -> (nb_input, (nb_output, ()))) - (Model.bilinear_affine - ~name - ~intercept:(fv "apply_diff_const") - ~coeff1:(fv "apply_diff_inputs") - ~coeff2:(fv "apply_diff_outputs")) - - let models = [("apply_diff", model)] - - let benchmark_apply_diff seed sapling_transition () = - let open Lwt_result_syntax in - let sapling_forge_rng_state = - Random.State.make - @@ Option.fold - ~none:Sapling_generation.shared_seed - ~some:(fun seed -> [|seed|]) - seed - in - Lwt_main.run - (let* ctxt, step_constants = - Execution_context.make ~rng_state:sapling_forge_rng_state () - in - let* _, _, _, _, ctxt, state_id = - Sapling_generation.prepare_seeded_state sapling_transition ctxt - in - let external_state_id = Alpha_context.Sapling.Id.parse_z state_id in - let internal_state_id = - Lazy_storage_kind.Sapling_state.Id.parse_z state_id - in - let* state, ctxt = - let*! result = - Alpha_context.Sapling.(state_from_id ctxt external_state_id) - in - Lwt.return (Environment.wrap_tzresult result) - in - Format.eprintf "state hash: %d@." (Hashtbl.hash state.diff) ; - Format.eprintf - "tx hash: %d@." - (Hashtbl.hash sapling_transition.sapling_tx) ; - let address = Contract_hash.to_b58check step_constants.self in - let chain_id = - Environment.Chain_id.to_b58check step_constants.chain_id - in - let anti_replay = address ^ chain_id in - Format.eprintf "anti-replay: %s@." anti_replay ; - let diff = diff_from_tx sapling_transition.sapling_tx in - let closure () = - ignore - (Lwt_main.run - (Sapling_generation.apply_diff ctxt internal_state_id diff)) - in - let workload = - { - nb_input = List.length sapling_transition.sapling_tx.inputs; - nb_output = List.length sapling_transition.sapling_tx.outputs; - nb_cm = Int64.to_int sapling_transition.commitment_count; - nb_nf = Int64.to_int sapling_transition.nullifier_count; - } - in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> - Format.eprintf - "Runner.benchmarkable_from_instr_str:\n%a@." - (Format.pp_print_list Error_monad.pp) - errs ; - exit 1 - - let create_benchmarks ~rng_state ~bench_num config = - ignore rng_state ; - match config.sapling with - | {sapling_txs_file; seed} -> - let transitions = - Sapling_generation.load - ~filename:sapling_txs_file - Sapling_generation.Non_empty - in - let length = List.length transitions in - if length < bench_num then - Format.eprintf - "KSapling_verify_update: warning, only %d available transactions \ - (requested %d)@." - length - bench_num ; - let transitions = List.take_n (min bench_num length) transitions in - List.map - (fun (_filename, tx) -> benchmark_apply_diff seed tx) - transitions -end - -let () = Registration_helpers.register (module Apply_diff_bench) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_commands.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_commands.ml deleted file mode 100644 index 8700b7ccd5a4fd676d94a90fd1eb6da5bbdd2ab4..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_commands.ml +++ /dev/null @@ -1,138 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Sapling_gen_cmd = struct - let lift_opt f opt_arg state = - match opt_arg with None -> state | Some arg -> f arg state - - (* ----------------------------------------------------------------------- *) - (* Handling options for the "generate sapling transactions" command *) - - (* Generic max-%s argument *) - let max name = - let open Lwt_result_syntax in - Tezos_clic.arg - ~doc:(Printf.sprintf "Maximum number of %s" name) - ~long:(Printf.sprintf "max-%s" name) - ~placeholder:"integer" - (Tezos_clic.parameter (fun (_ : unit) parsed -> - match int_of_string parsed with - | exception Failure _ -> - Format.eprintf - "Ill-formatted --max-%s option (expected integer), exiting@." - name ; - exit 1 - | res when res < 0 -> - Format.eprintf - "--max-%s should be a positive integer, exiting@." - name ; - exit 1 - | res -> return res)) - - (* Integer argument --seed *) - let seed_arg = - let open Lwt_result_syntax in - let seed = - Tezos_clic.parameter (fun (_ : unit) parsed -> - try return (int_of_string parsed) - with _ -> - Format.eprintf "Error while parsing --seed argument.@." ; - exit 1) - in - Tezos_clic.arg ~doc:"RNG seed" ~long:"seed" ~placeholder:"int" seed - - let positive_param = - let open Lwt_result_syntax in - Tezos_clic.parameter (fun _ s -> - match int_of_string_opt s with - | Some i when i > 0 -> return i - | _ -> failwith "Parameter should be a positive integer literal") - - open Sapling_generation - - let set_max_inputs max_inputs options = {options with max_inputs} - - let set_max_outputs max_outputs options = {options with max_outputs} - - let set_max_nullifiers max_nullifiers options = {options with max_nullifiers} - - let set_max_additional_commitments max_additional_commitments options = - {options with max_additional_commitments} - - let set_seed seed (options : sapling_gen_options) = - {options with seed = Some seed} - - let sapling_handler - (max_inputs, max_outputs, max_nullifiers, max_additional_commitments, seed) - tx_count save_to () = - let open Lwt_result_syntax in - let sapling_gen_options = - default_sapling_gen_options - |> lift_opt set_max_inputs max_inputs - |> lift_opt set_max_outputs max_outputs - |> lift_opt set_max_nullifiers max_nullifiers - |> lift_opt set_max_additional_commitments max_additional_commitments - |> lift_opt set_seed seed - in - generate save_to tx_count sapling_gen_options ; - return_unit - - let options = - Tezos_clic.args5 - (max "inputs") - (max "outputs") - (max "nullifiers") - (max "additional-commitments") - seed_arg - - let params = - Tezos_clic.( - prefixes [Protocol.name; "sapling"; "generate"] - @@ param - ~name:"SAPLING-TX-COUNT" - ~desc:"Number of sapling transactions to generate" - positive_param - @@ prefixes ["transactions"; "in"] - @@ string - ~name:"SAPLING-TX-FILE" - ~desc:"File containing sapling transactions" - @@ stop) - - let group = - { - Tezos_clic.name = "Sapling tx generation"; - title = "Command for generating random sapling transactions"; - } - - let command = - Tezos_clic.command - ~group - ~desc:"Sapling transaction generation" - options - params - sapling_handler -end - -let () = Registration.add_command Sapling_gen_cmd.command diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_generation.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_generation.ml deleted file mode 100644 index 1cfdcd91d55aabfcc0e27061f99637c692316069..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/sapling_generation.ml +++ /dev/null @@ -1,608 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(* ------------------------------------------------------------------------- *) -type sapling_gen_options = { - max_inputs : int; - max_outputs : int; - max_nullifiers : int; - max_additional_commitments : int; - seed : int option; -} - -let default_sapling_gen_options = - { - max_inputs = 100; - max_outputs = 100; - max_nullifiers = 100; - max_additional_commitments = 50; - seed = None; - } - -(* ------------------------------------------------------------------------- *) -(* Evil incantations *) - -(* We have to break the protocol abstraction boundary quite often in this - module. Props to whoever finds a way to avoid these calls. *) - -let alpha_to_raw (x : Alpha_context.t) : Raw_context.t = Obj.magic x - -let raw_to_alpha (x : Raw_context.t) : Alpha_context.t = Obj.magic x - -(* ------------------------------------------------------------------------- *) -(* Helpers *) - -(* sample a random permutation of [0 ; ... ; n-1] *) -let fisher_yates n state = - let a = Array.init n (fun i -> i) in - for i = 0 to Array.length a - 1 do - let j = Random.State.int state (i + 1) in - let tmp = a.(j) in - a.(j) <- a.(i) ; - a.(i) <- tmp - done ; - a - -(* sample a random injection of [0 ; ... ; m-1 ] in [0 ; ... ; n - 1] *) -let random_injection m n state = - if m > n then invalid_arg "random_injection" - else - let a = fisher_yates n state in - Array.sub a 0 m - -(* ------------------------------------------------------------------------- *) -(* Sapling generation *) - -(* Sapling state spec + sapling transaction valid for that state. *) -type sapling_transition = { - state_seed : int64; - nullifier_count : int64; - commitment_count : int64; - sapling_tx : Alpha_context.Sapling.transaction; -} - -type forge_info = { - rcm : Tezos_sapling.Core.Client.Rcm.t; - position : int64; - amount : int64; - address : Tezos_sapling.Core.Client.Viewing_key.address; - nf : Tezos_sapling.Core.Client.Nullifier.t; -} - -let random_amount state sum = - Random.State.int64 - state - (Int64.sub Tezos_sapling.Core.Validator.UTXO.max_amount sum) - -let reverse diff = - Protocol.Sapling_repr. - { - diff with - commitments_and_ciphertexts = List.rev diff.commitments_and_ciphertexts; - } - -let pp_rpc_diff fmtr (diff : Protocol.Sapling_repr.diff) = - let json = - Data_encoding.Json.construct Protocol.Sapling_repr.diff_encoding diff - in - Format.fprintf fmtr "%a" Data_encoding.Json.pp json - -let random_bytes state size = - Bytes.init size (fun _ -> Char.chr (Random.State.int state 256)) - -let rec gen_rcm state = - let rcm = - Data_encoding.Binary.of_bytes_exn - Tezos_sapling.Core.Client.Rcm.encoding - (random_bytes state 32) - in - try - Tezos_sapling.Core.Client.Rcm.assert_valid rcm ; - rcm - with _ -> gen_rcm state - -(* Adds a commitment, ciphertext, cv to an rpc_diff *) -let add_input diff vk index position sum state = - let open Lwt_result_syntax in - let rcm = gen_rcm state in - let amount = random_amount state sum in - let new_idx, address = - Tezos_sapling.Core.Client.Viewing_key.new_address vk index - in - let cv = - Tezos_sapling.Core.Client.CV.of_bytes (random_bytes state 32) - |> WithExceptions.Option.get ~loc:__LOC__ - in - let ciphertext, cm = - Tezos_sapling.Core.Client.Forge.Output.to_ciphertext - Tezos_sapling.Core.Client.Forge.Output. - {address; amount; memo = Bytes.empty} - cv - vk - rcm - (Tezos_sapling.Core.Client.DH.esk_random ()) - in - let nf = - Tezos_sapling.Core.Client.Nullifier.compute address vk ~amount rcm ~position - in - let diff = - Protocol.Sapling_repr. - { - diff with - commitments_and_ciphertexts = - (cm, ciphertext) :: diff.commitments_and_ciphertexts; - } - in - return (diff, {rcm; position; amount; address; nf}, new_idx) - -let generate_commitments ~vk ~nb_input ~nb_cm ~nb_nf ~diff ~index state = - let open Lwt_result_syntax in - let inj = random_injection nb_input nb_cm state in - let use_for_input i = Array.exists (fun k -> k = i) inj in - let rec loop i cm_index nb_nf diff to_forge sum = - if i = nb_cm then return (reverse diff, to_forge) - else if use_for_input i then - (* create commitment for input *) - let* diff, forge_info, next_index = - add_input diff vk cm_index (Int64.of_int i) sum state - in - let sum = Int64.add sum forge_info.amount in - loop (i + 1) next_index nb_nf diff (forge_info :: to_forge) sum - else - (* create commitment (not for input) *) - let* diff, {nf; _}, next_index = - add_input diff vk cm_index (Int64.of_int i) sum state - in - (* can we use a nullifier? *) - if nb_nf = 0 then (* No. *) - loop (i + 1) next_index nb_nf diff to_forge sum - else - (* Yes! Grab it. *) - let diff = - Protocol.Sapling_repr.{diff with nullifiers = nf :: diff.nullifiers} - in - loop (i + 1) next_index (nb_nf - 1) diff to_forge sum - in - loop 0 index nb_nf diff [] 0L - -(* Add roots to the storage. One cm has to be added for every root. *) -let rec add_root nb_root ctxt id vk index size diff state = - let open Lwt_result_syntax in - if nb_root > 0 then - let* diff_to_add, {position = size; _}, new_idx = - add_input Protocol.Sapling_storage.empty_diff vk index size 0L state - in - let* ctxt, _ = - let*! result = Protocol.Sapling_storage.apply_diff ctxt id diff_to_add in - Lwt.return (Environment.wrap_tzresult result) - in - (* We call it nb_root -1 because one root is already present*) - add_root - (nb_root - 1) - ctxt - id - vk - new_idx - (Int64.succ size) - Protocol.Sapling_repr. - { - diff with - commitments_and_ciphertexts = - diff.commitments_and_ciphertexts - @ diff_to_add.commitments_and_ciphertexts; - } - state - else return (ctxt, diff) - -(* Compute a state as an OCaml object to compute the witness *) -let state_from_rpc_diff rpc_diff = - Tezos_sapling.Storage.add - (Tezos_sapling.Storage.empty ~memo_size:0) - rpc_diff.Protocol.Sapling_repr.commitments_and_ciphertexts - -(* Create an (unspendable) output from a proving context and a vk *) -let output proving_ctx vk sum state = - let address = Tezos_sapling.Core.Client.Viewing_key.dummy_address () in - let amount = random_amount state sum in - let rcm = Tezos_sapling.Core.Client.Rcm.random () in - let esk = Tezos_sapling.Core.Client.DH.esk_random () in - let cv_o, proof_o = - Tezos_sapling.Core.Client.Proving.output_proof - proving_ctx - esk - address - rcm - ~amount - in - let ciphertext, cm = - Tezos_sapling.Core.Client.Forge.Output.to_ciphertext - Tezos_sapling.Core.Client.Forge.Output. - {address; amount; memo = Bytes.empty} - cv_o - vk - rcm - esk - in - (Tezos_sapling.Core.Validator.UTXO.{cm; proof_o; ciphertext}, amount) - -(* Returns a list of outputs and the sum of their amount *) -let outputs nb_output proving_ctx vk state = - let rec aux output_amount list_outputs nb_output sum = - match nb_output with - | 0 -> (output_amount, list_outputs) - | nb_output -> - let output, amount = output proving_ctx vk sum state in - assert ( - Int64.compare - amount - (Int64.sub - Int64.max_int - Tezos_sapling.Core.Validator.UTXO.max_amount) - < 0) ; - aux - (Int64.add output_amount amount) - (output :: list_outputs) - (nb_output - 1) - (Int64.add sum amount) - in - aux 0L [] nb_output 0L - -(* Create the list of inputs. To use once the merkle tree is completed. *) -let make_inputs to_forge local_state proving_ctx sk vk root anti_replay = - let open Lwt_result_syntax in - List.map_ep - (fun {rcm; position; amount; address; nf} -> - let witness = Tezos_sapling.Storage.get_witness local_state position in - let ar = Tezos_sapling.Core.Client.Proving.ar_random () in - let cv, rk, proof = - Tezos_sapling.Core.Client.Proving.spend_proof - proving_ctx - vk - sk - address - rcm - ar - ~amount - ~root - ~witness - in - let signature = - Tezos_sapling.Core.Client.Proving.spend_sig - sk - ar - cv - nf - rk - proof - anti_replay - in - return - Tezos_sapling.Core.Validator.UTXO. - {cv; nf; rk; proof_i = proof; signature}) - to_forge - -let init_fresh_sapling_state ctxt = - let open Lwt_result_syntax in - let* ctxt, id = - Protocol.Lazy_storage_diff.fresh - Protocol.Lazy_storage_kind.Sapling_state - ~temporary:false - ctxt - in - let* ctxt = - Protocol.Sapling_storage.init ctxt id ~memo_size:0 - (* TODO CHECK *) - in - return (ctxt, id) - -let generate_spending_and_viewing_keys state = - let sk = - Tezos_sapling.Core.Client.Spending_key.of_seed (random_bytes state 32) - in - let vk = Tezos_sapling.Core.Client.Viewing_key.of_sk sk in - (sk, vk) - -let prepare_seeded_state_internal ~(nb_input : int) ~(nb_nf : int) - ~(nb_cm : int) (ctxt : Raw_context.t) (state : Random.State.t) : - (Sapling_repr.diff - * forge_info list - * Tezos_sapling.Core.Client.Spending_key.t - * Tezos_sapling.Core.Client.Viewing_key.t - * Raw_context.t - * Protocol.Lazy_storage_kind.Sapling_state.Id.t) - tzresult - Lwt.t = - let open Lwt_result_syntax in - let* ctxt, id = - let*! result = init_fresh_sapling_state ctxt in - Lwt.return (Environment.wrap_tzresult result) - in - let index_start = Tezos_sapling.Core.Client.Viewing_key.default_index in - let sk, vk = generate_spending_and_viewing_keys state in - let* diff, to_forge = - generate_commitments - ~vk - ~nb_input - ~nb_cm - ~nb_nf - ~diff:Protocol.Sapling_storage.empty_diff - ~index:index_start - state - in - let* ctxt, _size = - let*! result = Protocol.Sapling_storage.apply_diff ctxt id (reverse diff) in - Lwt.return (Environment.wrap_tzresult result) - in - return (diff, to_forge, sk, vk, ctxt, id) - -let prepare_seeded_state - {state_seed; nullifier_count; commitment_count; sapling_tx} ctxt = - let open Lwt_result_syntax in - let rng_state = Random.State.make [|Int64.to_int state_seed|] in - let* diff, forge_info, spending_key, viewing_key, raw_ctxt, raw_id = - prepare_seeded_state_internal - ~nb_input:(List.length sapling_tx.inputs) - ~nb_nf:(Int64.to_int nullifier_count) - ~nb_cm:(Int64.to_int commitment_count) - (alpha_to_raw ctxt) - rng_state - in - let id = Protocol.Lazy_storage_kind.Sapling_state.Id.unparse_to_z raw_id in - return (diff, forge_info, spending_key, viewing_key, raw_to_alpha raw_ctxt, id) - -let generate ~(nb_input : int) ~(nb_output : int) ~(nb_nf : int) ~(nb_cm : int) - ~(anti_replay : string) ~ctxt state = - let open Lwt_result_syntax in - assert (nb_input <= nb_cm) ; - assert (nb_nf <= nb_cm - nb_input) ; - let* diff, to_forge, sk, vk, ctxt, id = - prepare_seeded_state_internal ~nb_input ~nb_nf ~nb_cm ctxt state - in - let local_state = state_from_rpc_diff diff in - let root = Tezos_sapling.Storage.get_root local_state in - let* transaction = - Tezos_sapling.Core.Client.Proving.with_proving_ctx (fun proving_ctx -> - let* inputs = - make_inputs to_forge local_state proving_ctx sk vk root anti_replay - in - let output_amount, outputs = outputs nb_output proving_ctx vk state in - let input_amount = - List.fold_left - (fun sum {amount; _} -> - assert ( - Int64.compare - sum - (Int64.sub - Int64.max_int - Tezos_sapling.Core.Validator.UTXO.max_amount) - < 0) ; - Int64.add sum amount) - 0L - to_forge - in - let balance = Int64.sub input_amount output_amount in - let bound_data = - (* The bound data are benched separately so we add - empty bound data*) - "" - in - let binding_sig = - Tezos_sapling.Core.Client.Proving.make_binding_sig - proving_ctx - inputs - outputs - ~balance - ~bound_data - anti_replay - in - let transaction = - Tezos_sapling.Core.Validator.UTXO. - {inputs; outputs; binding_sig; balance; root; bound_data} - in - return transaction) - in - assert (Compare.List_length_with.(transaction.inputs = nb_input)) ; - assert (Compare.List_length_with.(transaction.outputs = nb_output)) ; - return (transaction, (ctxt, id)) - -(* ------------------------------------------------------------------------- *) -(* Nicely packaging sapling generation for snoop *) - -let sapling_transition_encoding = - let open Data_encoding in - conv - (fun {state_seed; nullifier_count; commitment_count; sapling_tx} -> - (state_seed, nullifier_count, commitment_count, sapling_tx)) - (fun (state_seed, nullifier_count, commitment_count, sapling_tx) -> - {state_seed; nullifier_count; commitment_count; sapling_tx}) - (obj4 - (req "state_seed" int64) - (req "nullifier_count" int64) - (req "commitment_count" int64) - (req "sapling_tx" Alpha_context.Sapling.transaction_encoding)) - -let sapling_dataset_encoding = Data_encoding.list sapling_transition_encoding - -let save ~filename ~txs = - let str = - match Data_encoding.Binary.to_string sapling_dataset_encoding txs with - | Error err -> - Format.eprintf - "Sapling_generation.save: encoding failed (%a); exiting@." - Data_encoding.Binary.pp_write_error - err ; - exit 1 - | Ok res -> res - in - ignore (* TODO handle error *) - (Lwt_main.run @@ Tezos_stdlib_unix.Lwt_utils_unix.create_file filename str) - -let load_file filename = - let open Lwt_syntax in - Lwt_main.run - @@ let* str = Tezos_stdlib_unix.Lwt_utils_unix.read_file filename in - Format.eprintf "Sapling_generation.load: loaded %s@." filename ; - match Data_encoding.Binary.of_string sapling_dataset_encoding str with - | Ok result -> - let result = List.map (fun tx -> (filename, tx)) result in - return result - | Error err -> - Format.eprintf - "Sapling_generation.load: can't load file (%a); exiting@." - Data_encoding.Binary.pp_read_error - err ; - exit 1 - -let get_all_sapling_data_files directory = - let is_sapling_data file = - let regexp = Str.regexp ".*\\.sapling" in - Str.string_match regexp file 0 - in - let lift file = directory ^ "/" ^ file in - let handle = Unix.opendir directory in - let rec loop acc = - match Unix.readdir handle with - | file -> if is_sapling_data file then loop (lift file :: acc) else loop acc - | exception End_of_file -> - Unix.closedir handle ; - acc - in - loop [] - -type type_transaction = Empty | Non_empty - -let load ~filename type_transaction = - if not (Sys.file_exists filename) then ( - Format.eprintf "Sapling_generation.load: file does not exist@." ; - Stdlib.failwith "Sapling_generation.load") - else if Sys.is_directory filename then - let () = - Format.eprintf - "Sapling_generation.load: loading all *.sapling files from directory \ - %s@." - filename - in - let files = get_all_sapling_data_files filename in - List.concat_map load_file files - |> List.filter (fun (_str, transac) -> - match type_transaction with - | Empty -> - List.is_empty transac.sapling_tx.outputs - && List.is_empty transac.sapling_tx.inputs - | Non_empty -> - (not (List.is_empty transac.sapling_tx.outputs)) - || not (List.is_empty transac.sapling_tx.inputs)) - else load_file filename - -let shared_seed = [|9798798; 217861209; 876786|] - -let generate (save_to : string) (tx_count : int) - (sapling_gen_options : sapling_gen_options) = - let open Lwt_result_syntax in - let result = - Lwt_main.run - (let { - max_inputs; - max_outputs; - max_nullifiers; - max_additional_commitments; - seed; - } = - sapling_gen_options - in - let rng_state = - (* /!\ This must match the seed used at benchmark time, - defined in Runner.benchmark_sapling. /!\ *) - Random.State.make - @@ Option.fold ~none:shared_seed ~some:(fun seed -> [|seed|]) seed - in - let* ctxt, step_constants = Execution_context.make ~rng_state () in - let address = Contract_hash.to_b58check step_constants.self in - let chain_id = - Environment.Chain_id.to_b58check step_constants.chain_id - in - let anti_replay = address ^ chain_id in - let ctxt = alpha_to_raw ctxt in - (match sapling_gen_options.seed with - | None -> Random.self_init () - | Some seed -> Random.init seed) ; - let seeds = - Stdlib.List.init tx_count (fun i -> (i, Random.int 0x3FFFFFFF)) - in - let rec loop seeds acc = - match seeds with - | [] -> return acc - | (i, seed) :: tl -> - let nb_input = - if max_inputs = 0 then 0 else 1 + Random.int max_inputs - in - let nb_output = - if max_outputs = 0 then 0 else 1 + Random.int max_outputs - in - let nb_nf = 1 + Random.int max_nullifiers in - let nb_cm = - nb_input + nb_nf + Random.int max_additional_commitments - in - let () = - Format.eprintf "@." ; - Format.eprintf "generating sapling tx %i/%d@." (i + 1) tx_count ; - Format.eprintf "saving to file %s@." save_to ; - Format.eprintf "nb_input = %d@." nb_input ; - Format.eprintf "nb_output = %d@." nb_output ; - Format.eprintf "nb_nf = %d@." nb_nf ; - Format.eprintf "nb_cm = %d@." nb_cm ; - Format.eprintf "anti_replay = %s@." anti_replay - in - let state = Random.State.make [|seed|] in - let* tx, (_ctxt, _state_id) = - generate - ~nb_input - ~nb_output - ~nb_nf - ~nb_cm - ~anti_replay - ~ctxt - state - in - let result = - { - state_seed = Int64.of_int seed; - nullifier_count = Int64.of_int nb_nf; - commitment_count = Int64.of_int nb_cm; - sapling_tx = Obj.magic tx; - } - in - loop tl (result :: acc) - in - loop seeds []) - in - match result with Ok txs -> save ~filename:save_to ~txs | Error _ -> () - -let apply_diff ctxt id diff = - let open Lwt_result_syntax in - let* ctxt, size = Sapling_storage.apply_diff (alpha_to_raw ctxt) id diff in - return (raw_to_alpha ctxt, size) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/sc_rollup_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/sc_rollup_benchmarks.ml deleted file mode 100644 index ccc9d2b889963effc0a5c6d985f6f30c56673dc3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/sc_rollup_benchmarks.ml +++ /dev/null @@ -1,707 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let ns = Namespace.make Registration_helpers.ns "sc_rollup" - -let fv s = Free_variable.of_namespace (ns s) - -let ( -- ) min max : Base_samplers.range = {min; max} - -(** This section contains preliminary definitions for building a pvm state from - scratch. *) -module Pvm_state_generator = struct - module Context = Tezos_context_memory.Context_binary - - module Wasm_context = struct - type Tezos_tree_encoding.tree_instance += Tree of Context.tree - - module Tree = struct - include Context.Tree - - type tree = Context.tree - - type t = Context.t - - type key = string list - - type value = bytes - - let select = function - | Tree t -> t - | _ -> raise Tezos_tree_encoding.Incorrect_tree_type - - let wrap t = Tree t - end - - type tree = Context.tree - - type proof = Context.Proof.tree Context.Proof.t - - let verify_proof p f = - Lwt.map Result.to_option (Context.verify_tree_proof p f) - - let produce_proof context tree step = - let open Lwt_syntax in - let* context = Context.add_tree context [] tree in - let* _hash = Context.commit ~time:Time.Protocol.epoch context in - let index = Context.index context in - match Context.Tree.kinded_key tree with - | Some k -> - let* p = Context.produce_tree_proof index k step in - return_some p - | None -> return_none - - let kinded_hash_to_state_hash = function - | `Value hash | `Node hash -> - Sc_rollup_repr.State_hash.context_hash_to_state_hash hash - - let proof_before proof = - kinded_hash_to_state_hash proof.Context.Proof.before - - let proof_after proof = kinded_hash_to_state_hash proof.Context.Proof.after - - let proof_encoding = - let module Proof_encoding = - Tezos_context_merkle_proof_encoding.Merkle_proof_encoding - in - Proof_encoding.V2.Tree2.tree_proof_encoding - end - - let make_transaction value text contract = - let entrypoint = Entrypoint_repr.default in - let destination : Contract_hash.t = - Contract_hash.of_bytes_exn @@ Bytes.of_string contract - in - let open Tezos_micheline.Micheline in - let open Michelson_v1_primitives in - let unparsed_parameters = - strip_locations - @@ Prim - ( 0, - I_TICKET, - [ - Prim - (0, I_PAIR, [Int (0, Z.of_int32 value); String (1, text)], []); - ], - [] ) - in - Sc_rollup_outbox_message_repr.{unparsed_parameters; entrypoint; destination} - - let make_transactions ~rng_state ~max = - let open Base_samplers in - let n = sample_in_interval ~range:(0 -- max) rng_state in - Stdlib.List.init n (fun _ -> - let contract = uniform_string ~nbytes:20 rng_state in - let value = - Int32.of_int @@ sample_in_interval ~range:(-1000 -- 1000) rng_state - in - let text = string ~size:(0 -- 40) rng_state in - make_transaction value text contract) - - let make_outbox_message ~nb_transactions ~rng_state = - let transactions = make_transactions ~rng_state ~max:nb_transactions in - Sc_rollup_outbox_message_repr.Atomic_transaction_batch {transactions} - - let dummy_context = - let dummy = Context.init "/tmp" in - Context.empty @@ Lwt_main.run dummy - - let empty_tree = Context.Tree.empty dummy_context - - (* Build a pvm state from scratch. *) - let build_pvm_state rng_state ~nb_inbox_messages ~input_payload_size - ~nb_output_buffer_levels ~output_buffer_size ~nb_transactions ~tree_depth - ~tree_branching_factor = - let open Lwt_result_syntax in - let random_key () = - Base_samplers.readable_ascii_string ~size:(5 -- 5) rng_state - in - (* [gen_tree] Generates a tree for the given depth and branching factor. - This function is witten in CPS to avoid [stack-overflow] errors when - branching factor is 1 and tree depth is big. *) - let gen_tree () = - let bottom_tree = - let tree = empty_tree in - let key = [random_key ()] in - let value = Bytes.empty in - Context.Tree.add tree key value - in - let rec gen_tree tree_depth kont = - if tree_depth = 0 then kont bottom_tree - else - gen_tree - (tree_depth - 1) - (let rec kont' nb_subtrees acc_subtrees subtree = - let*! subtree in - let acc_subtrees = subtree :: acc_subtrees in - let nb_subtrees = nb_subtrees + 1 in - if nb_subtrees = tree_branching_factor then - let tree = empty_tree in - kont - @@ List.fold_left_s - (fun tree subtree -> - let key = [random_key ()] in - Context.Tree.add_tree tree key subtree) - tree - acc_subtrees - else gen_tree (tree_depth - 1) (kont' nb_subtrees acc_subtrees) - in - kont' 0 []) - in - gen_tree tree_depth Fun.id - in - (* Add trees of junk data in the [durable] and [wasm] parts - of the storage. *) - let*! durable_junk_tree = gen_tree () in - let*! wasm_junk_tree = gen_tree () in - let tree = empty_tree in - let*! tree = Context.Tree.add_tree tree ["durable"] durable_junk_tree in - let*! tree = Context.Tree.add_tree tree ["wasm"] wasm_junk_tree in - (* Create an output buffers and fill it with random batches of - transactions. *) - let open Tezos_webassembly_interpreter in - let open Tezos_scoru_wasm in - let module Index_Vector = Lazy_vector.Mutable.ZVector in - let module Level_Map = Lazy_map.Mutable.LwtInt32Map in - let output = - Level_Map.create - ~produce_value:(fun _ -> - Lwt.return @@ Index_Vector.create (Z.of_int output_buffer_size)) - () - in - let*! () = - let open Sc_rollup_outbox_message_repr in - List.iter_s - (fun l -> - let*! outbox = Level_Map.get (Int32.of_int l) output in - Lwt.return - @@ List.iter - (fun i -> - let out = make_outbox_message ~nb_transactions ~rng_state in - let outbox_message = - Data_encoding.Binary.to_bytes_exn encoding out - in - Index_Vector.set (Z.of_int i) outbox_message outbox) - Misc.(0 --> (output_buffer_size - 1))) - Misc.(0 --> (nb_output_buffer_levels - 1)) - in - let output = Output_buffer.Internal_for_tests.make output in - (* Create the input buffer. *) - let input = Index_Vector.create (Z.of_int nb_inbox_messages) in - let make_input_message (message_counter : int) : Input_buffer.message = - let open Base_samplers in - let random_payload () = - uniform_bytes ~nbytes:input_payload_size rng_state - in - { - raw_level = Int32.of_int message_counter; - message_counter = Z.of_int message_counter; - payload = random_payload (); - } - in - let () = - List.iter - (fun counter -> - Index_Vector.set (Z.of_int counter) (make_input_message counter) input) - Misc.(0 --> (nb_inbox_messages - 1)) - in - (* Encode the buffers and update the state of the pvm. *) - let buffers = Eval.{input; output} in - let buffers_encoding = Wasm_pvm.durable_buffers_encoding in - let module Tree_encoding_runner = - Tezos_tree_encoding.Runner.Make (Wasm_context.Tree) in - let*! tree = - Tree_encoding_runner.encode - (Tezos_tree_encoding.option buffers_encoding) - (Some buffers) - tree - in - Lwt.return (dummy_context, output, tree) - - let select_output ~output_buffer ~nb_output_buffer_levels ~output_buffer_size - rng_state = - let open Lwt_result_syntax in - let open Base_samplers in - (* Pick a level. *) - let outbox_level = - Int32.of_int - @@ sample_in_interval - ~range:(0 -- (nb_output_buffer_levels - 1)) - rng_state - in - (* Pick a message. *) - let message_index = - Z.of_int - @@ sample_in_interval ~range:(0 -- (output_buffer_size - 1)) rng_state - in - let*! bytes_output_message = - Tezos_webassembly_interpreter.Output_buffer.get_message - output_buffer - {outbox_level; message_index} - in - let message = - Data_encoding.Binary.of_bytes_exn - Sc_rollup_outbox_message_repr.encoding - bytes_output_message - in - let*? outbox_level = - Environment.wrap_tzresult @@ Raw_level_repr.of_int32 outbox_level - in - (* Produce an output proof for the picked message, and return the proof - and its length. *) - return Sc_rollup_PVM_sig.{outbox_level; message_index; message} -end - -(** This benchmark estimates the cost of verifying an output proof for the - Wasm PVM. - The inferred cost model is [c1 + c2 * proof_length]. *) -module Sc_rollup_verify_output_proof_benchmark = struct - open Pvm_state_generator - module Full_Wasm = - Sc_rollup_wasm.V2_0_0.Make (Environment.Wasm_2_0_0.Make) (Wasm_context) - - (* Benchmark starts here. *) - - let name = ns "Sc_rollup_verify_output_proof_benchmark" - - let info = "Estimating the cost of verifying an output proof" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "sc_rollup" - - let group = Benchmarks_proto.Benchmark.Group "sc_rollup" - - let tags = ["sc_rollup"] - - type config = { - nb_inbox_messages : int; - input_payload_size : int; - nb_output_buffer_levels : int; - output_buffer_size : int; - nb_transactions : int; - tree_depth : int; - tree_branching_factor : int; - } - - let config_encoding = - let open Data_encoding in - conv - (fun { - nb_inbox_messages; - input_payload_size; - nb_output_buffer_levels; - output_buffer_size; - nb_transactions; - tree_depth; - tree_branching_factor; - } -> - ( nb_inbox_messages, - input_payload_size, - nb_output_buffer_levels, - output_buffer_size, - nb_transactions, - tree_depth, - tree_branching_factor )) - (fun ( nb_inbox_messages, - input_payload_size, - nb_output_buffer_levels, - output_buffer_size, - nb_transactions, - tree_depth, - tree_branching_factor ) -> - { - nb_inbox_messages : int; - input_payload_size : int; - nb_output_buffer_levels; - output_buffer_size; - nb_transactions; - tree_depth; - tree_branching_factor; - }) - (obj7 - (req "nb_inbox_messages" int31) - (req "input_payload_size" int31) - (req "nb_output_buffer_levels" int31) - (req "output_buffer_size" int31) - (req "nb_transactions" int31) - (req "tree_depth" int31) - (req "tree_branching_factor" int31)) - - (** The actual config used to generate the more accurate model in - [sc_rollup_costs.ml] is : - [{ - nb_inbox_messages = 1000; - input_payload_size = 4096; - nb_output_buffer_levels = 10_000; - output_buffer_size = 100; - nb_transactions = 50; - tree_depth = 10; - tree_branching_factor = 4; - }] - With the config above, the benchmark takes more than an hour. The default - config is lighter and takes a few minutes. - - The table below shows benchmarking results for different tree depths and - number of outbox levels of the pvm state. The branching factor of the - generated "junk" trees in this benchmark is 4 (i.e for a depth of 10 the - generated tree contains more than 1_000_000 nodes). A tree depth of more - than 10 or a number of outbox levels of more than 10000 reaches the - memory limit of a laptop with 16Gb of memory. All proofs generated by - these benchmarks are below 10kb. - - +-----------+---------------+-------------------------+-----------------+ - | Junk tree | Number of | Inferred model | Gas cost for a | - | depth | outbox levels | | proof 10kb long | - +-----------+---------------+-------------------------+-----------------+ - | 5 | 1000 | 7.907*size + 99291.292 | 178361 | - +-----------+---------------+-------------------------+-----------------+ - | 6 | 2000 | 9.510*size + 99516.012 | 194616 | - +-----------+---------------+-------------------------+-----------------+ - | 7 | 4000 | 11.383*size + 95445.175 | 209275 | - +-----------+---------------+-------------------------+-----------------+ - | 8 | 6000 | 11.316*size + 100760.29 | 213920 | - +-----------+---------------+-------------------------+-----------------+ - | 9 | 8000 | 11.227*size + 98748.490 | 211018 | - +-----------+---------------+-------------------------+-----------------+ - | 10 | 10000 | 11.680*size + 98707.082 | 215507 | - +-----------+---------------+-------------------------+-----------------+ - - The [nb_transactions] parameter is the max number of transactions in an - outbox message, it is set at 50 because a message with 50 transactions - approches the max size of an outbox message. Hence, this allows to - benchmark for various proof lengths. The [nb_inbox_messages] parameter is - set to correspond to the max number of messages in an inbox. And the - [input_payload_size] parameter is set to the biggest possible size of an - input message. These two parameters impact the number of nodes in the pvm - state and are stored in the "input" part of the state. We add data in this - "input" part because of its proximity with the "output" part in the pvm - state. *) - let default_config = - { - nb_inbox_messages = 1000; - input_payload_size = 4096; - nb_output_buffer_levels = 10_000; - output_buffer_size = 100; - nb_transactions = 50; - tree_depth = 10; - tree_branching_factor = 4; - } - - type workload = {proof_length : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {proof_length} -> proof_length) - (fun proof_length -> {proof_length}) - (obj1 (req "proof_length" int31)) - - let workload_to_vector {proof_length} = - Sparse_vec.String.of_list [("proof_length", float_of_int proof_length)] - - let model = - let open Benchmarks_proto in - Model.make ~conv:(fun {proof_length} -> (proof_length, ())) Model.affine - - let pvm_state = ref None - - let create_benchmark ~rng_state conf = - let nb_output_buffer_levels = conf.nb_output_buffer_levels in - let output_buffer_size = conf.output_buffer_size in - let prepare_benchmark_scenario () = - let open Lwt_result_syntax in - (* Build [pvm_state] and save it to be used for all benchmarks. The state - is large enough for each benchmark to be relatively random. *) - let*! context, output_buffer, initial_tree = - match !pvm_state with - | None -> - let res = - build_pvm_state - rng_state - ~nb_inbox_messages:conf.nb_inbox_messages - ~input_payload_size:conf.input_payload_size - ~nb_output_buffer_levels:conf.nb_output_buffer_levels - ~output_buffer_size:conf.output_buffer_size - ~nb_transactions:conf.nb_transactions - ~tree_depth:conf.tree_depth - ~tree_branching_factor:conf.tree_branching_factor - in - pvm_state := Some res ; - res - | Some pvm_state -> pvm_state - in - (* Select an output. *) - let* output = - select_output - ~output_buffer - ~nb_output_buffer_levels - ~output_buffer_size - rng_state - in - (* produce an output proof, and also return the length of its encoding.*) - let*! pf = Full_Wasm.produce_output_proof context initial_tree output in - match pf with - | Ok proof -> - let proof_length = - Data_encoding.Binary.length Full_Wasm.output_proof_encoding proof - in - return (proof, proof_length) - | Error _ -> assert false - in - - let output_proof, proof_length = - match Lwt_main.run @@ prepare_benchmark_scenario () with - | Ok (proof, len) -> (proof, len) - | Error _ -> assert false - in - let workload = {proof_length} in - - let closure () = - ignore (Lwt_main.run @@ Full_Wasm.verify_output_proof output_proof) - in - Generator.Plain {workload; closure} -end - -(** This benchmark estimates the cost of verifying an output proof for the - Wasm PVM. - The inferred cost model is [c1 + c2 * proof_length]. *) -module Sc_rollup_deserialize_output_proof_benchmark = struct - open Pvm_state_generator - open Benchmarks_proto - module Full_Wasm = - Sc_rollup_wasm.V2_0_0.Make (Environment.Wasm_2_0_0.Make) (Wasm_context) - - (* Benchmark starts here. *) - - let name = ns "Sc_rollup_deserialize_output_proof_benchmark" - - let info = "Estimating the cost of deserializing an output proof" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "sc_rollup" - - let group = Benchmarks_proto.Benchmark.Group "sc_rollup" - - let tags = ["sc_rollup"] - - type config = { - nb_output_buffer_levels : int; - output_buffer_size : int; - nb_transactions : int; - tree_depth : int; - } - - let config_encoding = - let open Data_encoding in - conv - (fun { - nb_output_buffer_levels; - output_buffer_size; - nb_transactions; - tree_depth; - } -> - ( nb_output_buffer_levels, - output_buffer_size, - nb_transactions, - tree_depth )) - (fun ( nb_output_buffer_levels, - output_buffer_size, - nb_transactions, - tree_depth ) -> - { - nb_output_buffer_levels; - output_buffer_size; - nb_transactions; - tree_depth; - }) - (obj4 - (req "nb_output_buffer_levels" int31) - (req "output_buffer_size" int31) - (req "nb_transactions" int31) - (req "tree_depth" int31)) - - let default_config = - { - nb_output_buffer_levels = 10_000; - output_buffer_size = 100; - nb_transactions = 50; - tree_depth = 10; - } - - type workload = {proof_length : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {proof_length} -> proof_length) - (fun proof_length -> {proof_length}) - (obj1 (req "proof_length" int31)) - - let workload_to_vector {proof_length} = - Sparse_vec.String.of_list [("proof_length", float_of_int proof_length)] - - let model = - let open Benchmarks_proto in - Model.make ~conv:(fun {proof_length} -> (proof_length, ())) Model.affine - - let pvm_state = ref None - - let create_benchmark ~rng_state conf = - let prepared_benchmark_scenario = - let nb_output_buffer_levels = conf.nb_output_buffer_levels in - let output_buffer_size = conf.output_buffer_size in - let tree_depth = conf.tree_depth in - let open Lwt_result_syntax in - (* Build [pvm_state] and save it to be used for all benchmarks. The state - is large enough for each benchmark to be relatively random. *) - let*! context, output_buffer, initial_tree = - match !pvm_state with - | Some pvm_state -> pvm_state - | None -> - let res = - build_pvm_state - rng_state - ~nb_inbox_messages:0 - ~input_payload_size:0 - ~nb_output_buffer_levels - ~output_buffer_size - ~nb_transactions:conf.nb_transactions - ~tree_depth - ~tree_branching_factor:2 - in - pvm_state := Some res ; - res - in - (* Select an output. *) - let* output = - select_output - ~output_buffer - ~nb_output_buffer_levels - ~output_buffer_size - rng_state - in - (* Produce an output proof, and return its encoding and the length of the - encoding. *) - let*! pf = Full_Wasm.produce_output_proof context initial_tree output in - match pf with - | Ok proof -> - let encoded_proof = - Data_encoding.Binary.to_bytes_exn - Full_Wasm.output_proof_encoding - proof - in - let proof_length = Bytes.length encoded_proof in - return (encoded_proof, proof_length) - | Error _ -> assert false - in - - let encoded_proof, proof_length = - prepared_benchmark_scenario |> Lwt_main.run - |> WithExceptions.Result.get_ok ~loc:__LOC__ - in - let workload = {proof_length} in - - let closure () = - ignore - (Data_encoding.Binary.of_bytes_exn - Full_Wasm.output_proof_encoding - encoded_proof) - in - Generator.Plain {workload; closure} -end - -(** This benchmark estimates the cost of installing a boot sector. *) -module Sc_rollup_install_boot_sector_benchmark = struct - open Pvm_state_generator - module Full_Wasm = - Sc_rollup_wasm.V2_0_0.Make (Environment.Wasm_2_0_0.Make) (Wasm_context) - - (* Benchmark starts here. *) - - let name = ns "Sc_rollup_install_boot_sector_benchmark" - - let group = Benchmarks_proto.Benchmark.Group "sc_rollup" - - let info = "Estimating the cost of installing a boot sector." - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "sc_rollup" - - let tags = ["sc_rollup"] - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = {boot_sector_length : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {boot_sector_length} -> boot_sector_length) - (fun boot_sector_length -> {boot_sector_length}) - (obj1 (req "boot_sector_length" int31)) - - let workload_to_vector {boot_sector_length} = - Sparse_vec.String.of_list - [("boot_sector_length", float_of_int boot_sector_length)] - - let model = - let open Benchmarks_proto in - Model.make - ~conv:(fun {boot_sector_length} -> (boot_sector_length, ())) - Model.affine - - let create_benchmark ~rng_state _conf = - let open Base_samplers in - let max_boot_sector_size = 32 * 1024 in - let boot_sector_length = - sample_in_interval ~range:(0 -- (max_boot_sector_size - 1)) rng_state - in - let workload = {boot_sector_length} in - let boot_sector = uniform_string ~nbytes:boot_sector_length rng_state in - let state = empty_tree in - - let closure () = ignore (Full_Wasm.install_boot_sector state boot_sector) in - Generator.Plain {workload; closure} -end - -let () = - Benchmarks_proto.Registration.register - (module Sc_rollup_verify_output_proof_benchmark) - -let () = - Benchmarks_proto.Registration.register - (module Sc_rollup_deserialize_output_proof_benchmark) - -let () = - Benchmarks_proto.Registration.register - (module Sc_rollup_install_boot_sector_benchmark) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/script_repr_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/script_repr_benchmarks.ml deleted file mode 100644 index 95cc1621b5e0d8ec159108220dc00b0f722c41f3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/script_repr_benchmarks.ml +++ /dev/null @@ -1,139 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Benchmarks_proto - -let ns = Namespace.make Registration.ns "script_repr" - -let fv s = Free_variable.of_namespace (ns s) - -(** {2 [Script_repr] benchmarks} *) - -module Script_repr_shared_config = struct - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = {micheline_nodes : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {micheline_nodes} -> micheline_nodes) - (fun micheline_nodes -> {micheline_nodes}) - (obj1 (req "micheline_nodes" int31)) - - let tags = [Tags.translator] - - let workload_to_vector {micheline_nodes} = - Sparse_vec.String.of_list [("nodes", float_of_int micheline_nodes)] -end - -module Sampler = Micheline_sampler.Make (struct - type prim = Michelson_v1_primitives.prim - - (* The runtime of the functions in [Script_repr] do not depend on the primitives. *) - let sample_prim : Michelson_v1_primitives.prim Base_samplers.sampler = - fun _rng_state -> I_ADD - - let sample_annots : string list Base_samplers.sampler = fun _rng_state -> [] - - let sample_string = Base_samplers.uniform_string ~nbytes:4 - - let sample_bytes = Base_samplers.uniform_bytes ~nbytes:4 - - let sample_z = Base_samplers.int ~size:{min = 1; max = 8} - - let width_function = Micheline_sampler.reasonable_width_function -end) - -module Micheline_nodes_benchmark : Benchmark.S = struct - include Script_repr_shared_config - - let name = ns "MICHELINE_NODES" - - let info = - "Benchmarking the time it takes to compute the number of nodes of a \ - Micheline term" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_repr" - - let group = Benchmark.Group "size_translator_model" - - let model = - Model.make - ~conv:(function {micheline_nodes} -> (micheline_nodes, ())) - (Model.affine - ~intercept:(fv (Format.asprintf "%s_const" (Namespace.basename name))) - ~coeff: - (fv - (Format.asprintf "%s_ns_per_node_coeff" (Namespace.basename name)))) - - let micheline_nodes_benchmark node = - let nodes = Script_repr.micheline_nodes node in - let workload = {micheline_nodes = nodes} in - let closure () = ignore (Script_repr.micheline_nodes node) in - Generator.Plain {workload; closure} - - let create_benchmark ~rng_state _cfg = - let term = Sampler.sample rng_state in - micheline_nodes_benchmark term -end - -let () = Registration.register (module Micheline_nodes_benchmark) - -module Script_repr_strip_annotations : Benchmark.S = struct - include Script_repr_shared_config - - let name = ns "strip_annotations" - - let info = "Benchmarking Script_repr.strip_annotations" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_repr" - - let group = Benchmark.Group "strip_annotations_model" - - let model = - Model.( - make - ~conv:(fun {micheline_nodes} -> (micheline_nodes, ())) - (linear ~coeff:(fv "nodes"))) - - let create_benchmark ~rng_state () = - let node = Sampler.sample rng_state in - let closure () = ignore @@ Script_repr.strip_annotations node in - let micheline_nodes = Script_repr.micheline_nodes node in - Generator.Plain {workload = {micheline_nodes}; closure} -end - -let () = Registration.register (module Script_repr_strip_annotations) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/script_typed_ir_size_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/script_typed_ir_size_benchmarks.ml deleted file mode 100644 index 4c47caea5fdf68deed1b356fe960b7a4309594ef..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/script_typed_ir_size_benchmarks.ml +++ /dev/null @@ -1,305 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Benchmarks_proto - -let ns = Namespace.make Registration.ns "script_typed_ir_size" - -let fv s = Free_variable.of_namespace (ns s) - -(** {2 [Script_typed_ir_size]-related benchmarks} *) - -(** Benchmarking {!Script_typed_ir_size.value_size}. *) - -let local_model_name = "script_typed_ir_size" - -let strict = Script_ir_translator_config.make ~legacy:false () - -module Size_benchmarks_shared_config = struct - include Translator_benchmarks.Config - - type workload = {size : int} - - let workload_encoding : workload Data_encoding.t = - let open Data_encoding in - def "size_encoding" - @@ conv (fun {size} -> size) (fun size -> {size}) (obj1 (req "size" int31)) - - let workload_to_vector {size} = - Sparse_vec.String.of_list [("size", float_of_int size)] - - let tags = [Tags.translator] - - let size_based_model ~name = - let basename = Namespace.basename name in - let intercept_variable = fv (Format.asprintf "%s_const" basename) in - let coeff_variable = fv (Format.asprintf "%s_size_coeff" basename) in - Model.make - ~name - ~conv:(function {size} -> (size, ())) - (Model.affine ~intercept:intercept_variable ~coeff:coeff_variable) -end - -module Value_size_benchmark : Tezos_benchmark.Benchmark.S = struct - include Size_benchmarks_shared_config - - let name = ns "VALUE_SIZE" - - let models = - let model = size_based_model ~name in - [(local_model_name, model)] - - let info = "Benchmarking Script_typed_ir_size.value_size" - - let purpose = Benchmark.Generate_code "script_typed_ir_size" - - let module_filename = __FILE__ - - let value_size_benchmark rng_state (node : Protocol.Script_repr.expr) - (michelson_type : Script_repr.expr) = - let open Lwt_result_syntax in - (* FIXME: cleanup and factorize this code between translator benches and these ones. *) - let open Translator_benchmarks in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ex_ty = Type_helpers.michelson_type_to_ex_ty michelson_type ctxt in - match ex_ty with - | Script_typed_ir.Ex_ty ty -> ( - match - Lwt_main.run - (Script_ir_translator.parse_data - ctxt - ~elab_conf:strict - ~allow_forged_tickets:false - ~allow_forged_lazy_storage_id:false - ty - (Micheline.root node)) - with - | Error _ | (exception _) -> - bad_data name node michelson_type In_protocol - | Ok (value, _) -> - let open Script_typed_ir_size in - let open Cache_memory_helpers in - let size = Nodes.(to_int (fst (value_size ty value))) in - let workload = {size} in - let closure () = ignore (value_size ty value) in - return (Generator.Plain {workload; closure}))) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let make_bench rng_state cfg () = - let Michelson_mcmc_samplers.{term; typ} = - Michelson_generation.make_data_sampler rng_state cfg.generator_config - in - value_size_benchmark rng_state term typ - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.filter_map - (function - | Michelson_mcmc_samplers.Data {term; typ} -> - Some (fun () -> value_size_benchmark rng_state term typ) - | _ -> None) - terms - | None -> - Format.eprintf "No michelson_terms_file given, generating on-the-fly@." ; - List.repeat bench_num (make_bench rng_state config) -end - -let () = Registration_helpers.register (module Value_size_benchmark) - -(** Benchmarking {!Script_typed_ir_size.ty_size}. *) - -module Type_size_benchmark : Benchmark.S = struct - include Size_benchmarks_shared_config - - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - let name = ns "TYPE_SIZE" - - let info = - "Benchmarking the time it takes to compute Script_typed_ir_size.ty_size" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_typed_ir_size" - - let group = Benchmark.Group local_model_name - - let model = size_based_model - - let type_size_benchmark (Script_typed_ir.Ex_ty ty) = - let open Script_typed_ir_size.Internal_for_tests in - let open Cache_memory_helpers in - let size = Nodes.(to_int (fst (ty_size ty))) in - let workload = {size} in - let closure () = ignore (ty_size ty) in - Generator.Plain {workload; closure} - - let create_benchmark ~rng_state _cfg = - (* The [size] here is a parameter to the random sampler and does not - match the [size] returned by [type_size]. *) - let size = - Base_samplers.sample_in_interval ~range:{min = 1; max = 1000} rng_state - in - let ex_ty = - Michelson_generation.Samplers.Random_type.m_type ~size () rng_state - in - type_size_benchmark ex_ty -end - -let () = Registration.register (module Type_size_benchmark) - -(** Benchmarking {!Script_typed_ir_size.kinstr_size}. *) - -module Kinstr_size_benchmark : Tezos_benchmark.Benchmark.S = struct - include Size_benchmarks_shared_config - - let name = ns "KINSTR_SIZE" - - let models = [(local_model_name, size_based_model ~name)] - - let info = "Benchmarking Script_typed_ir_size.kinstr_size" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_typed_ir_size" - - let kinstr_size_benchmark rng_state (expr : Protocol.Script_repr.expr) - (stack : Script_repr.expr list) = - let open Lwt_result_syntax in - (* FIXME: cleanup and factorize this code between translator benches and these ones. *) - let open Translator_benchmarks in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ex_stack_ty = - Type_helpers.michelson_type_list_to_ex_stack_ty stack ctxt - in - let (Script_ir_translator.Ex_stack_ty bef) = ex_stack_ty in - let node = Micheline.root expr in - match - Lwt_main.run - (Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf:strict - node - bef) - with - | Error _ | (exception _) -> bad_code name expr stack In_protocol - | Ok (Failed {descr}, _) -> - let kdescr = Script_ir_translator.close_descr (descr Bot_t) in - let kinstr = kdescr.kinstr in - let open Script_typed_ir_size.Internal_for_tests in - let workload = - let open Cache_memory_helpers in - {size = Nodes.to_int @@ fst @@ kinstr_size kinstr} - in - let closure () = ignore (kinstr_size kinstr) in - return (Generator.Plain {workload; closure}) - | Ok (Typed descr, _) -> - let kdescr = Script_ir_translator.close_descr descr in - let kinstr = kdescr.kinstr in - let open Script_typed_ir_size.Internal_for_tests in - let workload = - let open Cache_memory_helpers in - {size = Nodes.to_int @@ fst @@ kinstr_size kinstr} - in - let closure () = ignore (kinstr_size kinstr) in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let make_bench rng_state cfg () = - let Michelson_mcmc_samplers.{term; bef; aft = _} = - Michelson_generation.make_code_sampler rng_state cfg.generator_config - in - kinstr_size_benchmark rng_state term bef - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.filter_map - (function - | Michelson_mcmc_samplers.Code {term; bef; aft = _} -> - Some (fun () -> kinstr_size_benchmark rng_state term bef) - | _ -> None) - terms - | None -> - Format.eprintf "No michelson_terms_file given, generating on-the-fly@." ; - List.repeat bench_num (make_bench rng_state config) -end - -let () = Registration_helpers.register (module Kinstr_size_benchmark) - -module Node_size_benchmark : Benchmark.S = struct - include Script_repr_benchmarks.Script_repr_shared_config - - let name = ns "NODE_SIZE" - - let info = - "Benchmarking the time it takes to compute Script_typed_ir_size.node_size" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "script_typed_ir_size" - - let group = Benchmark.Group local_model_name - - let model = - Model.make - ~conv:(function {micheline_nodes} -> (micheline_nodes, ())) - (Model.affine - ~intercept:(fv (Format.asprintf "%s_const" (Namespace.basename name))) - ~coeff: - (fv - (Format.asprintf "%s_ns_per_node_coeff" (Namespace.basename name)))) - - let micheline_nodes_benchmark node = - let open Cache_memory_helpers in - let nodes = Nodes.to_int @@ fst @@ node_size node in - let workload = {micheline_nodes = nodes} in - let closure () = ignore (Script_typed_ir_size.node_size node) in - Generator.Plain {workload; closure} - - let create_benchmark ~rng_state _cfg = - let term = Script_repr_benchmarks.Sampler.sample rng_state in - micheline_nodes_benchmark term -end - -let () = Registration.register (module Node_size_benchmark) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/skip_list_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/skip_list_benchmarks.ml deleted file mode 100644 index 3c802550f70dc86096c848133adbc4f55b5846a9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/skip_list_benchmarks.ml +++ /dev/null @@ -1,188 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** This module provides benchmarks for skip list operations for basis = 4. *) - -open Protocol -open Benchmarks_proto - -module Skip_list = Skip_list.Make (struct - (** The benchmarks must be run again if [basis] is changed. *) - let basis = 4 -end) - -let ns = Namespace.make Registration.ns "skip_list" - -let fv s = Free_variable.of_namespace (ns s) - -(** Benchmark for the [Skip_list_repr.next] function. It is used for estimating - the parameters for [Skip_list_cost_model.model_next]. *) -module Next : Benchmark.S = struct - let purpose = Benchmark.Generate_code "skip_list" - - include Skip_list - - let name = ns "next" - - let info = "Benchmark for Skip_list_repr.next" - - let tags = ["skip_list"] - - type config = {max_items : int} - - let default_config = {max_items = 10000} - - let module_filename = __FILE__ - - let group = Benchmark.Group "skip_list" - - let config_encoding = - let open Data_encoding in - conv (fun {max_items} -> max_items) (fun max_items -> {max_items}) int31 - - type workload = int - - let workload_encoding = Data_encoding.int31 - - let workload_to_vector len = - Sparse_vec.String.of_list [("len", float_of_int @@ len)] - - let model = - Model.make ~conv:(fun x -> (x, ())) Model.logn ~takes_saturation_reprs:true - - let create_skip_list_of_len len = - let rec go n cell = - if n = 0 then cell - else go (pred n) @@ next ~prev_cell:cell ~prev_cell_ptr:() () - in - go len (genesis ()) - - let create_benchmark ~rng_state ({max_items} : config) = - let workload = - (* Since the model we want to infer is logarithmic in - the length, we sample the logarithm of the length - (and not the length itself) uniformly in an interval. *) - let logmax = log (float_of_int max_items) in - let loglen = - Base_samplers.sample_float_in_interval ~min:0. ~max:logmax rng_state - in - int_of_float (exp loglen) - in - let prev_cell = create_skip_list_of_len workload in - let prev_cell_ptr = () in - let closure () = ignore (next ~prev_cell ~prev_cell_ptr ()) in - Generator.Plain {workload; closure} -end - -(** Benchmark for the [Sc_rollup_inbox_repr.hash_skip_list_cell] - function. It is used for estimating the parameters for - [Skip_list_cost_model.model_hash_cell]. The model estimates hashing - a skip_list cell content and all its back pointers. *) -module Hash_cell : Benchmark.S = struct - let purpose = Benchmark.Generate_code "skip_list" - - let name = ns "hash_cell" - - let info = "Estimating the costs of hashing a skip list cell" - - let tags = ["skip_list"] - - let module_filename = __FILE__ - - let group = Benchmark.Group "skip_list" - - include Skip_list - module Hash = Sc_rollup_inbox_repr.Hash - - let hash merkelized = - let payload_hash = Skip_list.content merkelized in - let back_pointers_hashes = Skip_list.back_pointers merkelized in - Hash.to_bytes payload_hash :: List.map Hash.to_bytes back_pointers_hashes - |> Hash.hash_bytes - - type config = {max_index : int} - - let config_encoding = - let open Data_encoding in - conv - (fun {max_index} -> max_index) - (fun max_index -> {max_index}) - (obj1 (req "max_index" int31)) - - let default_config = {max_index = 65536} - - type workload = {nb_backpointers : int} - - let workload_encoding = - let open Data_encoding in - conv - (fun {nb_backpointers} -> nb_backpointers) - (fun nb_backpointers -> {nb_backpointers}) - (obj1 (req "max_nb_backpointers" int31)) - - let workload_to_vector {nb_backpointers} = - Sparse_vec.String.of_list - [("nb_backpointers", float_of_int nb_backpointers)] - - let model = - Model.make - ~takes_saturation_reprs:true - ~conv:(fun {nb_backpointers} -> (nb_backpointers, ())) - Model.affine - - let create_benchmark ~rng_state conf = - (* Since the model we want to infer is logarithmic in - the length, we sample the logarithm of the length - (and not the length itself) uniformly in an interval. *) - let skip_list_loglen = - let logmax = log (float_of_int conf.max_index) in - Base_samplers.sample_float_in_interval ~min:0. ~max:logmax rng_state - in - let skip_list_len = int_of_float (exp skip_list_loglen) in - let random_hash () = - Hash.hash_string - [Base_samplers.string ~size:{min = 32; max = 32} rng_state] - in - let cell = - let rec repeat n cell = - if n = 0 then cell - else - let prev_cell = cell and prev_cell_ptr = hash cell in - repeat - (n - 1) - (Skip_list.next ~prev_cell ~prev_cell_ptr (random_hash ())) - in - repeat skip_list_len (Skip_list.genesis (random_hash ())) - in - let nb_backpointers = List.length (Skip_list.back_pointers cell) in - let workload = {nb_backpointers} in - let closure () = ignore (hash cell) in - Generator.Plain {workload; closure} -end - -let () = Registration.register (module Next) - -let () = Registration.register (module Hash_cell) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/storage_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/storage_benchmarks.ml deleted file mode 100644 index 20c151605222c0bf139cb8d9158c52342b213c49..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/storage_benchmarks.ml +++ /dev/null @@ -1,253 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** {2 [Storage_functors] benchmarks} - - This module registers a benchmark [List_key_values_benchmark]. Its result - is used to fill in the corresponding value, [list_key_values_step] - defined in [Storage_costs]. - *) - -open Tezos_benchmark -open Benchmarks_proto -open Storage_functors -open Protocol - -let ns = Namespace.make Registration_helpers.ns "storage" - -let fv s = Free_variable.of_namespace (ns s) - -(** Creates a dummy raw-context value. *) -let default_raw_context () = - let open Lwt_result_syntax in - let initial_account = Account.new_account () in - let bootstrap_account = - Account.make_bootstrap_account - ~balance:(Alpha_context.Tez.of_mutez_exn 100_000_000_000L) - initial_account - in - let* constants, _, _ = Block.prepare_initial_context_params () in - let parameters = - Default_parameters.parameters_of_constants - ~bootstrap_accounts:[bootstrap_account] - ~commitments:[] - constants - in - let json = Default_parameters.json_of_parameters parameters in - let proto_params = - Data_encoding.Binary.to_bytes_exn Data_encoding.json json - in - let protocol_param_key = ["protocol_parameters"] in - let*! context = - Tezos_protocol_environment.Context.( - let empty = Tezos_protocol_environment.Memory_context.empty in - let*! ctxt = add empty ["version"] (Bytes.of_string "genesis") in - add ctxt protocol_param_key proto_params) - in - let typecheck_smart_contract ctxt script_repr = - return ((script_repr, None), ctxt) - in - let typecheck_smart_rollup ctxt _script_repr = Result_syntax.return ctxt in - - let*! e = - Init_storage.prepare_first_block - Chain_id.zero - context - ~level:0l - ~timestamp:(Time.Protocol.of_seconds 1643125688L) - ~predecessor:Block_hash.zero - ~typecheck_smart_contract - ~typecheck_smart_rollup - in - Lwt.return (Environment.wrap_tzresult e) - -module String = struct - type t = string - - let encoding = Data_encoding.string -end - -module Int32 = struct - type t = int32 - - let encoding = Data_encoding.int32 - - module Index = struct - type t = int - - let path_length = 1 - - let to_path c l = string_of_int c :: l - - let of_path = function - | [] | _ :: _ :: _ -> None - | [c] -> int_of_string_opt c - - type 'a ipath = 'a * t - - let args = - Storage_description.One - { - rpc_arg = Environment.RPC_arg.int; - encoding = Data_encoding.int31; - compare = Compare.Int.compare; - } - end -end - -module Root_raw_context = - Make_subcontext (Registered) (Raw_context) - (struct - let name = ["benchmark_storage_functors"] - end) - -module Indexed_context = - Make_indexed_subcontext - (Make_subcontext (Registered) (Root_raw_context) - (struct - let name = ["index"] - end)) - (Int32.Index) - -module Table = - Make_indexed_carbonated_data_storage - (Make_subcontext (Registered) (Raw_context) - (struct - let name = ["table_for_list_key_values"] - end)) - (Int32.Index) - (struct - type t = string - - let encoding = Data_encoding.string - end) - -module List_key_values_benchmark_boilerplate = struct - type config = {max_size : int} - - let name = ns "List_key_values" - - let info = "List key values" - - let config_encoding = - let open Data_encoding in - conv - (fun {max_size} -> max_size) - (fun max_size -> {max_size}) - (obj1 (req "max_size" int31)) - - let default_config = {max_size = 100_000} - - type workload = {size : int} - - let tags = ["big_map"] - - let workload_encoding = - let open Data_encoding in - conv (fun {size} -> size) (fun size -> {size}) (obj1 (req "size" int31)) - - let workload_to_vector {size} = - Sparse_vec.String.of_list [("size", float_of_int size)] - - let group = Benchmark.Group "storage_costs" - - let model = - Model.make - ~conv:(fun {size} -> (size, ())) - (Model.affine - ~intercept:(fv "list_key_values_intercept") - ~coeff:(fv "list_key_values_step")) -end - -module List_key_values_benchmark = struct - include List_key_values_benchmark_boilerplate - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "storage" - - let create_benchmark ~rng_state {max_size} = - let open Lwt_result_syntax in - let wrap m = - let*! result = m in - Lwt.return (Environment.wrap_tzresult result) - in - let size = - Base_samplers.sample_in_interval - ~range:{min = 1; max = max_size} - rng_state - in - let ctxt = - let fill_table = - let open Lwt_result_syntax in - let* ctxt = default_raw_context () in - List.fold_left_es - (fun ctxt (key, value) -> - let* ctxt, _, _ = wrap @@ Table.add ctxt key value in - return ctxt) - ctxt - (Stdlib.List.init size (fun key -> (key, string_of_int key))) - in - match Lwt_main.run fill_table with Ok ctxt -> ctxt | _ -> assert false - in - let workload = {size} in - let closure () = - (* We pass length [0] so that none of the steps of the fold over the - key-value pairs load any values. That is isolate the cost of iterating - over the tree without loading values. *) - Table.list_key_values ~length:0 ctxt |> Lwt_main.run |> ignore - in - Generator.Plain {workload; closure} -end - -module List_key_values_benchmark_intercept = struct - include List_key_values_benchmark_boilerplate - - let name = Namespace.make ns (Namespace.basename name) "intercept" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "storage" - - let create_benchmark ~rng_state:_ _config = - let ctxt = - match Lwt_main.run (default_raw_context ()) with - | Ok ctxt -> ctxt - | _ -> assert false - in - let workload = {size = 0} in - let closure () = - (* We pass length [0] so that none of the steps of the fold over the - key-value pairs load any values. That is isolate the cost of iterating - over the tree without loading values. *) - Table.list_key_values ~length:0 ctxt |> Lwt_main.run |> ignore - in - Generator.Plain {workload; closure} -end - -let () = Registration.register (module List_key_values_benchmark) - -let () = Registration.register (module List_key_values_benchmark_intercept) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/tags.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/tags.ml deleted file mode 100644 index e5aca30e639aceed637044a370b145e8f180011e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/tags.ml +++ /dev/null @@ -1,35 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let interpreter = "interpreter" - -let translator = "translator" - -let encoding = "encoding" - -let cache = "cache" - -let common = Protocol.name diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/ticket_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/ticket_benchmarks.ml deleted file mode 100644 index ae9c472dd3b7887a162d2a676420c0c7f91622a8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/ticket_benchmarks.ml +++ /dev/null @@ -1,293 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Benchmarks_proto -open Alpha_context - -let ns = Namespace.make Registration.ns "tickets" - -let fv s = Free_variable.of_namespace (ns s) - -module Ticket_type_shared = struct - type config = {max_size : int} - - let default_config = {max_size = Constants_repr.michelson_maximum_type_size} - - let config_encoding = - let open Data_encoding in - conv - (fun {max_size} -> max_size) - (fun max_size -> {max_size}) - (obj1 (req "max_size" int31)) - - type workload = {nodes : int} - - let workload_encoding = - let open Data_encoding in - conv - (function {nodes} -> nodes) - (fun nodes -> {nodes}) - (obj1 (req "nodes" int31)) - - let workload_to_vector {nodes} = - Sparse_vec.String.of_list [("nodes", float_of_int nodes)] - - let tags = ["tickets"] -end - -exception - Ticket_benchmark_error of { - benchmark_name : Namespace.t; - trace : Tezos_base.TzPervasives.tztrace; - } - -(** A benchmark for {!Ticket_costs.Constants.cost_compare_ticket_hash}. *) -module Compare_ticket_hash_benchmark : Benchmark.S = struct - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = unit - - let tags = ["tickets"] - - let workload_encoding = Data_encoding.unit - - let workload_to_vector () = Sparse_vec.String.of_list [] - - let name = ns "COMPARE_TICKET_HASH" - - let info = "Compare cost for Ticket_hash" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "ticket" - - let group = Benchmark.Group "tickets" - - let model = - Model.make - ~conv:(fun () -> ()) - (Model.unknown_const1 ~const:(fv "compare_ticket_hash")) - - let create_benchmark ~rng_state _conf = - let bytes = Base_samplers.bytes rng_state ~size:{min = 1; max = 64} in - let hash = - Ticket_hash.of_script_expr_hash @@ Script_expr_hash.hash_bytes [bytes] - in - let hash2 = - Ticket_hash.of_script_expr_hash @@ Script_expr_hash.hash_bytes [bytes] - in - let workload = () in - let closure () = ignore (Ticket_hash.compare hash hash2) in - Generator.Plain {workload; closure} -end - -let () = Registration.register (module Compare_ticket_hash_benchmark) - -(** A benchmark for {!Ticket_costs.Constants.cost_compare_key_contract}. - - In this benchmark we only compare originated contracts; we never use - implicit contracts. This is justified partly by the fact that - currently the carbonated maps only use originated contracts as keys. - In addition, while developing this benchmark the implicit contracts were - also tested and gave almost identical timings. *) -module Compare_key_contract_benchmark : Benchmark.S = struct - type config = unit - - let config_encoding = Data_encoding.unit - - let default_config = () - - type workload = unit - - let workload_encoding = Data_encoding.unit - - let workload_to_vector () = Sparse_vec.String.of_list [] - - let tags = ["tickets"] - - let name = ns "COMPARE_CONTRACT" - - let info = "Compare cost for Contracts" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "ticket" - - let group = Benchmark.Group "tickets" - - let model = - Model.make - ~conv:(fun () -> ()) - (Model.unknown_const1 ~const:(fv "compare_contract")) - - let create_benchmark ~rng_state _conf = - let bytes = Base_samplers.bytes rng_state ~size:{min = 32; max = 64} in - let branch = Block_hash.hash_bytes [bytes] in - let op_hash = Operation.hash_raw {shell = {branch}; proto = bytes} in - let nonce = Origination_nonce.Internal_for_tests.initial op_hash in - let contract = Contract.Internal_for_tests.originated_contract nonce in - let contract2 = Contract.Internal_for_tests.originated_contract nonce in - let workload = () in - let closure () = ignore (Contract.compare contract contract2) in - Generator.Plain {workload; closure} -end - -let () = Registration.register (module Compare_key_contract_benchmark) - -(* A simple ticket type for use in the benchmarks. *) -let ticket_ty = - let open Script_typed_ir in - WithExceptions.Result.get_ok ~loc:__LOC__ (ticket_t (-1) int_t) - -(* A dummy type generator, sampling linear terms of a given size. - The generator always returns types of the shape: - - [pair int_or_ticket (pair int_or_ticket (pair int_or_ticket ...))] - - This is a worst case type for [type_has_tickets], though nested - ors, nested maps or nested lists would be just as bad. *) -let rec dummy_type_generator ~rng_state size = - let open Script_typed_ir in - let ticket_or_int = - if Base_samplers.uniform_bool rng_state then Ex_ty ticket_ty - else Ex_ty int_t - in - if size <= 1 then ticket_or_int - else - match (ticket_or_int, dummy_type_generator ~rng_state (size - 3)) with - | Ex_ty l, Ex_ty r -> ( - match pair_t (-1) l r with - | Error _ -> assert false - | Ok (Ty_ex_c t) -> Ex_ty t) - -(** A benchmark for {!Ticket_costs.Constants.cost_has_tickets_of_ty}. *) -module Has_tickets_type_benchmark : Benchmark.S = struct - include Ticket_type_shared - - let name = ns "TYPE_HAS_TICKETS" - - let info = "Benchmarking type_has_tickets" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "ticket" - - let group = Benchmark.Group "tickets" - - let make_bench_helper rng_state config () = - let open Result_syntax in - let* ctxt, _ = Lwt_main.run (Execution_context.make ~rng_state ()) in - let ctxt = Gas_helpers.set_limit ctxt in - let size = Random.State.int rng_state config.max_size in - let (Ex_ty ty) = dummy_type_generator ~rng_state size in - let nodes = - let size = Script_typed_ir.ty_size ty in - Saturation_repr.to_int @@ Script_typed_ir.Type_size.to_int size - in - let workload = {nodes} in - let closure () = ignore (Ticket_scanner.type_has_tickets ctxt ty) in - return (Generator.Plain {workload; closure}) - - let create_benchmark ~rng_state config = - match make_bench_helper rng_state config () with - | Ok closure -> closure - | Error trace -> - raise (Ticket_benchmark_error {benchmark_name = name; trace}) - - let model = - Model.make - ~takes_saturation_reprs:true - ~conv:(function {nodes} -> (nodes, ())) - Model.affine -end - -let () = Registration.register (module Has_tickets_type_benchmark) - -let ticket_sampler rng_state = - let seed = Base_samplers.uniform_bytes ~nbytes:32 rng_state in - let pkh, _, _ = Signature.generate_key ~algo:Signature.Ed25519 ~seed () in - let ticketer = Alpha_context.Contract.Implicit pkh in - Script_typed_ir. - {ticketer; contents = Script_int.zero; amount = Ticket_amount.one} - -(** A benchmark for {!Ticket_costs.Constants.cost_collect_tickets_step}. *) -module Collect_tickets_benchmark : Benchmark.S = struct - include Ticket_type_shared - - let name = ns "COLLECT_TICKETS_STEP" - - let info = "Benchmarking tickets_of_value" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "ticket" - - let group = Benchmark.Group "tickets" - - let make_bench_helper rng_state config () = - let open Script_typed_ir in - let open Result_syntax in - let* ctxt, _ = Lwt_main.run (Execution_context.make ~rng_state ()) in - let ctxt = Gas_helpers.set_limit ctxt in - let ty = - match list_t (-1) ticket_ty with Error _ -> assert false | Ok t -> t - in - let _, elements = - Structure_samplers.list - ~range:{min = 0; max = config.max_size} - ~sampler:ticket_sampler - rng_state - in - let boxed_ticket_list = Script_list.of_list elements in - Environment.wrap_tzresult - @@ let* has_tickets, ctxt = Ticket_scanner.type_has_tickets ctxt ty in - let workload = {nodes = Script_list.length boxed_ticket_list} in - let closure () = - ignore - (Lwt_main.run - (Ticket_scanner.tickets_of_value - ctxt - ~include_lazy:true - has_tickets - boxed_ticket_list)) - in - return (Generator.Plain {workload; closure}) - - let create_benchmark ~rng_state config = - match make_bench_helper rng_state config () with - | Ok closure -> closure - | Error trace -> - raise (Ticket_benchmark_error {benchmark_name = name; trace}) - - let model = Model.make ~conv:(function {nodes} -> (nodes, ())) Model.affine -end - -let () = Registration.register (module Collect_tickets_benchmark) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/translator_benchmarks.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/translator_benchmarks.ml deleted file mode 100644 index 1151346729b579404fa9ece913fdeb1f3bf83d5f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/translator_benchmarks.ml +++ /dev/null @@ -1,833 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs, *) -(* Copyright (c) 2023 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -module Encodings = -Tezos_shell_benchmarks.Encoding_benchmarks_helpers.Make (struct - let file = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" -end) - -let group = Benchmark.Group "script_ir_translator" - -module Size = Gas_input_size - -let ns = Translator_model.ns - -let fv = Translator_model.fv - -(** {2 [Script_ir_translator] benchmarks} *) - -module Config = struct - type config = { - generator_config : Michelson_generation.generator_config; - michelson_terms_file : string option; - } - - let default_config = - { - generator_config = Michelson_generation.default_generator_config; - michelson_terms_file = None; - } - - let config_encoding = - let open Data_encoding in - conv - (fun {generator_config; michelson_terms_file} -> - (generator_config, michelson_terms_file)) - (fun (generator_config, michelson_terms_file) -> - {generator_config; michelson_terms_file}) - (obj2 - (req "generator_config" Michelson_generation.generator_config_encoding) - (req "michelson_terms_file" (option string))) -end - -module Default_boilerplate = struct - type workload = Translator_workload.t - - let workload_encoding = Translator_workload.encoding - - let workload_to_vector = Translator_workload.workload_to_sparse_vec - - let tags = [Tags.translator] - - let make_models t_kind code_or_data = - [ - ("gas_model", Translator_model.gas_based_model t_kind code_or_data); - ("size_model", Translator_model.size_based_model t_kind code_or_data); - ] -end - -(* ----------------------------------------------------------------------- *) -(* Error handling *) - -type phase = Workload_production | In_protocol | Global - -type error_kind = - | Global_error of { - benchmark_name : Namespace.t; - workload : Tezos_base.TzPervasives.tztrace; - } - | Bad_data of { - benchmark_name : Namespace.t; - micheline : Alpha_context.Script.expr; - expected_type : Alpha_context.Script.expr; - phase : phase; - } - | Bad_code of { - benchmark_name : Namespace.t; - micheline : Alpha_context.Script.expr; - expected_stack_type : Alpha_context.Script.expr list; - phase : phase; - } - -let pp_phase fmtr (phase : phase) = - match phase with - | Workload_production -> Format.fprintf fmtr "workload production" - | In_protocol -> Format.fprintf fmtr "in protocol" - | Global -> Format.fprintf fmtr "global" - -let report_michelson_errors fmtr errs = - Michelson_v1_error_reporter.report_errors - ~details:true - ~show_source:true - fmtr - errs - -let make_printable node = - Micheline_printer.printable Michelson_v1_primitives.string_of_prim node - -let pp_error_kind fmtr (error_kind : error_kind) = - match error_kind with - | Global_error {benchmark_name; workload} -> - Format.open_vbox 1 ; - Format.fprintf fmtr "Global error:@," ; - Format.fprintf fmtr "benchmark = %a@," Namespace.pp benchmark_name ; - Format.fprintf fmtr "workload:@," ; - report_michelson_errors fmtr workload ; - Format.close_box () - | Bad_data {benchmark_name; micheline; expected_type; phase} -> - Format.open_vbox 1 ; - Format.fprintf fmtr "Bad data:@," ; - Format.fprintf fmtr "benchmark = %a@," Namespace.pp benchmark_name ; - Format.fprintf - fmtr - "expression = @[%a@]@," - Micheline_printer.print_expr - (make_printable micheline) ; - Format.fprintf - fmtr - "expected type = @[%a@]@," - Micheline_printer.print_expr - (make_printable expected_type) ; - Format.fprintf fmtr "phase = %a@," pp_phase phase ; - Format.close_box () - | Bad_code {benchmark_name; micheline; expected_stack_type; phase} -> - Format.open_vbox 1 ; - Format.fprintf fmtr "Bad code:@," ; - Format.fprintf fmtr "benchmark = %a@," Namespace.pp benchmark_name ; - Format.fprintf - fmtr - "expression = @[%a@]@," - Micheline_printer.print_expr - (make_printable micheline) ; - Format.fprintf - fmtr - "expected stack = @[%a@]@," - (Format.pp_print_list - ~pp_sep:(fun fmtr () -> Format.fprintf fmtr "::") - (fun fmtr node -> - let printable = make_printable node in - Format.fprintf fmtr "%a" Micheline_printer.print_expr printable)) - expected_stack_type ; - Format.fprintf fmtr "phase = %a@," pp_phase phase ; - Format.close_box () - -exception Translator_benchmark_error of error_kind - -let () = - Printexc.register_printer (function - | Translator_benchmark_error err -> - Some (Format.asprintf "%a" pp_error_kind err) - | _ -> None) - -let global_error benchmark_name workload = - raise (Translator_benchmark_error (Global_error {benchmark_name; workload})) - -let bad_data benchmark_name micheline expected_type phase = - raise - (Translator_benchmark_error - (Bad_data {benchmark_name; micheline; expected_type; phase})) - -let bad_code benchmark_name micheline expected_stack_type phase = - raise - (Translator_benchmark_error - (Bad_code {benchmark_name; micheline; expected_stack_type; phase})) - -(* ----------------------------------------------------------------------- *) -(* Typechecking data (Micheline data -> typed data) *) - -let strict = Script_ir_translator_config.make ~legacy:false () - -module Typechecking_data : Benchmark.S = struct - include Config - include Default_boilerplate - - let models = make_models Translator_workload.Parsing Translator_workload.Data - - let name = ns "TYPECHECKING_DATA" - - let info = "Benchmarking typechecking of data" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let typechecking_data_benchmark rng_state (node : Protocol.Script_repr.expr) - (michelson_type : Script_repr.expr) = - let open Lwt_result_syntax in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ex_ty = Type_helpers.michelson_type_to_ex_ty michelson_type ctxt in - let workload = - match - Translator_workload.data_typechecker_workload - ctxt - Translator_workload.Parsing - (Micheline.root node) - ex_ty - with - | None -> bad_data name node michelson_type Workload_production - | Some workload -> workload - in - match ex_ty with - | Script_typed_ir.Ex_ty ty -> - let closure () = - match - Lwt_main.run - (Script_ir_translator.parse_data - ctxt - ~elab_conf:strict - ~allow_forged_tickets:false - ~allow_forged_lazy_storage_id:false - ty - (Micheline.root node)) - with - | Error _ | (exception _) -> - bad_data name node michelson_type In_protocol - | Ok _ -> () - in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let make_bench rng_state cfg () = - let Michelson_mcmc_samplers.{term; typ} = - Michelson_generation.make_data_sampler rng_state cfg.generator_config - in - typechecking_data_benchmark rng_state term typ - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.filter_map - (function - | Michelson_mcmc_samplers.Data {term; typ} -> - Some (fun () -> typechecking_data_benchmark rng_state term typ) - | _ -> None) - terms - | None -> - Format.eprintf "No michelson_terms_file given, generating on-the-fly@." ; - List.repeat bench_num (make_bench rng_state config) -end - -let () = - Benchmarks_proto.Registration.register_as_simple_with_num - ~group - (module Typechecking_data) - -module Unparsing_data : Benchmark.S = struct - include Config - include Default_boilerplate - - let models = - make_models Translator_workload.Unparsing Translator_workload.Data - - let name = ns "UNPARSING_DATA" - - let info = "Benchmarking unparsing of data" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let unparsing_data_benchmark rng_state (node : Protocol.Script_repr.expr) - (michelson_type : Protocol.Script_repr.expr) = - let open Lwt_result_syntax in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ex_ty = Type_helpers.michelson_type_to_ex_ty michelson_type ctxt in - let workload = - match - Translator_workload.data_typechecker_workload - ctxt - Translator_workload.Unparsing - (Micheline.root node) - ex_ty - with - | None -> bad_data name node michelson_type Workload_production - | Some workload -> workload - in - match ex_ty with - | Script_typed_ir.Ex_ty ty -> - let* typed, ctxt = - let*! result = - Script_ir_translator.parse_data - ctxt - ~elab_conf:strict - ~allow_forged_tickets:false - ~allow_forged_lazy_storage_id:false - ty - (Micheline.root node) - in - Lwt.return (Environment.wrap_tzresult result) - in - let closure () = - match - Lwt_main.run - (Script_ir_translator.Internal_for_benchmarking.unparse_data - ~stack_depth:0 - ctxt - Script_ir_unparser.Optimized - ty - typed) - with - | Error _ | (exception _) -> - bad_data name node michelson_type In_protocol - | Ok _ -> () - in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let make_bench rng_state cfg () = - let Michelson_mcmc_samplers.{term; typ} = - Michelson_generation.make_data_sampler rng_state cfg.generator_config - in - unparsing_data_benchmark rng_state term typ - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.filter_map - (function - | Michelson_mcmc_samplers.Data {term; typ} -> - Some (fun () -> unparsing_data_benchmark rng_state term typ) - | _ -> None) - terms - | None -> - Format.eprintf "No michelson_terms_file given, generating on-the-fly@." ; - List.repeat bench_num (make_bench rng_state config) -end - -let () = - Benchmarks_proto.Registration.register_as_simple_with_num - ~group - (module Unparsing_data) - -module Typechecking_code : Benchmark.S = struct - include Config - include Default_boilerplate - - let models = make_models Translator_workload.Parsing Translator_workload.Code - - let name = ns "TYPECHECKING_CODE" - - let info = "Benchmarking typechecking of code" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let typechecking_code_benchmark rng_state (node : Protocol.Script_repr.expr) - (stack : Script_repr.expr list) = - let open Lwt_result_syntax in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ex_stack_ty = - Type_helpers.michelson_type_list_to_ex_stack_ty stack ctxt - in - let workload = - match - Translator_workload.code_typechecker_workload - ctxt - Translator_workload.Parsing - (Micheline.root node) - ex_stack_ty - with - | None -> bad_code name node stack Workload_production - | Some workload -> workload - in - let (Script_ir_translator.Ex_stack_ty bef) = ex_stack_ty in - let closure () = - let result = - Lwt_main.run - (Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf:strict - (Micheline.root node) - bef) - in - match Environment.wrap_tzresult result with - | Error errs -> - Format.eprintf "%a@." Error_monad.pp_print_trace errs ; - bad_code name node stack In_protocol - | Ok _ -> () - in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let make_bench rng_state (cfg : Config.config) () = - let open Michelson_generation in - let Michelson_mcmc_samplers.{term; bef; aft = _} = - make_code_sampler rng_state cfg.generator_config - in - typechecking_code_benchmark rng_state term bef - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.filter_map - (function - | Michelson_mcmc_samplers.Code {term; bef; aft = _} -> - Some (fun () -> typechecking_code_benchmark rng_state term bef) - | _ -> None) - terms - | None -> - Format.eprintf "No michelson_terms_file given, generating on-the-fly@." ; - List.repeat bench_num (make_bench rng_state config) -end - -let () = - Benchmarks_proto.Registration.register_as_simple_with_num - ~group - (module Typechecking_code) - -module Unparsing_code : Benchmark.S = struct - include Config - include Default_boilerplate - - let models = - make_models Translator_workload.Unparsing Translator_workload.Code - - let name = ns "UNPARSING_CODE" - - let info = "Benchmarking unparsing of code" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let unparsing_code_benchmark rng_state (node : Protocol.Script_repr.expr) - (stack : Script_repr.expr list) = - let open Lwt_result_syntax in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ex_stack_ty = - Type_helpers.michelson_type_list_to_ex_stack_ty stack ctxt - in - let workload = - match - Translator_workload.code_typechecker_workload - ctxt - Translator_workload.Unparsing - (Micheline.root node) - ex_stack_ty - with - | None -> bad_code name node stack Workload_production - | Some workload -> workload - in - let (Script_ir_translator.Ex_stack_ty bef) = ex_stack_ty in - (* We parse the code just to check it is well-typed. *) - let* _typed, ctxt = - let*! result = - Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf:strict - (Micheline.root node) - bef - in - Lwt.return (Environment.wrap_tzresult result) - in - let closure () = - let result = - Lwt_main.run - (Script_ir_translator.Internal_for_benchmarking.unparse_code - ~stack_depth:0 - ctxt - Optimized - (Micheline.root node)) - in - match Environment.wrap_tzresult result with - | Error errs -> - Format.eprintf "%a@." Error_monad.pp_print_trace errs ; - bad_code name node stack In_protocol - | Ok _ -> () - in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let make_bench rng_state (cfg : Config.config) () = - let open Michelson_generation in - let Michelson_mcmc_samplers.{term; bef; aft = _} = - make_code_sampler rng_state cfg.generator_config - in - unparsing_code_benchmark rng_state term bef - - let create_benchmarks ~rng_state ~bench_num config = - match config.michelson_terms_file with - | Some file -> - Format.eprintf "Loading terms from %s@." file ; - let terms = Michelson_mcmc_samplers.load ~filename:file in - List.filter_map - (function - | Michelson_mcmc_samplers.Code {term; bef; aft = _} -> - Some (fun () -> unparsing_code_benchmark rng_state term bef) - | _ -> None) - terms - | None -> List.repeat bench_num (make_bench rng_state config) -end - -let () = - Benchmarks_proto.Registration.register_as_simple_with_num - ~group - (module Unparsing_code) - -let rec check_printable_ascii v i = - if Compare.Int.(i < 0) then true - else - match v.[i] with - | '\n' | '\x20' .. '\x7E' -> check_printable_ascii v (i - 1) - | _ -> false - -let check_printable_benchmark = - let open Tezos_shell_benchmarks.Encoding_benchmarks_helpers in - let open Encodings in - linear_shared - ~name:"CHECK_PRINTABLE" - ~generator:(fun rng_state -> - let open Base_samplers in - let string = - readable_ascii_string rng_state ~size:{min = 1; max = 1024} - in - (string, {Shared_linear.bytes = String.length string})) - ~make_bench:(fun generator () -> - let generated, workload = generator () in - let closure () = - ignore (check_printable_ascii generated (String.length generated - 1)) - in - Generator.Plain {workload; closure}) - () - -let () = Registration_helpers.register_simple_with_num check_printable_benchmark - -open Benchmarks_proto - -module Ty_eq : Benchmark.S = struct - type config = {max_size : int} - - let config_encoding = - let open Data_encoding in - conv - (fun {max_size} -> max_size) - (fun max_size -> {max_size}) - (obj1 (req "max_size" int31)) - - let default_config = {max_size = 64} - - type workload = Ty_eq_workload of {nodes : int; consumed : Size.t} - - let workload_encoding = - let open Data_encoding in - conv - (function Ty_eq_workload {nodes; consumed} -> (nodes, consumed)) - (fun (nodes, consumed) -> Ty_eq_workload {nodes; consumed}) - (obj2 (req "nodes" int31) (req "consumed" int31)) - - let workload_to_vector = function - | Ty_eq_workload {nodes; consumed} -> - Sparse_vec.String.of_list - [("nodes", float_of_int nodes); ("consumed", float_of_int consumed)] - - let name = ns "TY_EQ" - - let info = "Benchmarking equating types" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let tags = [Tags.translator] - - let group = Benchmark.Group "size_translator_model" - - let model = - Model.make - ~takes_saturation_reprs:true - ~conv:(function Ty_eq_workload {nodes; _} -> (nodes, ())) - Model.affine - - let ty_eq_benchmark rng_state nodes (ty : Script_typed_ir.ex_ty) = - let open Lwt_result_syntax in - Lwt_main.run - (let* ctxt, _ = Execution_context.make ~rng_state () in - let ctxt = Gas_helpers.set_limit ctxt in - match ty with - | Ex_ty ty -> - let dummy_loc = 0 in - let*? _, ctxt' = - Environment.wrap_tzresult - (Gas_monad.run - ctxt - (Script_ir_translator.ty_eq - ~error_details:(Informative dummy_loc) - ty - ty)) - in - let consumed = Alpha_context.Gas.consumed ~since:ctxt ~until:ctxt' in - let workload = - Ty_eq_workload - {nodes; consumed = Z.to_int (Gas_helpers.fp_to_z consumed)} - in - let closure () = - ignore - (Gas_monad.run ctxt - @@ Script_ir_translator.ty_eq - ~error_details:(Informative dummy_loc) - ty - ty) - in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let create_benchmark ~rng_state (cfg : config) = - let nodes = - Base_samplers.( - sample_in_interval ~range:{min = 1; max = cfg.max_size} rng_state) - in - let ty = - Michelson_generation.Samplers.Random_type.m_type ~size:nodes () rng_state - in - ty_eq_benchmark rng_state nodes ty -end - -let () = Registration.register (module Ty_eq) - -(* A dummy type generator, sampling linear terms of a given size. - The generator always returns types of the shape: - - [pair unit (pair unit (pair unit ...))] - - This structure is the worse-case of the unparsing function for types because - an extra test is performed to determine if the comb type needs to be folded. -*) -let rec dummy_type_generator size = - let open Script_typed_ir in - if size <= 1 then Ex_ty unit_t - else - match dummy_type_generator (size - 2) with - | Ex_ty r -> ( - let l = unit_t in - match pair_t (-1) l r with - | Error _ -> assert false - | Ok (Ty_ex_c t) -> Ex_ty t) - -(* A dummy comparable type generator, sampling linear terms of a given size. *) -let rec dummy_comparable_type_generator size = - let open Script_ir_translator in - let open Script_typed_ir in - if size <= 0 then Ex_comparable_ty unit_t - else - match dummy_comparable_type_generator (size - 2) with - | Ex_comparable_ty r -> - let l = unit_t in - Ex_comparable_ty - (match comparable_pair_t (-1) l r with - | Error _ -> assert false - | Ok t -> t) - -module Parse_type_shared = struct - type config = {max_size : int} - - let default_config = {max_size = Constants_repr.michelson_maximum_type_size} - - let config_encoding = - let open Data_encoding in - conv - (fun {max_size} -> max_size) - (fun max_size -> {max_size}) - (obj1 (req "max_size" int31)) - - type workload = Type_workload of {nodes : int; consumed : Size.t} - - let workload_encoding = - let open Data_encoding in - conv - (function Type_workload {nodes; consumed} -> (nodes, consumed)) - (fun (nodes, consumed) -> Type_workload {nodes; consumed}) - (obj2 (req "nodes" int31) (req "consumed" int31)) - - let workload_to_vector = function - | Type_workload {nodes; consumed} -> - Sparse_vec.String.of_list - [("nodes", float_of_int nodes); ("consumed", float_of_int consumed)] - - let tags = [Tags.translator] -end - -let parse_ty ctxt node = - Script_ir_translator.parse_ty - ctxt - ~legacy:true - ~allow_lazy_storage:true - ~allow_operation:true - ~allow_contract:true - ~allow_ticket:true - node - -let unparse_ty ctxt ty = Script_ir_unparser.unparse_ty ~loc:(-1) ctxt ty - -module Parse_type_benchmark : Benchmark.S = struct - include Parse_type_shared - - let name = ns "PARSE_TYPE" - - let info = "Benchmarking parse_ty" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let group = Benchmark.Group "size_translator_model" - - let create_benchmark ~rng_state config = - let open Result_syntax in - (let* ctxt, _ = Lwt_main.run (Execution_context.make ~rng_state ()) in - let ctxt = Gas_helpers.set_limit ctxt in - let size = Random.State.int rng_state config.max_size in - let ty = dummy_type_generator size in - match ty with - | Ex_ty ty -> - let* unparsed, _ = Environment.wrap_tzresult @@ unparse_ty ctxt ty in - let* _, ctxt' = Environment.wrap_tzresult @@ parse_ty ctxt unparsed in - let consumed = - Z.to_int - (Gas_helpers.fp_to_z - (Alpha_context.Gas.consumed ~since:ctxt ~until:ctxt')) - in - let nodes = - let x = Script_typed_ir.ty_size ty in - Saturation_repr.to_int @@ Script_typed_ir.Type_size.to_int x - in - let workload = Type_workload {nodes; consumed} in - let closure () = ignore (parse_ty ctxt unparsed) in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let model = - Model.make - ~conv:(function Type_workload {nodes; consumed = _} -> (nodes, ())) - Model.affine -end - -let () = Registration.register (module Parse_type_benchmark) - -module Unparse_type_benchmark : Benchmark.S = struct - include Parse_type_shared - - let name = ns "UNPARSE_TYPE" - - let info = "Benchmarking unparse_ty" - - let module_filename = __FILE__ - - let purpose = Benchmark.Generate_code "michelson_v1_gas" - - let group = Benchmark.Group "size_translator_model" - - let create_benchmark ~rng_state config = - let open Result_syntax in - (let* ctxt, _ = Lwt_main.run (Execution_context.make ~rng_state ()) in - let ctxt = Gas_helpers.set_limit ctxt in - let size = Random.State.int rng_state config.max_size in - let ty = dummy_type_generator size in - match ty with - | Ex_ty ty -> - let* _, ctxt' = Environment.wrap_tzresult @@ unparse_ty ctxt ty in - let consumed = - Z.to_int - (Gas_helpers.fp_to_z - (Alpha_context.Gas.consumed ~since:ctxt ~until:ctxt')) - in - let nodes = - let x = Script_typed_ir.ty_size ty in - Saturation_repr.to_int @@ Script_typed_ir.Type_size.to_int x - in - let workload = Type_workload {nodes; consumed} in - let closure () = ignore (unparse_ty ctxt ty) in - return (Generator.Plain {workload; closure})) - |> function - | Ok closure -> closure - | Error errs -> global_error name errs - - let model = - Model.make - ~takes_saturation_reprs:true - ~conv:(function Type_workload {nodes; consumed = _} -> (nodes, ())) - Model.affine -end - -let () = Registration.register (module Unparse_type_benchmark) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/translator_model.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/translator_model.ml deleted file mode 100644 index 457437f58ae277ac912d115f3ad39ab1bc55e3ec..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/translator_model.ml +++ /dev/null @@ -1,70 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let ns = Namespace.make Registration_helpers.ns "translator" - -let fv s = Free_variable.of_namespace (ns s) - -let gas_full t_kind code_or_data = - let name = - Format.asprintf - "%a_%a_gas" - Translator_workload.pp_kind - t_kind - Translator_workload.pp_code_or_data - code_or_data - in - let intercept = fv (Format.asprintf "%s_const" name) in - let coeff = fv (Format.asprintf "%s_coeff" name) in - Model.affine ~name:(ns name) ~intercept ~coeff - -let size_full t_kind code_or_data = - let name = - Format.asprintf - "%a_%a_size" - Translator_workload.pp_kind - t_kind - Translator_workload.pp_code_or_data - code_or_data - in - let coeff1 = fv (Format.asprintf "%s_traversal" name) in - let coeff2 = fv (Format.asprintf "%s_int_bytes" name) in - let coeff3 = fv (Format.asprintf "%s_string_bytes" name) in - Model.trilinear ~name:(ns name) ~coeff1 ~coeff2 ~coeff3 - -let gas_based_model t_kind code_or_data = - Model.make - ~conv:(function - | Translator_workload.Typechecker_workload {consumed; _} -> (consumed, ())) - (gas_full t_kind code_or_data) - -let size_based_model t_kind code_or_data = - Model.make - ~conv:(function - | Translator_workload.Typechecker_workload {micheline_size; _} -> ( - match micheline_size with - | {traversal; int_bytes; string_bytes} -> - (traversal, (int_bytes, (string_bytes, ()))))) - (size_full t_kind code_or_data) diff --git a/src/proto_019_PtParisB/lib_benchmarks_proto/translator_workload.ml b/src/proto_019_PtParisB/lib_benchmarks_proto/translator_workload.ml deleted file mode 100644 index 177ff05f08bafd50e6e1cbf1f226de27d7261491..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_benchmarks_proto/translator_workload.ml +++ /dev/null @@ -1,193 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Size = Protocol.Gas_input_size - -type kind = Parsing | Unparsing - -type code_or_data = Code | Data - -type t = - | Typechecker_workload of { - t_kind : kind; - code_or_data : code_or_data; - micheline_size : Size.micheline_size; - consumed : Size.t; - } - -let kind_encoding : kind Data_encoding.t = - let open Data_encoding in - def "kind_encoding" - @@ string_enum [("parsing", Parsing); ("unparsing", Unparsing)] - -let code_or_data_encoding : code_or_data Data_encoding.t = - let open Data_encoding in - def "code_or_data_encoding" @@ string_enum [("code", Code); ("data", Data)] - -let encoding : t Data_encoding.t = - let open Data_encoding in - def "translator_trace_encoding" - @@ conv - (function - | Typechecker_workload {t_kind; code_or_data; micheline_size; consumed} - -> - (t_kind, code_or_data, micheline_size, consumed)) - (fun (t_kind, code_or_data, micheline_size, consumed) -> - Typechecker_workload {t_kind; code_or_data; micheline_size; consumed}) - (tup4 - kind_encoding - code_or_data_encoding - Size.micheline_size_encoding - Size.encoding) - -let pp_kind fmtr (kind : kind) = - match kind with - | Parsing -> Format.pp_print_string fmtr "Parsing" - | Unparsing -> Format.pp_print_string fmtr "Unparsing" - -let pp_code_or_data fmtr (x : code_or_data) = - match x with - | Code -> Format.pp_print_string fmtr "Code" - | Data -> Format.pp_print_string fmtr "Data" - -let pp fmtr (trace : t) = - match trace with - | Typechecker_workload {t_kind; code_or_data; micheline_size; consumed} -> - Format.fprintf - fmtr - "typechecker_trace { %a; %a; %a; %a }" - pp_kind - t_kind - pp_code_or_data - code_or_data - Size.pp_micheline_size - micheline_size - Size.pp - consumed - -let workload_to_sparse_vec (trace : t) = - let name, {Size.traversal; int_bytes; string_bytes}, consumed = - match trace with - | Typechecker_workload {t_kind; code_or_data; micheline_size; consumed} -> - let name = - Format.asprintf "%a_%a" pp_kind t_kind pp_code_or_data code_or_data - in - (name, micheline_size, consumed) - in - let n s = name ^ "_" ^ s in - let vars = - [ - (n "traversal", float_of_int (Size.to_int traversal)); - (n "int_bytes", float_of_int (Size.to_int int_bytes)); - (n "string_bytes", float_of_int (Size.to_int string_bytes)); - (n "gas", float_of_int (Size.to_int consumed)); - ] - in - Sparse_vec.String.of_list vars - -let data_typechecker_workload ctxt t_kind micheline_node ex_ty = - let open Lwt_syntax in - let open Protocol in - match ex_ty with - | Script_typed_ir.Ex_ty ty -> - let ctxt = Gas_helpers.set_limit ctxt in - Lwt_main.run - (let* res = - Script_ir_translator.parse_data - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:false ()) - ~allow_forged_tickets:false - ~allow_forged_lazy_storage_id:false - ty - micheline_node - |> Lwt.map Environment.wrap_tzresult - in - match res with - | Ok (_res, ctxt_after) -> - let micheline_size = Size.of_micheline micheline_node in - let consumed = - Alpha_context.Gas.consumed ~since:ctxt ~until:ctxt_after - in - let trace = - Typechecker_workload - { - t_kind; - code_or_data = Data; - micheline_size; - consumed = - Size.of_int (Z.to_int (Gas_helpers.fp_to_z consumed)); - } - in - return_some trace - | Error errors -> - Michelson_v1_error_reporter.report_errors - ~details:true - ~show_source:true - Format.err_formatter - errors ; - Format.eprintf "@." ; - return_none) - -let code_typechecker_workload (ctxt : Protocol.Alpha_context.context) - (t_kind : kind) (code : Protocol.Alpha_context.Script.node) - (bef : Protocol.Script_ir_translator.ex_stack_ty) = - let open Lwt_syntax in - let open Protocol in - let ctxt = Gas_helpers.set_limit ctxt in - let (Script_ir_translator.Ex_stack_ty stack_ty) = bef in - Lwt_main.run - (let* res = - Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:false ()) - code - stack_ty - |> Lwt.map Environment.wrap_tzresult - in - match res with - | Ok (_res, ctxt_after) -> - let micheline_size = Size.of_micheline code in - let consumed = - Alpha_context.Gas.consumed ~since:ctxt ~until:ctxt_after - in - let trace = - Typechecker_workload - { - t_kind; - code_or_data = Code; - micheline_size; - consumed = Size.of_int (Z.to_int (Gas_helpers.fp_to_z consumed)); - } - in - return_some trace - | Error errs -> - Michelson_v1_error_reporter.report_errors - ~details:true - ~show_source:true - Format.err_formatter - errs ; - Format.eprintf "@." ; - return_none) diff --git a/src/proto_019_PtParisB/lib_client/test/dune b/src/proto_019_PtParisB/lib_client/test/dune deleted file mode 100644 index 5542ea01e91e88a621267485c4b235be45458d94..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_client/test/dune +++ /dev/null @@ -1,54 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_client_test_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-libs.micheline - octez-protocol-019-PtParisB-libs.client - tezos-protocol-019-PtParisB.protocol - octez-libs.base-test-helpers - octez-libs.test-helpers - octez-alcotezt - qcheck-alcotest) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_micheline - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_base_test_helpers - -open Tezos_test_helpers - -open Octez_alcotezt) - (modules - test_michelson_v1_macros - test_client_proto_contracts - test_client_proto_context - test_proxy)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_client_test_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package octez-protocol-019-PtParisB-libs) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_client/test/test_client_proto_context.ml b/src/proto_019_PtParisB/lib_client/test/test_client_proto_context.ml deleted file mode 100644 index 334fe2e8ca25ab04623baf9dc34c7e8f128a77a1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_client/test/test_client_proto_context.ml +++ /dev/null @@ -1,69 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(* Testing - ------- - Component: Client - Invocation: dune exec src/proto_019_PtParisB/lib_client/test/main.exe \ - -- --file test_client_proto_context.ml - Subject: Tests roundtrips of batch_transfer_operation_encoding -*) - -open Protocol -open Alpha_context -open Qcheck2_helpers - -let binary_roundtrip ?pp encoding t = - let b = Data_encoding.Binary.to_bytes_exn encoding t in - let actual = Data_encoding.Binary.of_bytes_exn encoding b in - qcheck_eq' ?pp ~expected:t ~actual () - -let gen_batch_transfer_operation_encoding = - let open QCheck2.Gen in - let gen_z = sized @@ fun n -> map Z.of_bits (string_size (return n)) in - let gen_gas_arith_integral = - map Gas.Arith.integral_of_int_exn (int_range 0 (Int.div Int.max_int 1000)) - in - let* destination = string in - let* fee = opt string in - let* gas_limit = opt gen_gas_arith_integral in - let* storage_limit = opt gen_z in - let* amount = string in - let* arg = opt string in - let* entrypoint = opt (string_size (1 -- 31)) in - let entrypoint = Option.map Entrypoint.of_string_strict_exn entrypoint in - return - Client_proto_context. - {destination; fee; gas_limit; storage_limit; amount; arg; entrypoint} - -let tests = - [ - QCheck2.Test.make - ~name:"test_batch_transfer_operation_encoding_roundtrip" - gen_batch_transfer_operation_encoding - (binary_roundtrip Client_proto_context.batch_transfer_operation_encoding); - ] - -let () = Alcotest.run ~__FILE__ Protocol.name [("Encodings", qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_client/test/test_client_proto_contracts.ml b/src/proto_019_PtParisB/lib_client/test/test_client_proto_contracts.ml deleted file mode 100644 index 1255b9b12455c9037e743d60b0bfa1dbbcc59c99..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_client/test/test_client_proto_contracts.ml +++ /dev/null @@ -1,105 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Client - Invocation: dune exec src/proto_019_PtParisB/lib_client/test/main.exe \ - -- --file test_client_proto_contracts.ml - Subject: Unit tests for Client_proto_contracts -*) - -(** [mock_wallet entities] is a mock of the - [Tezos_client_base.Client_context.wallet] class that only - implements the [load] method. This methods returns a key-value - association as given by the json string [entities] that should have - the form: ["[{"name": "alias", "value": "key" }, <...>]"]. *) -class mock_wallet (entities : string) : Tezos_client_base.Client_context.wallet - = - object - method load_passwords = None - - method read_file _path = failwith "mock_wallet:read_file" - - method get_base_dir = "" - - method with_lock : type a. (unit -> a Lwt.t) -> a Lwt.t = fun _f -> _f () - - method load : type a. - string -> default:a -> a Data_encoding.encoding -> a tzresult Lwt.t = - let open Lwt_result_syntax in - fun _alias_name ~default:_default _encoding -> - let json = (Ezjsonm.from_string entities :> Data_encoding.json) in - return @@ Data_encoding.Json.destruct _encoding json - - method write : type a. - string -> a -> a Data_encoding.encoding -> unit tzresult Lwt.t = - fun _alias_name _list _encoding -> failwith "mock_wallet:write" - - method last_modification_time : string -> float option tzresult Lwt.t = - fun _ -> Lwt_result_syntax.return_none - end - -(** - Test. - Tests different lookups of - [Client_proto_contracts.Contract_alias.find_destination]. -*) -let test_find_destination _ = - let open Lwt_result_syntax in - let bootstrap1 = "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" in - let wallet_json = - Format.asprintf {| [{"name": "test_alias", "value": "%s" }] |} bootstrap1 - in - let w = new mock_wallet wallet_json in - let test msg key exp_source = - let* contract = - Client_proto_contracts.Contract_alias.find_destination w key - in - let* source = - Client_proto_contracts.Raw_contract_alias.to_source contract - in - (* Alcotest equality assertion *) - Alcotest.(check string msg source exp_source) ; - return_unit - in - let* () = - test "Expected alias:test_alias = bootstrap1" "alias:test_alias" bootstrap1 - in - let* () = - test "Expected key:test_alias = bootstrap1" "key:test_alias" bootstrap1 - in - let* () = test "Expected bootstrap1 = bootstrap1" bootstrap1 bootstrap1 in - test "Expected test_alias bootstrap1" "test_alias" bootstrap1 - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [ - ( "client_proto_contracts", - [Tztest.tztest "test_find_destination" `Quick test_find_destination] ); - ] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_client/test/test_michelson_v1_macros.ml b/src/proto_019_PtParisB/lib_client/test/test_michelson_v1_macros.ml deleted file mode 100644 index 4cd789d82ad521a604c181f539f52b1d6d2d70df..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_client/test/test_michelson_v1_macros.ml +++ /dev/null @@ -1,1374 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2019 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Client - Invocation: dune exec src/proto_019_PtParisB/lib_client/test/main.exe \ - -- --file test_michelson_v1_macros.ml - Dependencies: src/proto_alpha/lib_client/test/assert.ml - Subject: Expansion and unexpansion of Micheline terms. -*) - -open Protocol -module Assert = Assert - -let pp ppf expr = - expr - |> Micheline_printer.printable (fun s -> s) - |> Format.fprintf ppf "%a" Micheline_printer.print_expr - -let to_string e = Format.asprintf "%a" pp e -(* expands : expression with macros fully expanded *) - -let assert_expands - (original : (Micheline_parser.location, string) Micheline.node) - (expanded : (Micheline_parser.location, string) Micheline.node) = - let {Michelson_v1_parser.expanded = expansion; _}, errors = - let source = to_string (Micheline.strip_locations original) in - Michelson_v1_parser.expand_all_and_recognize_prims ~source ~original - in - match errors with - | [] -> - Assert.equal - ~pp - (Michelson_v1_primitives.strings_of_prims expansion) - (Micheline.strip_locations expanded) ; - Ok () - | errors -> Error errors - -(****************************************************************************) - -open Micheline - -let zero_loc = Micheline_parser.location_zero - -let left_branch = Seq (zero_loc, [Prim (zero_loc, "SWAP", [], [])]) - -let right_branch = Seq (zero_loc, []) - -(***************************************************************************) -(* Test expands *) -(***************************************************************************) - -(** [prim_name] is the syntactic sugar to be expanded, while [compare_name] - is syntactic atom. *) -let assert_compare_macro prim_name compare_name = - assert_expands - (Prim (zero_loc, prim_name, [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "COMPARE", [], []); - Prim (zero_loc, compare_name, [], []); - ] )) - -(** Expand "COMP{EQ|NEQ|LT|GT|LE|GE}" - into "COMPARE ; {EQ|NEQ|LT|GT|LE|GE}". -*) -let test_compare_marco_expansion () = - let open Result_syntax in - let* () = assert_compare_macro "CMPEQ" "EQ" in - let* () = assert_compare_macro "CMPNEQ" "NEQ" in - let* () = assert_compare_macro "CMPLT" "LT" in - let* () = assert_compare_macro "CMPGT" "GT" in - let* () = assert_compare_macro "CMPLE" "LE" in - assert_compare_macro "CMPGE" "GE" - -let assert_if_macro prim_name compare_name = - assert_expands - (Prim (zero_loc, prim_name, [left_branch; right_branch], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, compare_name, [], []); - Prim (zero_loc, "IF", [left_branch; right_branch], []); - ] )) - -(** Expand "IF{EQ|NEQ|LT|GT|LE|GE}" - into "{EQ|NEQ|LT|GT|LE|GE} ; IF" -*) -let test_if_compare_macros_expansion () = - let open Result_syntax in - let* () = assert_if_macro "IFEQ" "EQ" in - let* () = assert_if_macro "IFNEQ" "NEQ" in - let* () = assert_if_macro "IFLT" "LT" in - let* () = assert_if_macro "IFGT" "GT" in - let* () = assert_if_macro "IFLE" "LE" in - assert_if_macro "IFGE" "GE" - -let assert_if_cmp_macros prim_name compare_name = - assert_expands - (Prim (zero_loc, prim_name, [left_branch; right_branch], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "COMPARE", [], []); - Prim (zero_loc, compare_name, [], []); - Prim (zero_loc, "IF", [left_branch; right_branch], []); - ] )) - -(** Expand "IF{EQ|NEQ|LT|GT|LE|GE}" - into "{EQ|NEQ|LT|GT|LE|GE} ; IF" -*) -let test_if_cmp_macros_expansion () = - let open Result_syntax in - let* () = assert_if_cmp_macros "IFCMPEQ" "EQ" in - let* () = assert_if_cmp_macros "IFCMPNEQ" "NEQ" in - let* () = assert_if_cmp_macros "IFCMPLT" "LT" in - let* () = assert_if_cmp_macros "IFCMPGT" "GT" in - let* () = assert_if_cmp_macros "IFCMPLE" "LE" in - assert_if_cmp_macros "IFCMPGE" "GE" - -(****************************************************************************) -(* Fail *) - -(** Expand "FAIL" - into "UNIT ; FAILWITH" -*) -let test_fail_expansion () = - assert_expands - (Prim (zero_loc, "FAIL", [], [])) - (Seq - ( zero_loc, - [Prim (zero_loc, "UNIT", [], []); Prim (zero_loc, "FAILWITH", [], [])] - )) - -(**********************************************************************) -(* assertion *) - -let seq_unit_failwith = - Seq - ( zero_loc, - [Prim (zero_loc, "UNIT", [], []); Prim (zero_loc, "FAILWITH", [], [])] ) - -(* {} {FAIL} *) -let fail_false = [Seq (zero_loc, []); Seq (zero_loc, [seq_unit_failwith])] - -(* {FAIL} {} *) -let fail_true = [Seq (zero_loc, [seq_unit_failwith]); Seq (zero_loc, [])] - -(** Expand "ASSERT" - into "IF {} {FAIL}" -*) -let test_assert_expansion () = - assert_expands - (Prim (zero_loc, "ASSERT", [], [])) - (Seq (zero_loc, [Prim (zero_loc, "IF", fail_false, [])])) - -let assert_assert_if_compare prim_name compare_name = - assert_expands - (Prim (zero_loc, prim_name, [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, compare_name, [], []); - Prim (zero_loc, "IF", fail_false, []); - ] )) - -(** Expand "ASSERT_{EQ|NEQ|LT|GT|LE|GE}" - into "{EQ|NEQ|LT|GT|LE|GE} ; IF {} {FAIL}" -*) -let test_assert_if () = - let open Result_syntax in - let* () = assert_assert_if_compare "ASSERT_EQ" "EQ" in - let* () = assert_assert_if_compare "ASSERT_NEQ" "NEQ" in - let* () = assert_assert_if_compare "ASSERT_LT" "LT" in - let* () = assert_assert_if_compare "ASSERT_LE" "LE" in - let* () = assert_assert_if_compare "ASSERT_GT" "GT" in - assert_assert_if_compare "ASSERT_GE" "GE" - -let assert_cmp_if prim_name compare_name = - assert_expands - (Prim (zero_loc, prim_name, [], [])) - (Seq - ( zero_loc, - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "COMPARE", [], []); - Prim (zero_loc, compare_name, [], []); - ] ); - Prim (zero_loc, "IF", fail_false, []); - ] )) - -(** Expand "ASSERT_CMP{EQ|NEQ|LT|GT|LE|GE}" - into "COMPARE ; {EQ|NEQ|LT|GT|LE|GE} ; IF {} {FAIL}" -*) -let test_assert_cmp_if () = - let open Result_syntax in - let* () = assert_cmp_if "ASSERT_CMPEQ" "EQ" in - let* () = assert_cmp_if "ASSERT_CMPNEQ" "NEQ" in - let* () = assert_cmp_if "ASSERT_CMPLT" "LT" in - let* () = assert_cmp_if "ASSERT_CMPLE" "LE" in - let* () = assert_cmp_if "ASSERT_CMPGT" "GT" in - assert_cmp_if "ASSERT_CMPGE" "GE" - -(* The work of merge request !628 - > ASSERT_LEFT @x => IF_LEFT {RENAME @x} {FAIL} - > ASSERT_RIGHT @x => IF_LEFT {FAIL} {RENAME @x} - > ASSERT_SOME @x => IF_NONE {FAIL} {RENAME @x} -*) - -let may_rename annot = Seq (zero_loc, [Prim (zero_loc, "RENAME", [], annot)]) - -let fail_false_may_rename = - [ - may_rename ["@annot"]; - Seq - ( zero_loc, - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "UNIT", [], []); - Prim (zero_loc, "FAILWITH", [], []); - ] ); - ] ); - ] - -let fail_true_may_rename = - [ - Seq - ( zero_loc, - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "UNIT", [], []); - Prim (zero_loc, "FAILWITH", [], []); - ] ); - ] ); - may_rename ["@annot"]; - ] - -(** Expand "ASSERT_SOME @annot" - into "IF_NONE { } {UNIT;FAILWITH}" - using variable annotation "@annot" -*) -let test_assert_some_annot () = - assert_expands - (Prim (zero_loc, "ASSERT_SOME", [], ["@annot"])) - (Seq (zero_loc, [Prim (zero_loc, "IF_NONE", fail_true_may_rename, [])])) - -(** Expand "ASSERT_SOME" - into "IF_NONE { UNIT;FAILWITH } { }" -*) -let test_assert_some () = - assert_expands - (Prim (zero_loc, "ASSERT_SOME", [], [])) - (Seq (zero_loc, [Prim (zero_loc, "IF_NONE", fail_true, [])])) - -(** Expand "ASSERT_LEFT @annot" - into "IF_LEFT { } {UNIT;FAILWITH}" - using variable annotation "@annot" -*) -let test_assert_left_annot () = - assert_expands - (Prim (zero_loc, "ASSERT_LEFT", [], ["@annot"])) - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_false_may_rename, [])])) - -(** Expand "ASSERT_LEFT" - into "IF_LEFT { } {UNIT;FAILWITH}" -*) -let test_assert_left () = - assert_expands - (Prim (zero_loc, "ASSERT_LEFT", [], [])) - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_false, [])])) - -(** Expand "ASSERT_RIGHT @annot" - into "IF_LEFT {UNIT;FAILWITH} { }" - using variable annotation "@annot" -*) -let test_assert_right_annot () = - assert_expands - (Prim (zero_loc, "ASSERT_RIGHT", [], ["@annot"])) - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_true_may_rename, [])])) - -(** Expand "ASSERT_RIGHT" - into "IF_LEFT {UNIT;FAILWITH} { }" -*) -let test_assert_right () = - assert_expands - (Prim (zero_loc, "ASSERT_RIGHT", [], [])) - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_true, [])])) - -(** Expand "ASSERT_NONE" - into "IF_NONE { } { UNIT;FAILWITH }" -*) -let test_assert_none () = - assert_expands - (Prim (zero_loc, "ASSERT_NONE", [], [])) - (Seq (zero_loc, [Prim (zero_loc, "IF_NONE", fail_false, [])])) - -(***********************************************************************) -(*Syntactic Conveniences*) - -(* diip *) - -(** Expand "DIP" into "DIP". - Expand "DIIIIIIIIP" into "DIP 8". - Expand "DIIP" into "DIP 2". -*) -let test_diip () = - let open Result_syntax in - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - let* () = - assert_expands - (Prim (zero_loc, "DIP", [code], [])) - (Prim (zero_loc, "DIP", [code], [])) - in - let* () = - assert_expands - (Prim (zero_loc, "DIIIIIIIIP", [code], [])) - (Prim (zero_loc, "DIP", [Int (zero_loc, Z.of_int 8); code], [])) - in - assert_expands - (Prim (zero_loc, "DIIP", [code], [])) - (Prim (zero_loc, "DIP", [Int (zero_loc, Z.of_int 2); code], [])) - -(* pair *) - -(** Expand "PAIR" - into "PAIR" -*) -let test_pair () = - assert_expands - (Prim (zero_loc, "PAIR", [], [])) - (Prim (zero_loc, "PAIR", [], [])) - -(** Expand "PAPPAIIR" - into "DIP {PAIR}; DIP {PAIR}; PAIR" -*) -let test_pappaiir () = - let pair = Prim (zero_loc, "PAIR", [], []) in - assert_expands - (Prim (zero_loc, "PAPPAIIR", [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DIP", [Seq (zero_loc, [pair])], []); - Prim (zero_loc, "DIP", [Seq (zero_loc, [pair])], []); - pair; - ] )) - -(* unpair *) - -(** Expand "UNPAIR" - into "DUP ; CAR ; DIP {CDR}" -*) -let test_unpair () = - assert_expands - (Prim (zero_loc, "UNPAIR", [], [])) - (Prim (zero_loc, "UNPAIR", [], [])) - -(* duup *) - -(** Expand "DUUP" - into "DIP {DUP} ; SWAP" -*) -let test_duup () = - assert_expands - (Prim (zero_loc, "DUUP", [], [])) - (Prim (zero_loc, "DUP", [Int (zero_loc, Z.of_int 2)], [])) - -(* car/cdr *) - -(** Expand "CAR" into "CAR" - Expand "CDR" into "CDR" - Expand "CADR" into "CAR ; CDR" - Expand "CDAR" into "CDR ; CAR" -*) -let test_caddadr_expansion () = - let open Result_syntax in - let car = Prim (zero_loc, "CAR", [], []) in - let* () = assert_expands (Prim (zero_loc, "CAR", [], [])) car in - let cdr = Prim (zero_loc, "CDR", [], []) in - let* () = assert_expands (Prim (zero_loc, "CDR", [], [])) cdr in - let* () = - assert_expands - (Prim (zero_loc, "CADR", [], [])) - (Seq (zero_loc, [car; cdr])) - in - assert_expands (Prim (zero_loc, "CDAR", [], [])) (Seq (zero_loc, [cdr; car])) - -let test_carn_cdrn_expansion () = - let open Result_syntax in - let car n = Prim (zero_loc, "CAR", [Int (zero_loc, Z.of_int n)], []) in - let cdr n = Prim (zero_loc, "CDR", [Int (zero_loc, Z.of_int n)], []) in - let get n = - Seq (zero_loc, [Prim (zero_loc, "GET", [Int (zero_loc, Z.of_int n)], [])]) - in - let* () = - let* () = assert_expands (cdr 0) (get 0) in - let* () = assert_expands (car 0) (get 1) in - let* () = assert_expands (cdr 1) (get 2) in - assert_expands (car 1) (get 3) - in - assert_expands (cdr 2) (get 4) - -(* if_some *) - -(** Expand "IF_SOME { 1 } { 2 }" - into "IF_NONE { 2 } { 1 }" -*) -let test_if_some () = - assert_expands - (Prim (zero_loc, "IF_SOME", [right_branch; left_branch], [])) - (Seq - (zero_loc, [Prim (zero_loc, "IF_NONE", [left_branch; right_branch], [])])) - -(*set_caddadr*) - -(** Expand "SET_CAR" - into "CDR; SWAP; PAIR" -*) -let test_set_car_expansion () = - assert_expands - (Prim (zero_loc, "SET_CAR", [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%"; "%@"]); - ] )) - -(** Expand "SET_CDR" - into "CAR; PAIR" -*) -let test_set_cdr_expansion () = - assert_expands - (Prim (zero_loc, "SET_CDR", [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] )) - -(** Expand "SET_CADR" - into "DUP; DIP {CAR; { CAR; PAIR }}; CDR; SWAP; PAIR" -*) -let test_set_cadr_expansion () = - let set_car = - Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] ) - in - assert_expands - (Prim (zero_loc, "SET_CADR", [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], ["@%%"]); set_car])], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - -(** Expand "SET_CDAR" - into "DUP; DIP {CDR; { CDR; SWAP; PAIR }}; CAR; PAIR" -*) -let test_set_cdar_expansion () = - let set_cdr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%"; "%@"]); - ] ) - in - assert_expands - (Prim (zero_loc, "SET_CDAR", [], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CDR", [], ["@%%"]); set_cdr])], - [] ); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - -(* TO BE CHANGE IN THE DOCUMENTATION: @MR!791 - FROM: - > MAP_CAR code => DUP ; CDR ; DIP { CAR ; code } ; SWAP ; PAIR - TO: - > MAP_CAR code => DUP ; CDR ; DIP { CAR ; {code} } ; SWAP ; PAIR -*) - -(** Expand "MAP_CAR {CAR}" - into "DUP; CDR; DIP {CAR; CAR}; SWAP; PAIR" -*) -let test_map_car () = - (* code is a sequence *) - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - assert_expands - (Prim (zero_loc, "MAP_CAR", [code], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], []); code])], - [] ); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%"; "%@"]); - ] )) - -(** Expand "MAP_CDR {CAR}" - into "DUP; CDR; CAR; SWAP; CAR; PAIR" -*) -let test_map_cdr () = - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - assert_expands - (Prim (zero_loc, "MAP_CDR", [code], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], []); - code; - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] )) - -(** Expand "MAP_CAADR {CAR}" - into "DUP; - DIP { CAR; - DUP; - DIP { CAR; - DUP; - CDR; - CAR; - SWAP; - CAR; - PAIR - } - CDR; - SWAP; - PAIR - }; - CDR; - SWAP; - PAIR" -*) -let test_map_caadr () = - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - let map_cdr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], []); - code; - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] ) - in - let map_cadr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], ["@%%"]); map_cdr])], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] ) - in - assert_expands - (Prim (zero_loc, "MAP_CAADR", [code], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], ["@%%"]); map_cadr])], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - -(** Expand "MAP_CDADR" - into "DUP; - DIP { CDR; - DUP; - DIP { CAR; - DUP; - CDR; - CAR; - SWAP; - CAR; - PAIR - }; - CDR; - CAR; - PAIR - }; - CAR; - PAIR" -*) -let test_map_cdadr () = - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - let map_cdr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], []); - code; - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] ) - in - let map_cadr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], ["@%%"]); map_cdr])], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] ) - in - assert_expands - (Prim (zero_loc, "MAP_CDADR", [code], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CDR", [], ["@%%"]); map_cadr])], - [] ); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - -(****************************************************************************) -(* Unexpand tests *) -(****************************************************************************) - -(** Asserts that unexpanding the expression [original] conforms with - the canonical form of [ex]. - [unparse.Michelson_v1_parser.unexpanded] contains the original - expression with macros *) -let assert_unexpansion original ex = - let {Michelson_v1_parser.expanded; _}, errors = - let source = to_string (Micheline.strip_locations original) in - Michelson_v1_parser.expand_all_and_recognize_prims ~source ~original - in - let unparse = Michelson_v1_printer.unparse_expression expanded in - match errors with - | [] -> - Assert.equal - ~pp - unparse.Michelson_v1_parser.unexpanded - (Micheline.strip_locations ex) ; - Ok () - | _ :: _ -> Error errors - -(** Unexpanding "UNIT; FAILWITH" - yields "FAIL" -*) -let test_unexpand_fail () = - assert_unexpansion - (Seq - ( zero_loc, - [Prim (zero_loc, "UNIT", [], []); Prim (zero_loc, "FAILWITH", [], [])] - )) - (Prim (zero_loc, "FAIL", [], [])) - -(** Unexpanding "IF_LEFT { 1 } { 2 }" - yields "IF_RIGHT { 2 } { 1 }" -*) -let test_unexpand_if_right () = - assert_unexpansion - (Seq - (zero_loc, [Prim (zero_loc, "IF_LEFT", [left_branch; right_branch], [])])) - (Prim (zero_loc, "IF_RIGHT", [right_branch; left_branch], [])) - -(** IF_NONE - Unexpanding "IF_NONE { 1 } { 2 }" - yields "IF_SOME { 2 } { 1 }" -*) -let test_unexpand_if_some () = - assert_unexpansion - (Seq - (zero_loc, [Prim (zero_loc, "IF_NONE", [left_branch; right_branch], [])])) - (Prim (zero_loc, "IF_SOME", [right_branch; left_branch], [])) - -(** Unexpanding "IF {} { UNIT; FAILWITH }" - yields "ASSERT" -*) -let test_unexpand_assert () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF", fail_false, [])])) - (Prim (zero_loc, "ASSERT", [], [])) - -let assert_unexpansion_assert_if_compare compare_name prim_name = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, compare_name, [], []); - Prim (zero_loc, "IF", fail_false, []); - ] )) - (Prim (zero_loc, prim_name, [], [])) - -(** Unexpanding "{EQ|NEQ|LT|LE|GT|GE} ; IF {} {FAIL}" - yields "ASSERT_{EQ|NEQ|LT|LE|GT|GE}" -*) -let test_unexpand_assert_if () = - let open Result_syntax in - let* () = - let* () = assert_unexpansion_assert_if_compare "EQ" "ASSERT_EQ" in - let* () = assert_unexpansion_assert_if_compare "NEQ" "ASSERT_NEQ" in - let* () = assert_unexpansion_assert_if_compare "LT" "ASSERT_LT" in - let* () = assert_unexpansion_assert_if_compare "LE" "ASSERT_LE" in - assert_unexpansion_assert_if_compare "GT" "ASSERT_GT" - in - assert_unexpansion_assert_if_compare "GE" "ASSERT_GE" - -let assert_unexpansion_assert_cmp_if_compare compare_name prim_name = - assert_unexpansion - (Seq - ( zero_loc, - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "COMPARE", [], []); - Prim (zero_loc, compare_name, [], []); - ] ); - Prim (zero_loc, "IF", fail_false, []); - ] )) - (Prim (zero_loc, prim_name, [], [])) - -(** Unexpanding "COMPARE; {EQ|NEQ|LT|LE|GT|GE}; IF {} {FAIL}" - yields "ASSERT_CMP{EQ|NEQ|LT|LE|GT|GE}" -*) -let test_unexpansion_assert_cmp_if () = - let open Result_syntax in - let* () = assert_unexpansion_assert_cmp_if_compare "EQ" "ASSERT_CMPEQ" in - let* () = assert_unexpansion_assert_cmp_if_compare "NEQ" "ASSERT_CMPNEQ" in - let* () = assert_unexpansion_assert_cmp_if_compare "LT" "ASSERT_CMPLT" in - let* () = assert_unexpansion_assert_cmp_if_compare "LE" "ASSERT_CMPLE" in - let* () = assert_unexpansion_assert_cmp_if_compare "GT" "ASSERT_CMPGT" in - assert_unexpansion_assert_cmp_if_compare "GE" "ASSERT_CMPGE" - -(** Unexpanding "IF_NONE { FAIL } { RENAME @annot }" - yields "ASSERT_SOME @annot" -*) -let test_unexpand_assert_some_annot () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_NONE", fail_true_may_rename, [])])) - (Prim (zero_loc, "ASSERT_SOME", [], ["@annot"])) - -(** Unexpanding "IF_LEFT { RENAME @annot } { FAIL }" - yields "ASSERT_LEFT @annot" -*) -let test_unexpand_assert_left_annot () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_false_may_rename, [])])) - (Prim (zero_loc, "ASSERT_LEFT", [], ["@annot"])) - -(** Unexpanding "IF_LEFT { FAIL } { RENAME @annot }" - yields "ASSERT_RIGHT @annot" -*) -let test_unexpand_assert_right_annot () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_true_may_rename, [])])) - (Prim (zero_loc, "ASSERT_RIGHT", [], ["@annot"])) - -(** Unexpanding "IF_NONE {} { FAIL }" - yields "ASSERT_NONE" -*) -let test_unexpand_assert_none () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_NONE", fail_false, [])])) - (Prim (zero_loc, "ASSERT_NONE", [], [])) - -(** Unexpanding "IF_NONE { FAIL } {}" - yields "ASSERT_SOME" -*) -let test_unexpand_assert_some () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_NONE", fail_true, [])])) - (Prim (zero_loc, "ASSERT_SOME", [], [])) - -(** Unexpanding "IF_LEFT {} { FAIL }" - yields "ASSERT_LEFT" -*) -let test_unexpand_assert_left () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_false, [])])) - (Prim (zero_loc, "ASSERT_LEFT", [], [])) - -(** Unexpanding "IF_LEFT { FAIL } {}" - yields "ASSERT_RIGHT" -*) -let test_unexpand_assert_right () = - assert_unexpansion - (Seq (zero_loc, [Prim (zero_loc, "IF_LEFT", fail_true, [])])) - (Prim (zero_loc, "ASSERT_RIGHT", [], [])) - -(** Unexpanding "DUP; CAR; DIP { CDR }" - yields "UNPAIR" -*) -let test_unexpand_unpair () = - assert_unexpansion - (Prim (zero_loc, "UNPAIR", [], [])) - (Prim (zero_loc, "UNPAIR", [], [])) - -(** Unexpanding "PAIR" - yields "PAIR" -*) -let test_unexpand_pair () = - assert_unexpansion - (Prim (zero_loc, "PAIR", [], [])) - (Prim (zero_loc, "PAIR", [], [])) - -(** Unexpanding "DIP { PAIR }; DIP { PAIR }; PAIR" - yields "PAPPAIIR" -*) -let test_unexpand_pappaiir () = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "PAIR", [], [])])], - [] ); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "PAIR", [], [])])], - [] ); - Prim (zero_loc, "PAIR", [], []); - ] )) - (Prim (zero_loc, "PAPPAIIR", [], [])) - -(** Unexpanding "DIP { DUP }; SWAP" - yields "DUP 2" -*) -let test_unexpand_duup () = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "DUP", [], [])])], - [] ); - Prim (zero_loc, "SWAP", [], []); - ] )) - (Prim (zero_loc, "DUP", [Int (zero_loc, Z.of_int 2)], [])) - -(** Unexpanding "CAR" yields "CAR" - Unexpanding "CDR" yields "CDR" - Unexpanding "CAR; CDR" yields "CADR" - Unexpanding "CDR; CAR" yields "CDAR" -*) -let test_unexpand_caddadr () = - let open Result_syntax in - let car = Prim (zero_loc, "CAR", [], []) in - let cdr = Prim (zero_loc, "CDR", [], []) in - let* () = assert_unexpansion (Seq (zero_loc, [car])) car in - let* () = assert_unexpansion (Seq (zero_loc, [cdr])) cdr in - let* () = - assert_unexpansion - (Seq (zero_loc, [car; cdr])) - (Prim (zero_loc, "CADR", [], [])) - in - assert_unexpansion - (Seq (zero_loc, [cdr; car])) - (Prim (zero_loc, "CDAR", [], [])) - -let test_unexpand_carn_cdrn () = - let open Result_syntax in - let car n = Prim (zero_loc, "CAR", [Int (zero_loc, Z.of_int n)], []) in - let cdr n = Prim (zero_loc, "CDR", [Int (zero_loc, Z.of_int n)], []) in - let get n = - Seq (zero_loc, [Prim (zero_loc, "GET", [Int (zero_loc, Z.of_int n)], [])]) - in - let* () = assert_unexpansion (get 0) (cdr 0) in - let* () = assert_unexpansion (get 1) (car 0) in - let* () = assert_unexpansion (get 2) (cdr 1) in - let* () = assert_unexpansion (get 3) (car 1) in - assert_unexpansion (get 4) (cdr 2) - -(** Unexpanding "CDR; SWAP; PAIR" - yields "SET_CAR" -*) -let test_unexpand_set_car () = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%"; "%@"]); - ] )) - (Prim (zero_loc, "SET_CAR", [], [])) - -(** Unexpanding "CAR; PAIR" - yields "SET_CDR" -*) -let test_unexpand_set_cdr () = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] )) - (Prim (zero_loc, "SET_CDR", [], [])) - -(** Unexpanding "DUP; CAR; DROP; CDR; SWAP; PAIR" - yields "SET_CAR" -*) -let test_unexpand_set_car_annot () = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CAR", [], ["%@"]); - Prim (zero_loc, "DROP", [], []); - Prim (zero_loc, "CDR", [], []); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], []); - ] )) - (Prim (zero_loc, "SET_CAR", [], ["%@"])) - -(** Unexpanding "DUP; CDR; DROP; CAR; PAIR" - yields "SET_CDR" -*) -let test_unexpand_set_cdr_annot () = - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], ["%@"]); - Prim (zero_loc, "DROP", [], []); - Prim (zero_loc, "CAR", [], []); - Prim (zero_loc, "PAIR", [], []); - ] )) - (Prim (zero_loc, "SET_CDR", [], ["%@"])) - -(** Unexpanding "DUP; DIP { CAR; CAR; PAIR }; CDR; SWAP; PAIR" - yields "SET_CADR" -*) -let test_unexpand_set_cadr () = - let set_car = - Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] ) - in - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], ["@%%"]); set_car])], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - (Prim (zero_loc, "SET_CADR", [], [])) - -let test_unexpand_set_cdar () = - let set_cdr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%"; "%@"]); - ] ) - in - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CDR", [], ["@%%"]); set_cdr])], - [] ); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - (Prim (zero_loc, "SET_CDAR", [], [])) - -(* FIXME: Seq()(Prim): does not parse, raise an error unparse *) -let test_unexpand_map_car () = - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - assert_unexpansion - (Prim (zero_loc, "MAP_CAR", [code], [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim - ( zero_loc, - "DIP", - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], []); - Prim (zero_loc, "CAR", [], []); - ] ); - ], - [] ); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%"; "%@"]); - ] )) - -(***********************************************************************) -(*BUG: the test with MAP_CDR or any map with "D" inside fail *) - -let _test_unexpand_map_cdr () = - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], []); - code; - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "CAR", [], []); - Prim (zero_loc, "PAIR", [], []); - ] )) - (Prim (zero_loc, "MAP_CDR", [code], [])) - -let _test_unexpand_map_caadr () = - let code = [Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])])] in - let map_cdr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], ["@%%"]); - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], []); - Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] ); - ] ); - ], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] ) - in - assert_unexpansion - (Prim (zero_loc, "MAP_CAAR", code, [])) - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CAR", [], ["@%%"]); map_cdr])], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - -let _test_unexpand_map_cdadr () = - let code = [Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])])] in - let map_cdr = - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [ - Seq - ( zero_loc, - [ - Prim (zero_loc, "CAR", [], ["@%%"]); - Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim (zero_loc, "CDR", [], []); - Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%"]); - ] ); - ] ); - ], - [] ); - Prim (zero_loc, "CDR", [], ["@%%"]); - Prim (zero_loc, "SWAP", [], []); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] ) - in - assert_unexpansion - (Seq - ( zero_loc, - [ - Prim (zero_loc, "DUP", [], []); - Prim - ( zero_loc, - "DIP", - [Seq (zero_loc, [Prim (zero_loc, "CDR", [], ["@%%"]); map_cdr])], - [] ); - Prim (zero_loc, "CAR", [], ["@%%"]); - Prim (zero_loc, "PAIR", [], ["%@"; "%@"]); - ] )) - (Prim (zero_loc, "MAP_CDADR", code, [])) - -let test_unexpand_diip () = - let code = Seq (zero_loc, [Prim (zero_loc, "CAR", [], [])]) in - assert_unexpansion - (Prim (zero_loc, "DIIP", [code], [])) - (Prim (zero_loc, "DIP", [Int (zero_loc, Z.of_int 2); code], [])) - -(** Unexpanding "DIP { DIP { DIP { DUP }; SWAP" - yields "DIIP { DIP { DUP }; SWAP }" -*) -let test_unexpand_diip_duup1 () = - let single code = Seq (zero_loc, [code]) in - let cst str = Prim (zero_loc, str, [], []) in - let app str code = Prim (zero_loc, str, [code], []) in - let dip = app "DIP" in - let diip code = - Prim (zero_loc, "DIP", [Int (zero_loc, Z.of_int 2); code], []) - in - let dup = cst "DUP" in - let swap = cst "SWAP" in - let dip_dup_swap = Seq (zero_loc, [dip (single dup); swap]) in - assert_unexpansion - (* { DIP { DIP { DIP { DUP }; SWAP }}} *) - (single (dip (single (dip dip_dup_swap)))) - (* DIIP { DIP { DUP }; SWAP } *) - (diip dip_dup_swap) - -(** Unexpanding "DIP { DIP {{ DIP { DUP }; SWAP" - yields "DIIP { DUUP }" -*) -let test_unexpand_diip_duup2 () = - let single code = Seq (zero_loc, [code]) in - let cst str = Prim (zero_loc, str, [], []) in - let app str code = Prim (zero_loc, str, [code], []) in - let dip = app "DIP" in - let diip code = - Prim (zero_loc, "DIP", [Int (zero_loc, Z.of_int 2); code], []) - in - let dup = cst "DUP" in - let duup = Prim (zero_loc, "DUP", [Int (zero_loc, Z.of_int 2)], []) in - let swap = cst "SWAP" in - let dip_dup_swap = Seq (zero_loc, [dip (single dup); swap]) in - assert_unexpansion - (* { DIP { DIP {{ DIP { DUP }; SWAP }}}} *) - (single (dip (single (dip (single dip_dup_swap))))) - (* DIIP { DUUP } *) - (diip (single duup)) - -(*****************************************************************************) -(* Test *) -(*****************************************************************************) - -let tests = - [ - (*compare*) - ("compare expansion", fun _ -> Lwt.return (test_compare_marco_expansion ())); - ( "if compare expansion", - fun _ -> Lwt.return (test_if_compare_macros_expansion ()) ); - ( "if compare expansion: IFCMP", - fun _ -> Lwt.return (test_if_cmp_macros_expansion ()) ); - (*fail*) - ("fail expansion", fun _ -> Lwt.return (test_fail_expansion ())); - (*assertion*) - ("assert expansion", fun _ -> Lwt.return (test_assert_expansion ())); - ("assert if expansion", fun _ -> Lwt.return (test_assert_if ())); - ("assert cmpif expansion", fun _ -> Lwt.return (test_assert_cmp_if ())); - ("assert none expansion", fun _ -> Lwt.return (test_assert_none ())); - ("assert some expansion", fun _ -> Lwt.return (test_assert_some ())); - ("assert left expansion", fun _ -> Lwt.return (test_assert_left ())); - ("assert right expansion", fun _ -> Lwt.return (test_assert_right ())); - ( "assert some annot expansion", - fun _ -> Lwt.return (test_assert_some_annot ()) ); - ( "assert left annot expansion", - fun _ -> Lwt.return (test_assert_left_annot ()) ); - ( "assert right annot expansion", - fun _ -> Lwt.return (test_assert_right_annot ()) ); - (*syntactic conveniences*) - ("diip expansion", fun _ -> Lwt.return (test_diip ())); - ("duup expansion", fun _ -> Lwt.return (test_duup ())); - ("pair expansion", fun _ -> Lwt.return (test_pair ())); - ("pappaiir expansion", fun _ -> Lwt.return (test_pappaiir ())); - ("unpair expansion", fun _ -> Lwt.return (test_unpair ())); - ("caddadr expansion", fun _ -> Lwt.return (test_caddadr_expansion ())); - ( "carn and cdrn expansion", - fun _ -> Lwt.return (test_carn_cdrn_expansion ()) ); - ("if_some expansion", fun _ -> Lwt.return (test_if_some ())); - ("set_car expansion", fun _ -> Lwt.return (test_set_car_expansion ())); - ("set_cdr expansion", fun _ -> Lwt.return (test_set_cdr_expansion ())); - ("set_cadr expansion", fun _ -> Lwt.return (test_set_cadr_expansion ())); - ("set_cdar expansion", fun _ -> Lwt.return (test_set_cdar_expansion ())); - ("map_car expansion", fun _ -> Lwt.return (test_map_car ())); - ("map_cdr expansion", fun _ -> Lwt.return (test_map_cdr ())); - ("map_caadr expansion", fun _ -> Lwt.return (test_map_caadr ())); - ("map_cdadr expansion", fun _ -> Lwt.return (test_map_cdadr ())); - (*Unexpand*) - ("fail unexpansion", fun _ -> Lwt.return (test_unexpand_fail ())); - ("if_right unexpansion", fun _ -> Lwt.return (test_unexpand_if_right ())); - ("if_some unexpansion", fun _ -> Lwt.return (test_unexpand_if_some ())); - ("assert unexpansion", fun _ -> Lwt.return (test_unexpand_assert ())); - ("assert_if unexpansion", fun _ -> Lwt.return (test_unexpand_assert_if ())); - ( "assert_cmp_if unexpansion", - fun _ -> Lwt.return (test_unexpansion_assert_cmp_if ()) ); - ( "assert_none unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_none ()) ); - ( "assert_some unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_some ()) ); - ( "assert_left unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_left ()) ); - ( "assert_right unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_right ()) ); - ( "assert_some annot unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_some_annot ()) ); - ( "assert_left annot unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_left_annot ()) ); - ( "assert_right annot unexpansion", - fun _ -> Lwt.return (test_unexpand_assert_right_annot ()) ); - ("unpair unexpansion", fun _ -> Lwt.return (test_unexpand_unpair ())); - ("pair unexpansion", fun _ -> Lwt.return (test_unexpand_pair ())); - ("pappaiir unexpansion", fun _ -> Lwt.return (test_unexpand_pappaiir ())); - ("duup unexpansion", fun _ -> Lwt.return (test_unexpand_duup ())); - ("caddadr unexpansion", fun _ -> Lwt.return (test_unexpand_caddadr ())); - ( "carn and cdrn unexpansion", - fun _ -> Lwt.return (test_unexpand_carn_cdrn ()) ); - ("set_car unexpansion", fun _ -> Lwt.return (test_unexpand_set_car ())); - ("set_cdr unexpansion", fun _ -> Lwt.return (test_unexpand_set_cdr ())); - ("set_cdar unexpansion", fun _ -> Lwt.return (test_unexpand_set_cdar ())); - ("set_cadr unexpansion", fun _ -> Lwt.return (test_unexpand_set_cadr ())); - ( "set_car annot unexpansion", - fun _ -> Lwt.return (test_unexpand_set_car_annot ()) ); - ( "set_cdr annot unexpansion", - fun _ -> Lwt.return (test_unexpand_set_cdr_annot ()) ); - ("map_car unexpansion", fun _ -> Lwt.return (test_unexpand_map_car ())); - ("diip unexpansion", fun _ -> Lwt.return (test_unexpand_diip ())); - ("diip_duup1 unexpansion", fun _ -> Lwt.return (test_unexpand_diip_duup1 ())); - ("diip_duup2 unexpansion", fun _ -> Lwt.return (test_unexpand_diip_duup2 ())) - (***********************************************************************) - (*BUG - the function in Michelson_v1_macros.unexpand_map_caddadr - failed to test the case with the character "D". - It returns an empty {} for the expand *) - (*"diip unexpansion", (fun _ -> Lwt.return (test_unexpand_diip ())) ;*) - (*"map_cdr unexpansion", (fun _ -> Lwt.return (test_unexpand_map_cdr ())) ;*) - (*"map_caadr unexpansion", (fun _ -> Lwt.return (test_unexpand_map_caadr ())) ;*) - (*"map_cdadr unexpansion", (fun _ -> Lwt.return (test_unexpand_map_cdadr ())) ;*); - ] - -let wrap (n, f) = - Alcotest_lwt.test_case n `Quick (fun _ () -> - let open Lwt_syntax in - let* res = f () in - match res with - | Ok () -> return_unit - | Error error -> - Format.kasprintf Stdlib.failwith "%a" pp_print_trace error) - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [("micheline v1 macros", List.map wrap tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_client/test/test_proxy.ml b/src/proto_019_PtParisB/lib_client/test/test_proxy.ml deleted file mode 100644 index 16d9ffe5ce6ee55de8c2ab092995e3e000a7ab6f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_client/test/test_proxy.ml +++ /dev/null @@ -1,90 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Client - Invocation: dune exec src/proto_019_PtParisB/lib_client/test/main.exe \ - -- --file test_proxy.ml - Subject: Test of --mode proxy and tezos-proxy-server heuristic -*) - -let proxy_mode_gen = QCheck2.Gen.oneofl Tezos_proxy.Proxy.[Client; Server] - -let key_gen = - (* Segments taken from the implementation of split_key in src/proto_alpha/lib_client/proxy.ml *) - let keys = - QCheck2.Gen.oneofl - [ - "big_maps"; - "index"; - "contents"; - "contracts"; - "cycle"; - "cycle"; - "rolls"; - "owner"; - "snapshot"; - "v1"; - ] - |> QCheck2.Gen.list - in - QCheck2.Gen.frequency QCheck2.Gen.[(9, keys); (1, list string)] - -(** Whether [t1] is a prefix of [t2] *) -let rec is_prefix t1 t2 = - match (t1, t2) with - | [], _ -> true - | _, [] -> false - | x1 :: rest1, x2 :: rest2 when x1 = x2 -> is_prefix rest1 rest2 - | _ -> false - -let test_split_key = - let fmt = - let pp_sep fmt () = Format.fprintf fmt "/" in - Format.pp_print_list ~pp_sep Format.pp_print_string - in - QCheck2.Test.make - ~name:"[fst (split_key s)] is a prefix of [s]" - QCheck2.Gen.(pair proxy_mode_gen key_gen) - @@ fun (mode, key) -> - match Proxy.ProtoRpc.split_key mode key with - | None -> true - | Some (shorter, _) -> - if is_prefix shorter key then true - else - QCheck2.Test.fail_reportf - "Expected result of split_key to be a prefix of the input key. But \ - %a is not a prefix of %a." - fmt - shorter - fmt - key - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [("proxy", Qcheck2_helpers.qcheck_wrap [test_split_key])] diff --git a/src/proto_019_PtParisB/lib_dac_plugin/test/dune b/src/proto_019_PtParisB/lib_dac_plugin/test/dune deleted file mode 100644 index 65c72dbea6654df71022388e5862c017dc03ac53..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dac_plugin/test/dune +++ /dev/null @@ -1,51 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_dac_plugin_test_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-protocol-019-PtParisB-libs.dac - tezos-protocol-019-PtParisB.protocol - octez-libs.base-test-helpers - octez-protocol-019-PtParisB-libs.test-helpers - tezos-dac-lib - tezos_dac_node_lib - octez-alcotezt) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_dac_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_base_test_helpers - -open Tezos_019_PtParisB_test_helpers - -open Tezos_dac_lib - -open Tezos_dac_node_lib - -open Octez_alcotezt) - (modules test_dac_pages_encoding test_dac_plugin_registration test_helpers)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_dac_plugin_test_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package octez-protocol-019-PtParisB-libs) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_dac_plugin/test/test_dac_pages_encoding.ml b/src/proto_019_PtParisB/lib_dac_plugin/test/test_dac_pages_encoding.ml deleted file mode 100644 index 4dab1cd0bad95e98584ba96932d886decdf31ad8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dac_plugin/test/test_dac_pages_encoding.ml +++ /dev/null @@ -1,648 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022-2023 Trili Tech *) -(* Copyright (c) 2023 Marigold, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Dal_node Slot_frame_encoding - Invocation: dune exec src/proto_019_PtParisB/lib_dac_plugin/test/main.exe \ - -- --file test_dac_pages_encoding.ml - Subject: Tests for the SCORU storage module -*) - -(** DAC/FIXME: https://gitlab.com/tezos/tezos/-/issues/4021 - Add tests to check actual (sequences of) bytes in serialized pages. *) - -(* Tests are run against a mock storage backend where a Hash-indexed/Bytes-valued Map - is used to simulate adding and retrieving files to a directory. -*) - -(** TODO: https://gitlab.com/tezos/tezos/-/issues/4855 - Move tests to libdac_node/test -*) -let dac_plugin = Stdlib.Option.get (Dac_plugin.get Protocol.hash) - -module Hashes_map = Map.Make (struct - type t = Dac_plugin.hash - - let compare h1 h2 = Dac_plugin.raw_compare h1 h2 -end) - -type hashes_map = bytes Hashes_map.t - -let long_payload = - (* Inferno, Canto I (Dante Alighieri). Size in bytes: 5226. *) - {|Nel mezzo del cammin di nostra vita -mi ritrovai per una selva oscura -ché la diritta via era smarrita. -Ahi quanto a dir qual era è cosa dura -esta selva selvaggia e aspra e forte -che nel pensier rinova la paura! -Tant’è amara che poco è più morte; -ma per trattar del ben ch’i’ vi trovai, -dirò de l’altre cose ch’i’ v’ho scorte. -Io non so ben ridir com’i’ v’intrai, -tant’era pien di sonno a quel punto -che la verace via abbandonai. -Ma poi ch’i’ fui al piè d’un colle giunto, -là dove terminava quella valle -che m’avea di paura il cor compunto, -guardai in alto, e vidi le sue spalle -vestite già de’ raggi del pianeta -che mena dritto altrui per ogne calle. -Allor fu la paura un poco queta -che nel lago del cor m’era durata -la notte ch’i’ passai con tanta pieta. -E come quei che con lena affannata -uscito fuor del pelago a la riva -si volge a l’acqua perigliosa e guata, -così l’animo mio, ch’ancor fuggiva, -si volse a retro a rimirar lo passo -che non lasciò già mai persona viva. -Poi ch’èi posato un poco il corpo lasso, -ripresi via per la piaggia diserta, -sì che ’l piè fermo sempre era ’l più basso. -Ed ecco, quasi al cominciar de l’erta, -una lonza leggera e presta molto, -che di pel macolato era coverta; -e non mi si partia dinanzi al volto, -anzi ’mpediva tanto il mio cammino, -ch’i’ fui per ritornar più volte vòlto. -Temp’era dal principio del mattino, -e ’l sol montava ’n sù con quelle stelle -ch’eran con lui quando l’amor divino -mosse di prima quelle cose belle; -sì ch’a bene sperar m’era cagione -di quella fiera a la gaetta pelle -l’ora del tempo e la dolce stagione; -ma non sì che paura non mi desse -la vista che m’apparve d’un leone. -Questi parea che contra me venisse -con la test’alta e con rabbiosa fame, -sì che parea che l’aere ne tremesse. -Ed una lupa, che di tutte brame -sembiava carca ne la sua magrezza, -e molte genti fé già viver grame, -questa mi porse tanto di gravezza -con la paura ch’uscia di sua vista, -ch’io perdei la speranza de l’altezza. -E qual è quei che volontieri acquista, -e giugne ’l tempo che perder lo face, -che ’n tutt’i suoi pensier piange e s’attrista; -tal mi fece la bestia sanza pace, -che, venendomi ’ncontro, a poco a poco -mi ripigneva là dove ’l sol tace. -Mentre ch’i’ rovinava in basso loco, -dinanzi a li occhi mi si fu offerto -chi per lungo silenzio parea fioco. -Quando vidi costui nel gran diserto, -«Miserere di me», gridai a lui, -«qual che tu sii, od ombra od omo certo!». -Rispuosemi: «Non omo, omo già fui, -e li parenti miei furon lombardi, -mantoani per patria ambedui. -Nacqui sub Iulio, ancor che fosse tardi, -e vissi a Roma sotto ’l buono Augusto -nel tempo de li dèi falsi e bugiardi. -Poeta fui, e cantai di quel giusto -figliuol d’Anchise che venne di Troia, -poi che ’l superbo Ilión fu combusto. -Ma tu perché ritorni a tanta noia? -perché non sali il dilettoso monte -ch’è principio e cagion di tutta gioia?». -«Or se’ tu quel Virgilio e quella fonte -che spandi di parlar sì largo fiume?», -rispuos’io lui con vergognosa fronte. -«O de li altri poeti onore e lume -vagliami ’l lungo studio e ’l grande amore -che m’ha fatto cercar lo tuo volume. -Tu se’ lo mio maestro e ’l mio autore; -tu se’ solo colui da cu’ io tolsi -lo bello stilo che m’ha fatto onore. -Vedi la bestia per cu’ io mi volsi: -aiutami da lei, famoso saggio, -ch’ella mi fa tremar le vene e i polsi». -«A te convien tenere altro viaggio», -rispuose poi che lagrimar mi vide, -«se vuo’ campar d’esto loco selvaggio: -ché questa bestia, per la qual tu gride, -non lascia altrui passar per la sua via, -ma tanto lo ’mpedisce che l’uccide; -e ha natura sì malvagia e ria, -che mai non empie la bramosa voglia, -e dopo ’l pasto ha più fame che pria. -Molti son li animali a cui s’ammoglia, -e più saranno ancora, infin che ’l veltro -verrà, che la farà morir con doglia. -Questi non ciberà terra né peltro, -ma sapienza, amore e virtute, -e sua nazion sarà tra feltro e feltro. -Di quella umile Italia fia salute -per cui morì la vergine Cammilla, -Eurialo e Turno e Niso di ferute. -Questi la caccerà per ogne villa, -fin che l’avrà rimessa ne lo ’nferno, -là onde ’nvidia prima dipartilla. -Ond’io per lo tuo me’ penso e discerno -che tu mi segui, e io sarò tua guida, -e trarrotti di qui per loco etterno, -ove udirai le disperate strida, -vedrai li antichi spiriti dolenti, -ch’a la seconda morte ciascun grida; -e vederai color che son contenti -nel foco, perché speran di venire -quando che sia a le beate genti. -A le quai poi se tu vorrai salire, -anima fia a ciò più di me degna: -con lei ti lascerò nel mio partire; -ché quello imperador che là sù regna, -perch’i’ fu’ ribellante a la sua legge, -non vuol che ’n sua città per me si vegna. -In tutte parti impera e quivi regge; -quivi è la sua città e l’alto seggio: -oh felice colui cu’ ivi elegge!». -E io a lui: «Poeta, io ti richeggio -per quello Dio che tu non conoscesti, -acciò ch’io fugga questo male e peggio, -che tu mi meni là dov’or dicesti, -sì ch’io veggia la porta di san Pietro -e color cui tu fai cotanto mesti». -Allor si mosse, e io li tenni dietro.|} - -module Hashes_map_backend = struct - type t = bytes Hashes_map.t ref - - type configuration = unit - - type hash = Dac_plugin.hash - - let init () = ref Hashes_map.empty - - type error += Page_is_missing of Dac_plugin.raw_hash - - let save (_plugin : Dac_plugin.t) t ~(hash : Dac_plugin.hash) ~content = - let open Lwt_result_syntax in - let () = t := Hashes_map.add hash content !t in - return () - - let mem (_plugin : Dac_plugin.t) t (hash : Dac_plugin.hash) = - Lwt_result_syntax.return @@ Hashes_map.mem hash !t - - let load (_plugin : Dac_plugin.t) t hash = - let open Lwt_result_syntax in - let bytes = Hashes_map.find hash !t in - match bytes with - | None -> tzfail @@ Page_is_missing (Dac_plugin.hash_to_raw hash) - | Some bytes -> return bytes - - let number_of_pages t = List.length @@ Hashes_map.bindings !t -end - -(* Page store implementation that uses two in-memory stores (p1, p2). - Data is loaded from (p2) if present in such a store, otherwise it - is fetched from (p1) and, if the contents of the page are valid - with respect to the hash provided, then it is saved to p2. - Otherwise, an error is returned. -*) - -module With_hash_check : - Page_store.S with type configuration = unit and type t = Hashes_map_backend.t = - Page_store.Internal_for_tests.With_data_integrity_check (Hashes_map_backend) - -module Double_hash_map_backend : - Page_store.S - with type configuration = Hashes_map_backend.t * Hashes_map_backend.t = - Page_store.Internal_for_tests.With_remote_fetch - (struct - type remote_context = Hashes_map_backend.t - - let fetch = Hashes_map_backend.load - end) - (With_hash_check) - -let assert_equal_bytes ~loc msg a b = - Assert.equal ~loc Bytes.equal msg String.pp_bytes_hex a b - -let assert_fails_with ~loc k expected_err = - let open Lwt_result_syntax in - let*! res = k in - Assert.error ~loc res (( = ) expected_err) - -module Merkle_tree = struct - open Pages_encoding.Merkle_tree - - module Make_V0_for_test (C : Pages_encoding.CONFIG) (S : Page_store.S) = - struct - module Buffered = - Internal_for_tests.Make_buffered - (S) - (struct - let content_version = 0 - - let hashes_version = 0 - end) - (C) - - include Internal_for_tests.Make (Buffered) - end - - module V0 = struct - let test_serialization_fails_with ~loc ~max_page_size ~payload ~error = - let open - Make_V0_for_test - (struct - let max_page_size = max_page_size - end) - (Hashes_map_backend) in - let page_store = Hashes_map_backend.init () in - let serialize_payload = - serialize_payload dac_plugin ~page_store payload - in - assert_fails_with ~loc serialize_payload error - - let test_serialization_roundtrip ?expect_num_of_pages ~loc ~max_page_size - payload = - let open - Make_V0_for_test - (struct - let max_page_size = max_page_size - end) - (Hashes_map_backend) in - let page_store = Hashes_map_backend.init () in - let open Lwt_result_syntax in - let* hash = serialize_payload dac_plugin ~page_store payload in - let* retrieved_payload = - deserialize_payload dac_plugin ~page_store hash - in - let* () = - match expect_num_of_pages with - | Some expected -> - let actual = Hashes_map_backend.number_of_pages page_store in - Assert.equal_int ~loc actual expected - | None -> return_unit - in - assert_equal_bytes - ~loc - "Deserialized payload do not match with original" - payload - retrieved_payload - - (* We use 50 bytes as the size of a page. Of these, 5 bytes are used for - the preamble, which leaves 45 bytes of space for storing hashes in a - page. The overall size of a hash is 33 bytes (32 bytes for the inner hash - plus 1 byte for the tag identifying the hashing scheme of the hash), - therefore only floor(45/33) = 1 hashes can be stored for each page. - Because the serialization process requires a page size that can contain - at least two hashes, the serialization of any content will fail in this case. - *) - let serialize_one_hash_per_page_fails () = - let payload = - List.repeat 195 (Bytes.of_string "a") |> Bytes.concat Bytes.empty - in - test_serialization_fails_with - ~loc:__LOC__ - ~max_page_size:50 - ~payload - ~error:(Pages_encoding.Merkle_tree_branching_factor_not_high_enough 1) - - let serialize_empty_payload_fails () = - (* Limit the number of hashes stored per page to 2. Because hashes - have a fixed size of 33 bytes (32 bytes for inner hash and 1 byte for - hashing sheme tag of the hash), and 5 bytes are used for the preamble, - we need 33 * 2 + 5 = 71 bytes to store two hashes in a page. We round - this value to 80. *) - test_serialization_fails_with - ~loc:__LOC__ - ~max_page_size:80 - ~payload:Bytes.empty - ~error:Pages_encoding.Payload_cannot_be_empty - - let one_page_roundtrip () = - (* Limit the number of hashes stored per page to 2. Because hashes - have a fixed size of 33 bytes (32 bytes for inner hash and 1 byte for - hashing sheme tag of the hash), and 5 bytes are used for the preamble, - we need 33 * 2 + 5 = 71 bytes to store two hashes in a page. We round - this value to 80. *) - let max_page_size = 80 in - let payload = Bytes.of_string "Hello payload" in - test_serialization_roundtrip - ~expect_num_of_pages:1 - ~loc:__LOC__ - ~max_page_size - payload - - let multiple_pages_roundtrip_heterogeneous_payload () = - (* Each page in tests contains at most 80 bytes, of which 5 are reserved - for the page prefix. This leaves 75 bytes to store the payload to be - serialized in a page. It also means that a `Hashes` page can contain - at most 2 hashes of size 33 bytes each (32 bytes for inner hash and 1 - byte for hashing sheme tag of the hash). If we try to serialize a - payload between 151 and 225 bytes (included), then the serialized - payload should be spread among a total of 6 pages. Of these, - 225/75 = 3 pages are used to store the payload, ceil(3/2) = 2 pages - are used for storing the 3 hashes of the 3 payload pages, and - ceil(2/2) = 1 page is used for storing the 2 hashes of the previous - pages. *) - let max_page_size = 80 in - let payload = - Bytes.of_string - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do \ - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim \ - ad minim veniam, quis nostrud exercitation ullamco" - in - test_serialization_roundtrip - ~expect_num_of_pages:6 - ~loc:__LOC__ - ~max_page_size - payload - - let deserialization_of_corrupt_data_with_hash_integrity_check_fails () = - let open Lwt_result_syntax in - let module Page_size = struct - let max_page_size = 80 - end in - let module Mock_remote_codec = - Make_V0_for_test (Page_size) (Hashes_map_backend) - in - let module Mock_synch_codec = - Make_V0_for_test - (struct - let max_page_size = 80 - end) - (Double_hash_map_backend) - in - let mock_remote_store = Hashes_map_backend.init () in - let mock_local_store = Hashes_map_backend.init () in - let page_store = - Double_hash_map_backend.init (mock_remote_store, mock_local_store) - in - let payload = - Bytes.of_string "This is a payload that will be tampered later on" - in - let corrupt_payload = - Bytes.of_string "This is the payload that has been tampered with" - in - let* root_hash = - Mock_remote_codec.serialize_payload - dac_plugin - ~page_store:mock_remote_store - payload - in - (* We save the corrupt payload in the store and then retrieve it again, - to be sure that the content corresponds to a valid page. Then we - update the content of the original (non corrupt) payload in the store - to the (serialized) corrupt payload. *) - let* root_hash_of_corrupt_payload = - Mock_remote_codec.serialize_payload - dac_plugin - ~page_store:mock_remote_store - corrupt_payload - in - let* serialised_corrupt_payload = - Hashes_map_backend.load - dac_plugin - mock_remote_store - root_hash_of_corrupt_payload - in - let* () = - Hashes_map_backend.save - dac_plugin - mock_remote_store - ~hash:root_hash - ~content:serialised_corrupt_payload - in - let* () = - assert_fails_with - ~loc:__LOC__ - (Mock_synch_codec.deserialize_payload - dac_plugin - ~page_store - root_hash) - (Page_store.Incorrect_page_hash - { - expected = Dac_plugin.hash_to_raw root_hash; - actual = Dac_plugin.hash_to_raw root_hash_of_corrupt_payload; - }) - in - (* Check that pages have not been copied from the remote mock store - to the local one. *) - Assert.equal_int - ~loc:__LOC__ - (Hashes_map_backend.number_of_pages mock_local_store) - 0 - - let multiple_pages_roundtrip_homogeneous_payload () = - (* Each page in tests contains at most 80 bytes, of which 5 are reserved - for the page prefix. This leaves 75 bytes to store the content to be - serialized in a page. It also means that a `Hashes` page can contain - at most 2 hashes of size 33 bytes each (32 bytes for inner hash and 1 - byte for hashing sheme tag of the hash). If we try to serialize a - payload of 225 repetitions of the same character, then only one - payload page will be produced. However, the hash of this page will be - repeated three times across two pages represent nodes of the Merkle - tree. Finally, another page will be used for storing the Merkle tree - root page, which contains the two hashes of the Merkle tree nodes - above. In total, the serialization should be spread among 4 pages. *) - let max_page_size = 80 in - let payload = - List.repeat 225 (Bytes.of_string "a") |> Bytes.concat Bytes.empty - in - test_serialization_roundtrip - ~expect_num_of_pages:4 - ~loc:__LOC__ - ~max_page_size - payload - - let multiple_pages_roundtrip_do_not_exceed_page_size () = - (* Check that a bug related to the size of hashes has been fixed. - Before the bug was fixed: the `Sc_rollup.Reveal_hash` module borrowed - the size function from the underlying hash module, meaning that it - would return `31` for the size, rather than the actual hash size - which is `32`. For a page that is exactly `98` bytes long, this would - mean that the serialization algorithm will compute the number of - hashes per page to be `(98-5)/31 = 3`, but the actual hash pages will - have size `32 * 3 + 5 = 101` bytes. This will cause the check on a page - size to fail, when serializing a page. With 98 bytes per page, 93 - bytes will be reserved for the payload in content pages. - Before the patch was applied, trying to - serialize a payload of `93 * 3 = 279` bytes with a page size of - 98 bytes would have caused to try to serialize a page containing - 3 hashes of 32 bytes each, resulting in a page of `101 bytes` and - causing the serialization to fail. - *) - let max_page_size = 98 in - (* 279 bytes of payload *) - let payload = - Bytes.of_string - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do \ - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim \ - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut \ - aliquip ex ea commodo consequat. Duis aute irure dolor in \ - reprehenderit in volup" - in - test_serialization_roundtrip ~loc:__LOC__ ~max_page_size payload - - let long_content_roundtrip () = - (* To ensure that the serialization and deserialization process work as - expected, we test a roundtrip for a reasonably long text. We also - increase the page size to allow for more than two hashes in a page. *) - (* The page size is set to 150. Of these, 5 bytes are used for the page - preamble, and the reset will contain hashes which are 32 bytes long - each. The number of hashes that can fit into a page is - floor((150 - 5)/32) = 4. *) - let max_page_size = 150 in - let payload = Bytes.of_string long_payload in - test_serialization_roundtrip ~loc:__LOC__ ~max_page_size payload - - (* TODO: https://gitlab.com/tezos/tezos/-/issues/4608 - Define helper function that calculates expected number of pages given the - payload and use it for PBT expected number of pages given payload *) - module PBT = struct - module Generators = struct - open QCheck2.Gen - - (* Serialization requires [~max_page_size] that guarantees at least two - hashes per page. In orher words, we need at least 71 bytes in total since - 5 bytes is used as a preamble and each hash is 32 bytes long and uses - aditional 1 byte for the tag used to identify the version scheme: - 5 + 2 (32 + 1) = 71 *) - let gen_max_page_size = int_range 71 10_000 - - let gen_non_empty_payload = bytes_size (int_range 1 10_000) - - let gen_non_empty_payloads = - list_size (int_range 1 100) gen_non_empty_payload - - let max_page_size_with_non_empty_payload = - pair gen_max_page_size gen_non_empty_payload - - let max_page_size_with_non_empty_payloads = - pair gen_max_page_size gen_non_empty_payloads - end - - (** [serialization_roundtrip_pbt (max_page_size, payload)] tests - serialization scheme logic of [Pages_encoding.Merkle_tree.V0] - by varying [max_page_size] and [payload] (arbitrary byte - sequence). *) - let serialization_roundtrip_pbt (max_page_size, payload) = - test_serialization_roundtrip ~loc:__LOC__ ~max_page_size payload - - (** [merkle_tree_make_buffered_roundtrip_pbt (max_page_size, messages)] - tests [Pages_encoding.Merkle_tree.Make_buffered] functor. - It takes a pair [max_page_size] and [messages] (a list of non-empty - byte sequances).Buffered payload handler is instantiated with given - [max_page_size] and messages are serialized by adding them one by one - in the order specified by [messages] sequence. Finally, we finalize - serialization, which results in single preimage hash. To test the - correctness we deserialize the original payload via beforementioned - preimage hash. If initial serialization was correct, the obtained - payload is equal to the result of of concatenating messages from - original [messages] sequence. - *) - let merkle_tree_make_buffered_roundtrip_pbt (max_page_size, messages) = - let open Lwt_result_syntax in - let page_store = Hashes_map_backend.init () in - let open - Make_V0_for_test - (struct - let max_page_size = max_page_size - end) - (Hashes_map_backend) in - let payload_handler = Buffered.empty () in - let add_message message = - Buffered.add dac_plugin ~page_store payload_handler message - in - let* () = List.iter_es add_message messages in - let* hash = Buffered.finalize dac_plugin ~page_store payload_handler in - let* retrieved_payload = - deserialize_payload dac_plugin ~page_store hash - in - let expected_retrieved_payload = Bytes.concat Bytes.empty messages in - assert_equal_bytes - ~loc:__LOC__ - "Deserialized payload do not match with original" - expected_retrieved_payload - retrieved_payload - end - end -end - -let tests = - [ - Tztest.tztest - "Storing only one hash per page causes serialization to fail (Merkle \ - tree, v0)" - `Quick - Merkle_tree.V0.serialize_one_hash_per_page_fails; - Tztest.tztest - "Serializing empty payload returns an error (Merkle tree, v0)" - `Quick - Merkle_tree.V0.serialize_empty_payload_fails; - Tztest.tztest - "Contents fitting in one page can be retrieved after being saved (Merkle \ - tree, v0)" - `Quick - Merkle_tree.V0.one_page_roundtrip; - Tztest.tztest - "Contents fitting in more pages can be retrieved after being saved - no \ - repeated pages (Merkle tree, V0)" - `Quick - Merkle_tree.V0.multiple_pages_roundtrip_heterogeneous_payload; - Tztest.tztest - "Contents fitting in more pages can be retrieved after being saved - \ - repeated pages (Merkle tree, V0)" - `Quick - Merkle_tree.V0.multiple_pages_roundtrip_homogeneous_payload; - Tztest.tztest - "Serialization and deserialization of very long content is correct." - `Quick - Merkle_tree.V0.long_content_roundtrip; - Tztest.tztest - "Hashes pages are not larger than expected" - `Quick - Merkle_tree.V0.multiple_pages_roundtrip_do_not_exceed_page_size; - Tztest.tztest - "Deserialization with integrity check fails if page contents are corrupt" - `Quick - Merkle_tree.V0 - .deserialization_of_corrupt_data_with_hash_integrity_check_fails; - Tztest.tztest_qcheck2 - ~name:"PBT for merkle_tree_V0 serialization/deserialization roundtrip" - Merkle_tree.V0.PBT.Generators.max_page_size_with_non_empty_payload - Merkle_tree.V0.PBT.serialization_roundtrip_pbt; - Tztest.tztest_qcheck2 - ~name: - "PBT for [Merkle_tree.Make_buffered] functor via \ - serialization/deserialization roundtrip" - Merkle_tree.V0.PBT.Generators.max_page_size_with_non_empty_payloads - Merkle_tree.V0.PBT.merkle_tree_make_buffered_roundtrip_pbt; - ] - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [Test_helpers.Unit_test.spec "Dac_pages_encoding.ml" tests] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_dac_plugin/test/test_dac_plugin_registration.ml b/src/proto_019_PtParisB/lib_dac_plugin/test/test_dac_plugin_registration.ml deleted file mode 100644 index 2c109ca1254075b099b2a216ab9d1bea2aa71a68..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dac_plugin/test/test_dac_plugin_registration.ml +++ /dev/null @@ -1,159 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Lib_dac_node Dac_hash - Invocation: dune exec src/proto_019_PtParisB/lib_dac_plugin/test/main.exe \ - -- --file test_dac_plugin_registration.ml - Subject: Tests for the interoperability between Dac hash - and given protocol hash -*) - -module Protocol_reveal_hash = Protocol.Sc_rollup_reveal_hash - -let dac_plugin = Stdlib.Option.get (Dac_plugin.get Protocol.hash) - -module P = (val dac_plugin) - -(* Hash copied from - https://gitlab.com/tezos/tezos/-/blob/master/tezt/tests/dac.ml#L331 *) -let reveal_hash = - Stdlib.Option.get - @@ Protocol_reveal_hash.of_hex - "00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6" - -let assert_equal_bytes ~loc msg = - Assert.equal ~loc Bytes.equal msg String.pp_bytes_hex - -let test_dac_hash_bin_encoding_roundtrip_with_reveal_hash () = - let open Lwt_result_syntax in - let to_bytes e a = - Stdlib.Result.get_ok @@ Data_encoding.Binary.to_bytes e a - in - let from_bytes e a = - Stdlib.Result.get_ok @@ Data_encoding.Binary.of_bytes e a - in - let reveal_hash_bytes = to_bytes Protocol_reveal_hash.encoding reveal_hash in - let dac_hash = from_bytes P.encoding reveal_hash_bytes in - let dac_hash_bytes = to_bytes P.encoding dac_hash in - let reveal_hash_decoded = - from_bytes Protocol_reveal_hash.encoding dac_hash_bytes - in - let* () = - assert_equal_bytes - ~loc:__LOC__ - "Encoded bytes are not equal" - reveal_hash_bytes - dac_hash_bytes - in - Assert.equal - ~loc:__LOC__ - Protocol_reveal_hash.equal - "Roundtrip hash is not equal" - Protocol_reveal_hash.pp - reveal_hash - reveal_hash_decoded - -let test_dac_hash_hex_roundtrip_with_reveal_hash () = - let reveal_hash_hex = Protocol_reveal_hash.to_hex reveal_hash in - let dac_hash = Stdlib.Option.get @@ P.of_hex reveal_hash_hex in - let dac_hash_hex = P.to_hex dac_hash in - Assert.equal_string ~loc:__LOC__ reveal_hash_hex dac_hash_hex - -let test_dac_hash_hash_bytes_with_reveal_hash () = - let payload = Bytes.of_string "Hello world" in - let dac_hash = P.hash_bytes ~scheme:Blake2B [payload] in - let dac_hash = - Stdlib.Result.get_ok @@ Data_encoding.Binary.to_bytes P.encoding dac_hash - in - let reveal_hash = Protocol_reveal_hash.hash_bytes ~scheme:Blake2B [payload] in - let reveal_hash = - Stdlib.Result.get_ok - @@ Data_encoding.Binary.to_bytes Protocol_reveal_hash.encoding reveal_hash - in - assert_equal_bytes - ~loc:__LOC__ - "Encoded bytes are not equal" - reveal_hash - dac_hash - -let test_dac_hash_hash_string_with_reveal_hash () = - let payload = "Hello world" in - let dac_hash = P.hash_string ~scheme:Blake2B [payload] in - let dac_hash = - Stdlib.Result.get_ok @@ Data_encoding.Binary.to_bytes P.encoding dac_hash - in - let reveal_hash = - Protocol_reveal_hash.hash_string ~scheme:Blake2B [payload] - in - let reveal_hash = - Stdlib.Result.get_ok - @@ Data_encoding.Binary.to_bytes Protocol_reveal_hash.encoding reveal_hash - in - assert_equal_bytes - ~loc:__LOC__ - "Encoded bytes are not equal" - reveal_hash - dac_hash - -let test_json_encoding_is_hexified () = - let payload = Bytes.of_string "Hello world" in - let dac_hash = P.hash_bytes ~scheme:Blake2B [payload] in - let dac_hash_json = Data_encoding.Json.construct P.encoding dac_hash in - let dac_hash_json_string = Data_encoding.Json.to_string dac_hash_json in - let dac_hash_hex_string = P.to_hex dac_hash in - Assert.equal_string ~loc:__LOC__ dac_hash_hex_string dac_hash_json_string - -let tests = - [ - Tztest.tztest - "Binary encoding roundtrip test between Dac hash and reveal hash" - `Quick - test_dac_hash_bin_encoding_roundtrip_with_reveal_hash; - Tztest.tztest - "Hex encoding roundtrip test between Dac hash and reveal hash" - `Quick - test_dac_hash_hex_roundtrip_with_reveal_hash; - Tztest.tztest - "Hash bytes should be equal between Dac hash and reveal hash" - `Quick - test_dac_hash_hash_bytes_with_reveal_hash; - Tztest.tztest - "Hash string should be equal between Dac hash and reveal hash" - `Quick - test_dac_hash_hash_string_with_reveal_hash; - Tztest.tztest - "Json encoded hash string should be a hex string" - `Quick - test_dac_hash_hash_string_with_reveal_hash; - ] - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [Test_helpers.Unit_test.spec "Dac_plugin_registration.ml" tests] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_dac_plugin/test/test_helpers.ml b/src/proto_019_PtParisB/lib_dac_plugin/test/test_helpers.ml deleted file mode 100644 index 832d0dd725a9180fba8175132321c789378ce500..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dac_plugin/test/test_helpers.ml +++ /dev/null @@ -1,45 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Unit_test : sig - (** - * Example: [spec "Dac_pages_encoding.ml" Test_dac_pages_encoding.tests] - * Unit tests needs tag in log (like "[UNIT] some test description here...") - * This function handles such meta data *) - val spec : - string -> - unit Alcotest_lwt.test_case list -> - string * unit Alcotest_lwt.test_case list - - (** Tests with description string without [Unit] are skipped *) - val _skip : - string -> - unit Alcotest_lwt.test_case list -> - string * unit Alcotest_lwt.test_case list -end = struct - let spec unit_name test_cases = ("[Unit] " ^ unit_name, test_cases) - - let _skip unit_name test_cases = ("[SKIPPED] " ^ unit_name, test_cases) -end diff --git a/src/proto_019_PtParisB/lib_dal/test/dune b/src/proto_019_PtParisB/lib_dal/test/dune deleted file mode 100644 index 9621e649d0648c110421b919d634a3f8b6758771..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dal/test/dune +++ /dev/null @@ -1,47 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_dal_test_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-protocol-019-PtParisB-libs.dal - tezos-protocol-019-PtParisB.protocol - octez-libs.base-test-helpers - octez-protocol-019-PtParisB-libs.test-helpers - octez-alcotezt) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_dal_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_base_test_helpers - -open Tezos_019_PtParisB_test_helpers - -open Octez_alcotezt) - (modules test_dal_slot_frame_encoding test_helpers)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_dal_test_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package octez-protocol-019-PtParisB-libs) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_dal/test/test_dal_slot_frame_encoding.ml b/src/proto_019_PtParisB/lib_dal/test/test_dal_slot_frame_encoding.ml deleted file mode 100644 index 5023a4e31fcacaa542f612139e53e3efe4692d8d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dal/test/test_dal_slot_frame_encoding.ml +++ /dev/null @@ -1,420 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Dal_node Slot_frame_encoding - Invocation: dune exec src/proto_019_PtParisB/lib_dal/test/main.exe \ - -- --file test_dal_slot_frame_encoding.ml - Subject: Tests for the SCORU storage module -*) - -(* FIXME/DAL: https://gitlab.com/tezos/tezos/-/issues/3421 - Property based tests to check basic invariants of slot-frame encoding V0. *) - -open Protocol -open Alpha_context -module Rollup_messages_map = Dal_slot_frame_encoding.Rollups_map -module V0 = Dal_slot_frame_encoding.V0 - -(* FIXME/DAL: https://gitlab.com/tezos/tezos/-/issues/3339 - Fetch this value from protocol default constants *) -let max_size = 1_048_576 - -let assert_fails_with ~loc k expected_err = - let open Lwt_result_syntax in - let*! res = k in - Assert.error ~loc res (( = ) expected_err) - -module Compare_list_string = Compare.List (String) -module Compare_list_list_string = Compare.List (Compare_list_string) -module Compare_list_rollup = Compare.List (Sc_rollup.Address) - -let assert_equal_bytes ~loc msg = - Assert.equal ~loc Bytes.equal msg String.pp_bytes_hex - -let assert_equal_list_string ~loc msg = - Assert.equal - ~loc - Compare_list_string.equal - msg - (Format.pp_print_list Format.pp_print_string) - -let assert_equal_list_list_string ~loc msg = - Assert.equal - ~loc - Compare_list_list_string.equal - msg - (Format.pp_print_list (Format.pp_print_list Format.pp_print_string)) - -let assert_equal_list_rollups ~loc msg = - Assert.equal - ~loc - Compare_list_rollup.equal - msg - (Format.pp_print_list Sc_rollup.Address.pp) - -let sc_rollup_1 = - Sc_rollup.Address.of_b58check_exn "sr1BAwv191dVYeZg44ZxVy8dFwfRQKW6bSqc" - -let sc_rollup_2 = - Sc_rollup.Address.of_b58check_exn "sr1Fq8fPi2NjhWUXtcXBggbL6zFjZctGkmso" - -let slot_frame_encoding_size_correct_single_v0 () = - let open Lwt_result_syntax in - let messages_rollup_1 = - ["hello"; "is"; "it"; "me"; "you"; "are"; "looking"; "for"] - in - (* One rollup with offset should take 24 bytes *) - let entry_size = V0.Internal.rollup_entry_size in - let* () = Assert.equal_int ~loc:__LOC__ entry_size 24 in - (* 1 byte for version *) - let expected_version_size = 1 in - (* 20 bytes for one rollup address + 4 bytes of offset + 4 bytes for frame length = 28 bytes *) - let computed_rollups_frame_size = V0.Internal.rollups_frame_size 1 in - let expected_rollups_frame_size = 28 in - let* () = - Assert.equal_int - ~loc:__LOC__ - computed_rollups_frame_size - expected_rollups_frame_size - in - (*27 bytes total messages + - 4 * 8 = 32 bytes message length prefixes + - 4 bytes list length prefix + - 63 bytes for messages frame *) - let computed_messages_frame_size = - V0.Internal.messages_frame_size messages_rollup_1 - in - let expected_messages_frame_size = 63 in - let* () = - Assert.equal_int - ~loc:__LOC__ - computed_messages_frame_size - expected_messages_frame_size - in - (* 4 bytes of list length prefix + - 63 bytes of messages_frame_size = 67 bytes for all messages frames *) - let computed_all_messages_frames_size = - V0.Internal.all_messages_frames_size [messages_rollup_1] - in - let expected_all_messages_frames_size = 4 + expected_messages_frame_size in - let* () = - Assert.equal_int - ~loc:__LOC__ - computed_all_messages_frames_size - expected_all_messages_frames_size - in - let expected_size = - expected_version_size + expected_rollups_frame_size - + expected_all_messages_frames_size - in - let map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - in - let computed_size = V0.expected_slot_size map in - Assert.equal_int ~loc:__LOC__ expected_size computed_size - -let slot_frame_encoding_size_correct_multiple_v0 () = - let open Lwt_result_syntax in - let messages_rollup_1 = ["Summer"; "loving"; "had"; "me"; "a"; "blast"] in - let messages_rollup_2 = ["Summer"; "loving"; "happened"; "so"; "fast"] in - (* 1 byte for version *) - let expected_version_size = 1 in - (* 24 * 2 = 48 bytes for two rollup entries + - 4 bytes for frame length prefix = 52 bytes - *) - let computed_rollups_frame_size = V0.Internal.rollups_frame_size 2 in - let expected_rollups_frame_size = 52 in - let* () = - Assert.equal_int - ~loc:__LOC__ - computed_rollups_frame_size - expected_rollups_frame_size - in - (* Frame 1: - 6 + 6 + 3 + 2 + 1 + 5 = 23 bytes for messages + - 4 * 6 = 24 bytes for message length prefix for 6 messages - + 4 bytes for message frame prefix = - 51 bytes for the messages frame for rollup1. - Frame 2: - 6 + 6 + 8 + 2 + 4 = 26 bytes for messages + - 4 * 5 = 20 bytes for message length prefix for 6 messages - + 4 bytes for message frame prefix = - 50 bytes for the messages frame for rollup2. - Messages frame length: - 51 bytes for rollup1 messages frame + - 50 bytes for rollup2 messages frame + - 4 bytes prefix length for all messages frames = - 105 bytes - *) - let computed_all_messages_frames_size = - V0.Internal.all_messages_frames_size [messages_rollup_1; messages_rollup_2] - in - let expected_all_messages_frames_size = 105 in - let* () = - Assert.equal_int - ~loc:__LOC__ - computed_all_messages_frames_size - expected_all_messages_frames_size - in - let expected_size = - expected_version_size + expected_rollups_frame_size - + expected_all_messages_frames_size - in - let map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - |> Rollup_messages_map.add sc_rollup_2 messages_rollup_2 - in - let computed_size = V0.expected_slot_size map in - Assert.equal_int ~loc:__LOC__ expected_size computed_size - -let slot_frame_encoding_decoding_correct_single_v0 () = - let open Lwt_result_syntax in - let messages_rollup_1 = - ["hello"; "is"; "it"; "me"; "you"; "are"; "looking"; "for"] - in - let messages_map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - in - let* serialized = V0.serialize ~max_size messages_map in - let* () = - Assert.equal_int - ~loc:__LOC__ - (String.length serialized) - (V0.expected_slot_size messages_map) - in - let* deserialized = V0.deserialize ~max_size serialized in - let rollups_with_messages = Rollup_messages_map.bindings deserialized in - let* () = - assert_equal_list_rollups - ~loc:__LOC__ - "Deserialized rollups are different from originals" - [sc_rollup_1] - (List.map fst rollups_with_messages) - in - assert_equal_list_list_string - ~loc:__LOC__ - "Messages frames are different from originals" - [messages_rollup_1] - (List.map snd rollups_with_messages) - -let slot_frame_encoding_decoding_correct_multiple_v0 () = - let open Lwt_result_syntax in - let messages_rollup_1 = ["Summer"; "loving"; "had"; "me"; "a"; "blast"] in - let messages_rollup_2 = ["Summer"; "loving"; "happened"; "so"; "fast"] in - let messages_map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - |> Rollup_messages_map.add sc_rollup_2 messages_rollup_2 - in - let* serialized = V0.serialize ~max_size messages_map in - let* () = - Assert.equal_int - ~loc:__LOC__ - (String.length serialized) - (V0.expected_slot_size messages_map) - in - let* deserialized = V0.deserialize ~max_size serialized in - let rollups_with_messages = Rollup_messages_map.bindings deserialized in - let* () = - assert_equal_list_rollups - ~loc:__LOC__ - "Deserialized rollups are different from originals" - [sc_rollup_1; sc_rollup_2] - (List.map fst rollups_with_messages) - in - assert_equal_list_list_string - ~loc:__LOC__ - "Messages frames are different from originals" - [messages_rollup_1; messages_rollup_2] - (List.map snd rollups_with_messages) - -let slot_frame_encoding_fails_if_too_big () = - let messages_rollup_1 = ["Summer"; "loving"; "had"; "me"; "a"; "blast"] in - let messages_rollup_2 = ["Summer"; "loving"; "happened"; "so"; "fast"] in - let messages_map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - |> Rollup_messages_map.add sc_rollup_2 messages_rollup_2 - in - let actual_size = V0.expected_slot_size messages_map in - let max_size = actual_size - 1 in - assert_fails_with - ~loc:__LOC__ - (V0.serialize ~max_size messages_map) - (Dal_slot_frame_encoding.Slot_size_is_too_big {actual_size; max_size}) - -let slot_frame_decoding_fails_if_too_big () = - let open Lwt_result_syntax in - let messages_rollup_1 = ["Summer"; "loving"; "had"; "me"; "a"; "blast"] in - let messages_rollup_2 = ["Summer"; "loving"; "happened"; "so"; "fast"] in - let messages_map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - |> Rollup_messages_map.add sc_rollup_2 messages_rollup_2 - in - let actual_size = V0.expected_slot_size messages_map in - let* serialized = V0.serialize ~max_size:actual_size messages_map in - let max_size = actual_size - 1 in - assert_fails_with - ~loc:__LOC__ - (V0.deserialize ~max_size serialized) - (Dal_slot_frame_encoding.Slot_size_is_too_big {actual_size; max_size}) - -let slot_frame_decoding_fails_if_wrong_version () = - let open Lwt_result_syntax in - let messages_rollup_1 = ["Summer"; "loving"; "had"; "me"; "a"; "blast"] in - let messages_rollup_2 = ["Summer"; "loving"; "happened"; "so"; "fast"] in - let messages_map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - |> Rollup_messages_map.add sc_rollup_2 messages_rollup_2 - in - let* serialized = - Dal_slot_frame_encoding.V0.serialize ~max_size messages_map - in - let serialized_wrong_version = - "\001" ^ String.sub serialized 1 (String.length serialized - 1) - in - assert_fails_with - ~loc:__LOC__ - (V0.deserialize ~max_size serialized_wrong_version) - (Dal_slot_frame_encoding.Wrong_slot_frame_version - {expected = 0; provided = 1}) - -let slot_frame_encoding_correct_offsets () = - let open Lwt_result_syntax in - let messages_rollup_1 = ["hello"; "world"] in - let messages_rollup_2 = ["CAFEBABE"; "CAFEDEAD"] in - let messages_map = - Rollup_messages_map.empty - |> Rollup_messages_map.add sc_rollup_1 messages_rollup_1 - |> Rollup_messages_map.add sc_rollup_2 messages_rollup_2 - in - let* serialized = V0.serialize ~max_size messages_map in - (* the value of the offset that denotes where the messages frame for - sc_rollup_1 starts can be found at offset 25 until 29 (excluded): - 1 byte for version + - 4 bytes for rollups frame prefix + - 20 bytes for rollup address = 25. - *) - let first_offset = - String.sub serialized 25 4 |> Data_encoding.(Binary.of_string_exn int32) - in - (* the value of the offset should be 57l: - 1 byte for version number + 4 bytes for rollups frame prefix + - 2 * 24 bytes for rollups frame + - 4 bytes for messages frames prefix = 57. *) - let* () = Assert.equal_int32 ~loc:__LOC__ first_offset 57l in - (* The length of the first messages frame should be 22 bytes: - 4 bytes for the messages frame prefix + - 4 + 5 bytes for the encoding of the message "hello" + - 4 + 5 bytes for the encoding of the message "world" = 22. - *) - let first_messages_frame = - Data_encoding.(Binary.of_string_exn @@ list string) - @@ String.sub serialized 57 22 - in - let* () = - assert_equal_list_string - ~loc:__LOC__ - "Messages frame for sc_rollup_1 is not as expected" - first_messages_frame - ["hello"; "world"] - in - (* The value of the offset that denotes where the messages frame for - sc_rollup_2 STARTS can be found at bytes 49 until 53 (excluded): - 29 offset where the entry for sc_rollup_2 starts + - 20 bytes for the encoding of sc_rollup_2 = 49. - *) - let second_offset = - String.sub serialized 49 4 |> Data_encoding.(Binary.of_string_exn int32) - in - (* the value of the second offset should be 79 - 57 offset where the messages frame for sc_rollup_1 starts + - 22 bytes length of the first messages frame = 79 - *) - let* () = Assert.equal_int32 ~loc:__LOC__ second_offset 79l in - (* The length of the first messages frame should be 28: - 4 bytes for the messages frame prefix + - 4 + 8 bytes for the encoding of the message "CAFEBABE" + - 4 + 8 bytes for the encoding of the message "CAFEDEAD" = 28 - *) - let second_messages_frame = - Data_encoding.(Binary.of_string_exn @@ list string) - @@ String.sub serialized 79 28 - in - assert_equal_list_string - ~loc:__LOC__ - "Messages frame for sc_rollup_1 is not as expected" - second_messages_frame - ["CAFEBABE"; "CAFEDEAD"] - -let tests = - [ - Tztest.tztest - "Encoded slot has expected size (V0, 1 rollup)" - `Quick - slot_frame_encoding_size_correct_single_v0; - Tztest.tztest - "Encoded slot has expected size (V0, 2 rollups)" - `Quick - slot_frame_encoding_size_correct_multiple_v0; - Tztest.tztest - "Encoded slot can be decoded (V0, 1 rollup)" - `Quick - slot_frame_encoding_decoding_correct_single_v0; - Tztest.tztest - "Encoded slot can be decoded (V0, 2 rollups)" - `Quick - slot_frame_encoding_decoding_correct_multiple_v0; - Tztest.tztest - "Encoding of a slot over maximum size fails (V0)" - `Quick - slot_frame_encoding_fails_if_too_big; - Tztest.tztest - "Offsets of messages frames are correct (V0)" - `Quick - slot_frame_encoding_correct_offsets; - Tztest.tztest - "Slot decoding fails when slot size is too big (V0)" - `Quick - slot_frame_decoding_fails_if_too_big; - Tztest.tztest - "Slot decoding fails when first byte has wrong version (V0)" - `Quick - slot_frame_decoding_fails_if_wrong_version; - ] - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [Test_helpers.Unit_test.spec "Slot_framing_protocol.ml" tests] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_dal/test/test_helpers.ml b/src/proto_019_PtParisB/lib_dal/test/test_helpers.ml deleted file mode 100644 index 4c0437a54c220835d434fd4ed4277293873f7154..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_dal/test/test_helpers.ml +++ /dev/null @@ -1,45 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Unit_test : sig - (** - * Example: [spec "Slot_framing_protocol.ml" Test_dal_slot_frame_encoding.test_cases] - * Unit tests needs tag in log (like "[UNIT] some test description here...") - * This function handles such meta data *) - val spec : - string -> - unit Alcotest_lwt.test_case list -> - string * unit Alcotest_lwt.test_case list - - (** Tests with description string without [Unit] are skipped *) - val _skip : - string -> - unit Alcotest_lwt.test_case list -> - string * unit Alcotest_lwt.test_case list -end = struct - let spec unit_name test_cases = ("[Unit] " ^ unit_name, test_cases) - - let _skip unit_name test_cases = ("[SKIPPED] " ^ unit_name, test_cases) -end diff --git a/src/proto_019_PtParisB/lib_delegate/test/README.md b/src/proto_019_PtParisB/lib_delegate/test/README.md deleted file mode 100644 index 7fd4de1c2ee552ba51dba455ca684315440b7998..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# Testing Tenderbake via mockup-based simulations - -This test suite contains tests that check the baker. A notable feature that -distinguishes these tests from simple unit tests is that the baker is -examined as a whole with all its components working together. We do not run -a node, instead, we run a mockup node that allows us to create an illusion -for the baker that it talks to a real node. Thus, we have full control of -how the mockup node behaves, how the proposals and operations propagate, and -what the baker sees when it calls RPCs. - -Pros: - -* Integrates naturally with the existing testing setup and CI. No external - binaries or setup needed. -* Fast. The round time is currently constant and equal to 3 seconds. 2 - second was also tried, but that resulted in deviations from expected - behavior in about 10% of cases. Upon closer inspection it was found out - that round timeouts happen before a key event in the scenario. Supposedly, - this depends on the time the test is started as all other parameters are - set and deterministic. Switching 3 seconds solved the issue. -* Uses the same code as the baker, so people who are familiar with the - existing Tezos will benefit from their knowledge. -* Various assertions and checks can be expressed to ensure that the scenario - in question progresses exactly as it supposed to. -* Many details of how the baker sees the world can be tightly controlled. - -Cons: - -* Hard to see the logic of the scenario because it has to be written as a - collection of hooks. - -## Running the tests - -The tests can be run like this from the `src/proto_alpha/lib_delegate/test`: - -``` -$ dune exec ./main.exe -- -v -``` - -## Writing a test - -See the examples in `test_scenario.ml` for inspiration. Start writing a -scenario by deciding how many bakers you need and how many delegates each of -them will have (see the docs for `Mockup_simulator.run`): - -```ocaml - let open Mockup_simulator in - run [(3, (module Default_hooks)); (2, (module Default_hooks))] -``` - -* Set `debug` to `true` in `Mockup_simulator.default_config` and pass it to - `Mockup_simulator.run`. When `debug` is enabled baker logs will be printed. - This is the main instrument for observing what happens in the scenario. -* Consider setting `timeout` to an appropriate value. By default it is 10 - seconds, which should be fine for short scenarios, but may be insufficient - for longer ones. Timeout is a safety mechanism that prevents scenarios - from hanging and non-termination. -* It is also possible to control round durations, but it recommended to - use at least 3 seconds (the default). -* Finally, proposal slots can be controlled with the `delegate_selection` - field. The nested lists specify slot owners per level and - round. Note that if not provided, a seed nonce will be bruteforced - to obtain the desired delegate selection. - - -```ocaml - let open Mockup_simulator in - let config = - { - default_config with - debug = true; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap3); - (1l, bootstrap4); - (2l, bootstrap2); - (3l, bootstrap1); - ] ); - ( 2l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ]; - timeout = 15; - } - in - run ~config [(3, (module Default_hooks)); (2, (module Default_hooks))] -``` - -Note that delegate selection affects both (pre-)attesting and voting power. -Delegates that do not have proposer slots will not be able to (pre-)attest. -Voting power of delegates who have proposer slots will be proportional to -the number of slots they have. - -Next step is writing hook modules per baker that control its mockup mode and -execute assertions. In most cases there is no need to implement all hooks, -so the `Default_hooks` module can be reused, e.g.: - -```ocaml - let module Hooks : Mockup_simulator.Hooks = struct - include Mockup_simulator.Default_hooks - - let stop_on_event = function - | Baking_state.New_proposal {block; _} -> - (* Stop the node as soon as we receive a proposal with a level - higher than 5. *) - block.shell.level > 5l - | _ -> false - end in -``` - -Other hooks can be used to implement assertions using `failwith` and to set -mutable variable to track progress of a scenario. - -### Termination - -A scenario runs till all bakers terminate or till the scenario times out. A -baker can terminate successfully or unsuccessfully. Successful termination -happens when `stop_on_event` returns `true`. Unsuccessful termination occurs -when any of the hooks executes `failwith`. If at least one baker fails its -error message propagates and is displayed by the testing framework -(Alcotest). diff --git a/src/proto_019_PtParisB/lib_delegate/test/dune b/src/proto_019_PtParisB/lib_delegate/test/dune deleted file mode 100644 index bc91065e9d468302d7df955678484dfe56ee9b18..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/dune +++ /dev/null @@ -1,56 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_delegate_test_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-libs.test-helpers - octez-libs.micheline - octez-protocol-019-PtParisB-libs.client - tezos-protocol-019-PtParisB.protocol - octez-libs.base-test-helpers - octez-protocol-019-PtParisB-libs.bakings.mockup-simulator - octez-protocol-019-PtParisB-libs.baking - tezos-protocol-019-PtParisB.parameters - octez-libs.crypto - octez-libs.event-logging-test-helpers - uri) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_test_helpers - -open Tezos_micheline - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_base_test_helpers - -open Tezos_019_PtParisB_mockup_simulator - -open Tezos_baking_019_PtParisB - -open Tezos_event_logging_test_helpers) - (modules test_scenario)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_delegate_test_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package octez-protocol-019-PtParisB-libs) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/broadcast_services.ml b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/broadcast_services.ml deleted file mode 100644 index 1a8c0a3ad8f3425bf6ab07a782d283fa26d6578a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/broadcast_services.ml +++ /dev/null @@ -1,85 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module S = struct - open Data_encoding - - let path = Tezos_rpc.Path.(root / "broadcast") - - let dests_query = - let open Tezos_rpc.Query in - query (fun dests -> - object - method dests = dests - end) - |+ multi_field "dests" Tezos_rpc.Arg.int (fun t -> t#dests) - |> seal - - (* copied from lib_shell_services/injection_services.ml *) - let block_param = - obj2 - (req "block" (dynamic_size Block_header.encoding)) - (req - "operations" - (list (dynamic_size (list (dynamic_size Operation.encoding))))) - - let block = - Tezos_rpc.Service.post_service - ~description:"Broadcast a block." - ~query:dests_query - ~input:block_param - ~output:unit - Tezos_rpc.Path.(path / "block") - - let operation = - Tezos_rpc.Service.post_service - ~description:"Broadcast an operation." - ~query:dests_query - ~input:Alpha_context.Operation.encoding - ~output:unit - Tezos_rpc.Path.(path / "operation") -end - -open Tezos_rpc.Context - -let block ctxt ?(dests = []) raw operations = - make_call - S.block - ctxt - () - (object - method dests = dests - end) - (raw, operations) - -let operation ctxt ?(dests = []) operation = - make_call - S.operation - ctxt - () - (object - method dests = dests - end) - operation diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/dune b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/dune deleted file mode 100644 index 5a3b2c975dc2c85acadf0552eb94feb683d1e4b5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/dune +++ /dev/null @@ -1,33 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name tezos_019_PtParisB_mockup_simulator) - (public_name octez-protocol-019-PtParisB-libs.bakings.mockup-simulator) - (libraries - octez-libs.base - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.client - octez-shell-libs.client-commands - octez-protocol-019-PtParisB-libs.baking - octez-libs.stdlib-unix - octez-shell-libs.client-base-unix - tezos-protocol-019-PtParisB.parameters - octez-shell-libs.mockup - octez-shell-libs.mockup-proxy - octez-shell-libs.mockup-commands - octez-protocol-019-PtParisB-libs.baking.tenderbrute - tezt.core) - (flags - (:standard) - -open Tezos_base.TzPervasives - -open Tezos_protocol_019_PtParisB - -open Tezos_protocol_019_PtParisB.Protocol - -open Tezos_client_019_PtParisB - -open Tezos_client_commands - -open Tezos_baking_019_PtParisB - -open Tezos_stdlib_unix - -open Tezos_client_base_unix - -open Tezos_protocol_019_PtParisB_parameters - -open Tenderbrute_019_PtParisB - -open Tezt_core)) diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_client_context.ml b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_client_context.ml deleted file mode 100644 index 7a9741e31b4c007ea17bce22ce4c91b4b8cce460..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_client_context.ml +++ /dev/null @@ -1,177 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Tezos_client_base - -let logger = - let log _channel msg = Lwt_fmt.printf "%s@." msg in - new Client_context.simple_printer log - -class dummy_prompter : Client_context.prompter = - object - method prompt : type a. (a, string tzresult) Client_context.lwt_format -> a - = - fun _msg -> assert false - - method prompt_password : type a. - (a, Bytes.t tzresult) Client_context.lwt_format -> a = - fun _msg -> assert false - - method multiple_password_retries = false - end - -let log _channel msg = - print_endline msg ; - Lwt.return_unit - -class faked_ctxt (hooks : Faked_services.hooks) (chain_id : Chain_id.t) : - Tezos_rpc.Context.generic = - let local_ctxt = - let module Services = Faked_services.Make ((val hooks)) in - Tezos_mockup_proxy.RPC_client.local_ctxt (Services.directory chain_id) - in - object - method base = local_ctxt#base - - method generic_media_type_call meth ?body uri = - local_ctxt#generic_media_type_call meth ?body uri - - method call_service - : 'm 'p 'q 'i 'o. - (([< Resto.meth] as 'm), unit, 'p, 'q, 'i, 'o) Tezos_rpc.Service.t -> - 'p -> - 'q -> - 'i -> - 'o tzresult Lwt.t = - fun service params query body -> - local_ctxt#call_service service params query body - - method call_streamed_service - : 'm 'p 'q 'i 'o. - (([< Resto.meth] as 'm), unit, 'p, 'q, 'i, 'o) Tezos_rpc.Service.t -> - on_chunk:('o -> unit) -> - on_close:(unit -> unit) -> - 'p -> - 'q -> - 'i -> - (unit -> unit) tzresult Lwt.t = - fun service ~on_chunk ~on_close params query body -> - local_ctxt#call_streamed_service - service - ~on_chunk - ~on_close - params - query - body - end - -class faked_wallet ~base_dir ~filesystem : Client_context.wallet = - object (self) - method load_passwords = None - - method read_file fname = - let open Lwt_result_syntax in - match String.Hashtbl.find filesystem fname with - | None -> failwith "faked_wallet: cannot read file (%s)" fname - | Some (content, _mtime) -> return content - - method private filename alias_name = - Filename.concat - base_dir - (String.map (function ' ' -> '_' | c -> c) alias_name ^ "s") - - val lock_mutex = Lwt_mutex.create () - - method with_lock : type a. (unit -> a Lwt.t) -> a Lwt.t = - fun f -> Lwt_mutex.with_lock lock_mutex f - - method get_base_dir = base_dir - - method load : type a. - string -> default:a -> a Data_encoding.encoding -> a tzresult Lwt.t = - let open Lwt_result_syntax in - fun alias_name ~default encoding -> - let filename = self#filename alias_name in - if not (String.Hashtbl.mem filesystem filename) then return default - else - let* content = self#read_file filename in - let json = (Ezjsonm.from_string content :> Data_encoding.json) in - match Data_encoding.Json.destruct encoding json with - | exception e -> - failwith - "did not understand the %s alias file %s : %s" - alias_name - filename - (Printexc.to_string e) - | data -> return data - - method write : type a. - string -> a -> a Data_encoding.encoding -> unit tzresult Lwt.t = - let open Lwt_result_syntax in - fun alias_name list encoding -> - let filename = self#filename alias_name in - let json = Data_encoding.Json.construct encoding list in - let str = Ezjsonm.value_to_string (json :> Ezjsonm.value) in - String.Hashtbl.replace - filesystem - filename - (str, Some (Ptime.to_float_s (Ptime_clock.now ()))) ; - return_unit - - method last_modification_time : string -> float option tzresult Lwt.t = - let open Lwt_result_syntax in - fun alias_name -> - let filename = self#filename alias_name in - let file = String.Hashtbl.find_opt filesystem filename in - match file with - | None -> return_none - | Some (_content, mtime) -> return mtime - end - -class faked_io_wallet ~base_dir ~filesystem : Client_context.io_wallet = - object - inherit Client_context.simple_printer log - - inherit dummy_prompter - - inherit faked_wallet ~base_dir ~filesystem - end - -class unix_faked ~base_dir ~filesystem ~chain_id ~hooks : Client_context.full = - object - inherit faked_io_wallet ~base_dir ~filesystem - - inherit faked_ctxt hooks chain_id - - inherit Client_context_unix.unix_ui - - method chain = `Hash chain_id - - method block = `Head 0 - - method confirmations = None - - method verbose_rpc_error_diagnostics = false - end diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_daemon.ml b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_daemon.ml deleted file mode 100644 index 86967abcaa36638808e12aecb4dba42638aa28f1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_daemon.ml +++ /dev/null @@ -1,38 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -module Baker = struct - let run ~(cctxt : #Protocol_client_context.full) ~stop_on_event ~chain_id - ~(context_index : Abstract_context_index.t) ~delegates = - let open Lwt_result_syntax in - let chain = `Hash chain_id in - let baking_configuration = - let open Baking_configuration in - { - default_config with - validation = ContextIndex context_index; - state_recorder = Memory; - } - in - (* By default errors are simply printed but the baker won't stop - because of them. This is not what we want for testing. Here we force - the baker to terminate unsuccessfully if an error occurs. *) - let canceler = Lwt_canceler.create () in - let on_error (err : error trace) = - let*! (_ : (unit, exn trace) result) = Lwt_canceler.cancel canceler in - Format.printf "%a" Error_monad.pp_print_trace err ; - Lwt_exit.exit_and_raise 1 - in - Baking_scheduling.run - cctxt - ~canceler - ~stop_on_event - ~on_error - ~chain - baking_configuration - delegates -end diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_services.ml b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_services.ml deleted file mode 100644 index 95acc55de6297afc256d46093962be85868e0439..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/faked_services.ml +++ /dev/null @@ -1,373 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Tezos_shell_services -module Directory = Tezos_rpc.Directory -module Chain_services = Tezos_shell_services.Chain_services -module Block_services = Tezos_shell_services.Block_services -module Block_services_alpha = Protocol_client_context.Alpha_block_services - -module type Mocked_services_hooks = sig - type mempool = Mockup.M.Block_services.Mempool.t - - (** The baker relies on this stream to be notified of new - valid blocks. *) - val monitor_validated_blocks : - unit -> - (Chain_id.t * Block_hash.t * Block_header.t * Operation.t list list) - Tezos_rpc.Answer.stream - - (** The baker relies on this stream to be notified of new - heads. *) - val monitor_heads : - unit -> (Block_hash.t * Block_header.t) Tezos_rpc.Answer.stream - - (** Returns current and next protocol for a block. *) - val protocols : - Block_services.block -> Block_services.protocols tzresult Lwt.t - - (** [raw_header] returns the byte encoded block header of the block - associated to the given block specification. *) - val raw_header : Block_services.block -> bytes tzresult Lwt.t - - (** [header] returns the block header of the block associated to the given - block specification. *) - val header : - Block_services.block -> Mockup.M.Block_services.block_header tzresult Lwt.t - - (** [resulting_context_hash] returns the context resulting hash of the given block. *) - val resulting_context_hash : - Block_services.block -> Context_hash.t tzresult Lwt.t - - (** [operations] returns all operations included in the block. *) - val operations : - Block_services.block -> - Mockup.M.Block_services.operation list list tzresult Lwt.t - - (** [inject_block_callback] is called when an RPC is performed on - [Tezos_shell_services.Injection_services.S.block], after checking that - the block header can be deserialized. *) - val inject_block : - Block_hash.t -> - Block_header.t -> - Operation.t trace trace -> - unit tzresult Lwt.t - - (** [inject_operation] is used by the baker (or the client) to inject - operations, including attestations. *) - val inject_operation : Operation.t -> Operation_hash.t tzresult Lwt.t - - (** [pending_operations] returns the current contents of the mempool. It - is used by the baker to fetch operations to potentially include in the - block being baked. These operations might include attestations. If - there aren't enough attestations, the baker waits on - [monitor_operations]. *) - val pending_operations : unit -> mempool Lwt.t - - (** Return a stream of list of operations. Used by the baker to wait on - attestations. Invariant: the stream becomes empty when the node changes - head. *) - val monitor_operations : - version:Block_services.version -> - validated:bool -> - branch_delayed:bool -> - branch_refused:bool -> - refused:bool -> - (Block_services.version - * ((Operation_hash.t * Mockup.M.Protocol.operation) * error trace option) - list) - Tezos_rpc.Answer.stream - - (** Lists block hashes from the chain, up to the last checkpoint, sorted - with decreasing fitness. Without arguments it returns the head of the - chain. Optional arguments allow to return the list of predecessors of a - given block or of a set of blocks. *) - val list_blocks : - heads:Block_hash.t list -> - length:int option -> - min_date:Time.Protocol.t option -> - Block_hash.t list list tzresult Lwt.t - - (** List the ancestors of the given block which, if referred to as - the branch in an operation header, are recent enough for that - operation to be included in the current block. *) - val live_blocks : Block_services.block -> Block_hash.Set.t tzresult Lwt.t - - (** [rpc_context_callback] is used in the implementations of several - RPCs (see local_services.ml). It should correspond to the - rpc_context constructed from the context at the requested block. *) - val rpc_context_callback : - Block_services.block -> - Tezos_protocol_environment.rpc_context tzresult Lwt.t - - (** Return raw protocol data as a block. *) - val raw_protocol_data : Block_services.block -> Bytes.t tzresult Lwt.t - - (** Broadcast block manually to nodes [dests] (given by their - number, starting from 0). If [dests] is not provided, broadcast - to all nodes. *) - val broadcast_block : - ?dests:int list -> - Block_hash.t -> - Block_header.t -> - Operation.t trace trace -> - unit tzresult Lwt.t - - (** Broadcast operation manually to nodes [dests] (given by their - number, starting from 0). If [dests] is not provided, broadcast - to all nodes. *) - val broadcast_operation : - ?dests:int list -> Alpha_context.packed_operation -> unit tzresult Lwt.t - - (** Simulate waiting for the node to be bootstrapped. Because the - simulated node is already bootstrapped, returns the current head - immediately. *) - val monitor_bootstrapped : - unit -> (Block_hash.t * Time.Protocol.t) Tezos_rpc.Answer.stream -end - -type hooks = (module Mocked_services_hooks) - -module Make (Hooks : Mocked_services_hooks) = struct - let monitor_validated_blocks = - Directory.gen_register0 - Directory.empty - Monitor_services.S.validated_blocks - (fun _next_protocol _ -> - Tezos_rpc.Answer.return_stream (Hooks.monitor_validated_blocks ())) - - let monitor_heads = - Directory.gen_register1 - Directory.empty - Monitor_services.S.heads - (fun _chain _next_protocol () -> - Tezos_rpc.Answer.return_stream (Hooks.monitor_heads ())) - - let monitor_bootstrapped = - Directory.gen_register0 - Directory.empty - Monitor_services.S.bootstrapped - (fun () () -> - Tezos_rpc.Answer.return_stream (Hooks.monitor_bootstrapped ())) - - let protocols = - let path = - let open Tezos_rpc.Path in - prefix Block_services.chain_path Block_services.path - in - let service = - Tezos_rpc.Service.prefix path Block_services.Empty.S.protocols - in - Directory.register Directory.empty service (fun (_, block) () () -> - Hooks.protocols block) - - let raw_header = - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Mockup.M.Block_services.S.raw_header - (fun (((), _chain), block) _ _ -> Hooks.raw_header block) - - let header = - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Mockup.M.Block_services.S.header - (fun (((), _chain), block) _ _ -> Hooks.header block) - - let resulting_context_hash = - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Mockup.M.Block_services.S.resulting_context_hash - (fun (((), _chain), block) _ _ -> Hooks.resulting_context_hash block) - - let operations = - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Mockup.M.Block_services.S.Operations.operations - (fun (((), _chain), block) q () -> - let open Lwt_result_syntax in - let* ops = Hooks.operations block in - return (q#version, ops)) - - let hash = - let open Lwt_result_syntax in - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Block_services.Empty.S.hash - (fun (((), _chain), block) () () -> - let* x = Hooks.header block in - return x.hash) - - let shell_header = - let open Lwt_result_syntax in - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Mockup.M.Block_services.S.Header.shell_header - (fun (((), _chain), block) _ _ -> - let* x = Hooks.header block in - return x.shell) - - let chain chain_id = - let open Lwt_result_syntax in - Directory.prefix - Chain_services.path - (Directory.register - Directory.empty - Chain_services.S.chain_id - (fun _chain () () -> return chain_id)) - - let inject_block = - let open Lwt_result_syntax in - Directory.register - Directory.empty - Injection_services.S.block - (fun () _chain (bytes, operations) -> - match Block_header.of_bytes bytes with - | None -> failwith "faked_services.inject_block: can't deserialize" - | Some block_header -> - let block_hash = Block_hash.hash_bytes [bytes] in - let* () = Hooks.inject_block block_hash block_header operations in - return block_hash) - - let inject_operation = - Directory.register - Directory.empty - Injection_services.S.operation - (fun () _chain bytes -> - match Data_encoding.Binary.of_bytes_opt Operation.encoding bytes with - | None -> failwith "faked_services.inject_operation: can't deserialize" - | Some operation -> Hooks.inject_operation operation) - - let broadcast_block = - Directory.register - Directory.empty - Broadcast_services.S.block - (fun () dests (block_header, operations) -> - let bytes = Block_header.to_bytes block_header in - let block_hash = Block_hash.hash_bytes [bytes] in - let dests = match dests#dests with [] -> None | dests -> Some dests in - Hooks.broadcast_block ?dests block_hash block_header operations) - - let broadcast_operation = - Directory.register - Directory.empty - Broadcast_services.S.operation - (fun () dests operation -> - let dests = match dests#dests with [] -> None | dests -> Some dests in - Hooks.broadcast_operation ?dests operation) - - let pending_operations = - let open Lwt_syntax in - Directory.gen_register - Directory.empty - (Mockup.M.Block_services.S.Mempool.pending_operations - @@ Block_services.mempool_path Block_services.chain_path) - (fun ((), _chain) params () -> - let* mempool = Hooks.pending_operations () in - Tezos_rpc.Answer.return (params#version, mempool)) - - let monitor_operations = - Directory.gen_register - Directory.empty - (Block_services_alpha.S.Mempool.monitor_operations - @@ Block_services.mempool_path Block_services.chain_path) - (fun ((), _chain) flags () -> - let stream = - Hooks.monitor_operations - ~version:flags#version - ~validated:flags#validated - ~branch_delayed:flags#branch_delayed - ~branch_refused:flags#branch_refused - ~refused:flags#refused - in - Tezos_rpc.Answer.return_stream stream) - - let list_blocks = - Directory.prefix - Chain_services.path - (Directory.register - Directory.empty - Chain_services.S.Blocks.list - (fun ((), _chain) flags () -> - Hooks.list_blocks - ~heads:flags#heads - ~length:flags#length - ~min_date:flags#min_date)) - - let live_blocks = - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Block_services.Empty.S.live_blocks - (fun (_, block) _ () -> Hooks.live_blocks block) - - let raw_protocol_data = - Directory.prefix - (Tezos_rpc.Path.prefix Chain_services.path Block_services.path) - @@ Directory.register - Directory.empty - Block_services.Empty.S.Header.raw_protocol_data - (fun (_, block) () () -> Hooks.raw_protocol_data block) - - let shell_directory chain_id = - List.fold_left - Directory.merge - Directory.empty - [ - monitor_validated_blocks; - monitor_heads; - protocols; - raw_header; - header; - operations; - hash; - shell_header; - resulting_context_hash; - chain chain_id; - inject_block; - inject_operation; - monitor_operations; - list_blocks; - live_blocks; - raw_protocol_data; - broadcast_block; - broadcast_operation; - monitor_bootstrapped; - ] - - let directory chain_id = - let open Lwt_syntax in - let proto_directory = - Directory.prefix - Chain_services.path - (Directory.prefix - Block_services.path - (Directory.map - (fun (((), _chain), block) -> - let* result = Hooks.rpc_context_callback block in - match result with - | Error _ -> assert false - | Ok rpc_context -> Lwt.return rpc_context) - Mockup.M.directory)) - in - let base = Directory.merge (shell_directory chain_id) proto_directory in - Tezos_rpc.Directory.register_describe_directory_service - base - Tezos_rpc.Service.description_service -end diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/mockup_simulator.ml b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/mockup_simulator.ml deleted file mode 100644 index 96a99d358e05205961bff52dd8d96618854bf14c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/mockup_simulator.ml +++ /dev/null @@ -1,1565 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -type block = { - rpc_context : Tezos_protocol_environment.rpc_context; - protocol_data : Protocol.Alpha_context.Block_header.protocol_data; - raw_protocol_data : Bytes.t; - operations : Mockup.M.Block_services.operation list list; - resulting_context_hash : Context_hash.t; -} - -type chain = block list - -(** As new blocks and operations are received they are pushed to an Lwt_pipe - wrapped into this type. *) -type broadcast = - | Broadcast_block of Block_hash.t * Block_header.t * Operation.t list list - | Broadcast_op of Operation_hash.t * Alpha_context.packed_operation - -(** The state of a mockup node. *) -type state = { - instance_index : int; - (** Index of this node. Indices go from 0 to N-1 where N is the total - number of bakers in the simulation. *) - live_depth : int; - (** How many blocks (counting from the head into the past) are considered live? *) - mutable chain : chain; (** The chain as seen by this fake "node". *) - mutable mempool : (Operation_hash.t * Mockup.M.Protocol.operation) list; - (** Mempool of this fake "node". *) - chain_table : chain Block_hash.Table.t; - (** The chain table of this fake "node". It maps from block hashes to - blocks. *) - global_chain_table : block Block_hash.Table.t; - (** The global chain table that allows us to look up blocks that may be - missing in [chain_table], i.e. not known to this particular node. This - is used to find unknown predecessors. The real node can ask about an - unknown block and receive it on request, this is supposed to emulate - that functionality. *) - ctxt_table : Tezos_protocol_environment.rpc_context Context_hash.Table.t; - (** The context table allows us to look up rpc_context by its hash. *) - validated_blocks_pipe : - (Block_hash.t * Block_header.t * Operation.t list list) Lwt_pipe.Unbounded.t; - (** [validated_blocks_pipe] is used to implement the - [monitor_validated_blocks] RPC. *) - heads_pipe : (Block_hash.t * Block_header.t) Lwt_pipe.Unbounded.t; - (** [heads_pipe] is used to implement the [monitor_heads] - RPC. *) - mutable operations_stream : - (Operation_hash.t * Mockup.M.Protocol.operation) list Lwt_stream.t; - mutable operations_stream_push : - (Operation_hash.t * Mockup.M.Protocol.operation) list option -> unit; - (** [operations_pipe] is used to implement the [operations_pipe] RPC. *) - mutable streaming_operations : bool; - (** A helper flag used to implement the monitor operations RPC. *) - broadcast_pipes : broadcast Lwt_pipe.Unbounded.t list; - (** Broadcast pipes per node. *) - genesis_block_true_hash : Block_hash.t; - (** True hash of the genesis - block as calculated by the - [Block_header.hash] function. *) -} - -let accounts = Mockup.Protocol_parameters.default_value.bootstrap_accounts - -let chain_id = Chain_id.of_string_exn "main" - -let genesis_block_hash = - Block_hash.of_b58check_exn - "BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU" - -let genesis_predecessor_block_hash = Block_hash.zero - -type propagation = Block | Pass | Delay of float - -type propagation_vector = propagation list - -module type Hooks = sig - val on_inject_block : - level:int32 -> - round:int32 -> - block_hash:Block_hash.t -> - block_header:Block_header.t -> - operations:Operation.t list list -> - protocol_data:Alpha_context.Block_header.protocol_data -> - (Block_hash.t * Block_header.t * Operation.t list list * propagation_vector) - tzresult - Lwt.t - - val on_inject_operation : - op_hash:Operation_hash.t -> - op:Alpha_context.packed_operation -> - (Operation_hash.t * Alpha_context.packed_operation * propagation_vector) - tzresult - Lwt.t - - val on_new_validated_block : - block_hash:Block_hash.t -> - block_header:Block_header.t -> - operations:Operation.t list list -> - (Block_hash.t * Block_header.t * Operation.t list list) option Lwt.t - - val on_new_head : - block_hash:Block_hash.t -> - block_header:Block_header.t -> - (Block_hash.t * Block_header.t) option Lwt.t - - val on_new_operation : - Operation_hash.t * Alpha_context.packed_operation -> - (Operation_hash.t * Alpha_context.packed_operation) option Lwt.t - - val check_block_before_processing : - level:int32 -> - round:int32 -> - block_hash:Block_hash.t -> - block_header:Block_header.t -> - protocol_data:Alpha_context.Block_header.protocol_data -> - unit tzresult Lwt.t - - val check_chain_after_processing : - level:int32 -> round:int32 -> chain:chain -> unit tzresult Lwt.t - - val check_mempool_after_processing : - mempool:(Operation_hash.t * Mockup.M.Protocol.operation) list -> - unit tzresult Lwt.t - - val stop_on_event : Baking_state.event -> bool - - val on_start_baker : - baker_position:int -> - delegates:Baking_state.consensus_key list -> - cctxt:Protocol_client_context.full -> - unit Lwt.t - - val check_chain_on_success : chain:chain -> unit tzresult Lwt.t -end - -(** Return a series of blocks starting from the block with the given - identifier. *) -let locate_blocks (state : state) - (block : Tezos_shell_services.Block_services.block) : - block list tzresult Lwt.t = - let open Lwt_result_syntax in - match block with - | `Hash (hash, rel) -> ( - match Block_hash.Table.find state.chain_table hash with - | None -> - failwith "locate_blocks: can't find the block %a" Block_hash.pp hash - | Some chain0 -> - let _, chain = List.split_n rel chain0 in - return chain) - | `Head rel -> - let _, chain = List.split_n rel state.chain in - return chain - | `Level _ -> failwith "locate_blocks: `Level block spec not handled" - | `Genesis -> failwith "locate_blocks: `Genesis block spec net handled" - | `Alias _ -> failwith "locate_blocks: `Alias block spec not handled" - -(** Similar to [locate_blocks], but only returns the first block. *) -let locate_block (state : state) - (block : Tezos_shell_services.Block_services.block) : block tzresult Lwt.t = - let open Lwt_result_syntax in - let* blocks = locate_blocks state block in - match blocks with - | [] -> failwith "locate_block: can't find the block" - | x :: _ -> return x - -(** Return the collection of live blocks for a given block identifier. *) -let live_blocks (state : state) block = - let open Lwt_result_syntax in - let* chain = locate_blocks state block in - let segment, _ = List.split_n state.live_depth chain in - return - (List.fold_left - (fun set ({rpc_context; _} : block) -> - let hash = rpc_context.Tezos_protocol_environment.block_hash in - Block_hash.Set.add hash set) - (Block_hash.Set.of_list - [state.genesis_block_true_hash; genesis_predecessor_block_hash]) - segment) - -(** Extract the round number from raw fitness. *) -let round_from_raw_fitness raw_fitness = - let open Lwt_result_syntax in - match Protocol.Alpha_context.Fitness.from_raw raw_fitness with - | Ok fitness -> - return - (Alpha_context.Round.to_int32 - (Protocol.Alpha_context.Fitness.round fitness)) - | Error _ -> failwith "round_from_raw_fitness: cannot parse fitness" - -(** Extract level from a block header. *) -let get_block_level (block_header : Block_header.t) = - let open Lwt_result_syntax in - return block_header.shell.level - -(** Extract round from a block header. *) -let get_block_round (block_header : Block_header.t) = - round_from_raw_fitness block_header.shell.fitness - -(** Parse protocol data. *) -let parse_protocol_data (protocol_data : Bytes.t) = - let open Lwt_result_syntax in - match - Data_encoding.Binary.of_bytes_opt - Protocol.Alpha_context.Block_header.protocol_data_encoding - protocol_data - with - | None -> failwith "can't parse protocol data of a block" - | Some parsed_protocol_data -> return parsed_protocol_data - -(** Broadcast an operation or block according to the given propagation - vector. *) -let handle_propagation msg propagation_vector broadcast_pipes = - let open Lwt_result_syntax in - let*! () = - List.iter_s - (fun (propagation, pipe) -> - match propagation with - | Block -> Lwt.return_unit - | Pass -> - Lwt_pipe.Unbounded.push pipe msg ; - Lwt.return_unit - | Delay s -> - Lwt.dont_wait - (fun () -> - let*! () = Lwt_unix.sleep s in - Lwt_pipe.Unbounded.push pipe msg ; - Lwt.return_unit) - (fun _exn -> ()) ; - Lwt.return_unit) - (List.combine_drop propagation_vector broadcast_pipes) - in - return_unit - -(** Use the [user_hooks] to produce a module of functions that will perform - the heavy lifting for the RPC implementations. *) -let make_mocked_services_hooks (state : state) (user_hooks : (module Hooks)) : - Faked_services.hooks = - let open Lwt_result_syntax in - let module User_hooks = (val user_hooks : Hooks) in - let module Impl : Faked_services.Mocked_services_hooks = struct - type mempool = Mockup.M.Block_services.Mempool.t - - let monitor_validated_blocks () = - let next () = - let rec pop_until_ok () = - let*! block_hash, block_header, operations = - Lwt_pipe.Unbounded.pop state.validated_blocks_pipe - in - let*! result = - User_hooks.on_new_validated_block - ~block_hash - ~block_header - ~operations - in - match result with - | None -> pop_until_ok () - | Some (hash, head, operations) -> - Lwt.return_some (chain_id, hash, head, operations) - in - pop_until_ok () - in - let shutdown () = () in - Tezos_rpc.Answer.{next; shutdown} - - let monitor_heads () = - let next () = - let rec pop_until_ok () = - let*! block_hash, block_header = - Lwt_pipe.Unbounded.pop state.heads_pipe - in - (* Sleep a 0.1s to simulate a block application delay *) - let*! () = Lwt_unix.sleep 0.1 in - let*! head_opt = User_hooks.on_new_head ~block_hash ~block_header in - match head_opt with - | None -> pop_until_ok () - | Some head -> Lwt.return_some head - in - pop_until_ok () - in - let shutdown () = () in - Tezos_rpc.Answer.{next; shutdown} - - let monitor_bootstrapped () = - let first_run = ref true in - let next () = - if !first_run then ( - first_run := false ; - let b = match state.chain with [] -> assert false | b :: _ -> b in - let head_hash = b.rpc_context.block_hash in - let timestamp = b.rpc_context.block_header.timestamp in - Lwt.return_some (head_hash, timestamp)) - else Lwt.return_none - in - let shutdown () = () in - Tezos_rpc.Answer.{next; shutdown} - - let protocols (block : Tezos_shell_services.Block_services.block) = - let* x = locate_block state block in - let hash = x.rpc_context.block_hash in - let is_predecessor_of_genesis = - match block with - | `Hash (requested_hash, rel) -> - Int.equal rel 0 - && Block_hash.equal requested_hash genesis_predecessor_block_hash - | _ -> false - in - (* It is important to tell the baker that the genesis block is not in - the alpha protocol (we use Protocol_hash.zero). This will make the - baker not try to propose alternatives to that block and just accept - it as final in that Protocol_hash.zero protocol. The same for - predecessor of genesis, it should be in Protocol_hash.zero. *) - return - Tezos_shell_services.Block_services. - { - current_protocol = - (if - Block_hash.equal hash genesis_block_hash - || is_predecessor_of_genesis - then Protocol_hash.zero - else Protocol.hash); - next_protocol = - (if is_predecessor_of_genesis then Protocol_hash.zero - else Protocol.hash); - } - - let may_lie_on_proto_level block x = - (* As for ../protocols, the baker distinguishes activation - blocks from "normal" blocks by comparing the [proto_level] of - the shell header and its predecessor. If the predecessor's - one is different, it must mean that we are considering an - activation block and must not attest. Here, we do a bit of - hacking in order to return a different proto_level for the - predecessor of the genesis block which is considered as the - current protocol activation block. To perfectly mimic what is - supposed to happen, the first mocked up block created should - be made in the genesis protocol, however, it is not what's - done in the mockup mode. *) - let is_predecessor_of_genesis = - match block with - | `Hash (requested_hash, rel) -> - Int.equal rel 0 - && Block_hash.equal requested_hash genesis_predecessor_block_hash - | _ -> false - in - if is_predecessor_of_genesis then - { - x.rpc_context.block_header with - proto_level = pred x.rpc_context.block_header.proto_level; - } - else x.rpc_context.block_header - - let raw_header (block : Tezos_shell_services.Block_services.block) : - bytes tzresult Lwt.t = - let* x = locate_block state block in - let shell = may_lie_on_proto_level block x in - let protocol_data = - Data_encoding.Binary.to_bytes_exn - Protocol.block_header_data_encoding - x.protocol_data - in - return - (Data_encoding.Binary.to_bytes_exn - Tezos_base.Block_header.encoding - {shell; protocol_data}) - - let header (block : Tezos_shell_services.Block_services.block) : - Mockup.M.Block_services.block_header tzresult Lwt.t = - let* x = locate_block state block in - let shell = may_lie_on_proto_level block x in - return - { - Mockup.M.Block_services.hash = x.rpc_context.block_hash; - chain_id; - shell; - protocol_data = x.protocol_data; - } - - let resulting_context_hash - (block : Tezos_shell_services.Block_services.block) : - Context_hash.t tzresult Lwt.t = - let* x = locate_block state block in - return x.resulting_context_hash - - let operations block = - let* x = locate_block state block in - return x.operations - - let inject_block block_hash (block_header : Block_header.t) operations = - let* protocol_data = parse_protocol_data block_header.protocol_data in - let* level = get_block_level block_header in - let* round = get_block_round block_header in - let* block_hash1, block_header1, operations1, propagation_vector = - User_hooks.on_inject_block - ~level - ~round - ~block_hash - ~block_header - ~operations - ~protocol_data - in - handle_propagation - (Broadcast_block (block_hash1, block_header1, operations1)) - propagation_vector - state.broadcast_pipes - - let all_pipes_or_select = function - | None -> return state.broadcast_pipes - | Some l -> - List.map_es - (fun n -> - match List.nth_opt state.broadcast_pipes n with - | None -> - failwith - "Node number %d is out of range (max is %d)" - n - (List.length state.broadcast_pipes - 1) - | Some pipe -> return pipe) - l - - let broadcast_block ?dests block_hash (block_header : Block_header.t) - operations = - let* pipes = all_pipes_or_select dests in - let*! () = - List.iter_s - (fun pipe -> - Lwt_pipe.Unbounded.push - pipe - (Broadcast_block (block_hash, block_header, operations)) ; - Lwt.return_unit) - pipes - in - return_unit - - let inject_operation (Operation.{shell; proto} as op) = - let op_hash = Operation.hash op in - let proto_op_opt = - Data_encoding.Binary.of_bytes Protocol.operation_data_encoding proto - in - match proto_op_opt with - | Error _ -> failwith "inject_operation: cannot parse operation" - | Ok protocol_data -> - let op : Protocol.Alpha_context.packed_operation = - {shell; protocol_data} - in - let* op_hash1, op1, propagation_vector = - User_hooks.on_inject_operation ~op_hash ~op - in - let* () = - handle_propagation - (Broadcast_op (op_hash1, op1)) - propagation_vector - state.broadcast_pipes - in - return op_hash1 - - let broadcast_operation ?dests - (op : Protocol.Alpha_context.packed_operation) = - let* pipes = all_pipes_or_select dests in - let op_hash = Alpha_context.Operation.hash_packed op in - let*! () = - List.iter_s - (fun pipe -> - Lwt_pipe.Unbounded.push pipe (Broadcast_op (op_hash, op)) ; - Lwt.return_unit) - pipes - in - return_unit - - let pending_operations () = - let ops = state.mempool in - Lwt.return - Mockup.M.Block_services.Mempool. - { - validated = ops; - refused = Operation_hash.Map.empty; - outdated = Operation_hash.Map.empty; - branch_refused = Operation_hash.Map.empty; - branch_delayed = Operation_hash.Map.empty; - unprocessed = Operation_hash.Map.empty; - } - - let monitor_operations ~version ~validated ~branch_delayed ~branch_refused - ~refused = - ignore validated ; - ignore branch_delayed ; - ignore branch_refused ; - ignore refused ; - let streamed = ref false in - state.streaming_operations <- true ; - let next () = - let rec loop () = - let*! ops_opt = Lwt_stream.get state.operations_stream in - match ops_opt with - | None when !streamed -> Lwt.return_none - | None -> - streamed := true ; - Lwt.return_some (version, []) - | Some ops -> ( - let*! result = - List.filter_map_s User_hooks.on_new_operation ops - in - match result with - | [] -> loop () - | l -> Lwt.return_some (version, List.map (fun x -> (x, None)) l)) - in - loop () - in - let shutdown () = () in - Tezos_rpc.Answer.{next; shutdown} - - let rpc_context_callback block = - let* x = locate_block state block in - return x.rpc_context - - let list_blocks ~heads ~length ~min_date:_ = - let compare_block_fitnesses block0 block1 = - Fitness.compare - block0.rpc_context.block_header.fitness - block1.rpc_context.block_header.fitness - in - let hash_of_block block = block.rpc_context.block_hash in - let lookup_head head = - let* xs = locate_blocks state (`Hash (head, 0)) in - let segment = - match length with None -> xs | Some n -> List.take_n n xs - in - return - (List.map hash_of_block (List.sort compare_block_fitnesses segment)) - in - List.map_es lookup_head heads - - let live_blocks block = live_blocks state block - - let raw_protocol_data block = - let* x = locate_block state block in - return x.raw_protocol_data - end in - (module Impl) - -(** Return the current head. *) -let head {chain; _} = - let open Lwt_result_syntax in - match List.hd chain with - | None -> failwith "mockup_simulator.ml: empty chain" - | Some hd -> return hd - -(** Clear from the mempool operations whose branch does not point to - a live block with respect to the current head. *) -let clear_mempool state = - let open Lwt_result_syntax in - let* head = head state in - let included_ops_hashes = - List.map - (fun (op : Mockup.M.Block_services.operation) -> op.hash) - (List.flatten head.operations) - in - let* live_set = live_blocks state (`Head 0) in - let mempool = - List.filter - (fun (_oph, (op : Mockup.M.Protocol.operation)) -> - let included_in_head = - List.mem - ~equal:Operation_hash.equal - (Alpha_context.Operation.hash_packed op) - included_ops_hashes - in - Block_hash.Set.mem op.shell.branch live_set && not included_in_head) - state.mempool - in - state.mempool <- mempool ; - return_unit - -let begin_validation_and_application ctxt chain_id mode ~predecessor ~cache = - let open Lwt_result_syntax in - let* validation_state = - Mockup.M.Protocol.begin_validation ctxt chain_id mode ~predecessor ~cache - in - let* application_state = - Mockup.M.Protocol.begin_application ctxt chain_id mode ~predecessor ~cache - in - return (validation_state, application_state) - -let validate_and_apply_operation (validation_state, application_state) oph op = - let open Lwt_result_syntax in - let* validation_state = - Mockup.M.Protocol.validate_operation validation_state oph op - in - let* application_state, receipt = - Mockup.M.Protocol.apply_operation application_state oph op - in - return ((validation_state, application_state), receipt) - -let finalize_validation_and_application (validation_state, application_state) - shell_header = - let open Lwt_result_syntax in - let* () = Mockup.M.Protocol.finalize_validation validation_state in - Mockup.M.Protocol.finalize_application application_state shell_header - -(** Apply a block to the given [rpc_context]. *) -let reconstruct_context (rpc_context : Tezos_protocol_environment.rpc_context) - (operations : Operation.t list list) (block_header : Block_header.t) = - let open Lwt_result_syntax in - let predecessor = rpc_context.block_header in - let predecessor_context = rpc_context.context in - let* protocol_data = parse_protocol_data block_header.protocol_data in - let* state = - begin_validation_and_application - predecessor_context - chain_id - (Application {shell = block_header.shell; protocol_data}) - ~predecessor - ~cache:`Lazy - in - let i = ref 0 in - let* state, _ = - List.fold_left_es - (List.fold_left_es (fun (state, results) op -> - incr i ; - let oph = Operation.hash op in - let operation_data = - Data_encoding.Binary.of_bytes_exn - Mockup.M.Protocol.operation_data_encoding - op.Operation.proto - in - let op = - { - Mockup.M.Protocol.shell = op.shell; - protocol_data = operation_data; - } - in - let* state, receipt = validate_and_apply_operation state oph op in - return (state, receipt :: results))) - (state, []) - operations - in - finalize_validation_and_application state None - -(** Process an incoming block. If validation succeeds: - - update the current head to this new block - - cleanup outdated operations - - cleanup listener table - Note that this implementation does not handle concurrent branches. *) -let rec process_block state block_hash (block_header : Block_header.t) - operations = - let open Lwt_result_syntax in - let get_predecessor () = - let predecessor_hash = block_header.Block_header.shell.predecessor in - let* head = head state in - match Block_hash.Table.find state.chain_table predecessor_hash with - | None | Some [] -> ( - (* Even if the predecessor is not known locally, it might be known by - some node in the network. The code below "requests" information - about the block by its hash. *) - match - Block_hash.Table.find state.global_chain_table predecessor_hash - with - | None -> failwith "get_predecessor: unknown predecessor block" - | Some predecessor -> - let predecessor_block_header = - Block_header. - { - shell = predecessor.rpc_context.block_header; - protocol_data = predecessor.raw_protocol_data; - } - in - let predecessor_ops = - List.map - (fun xs -> - List.map - (fun (op : Mockup.M.Block_services.operation) -> - Operation. - { - shell = op.shell; - proto = - Data_encoding.Binary.to_bytes_exn - Protocol.operation_data_encoding - op.protocol_data; - }) - xs) - predecessor.operations - in - (* If the block is found, apply it before proceeding. *) - let* () = - process_block - state - predecessor.rpc_context.block_hash - predecessor_block_header - predecessor_ops - in - return predecessor) - | Some (predecessor :: _) -> - if - Int32.sub - head.rpc_context.block_header.level - predecessor.rpc_context.block_header.level - <= 2l - then return predecessor - else failwith "get_predecessor: the predecessor block is too old" - in - match Block_hash.Table.find state.chain_table block_hash with - | Some _ -> - (* The block is already known. *) - return_unit - | None -> - let* predecessor = get_predecessor () in - let* head = head state in - let* {context; message; _}, _ = - reconstruct_context predecessor.rpc_context operations block_header - in - let resulting_context_hash = - Tezos_context_ops.Context_ops.hash - ~time:block_header.shell.timestamp - ?message - context - in - let rpc_context = - Tezos_protocol_environment. - {context; block_hash; block_header = block_header.shell} - in - let operations = - List.map - (fun pass -> - List.map - (fun (Operation.{shell; proto} as op) -> - let hash : Operation_hash.t = Operation.hash op in - let protocol_data : Alpha_context.packed_protocol_data = - Data_encoding.Binary.of_bytes_exn - Protocol.operation_data_encoding - proto - in - { - Mockup.M.Block_services.chain_id; - hash; - shell; - protocol_data; - receipt = Empty; - }) - pass) - operations - in - let* protocol_data = parse_protocol_data block_header.protocol_data in - let new_block = - { - rpc_context; - protocol_data; - raw_protocol_data = block_header.protocol_data; - operations; - resulting_context_hash; - } - in - let predecessor_hash = block_header.Block_header.shell.predecessor in - let tail = - Block_hash.Table.find state.chain_table predecessor_hash - |> WithExceptions.Option.get ~loc:__LOC__ - in - let new_chain = new_block :: tail in - Block_hash.Table.replace state.chain_table block_hash new_chain ; - Block_hash.Table.replace state.global_chain_table block_hash new_block ; - Context_hash.Table.replace - state.ctxt_table - resulting_context_hash - rpc_context ; - if - Fitness.( - block_header.shell.fitness > head.rpc_context.block_header.fitness) - then ( - state.chain <- new_chain ; - let* () = clear_mempool state in - (* The head changed: notify that the stream ended. *) - state.operations_stream_push None ; - state.streaming_operations <- false ; - (* Instanciate a new stream *) - let operations_stream, operations_stream_push = Lwt_stream.create () in - state.operations_stream <- operations_stream ; - state.operations_stream_push <- operations_stream_push ; - state.operations_stream_push (Some state.mempool) ; - return_unit) - else return_unit - -(** This process listens to broadcast block and operations and incorporates - them in the context of the fake node. *) -let rec listener ~(user_hooks : (module Hooks)) ~state ~broadcast_pipe = - let open Lwt_result_syntax in - let module User_hooks = (val user_hooks : Hooks) in - let*! result = Lwt_pipe.Unbounded.pop broadcast_pipe in - match result with - | Broadcast_op (operation_hash, packed_operation) -> - let* () = - if - List.mem_assoc - ~equal:Operation_hash.equal - operation_hash - state.mempool - then return_unit - else ( - state.mempool <- (operation_hash, packed_operation) :: state.mempool ; - state.operations_stream_push - (Some [(operation_hash, packed_operation)]) ; - User_hooks.check_mempool_after_processing ~mempool:state.mempool) - in - listener ~user_hooks ~state ~broadcast_pipe - | Broadcast_block (block_hash, block_header, operations) -> - let* level = get_block_level block_header in - let* round = get_block_round block_header in - let* protocol_data = parse_protocol_data block_header.protocol_data in - let* () = - User_hooks.check_block_before_processing - ~level - ~round - ~block_hash - ~block_header - ~protocol_data - in - let* () = process_block state block_hash block_header operations in - let* () = - User_hooks.check_chain_after_processing ~level ~round ~chain:state.chain - in - Lwt_pipe.Unbounded.push - state.validated_blocks_pipe - (block_hash, block_header, operations) ; - Lwt_pipe.Unbounded.push state.heads_pipe (block_hash, block_header) ; - listener ~user_hooks ~state ~broadcast_pipe - -(** Create a fake node state. *) -let create_fake_node_state ~i ~live_depth - ~(genesis_block : Block_header.t * Tezos_protocol_environment.rpc_context) - ~global_chain_table ~broadcast_pipes = - let open Lwt_result_syntax in - let block_header0, rpc_context0 = genesis_block in - let* protocol_data = parse_protocol_data block_header0.protocol_data in - let genesis0 = - { - rpc_context = rpc_context0; - protocol_data; - raw_protocol_data = block_header0.protocol_data; - operations = [[]; []; []; []]; - resulting_context_hash = block_header0.shell.context; - } - in - let chain0 = [genesis0] in - let validated_blocks_pipe = Lwt_pipe.Unbounded.create () in - let heads_pipe = Lwt_pipe.Unbounded.create () in - let operations_stream, operations_stream_push = Lwt_stream.create () in - let genesis_block_true_hash = - Block_header.hash - { - shell = rpc_context0.block_header; - protocol_data = block_header0.protocol_data; - } - in - (* Only push genesis block as a new head, not a valid block: it is - the shell's semantics to not advertise "transition" blocks. *) - Lwt_pipe.Unbounded.push heads_pipe (rpc_context0.block_hash, block_header0) ; - return - { - instance_index = i; - live_depth; - mempool = []; - chain = chain0; - chain_table = - Block_hash.Table.of_seq - (List.to_seq - [ - (rpc_context0.block_hash, chain0); - (genesis_block_true_hash, chain0); - (genesis_predecessor_block_hash, chain0); - ]); - global_chain_table; - ctxt_table = - Context_hash.Table.of_seq - (List.to_seq - [ - ( rpc_context0.Tezos_protocol_environment.block_header - .Block_header.context, - rpc_context0 ); - ]); - validated_blocks_pipe; - heads_pipe; - operations_stream; - operations_stream_push; - streaming_operations = false; - broadcast_pipes; - genesis_block_true_hash; - } - -class tezt_printer : Tezos_client_base.Client_context.printer = - let open Tezos_client_base in - let open Client_context in - let wrap_tezt_log : (_ format4 -> _) -> _ format4 -> _ = - fun f x -> - Format.kasprintf - (fun msg -> - f "%s" msg ; - Lwt.return_unit) - x - in - object - method error : type a b. (a, b) lwt_format -> a = - Format.kasprintf (fun msg -> Lwt.fail (Failure msg)) - - method warning : type a. (a, unit) lwt_format -> a = - wrap_tezt_log Tezt_core.Log.warn - - method message : type a. (a, unit) lwt_format -> a = - wrap_tezt_log (fun x -> Tezt_core.Log.info x) - - method answer : type a. (a, unit) lwt_format -> a = - wrap_tezt_log (fun x -> Tezt_core.Log.info x) - - method log : type a. string -> (a, unit) lwt_format -> a = - fun _log_output -> wrap_tezt_log (fun x -> Tezt_core.Log.info x) - end - -(** Start baker process. *) -let baker_process ~(delegates : Baking_state.consensus_key list) ~base_dir - ~(genesis_block : Block_header.t * Tezos_protocol_environment.rpc_context) - ~i ~global_chain_table ~broadcast_pipes ~(user_hooks : (module Hooks)) = - let open Lwt_result_syntax in - let broadcast_pipe = - List.nth broadcast_pipes i |> WithExceptions.Option.get ~loc:__LOC__ - in - let* state = - create_fake_node_state - ~i - ~live_depth:60 - ~genesis_block - ~global_chain_table - ~broadcast_pipes - in - let filesystem = String.Hashtbl.create 10 in - let wallet = new Faked_client_context.faked_io_wallet ~base_dir ~filesystem in - let cctxt = - let hooks = make_mocked_services_hooks state user_hooks in - new Protocol_client_context.wrap_full - (new Faked_client_context.unix_faked - ~base_dir - ~filesystem - ~chain_id - ~hooks) - in - let module User_hooks = (val user_hooks : Hooks) in - let*! () = User_hooks.on_start_baker ~baker_position:i ~delegates ~cctxt in - let* () = - List.iter_es - (fun ({alias; public_key; public_key_hash; secret_key_uri} : - Baking_state.consensus_key) -> - let open Tezos_client_base in - let name = alias |> WithExceptions.Option.get ~loc:__LOC__ in - let* public_key_uri = Client_keys.neuterize secret_key_uri in - Client_keys.register_key - wallet - ~force:false - (public_key_hash, public_key_uri, secret_key_uri) - ~public_key - name) - delegates - in - let context_index = - let open Abstract_context_index in - { - sync_fun = Lwt.return; - checkout_fun = - (fun hash -> - Context_hash.Table.find state.ctxt_table hash - |> Option.map (fun Tezos_protocol_environment.{context; _} -> context) - |> Lwt.return); - finalize_fun = Lwt.return; - } - in - let module User_hooks = (val user_hooks : Hooks) in - let listener_process () = listener ~user_hooks ~state ~broadcast_pipe in - let stop_on_event event = User_hooks.stop_on_event event in - let baker_process () = - Faked_daemon.Baker.run - ~cctxt - ~stop_on_event - ~chain_id - ~context_index - ~delegates - in - let* () = Lwt.pick [listener_process (); baker_process ()] in - User_hooks.check_chain_on_success ~chain:state.chain - -let genesis_protocol_data (baker_sk : Signature.secret_key) - (predecessor_hash : Block_hash.t) (block_header : Block_header.shell_header) - : Bytes.t = - let proof_of_work_nonce = - Bytes.create Protocol.Alpha_context.Constants.proof_of_work_nonce_size - in - let payload_hash = - Protocol.Alpha_context.Block_payload.hash - ~predecessor_hash - ~payload_round:Alpha_context.Round.zero - [] - in - let per_block_votes = - { - Protocol.Per_block_votes_repr.liquidity_baking_vote = - Baking_configuration.default_votes_config - .Baking_configuration.liquidity_baking_vote; - adaptive_issuance_vote = - Baking_configuration.default_votes_config - .Baking_configuration.adaptive_issuance_vote; - } - in - let contents = - Protocol.Alpha_context.Block_header. - { - payload_hash; - payload_round = Alpha_context.Round.zero; - proof_of_work_nonce; - seed_nonce_hash = None; - per_block_votes; - } - in - let unsigned_header = - Data_encoding.Binary.to_bytes_exn - Protocol.Alpha_context.Block_header.unsigned_encoding - (block_header, contents) - in - let signature = - Signature.sign - ~watermark: - Alpha_context.Block_header.(to_watermark (Block_header chain_id)) - baker_sk - unsigned_header - in - Data_encoding.Binary.to_bytes_exn - Protocol.Alpha_context.Block_header.protocol_data_encoding - {contents; signature} - -(** Figure out who should be the signer for the genesis block. *) -let deduce_baker_sk - (accounts_with_secrets : - (Protocol.Alpha_context.Parameters.bootstrap_account - * Tezos_mockup_commands.Mockup_wallet.bootstrap_secret) - list) (total_accounts : int) (level : int) : - Signature.secret_key tzresult Lwt.t = - let open Lwt_result_syntax in - let* baker_index = - match (total_accounts, level) with - | _, 0 -> return 0 (* apparently this doesn't really matter *) - | _ -> - failwith - "cannot deduce baker for a genesis block, total accounts = %d, level \ - = %d" - total_accounts - level - in - let _, secret = - List.nth accounts_with_secrets baker_index - |> WithExceptions.Option.get ~loc:__LOC__ - in - let secret_key = - Signature.Secret_key.of_b58check_exn (Uri.path (secret.sk_uri :> Uri.t)) - in - return secret_key - -(** Generate the two initial genesis blocks. *) -let make_genesis_context ~delegate_selection ~initial_seed ~round0 ~round1 - ~consensus_committee_size ~consensus_threshold accounts_with_secrets - (total_accounts : int) = - let open Lwt_result_syntax in - let default_constants = Mockup.Protocol_parameters.default_value.constants in - let round_durations = - let open Alpha_context in - Stdlib.Option.get - (Round.Durations.create_opt - ~first_round_duration:(Period.of_seconds_exn round0) - ~delay_increment_per_round: - (Period.of_seconds_exn (Int64.sub round1 round0))) - in - let constants = - { - default_constants with - initial_seed; - consensus_committee_size; - consensus_threshold; - minimal_block_delay = Alpha_context.Period.of_seconds_exn (max 1L round0); - delay_increment_per_round = - Alpha_context.Period.of_seconds_exn Int64.(max 1L (sub round1 round0)); - } - in - let from_bootstrap_account i - ( (account : Protocol.Alpha_context.Parameters.bootstrap_account), - (secret : Tezos_mockup_commands.Mockup_wallet.bootstrap_secret) ) : - Mockup.Parsed_account.t = - { - name = Format.sprintf "bootstrap%d" (i + 1); - sk_uri = secret.sk_uri; - amount = account.amount; - } - in - let bootstrap_accounts = - Data_encoding.Json.construct - (Data_encoding.list Mockup.Parsed_account.encoding) - (List.mapi from_bootstrap_account accounts_with_secrets) - in - let*? delegate_selection = - let open Result_syntax in - List.map_e - (fun (level, round_delegates) -> - let* level = Raw_level_repr.of_int32 level in - let+ round_delegates = - List.map_e - (fun (round, delegate) -> - let+ round = Round_repr.of_int32 round in - (round, delegate)) - round_delegates - in - (level, round_delegates)) - delegate_selection - |> Environment.wrap_tzresult - in - let cctxt = new tezt_printer in - let* initial_seed = - match (delegate_selection, constants.initial_seed) with - | [], seed_opt -> return seed_opt - | selection, (Some _ as seed) -> ( - let*! () = cctxt#message "Checking provided seed." in - let* result = - Tenderbrute.check_seed - ~bootstrap_accounts_json:bootstrap_accounts - ~parameters: - Mockup.Protocol_parameters.{default_value with constants} - ~seed - selection - in - match result with - | true -> return seed - | false -> - failwith "Provided initial seed does not match delegate selection") - | _, None -> - let*! () = cctxt#message "No initial seed provided, bruteforcing." in - Tenderbrute.bruteforce - ~max:100_000_000_000 - ~bootstrap_accounts_json:bootstrap_accounts - ~parameters:Mockup.Protocol_parameters.{default_value with constants} - delegate_selection - in - let*! () = - match initial_seed with - | None -> Lwt.return_unit - | _ when initial_seed = constants.initial_seed -> Lwt.return_unit - | Some seed -> - cctxt#warning - "Bruteforced seed is %a, please save into your test." - State_hash.pp - seed - in - let constants = {constants with initial_seed} in - let common_parameters = - Mockup.Protocol_parameters.{default_value with constants} - in - let make_block0 initial_timestamp = - let parameters = {common_parameters with initial_timestamp} in - let reencoded_parameters = - Data_encoding.Binary.of_bytes_exn Mockup.M.parameters_encoding - @@ Data_encoding.Binary.to_bytes_exn - Mockup.Protocol_parameters.encoding - parameters - in - let* {chain = _; rpc_context = rpc_context0; protocol_data = _} = - Mockup.M.init - ~cctxt - ~parameters:reencoded_parameters - ~constants_overrides_json:None - ~bootstrap_accounts_json:(Some bootstrap_accounts) - in - let block_header0 = - { - rpc_context0.block_header with - predecessor = genesis_predecessor_block_hash; - } - in - let rpc_context = {rpc_context0 with block_header = block_header0} in - let* baker_sk = deduce_baker_sk accounts_with_secrets total_accounts 0 in - let protocol_data = - genesis_protocol_data - baker_sk - genesis_predecessor_block_hash - rpc_context.block_header - in - let block_header = - Block_header.{shell = rpc_context.block_header; protocol_data} - in - return (block_header, rpc_context) - in - let level0_round0_duration = - Protocol.Alpha_context.Round.round_duration - round_durations - Alpha_context.Round.zero - in - let timestamp0 = - Time.Protocol.of_seconds - Int64.( - sub - (of_float (Unix.time ())) - (Alpha_context.Period.to_seconds level0_round0_duration)) - in - make_block0 timestamp0 - -(** By default, propagate every message everywhere. *) -let default_propagation_vector = List.repeat 5 Pass - -module Default_hooks : Hooks = struct - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - let open Lwt_result_syntax in - return (block_hash, block_header, operations, default_propagation_vector) - - let on_inject_operation ~op_hash ~op = - let open Lwt_result_syntax in - return (op_hash, op, default_propagation_vector) - - let on_new_validated_block ~block_hash ~block_header ~operations = - Lwt.return_some (block_hash, block_header, operations) - - let on_new_head ~block_hash ~block_header = - Lwt.return_some (block_hash, block_header) - - let on_new_operation x = Lwt.return_some x - - let check_block_before_processing ~level:_ ~round:_ ~block_hash:_ - ~block_header:_ ~protocol_data:_ = - Lwt_result_syntax.return_unit - - let check_chain_after_processing ~level:_ ~round:_ ~chain:_ = - Lwt_result_syntax.return_unit - - let check_mempool_after_processing ~mempool:_ = Lwt_result_syntax.return_unit - - let stop_on_event _ = false - - let on_start_baker ~baker_position:_ ~delegates:_ ~cctxt:_ = Lwt.return_unit - - let check_chain_on_success ~chain:_ = Lwt_result_syntax.return_unit -end - -type config = { - round0 : int64; - round1 : int64; - timeout : int; - delegate_selection : (int32 * (int32 * Signature.public_key_hash) list) list; - initial_seed : State_hash.t option; - consensus_committee_size : int; - consensus_threshold : int; -} - -let default_config = - { - round0 = 2L; - (* Rounds should be long enough for the bakers to - exchange all the necessary messages. *) - round1 = 3L (* No real need to increase round durations. *); - timeout = 30; - delegate_selection = []; - initial_seed = None; - consensus_committee_size = - Default_parameters.constants_mainnet.consensus_committee_size; - consensus_threshold = - Default_parameters.constants_mainnet.consensus_threshold; - } - -let make_baking_delegate - ( (account : Alpha_context.Parameters.bootstrap_account), - (secret : Tezos_mockup_commands.Mockup_wallet.bootstrap_secret) ) : - Baking_state.consensus_key = - Baking_state. - { - alias = Some secret.name; - public_key = account.public_key |> WithExceptions.Option.get ~loc:__LOC__; - public_key_hash = account.public_key_hash; - secret_key_uri = secret.sk_uri; - } - -let run ?(config = default_config) bakers_spec = - let open Lwt_result_syntax in - Tezos_client_base.Client_keys.register_signer - (module Tezos_signer_backends.Unencrypted) ; - let total_accounts = - List.fold_left (fun acc (n, _) -> acc + n) 0 bakers_spec - in - if total_accounts = 0 then - failwith "the simulation should use at least one delegate" - else if total_accounts > 5 then - failwith "only up to 5 bootstrap accounts are available" - else - let total_bakers = List.length bakers_spec in - let* broadcast_pipes = - List.init ~when_negative_length:() total_bakers (fun _ -> - Lwt_pipe.Unbounded.create ()) - |> function - | Error () -> failwith "impossible: negative length of the baker spec" - | Ok xs -> return xs - in - let global_chain_table = Block_hash.Table.create 10 in - let* bootstrap_secrets = - Tezos_mockup_commands.Mockup_wallet.default_bootstrap_accounts - in - let accounts_with_secrets = - List.combine_drop (List.take_n total_accounts accounts) bootstrap_secrets - in - let all_delegates = List.map make_baking_delegate accounts_with_secrets in - let* genesis_block = - make_genesis_context - ~delegate_selection:config.delegate_selection - ~initial_seed:config.initial_seed - ~round0:config.round0 - ~round1:config.round1 - ~consensus_committee_size:config.consensus_committee_size - ~consensus_threshold:config.consensus_threshold - accounts_with_secrets - total_accounts - in - let take_third (_, _, x) = x in - let timeout_process () = - let*! () = Lwt_unix.sleep (Float.of_int config.timeout) in - failwith "the test is taking longer than %d seconds@." config.timeout - in - Lwt.pick - [ - timeout_process (); - Lwt_result_syntax.tzjoin - (take_third - (List.fold_left - (fun (i, delegates_acc, ms) (n, user_hooks) -> - let delegates, leftover_delegates = - List.split_n n delegates_acc - in - let m = - baker_process - ~delegates - ~base_dir:"dummy" - ~genesis_block - ~i - ~global_chain_table - ~broadcast_pipes - ~user_hooks - in - (i + 1, leftover_delegates, m :: ms)) - (0, all_delegates, []) - bakers_spec)); - ] - -let get_account_pk i = - match List.nth accounts i with - | None -> assert false - | Some acc -> acc.public_key |> WithExceptions.Option.get ~loc:__LOC__ - -let bootstrap1 = get_account_pk 0 - -let bootstrap2 = get_account_pk 1 - -let bootstrap3 = get_account_pk 2 - -let bootstrap4 = get_account_pk 3 - -let bootstrap5 = get_account_pk 4 - -let check_block_signature ~block_hash ~(block_header : Block_header.t) - ~public_key = - let open Lwt_result_syntax in - let (protocol_data : Protocol.Alpha_context.Block_header.protocol_data) = - Data_encoding.Binary.of_bytes_exn - Protocol.Alpha_context.Block_header.protocol_data_encoding - block_header.protocol_data - in - let unsigned_header = - Data_encoding.Binary.to_bytes_exn - Protocol.Alpha_context.Block_header.unsigned_encoding - (block_header.shell, protocol_data.contents) - in - if - Signature.check - ~watermark: - Alpha_context.Block_header.(to_watermark (Block_header chain_id)) - public_key - protocol_data.signature - unsigned_header - then return_unit - else - failwith - "unexpected signature for %a; tried with %a@." - Block_hash.pp - block_hash - Signature.Public_key.pp - public_key - -type op_predicate = - Operation_hash.t -> Alpha_context.packed_operation -> bool tzresult Lwt.t - -let mempool_count_ops ~mempool ~predicate = - let open Lwt_result_syntax in - let* results = - List.map_es (fun (op_hash, op) -> predicate op_hash op) mempool - in - return - (List.fold_left - (fun acc result -> if result then acc + 1 else acc) - 0 - results) - -let mempool_has_op ~mempool ~predicate = - let open Lwt_result_syntax in - let* n = mempool_count_ops ~mempool ~predicate in - return (n > 0) - -let mempool_has_op_ref ~mempool ~predicate ~var = - let open Lwt_result_syntax in - let* result = mempool_has_op ~mempool ~predicate in - if result then var := true ; - return_unit - -let op_is_signed_by ~public_key (op_hash : Operation_hash.t) - (op : Alpha_context.packed_operation) = - let open Lwt_result_syntax in - match op.protocol_data with - | Operation_data d -> ( - let* watermark = - match d.contents with - | Single op_contents -> - return - (match op_contents with - | Attestation _ -> - Alpha_context.Operation.to_watermark (Attestation chain_id) - | Preattestation _ -> - Alpha_context.Operation.to_watermark (Preattestation chain_id) - | _ -> Signature.Generic_operation) - | _ -> failwith "unexpected contents in %a@." Operation_hash.pp op_hash - in - match d.signature with - | None -> - failwith - "did not find a signature for op %a@." - Operation_hash.pp - op_hash - | Some signature -> - let unsigned_operation_bytes = - Data_encoding.Binary.to_bytes_exn - Protocol.Alpha_context.Operation.unsigned_encoding - (op.shell, Contents_list d.contents) - in - return - (Signature.check - ~watermark - public_key - signature - unsigned_operation_bytes)) - -let op_is_preattestation ?level ?round (op_hash : Operation_hash.t) - (op : Alpha_context.packed_operation) = - let open Lwt_result_syntax in - match op.protocol_data with - | Operation_data d -> ( - match d.contents with - | Single op_contents -> ( - match op_contents with - | Preattestation consensus_content -> - let right_level = - match level with - | None -> true - | Some expected_level -> - Int32.equal - (Alpha_context.Raw_level.to_int32 consensus_content.level) - expected_level - in - let right_round = - match round with - | None -> true - | Some expected_round -> - Int32.equal - (Alpha_context.Round.to_int32 consensus_content.round) - expected_round - in - return (right_level && right_round) - | _ -> return_false) - | _ -> failwith "unexpected contents in %a@." Operation_hash.pp op_hash) - -let op_is_attestation ?level ?round (op_hash : Operation_hash.t) - (op : Alpha_context.packed_operation) = - let open Lwt_result_syntax in - match op.protocol_data with - | Operation_data d -> ( - match d.contents with - | Single op_contents -> ( - match op_contents with - | Attestation {consensus_content; _} -> - let right_level = - match level with - | None -> true - | Some expected_level -> - Int32.equal - (Alpha_context.Raw_level.to_int32 consensus_content.level) - expected_level - in - let right_round = - match round with - | None -> true - | Some expected_round -> - Int32.equal - (Alpha_context.Round.to_int32 consensus_content.round) - expected_round - in - return (right_level && right_round) - | _ -> return_false) - | _ -> failwith "unexpected contents in %a@." Operation_hash.pp op_hash) - -let op_is_both f g op_hash op = - let open Lwt_result_syntax in - let* f_result = f op_hash op in - if f_result then g op_hash op else return_false - -let save_proposal_payload - ~(protocol_data : Alpha_context.Block_header.protocol_data) ~var = - let open Lwt_result_syntax in - var := - Some - (protocol_data.contents.payload_hash, protocol_data.contents.payload_round) ; - return_unit - -let verify_payload_hash - ~(protocol_data : Alpha_context.Block_header.protocol_data) - ~original_proposal ~message = - let open Lwt_result_syntax in - match !original_proposal with - | None -> - failwith - "verify_payload_hash: expected to have observed a proposal by now" - | Some (original_hash, original_round) -> - if - Protocol.Block_payload_hash.equal - original_hash - protocol_data.contents.payload_hash - && Protocol.Alpha_context.Round.equal - original_round - protocol_data.contents.payload_round - then return_unit - else failwith "verify_payload_hash: %s" message - -let get_block_round block = - round_from_raw_fitness block.rpc_context.block_header.fitness diff --git a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/mockup_simulator.mli b/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/mockup_simulator.mli deleted file mode 100644 index e02ec3519701b66f582f50137d68bb0c1a7fb2cb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/mockup_simulator/mockup_simulator.mli +++ /dev/null @@ -1,253 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Representation of a block in the simulator. *) -type block = { - rpc_context : Tezos_protocol_environment.rpc_context; - protocol_data : Protocol.Alpha_context.Block_header.protocol_data; - raw_protocol_data : Bytes.t; - operations : Mockup.M.Block_services.operation list list; - resulting_context_hash : Context_hash.t; -} - -(** Chain is a list of blocks. *) -type chain = block list - -(** How an operation or block should propagate through the network. *) -type propagation = - | Block (** Block the operation/block, it'll never be delivered. *) - | Pass (** Pass the operation/block as is. *) - | Delay of float - (** Delay the operation/block for the given number of seconds. *) - -(** Values of this type specify to which bakers a block or operation should - be delivered. *) -type propagation_vector = propagation list - -(** The way to control behavior of a mockup node. *) -module type Hooks = sig - (** This function is called on injection of a block by a particular baker. - It allows us to inspect, change, or discard the block. Calling the - injection RPC and actually updating the state of the mockup node are - two different operations. Normally the first entails the latter, but - not always. In particular, the [propagation_vector] controls what - bakers will see and incorporate the block. *) - val on_inject_block : - level:int32 -> - round:int32 -> - block_hash:Block_hash.t -> - block_header:Block_header.t -> - operations:Operation.t list list -> - protocol_data:Alpha_context.Block_header.protocol_data -> - (Block_hash.t * Block_header.t * Operation.t list list * propagation_vector) - tzresult - Lwt.t - - (** This function is called on injection of an operation. It is similar - to [on_inject_block], which see. *) - val on_inject_operation : - op_hash:Operation_hash.t -> - op:Alpha_context.packed_operation -> - (Operation_hash.t * Alpha_context.packed_operation * propagation_vector) - tzresult - Lwt.t - - (** This is called when a new validated block is going to be sent as - the response to a "monitor validated blocks" RPC call. Returning - [None] here terminates the process for the baker. *) - val on_new_validated_block : - block_hash:Block_hash.t -> - block_header:Block_header.t -> - operations:Operation.t list list -> - (Block_hash.t * Block_header.t * Operation.t list list) option Lwt.t - - (** This is called when a new head is going to be sent as the response to - a "monitor heads" RPC call. Returning [None] here terminates the - process for the baker. *) - val on_new_head : - block_hash:Block_hash.t -> - block_header:Block_header.t -> - (Block_hash.t * Block_header.t) option Lwt.t - - (** This is called when a new operation is going to be sent as the - response to a "monitor operations" RPC call. Returning [None] here - indicates that the node has advanced to the next level. *) - val on_new_operation : - Operation_hash.t * Alpha_context.packed_operation -> - (Operation_hash.t * Alpha_context.packed_operation) option Lwt.t - - (** Check a block before processing it in the mockup. *) - val check_block_before_processing : - level:int32 -> - round:int32 -> - block_hash:Block_hash.t -> - block_header:Block_header.t -> - protocol_data:Alpha_context.Block_header.protocol_data -> - unit tzresult Lwt.t - - (** Check the chain after processing a proposal. *) - val check_chain_after_processing : - level:int32 -> round:int32 -> chain:chain -> unit tzresult Lwt.t - - (** Check operations in the mempool after injecting an operation. *) - val check_mempool_after_processing : - mempool:(Operation_hash.t * Mockup.M.Protocol.operation) list -> - unit tzresult Lwt.t - - (** This hook is used to decide when the baker is supposed to shut down. - It is triggered by receiving an event. *) - val stop_on_event : Baking_state.event -> bool - - (** This hook is used to gather information on the baker when it is - started (usually recording for later use). The first argument - [baker_position], is the position of the baker in the list of - bakers that were started for this run. *) - val on_start_baker : - baker_position:int -> - delegates:Baking_state.consensus_key list -> - cctxt:Protocol_client_context.full -> - unit Lwt.t - - (** Check to run on the chain upon successful termination. *) - val check_chain_on_success : chain:chain -> unit tzresult Lwt.t -end - -(** The default hook implementation. *) -module Default_hooks : Hooks - -(** Simulation configuration. *) -type config = { - round0 : int64; (** Duration of the round 0 in seconds. *) - round1 : int64; (** Duration of the round 1 in seconds. *) - timeout : int; - (** Maximal duration of the test. If the test takes - longer to terminate it'll be aborted with an - error. *) - delegate_selection : (int32 * (int32 * Signature.public_key_hash) list) list; - (** Desired selection of delegates per level/round *) - initial_seed : State_hash.t option; - (** Optional initial seed for protocol (used to control delegate selection) *) - consensus_committee_size : int; - (** Size of the committee for tenderbake in number of slots *) - consensus_threshold : int; - (** Threshold, in number of slots, for the quorum to be considered - reached. Should be [2 * consensus_committee_size / 3 + 1] in - usual setting for tenderbake. *) -} - -(** Default configuration. *) -val default_config : config - -(** [run spec] runs a simulation according to the [spec]. Elements of [spec] - describe bakers: how many delegate each baker has and how it behaves. The - total number of delegates cannot exceed 5 for now (it is easy to increase - this limit). The delegates are assigned in order, gradually exhausting - the standard bootstrap accounts. For example, if the first baker has 3 - delegates and the second one has 2 delegates, we have the following - distribution of bootstrap accounts: - - Baker no. 1: bootstrap1, bootstrap2, bootstrap3 - - Baker no. 2: bootstrap4, bootstrap5 - - A simulation continues till all nodes finish either with an error or - successfully. If at least one node finishes with an error, it propagates - to the final result. *) -val run : ?config:config -> (int * (module Hooks)) list -> unit tzresult Lwt.t - -val bootstrap1 : Signature.public_key - -val bootstrap2 : Signature.public_key - -val bootstrap3 : Signature.public_key - -val bootstrap4 : Signature.public_key - -val bootstrap5 : Signature.public_key - -(** Check if a block header is signed by a given delegate. *) -val check_block_signature : - block_hash:Block_hash.t -> - block_header:Block_header.t -> - public_key:Signature.public_key -> - unit tzresult Lwt.t - -(** A shortcut type for predicates on operations. *) -type op_predicate = - Operation_hash.t -> Alpha_context.packed_operation -> bool tzresult Lwt.t - -(** Count the number of operations in the mempool that satisfy the given - predicate. *) -val mempool_count_ops : - mempool:(Operation_hash.t * Mockup.M.Protocol.operation) list -> - predicate:op_predicate -> - int tzresult Lwt.t - -(** Check if the mempool has at least one operation that satisfies the given - predicate. *) -val mempool_has_op : - mempool:(Operation_hash.t * Mockup.M.Protocol.operation) list -> - predicate:op_predicate -> - bool tzresult Lwt.t - -(** Similar to [mempool_has_op] but instead of returning a [bool] it sets - the given [bool ref]. *) -val mempool_has_op_ref : - mempool:(Operation_hash.t * Mockup.M.Protocol.operation) list -> - predicate:op_predicate -> - var:bool ref -> - unit tzresult Lwt.t - -(** Check if an operation is signed by the given delegate. *) -val op_is_signed_by : public_key:Signature.public_key -> op_predicate - -(** Check that an operation is a preattestation. *) -val op_is_preattestation : ?level:int32 -> ?round:int32 -> op_predicate - -(** Check that an operation is an attestation. *) -val op_is_attestation : ?level:int32 -> ?round:int32 -> op_predicate - -(** Combine two predicates. *) -val op_is_both : op_predicate -> op_predicate -> op_predicate - -(** Set the given variable to save payload hash and payload round. *) -val save_proposal_payload : - protocol_data:Alpha_context.Block_header.protocol_data -> - var:(Block_payload_hash.t * Alpha_context.Round.t) option ref -> - unit tzresult Lwt.t - -(** Check that payload hashes match, fail if it is not the case. *) -val verify_payload_hash : - protocol_data:Alpha_context.Block_header.protocol_data -> - original_proposal:(Block_payload_hash.t * Alpha_context.Round.t) option ref -> - message:string -> - unit tzresult Lwt.t - -(** Parse protocol data. *) -val parse_protocol_data : - Bytes.t -> Alpha_context.Block_header.protocol_data tzresult Lwt.t - -(** Get round of a block. *) -val get_block_round : block -> int32 tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/dune b/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/dune deleted file mode 100644 index e9661434fc68012886a475628258907c3cf659de..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/dune +++ /dev/null @@ -1,23 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(executable - (name tenderbrute_main) - (libraries - octez-libs.base - octez-shell-libs.client-base - octez-protocol-019-PtParisB-libs.client - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.baking.tenderbrute) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp) - (-linkall)) - (flags - (:standard) - -open Tezos_base.TzPervasives - -open Tezos_base - -open Tezos_client_base - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tenderbrute_019_PtParisB)) diff --git a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/dune b/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/dune deleted file mode 100644 index a119a5e65fa3fb7026f4d742b29d054857c09926..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/dune +++ /dev/null @@ -1,21 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name tenderbrute_019_PtParisB) - (public_name octez-protocol-019-PtParisB-libs.baking.tenderbrute) - (libraries - octez-libs.data-encoding - octez-libs.base - octez-libs.base.unix - tezos-protocol-019-PtParisB.protocol - octez-shell-libs.client-base - octez-protocol-019-PtParisB-libs.client) - (flags - (:standard) - -open Data_encoding - -open Tezos_base.TzPervasives - -open Tezos_base - -open Tezos_protocol_019_PtParisB - -open Tezos_client_base - -open Tezos_client_019_PtParisB)) diff --git a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/tenderbrute.ml b/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/tenderbrute.ml deleted file mode 100644 index 3feb1ddcf0254b5ad9d1f81b1c64dcce2f3535dd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/tenderbrute.ml +++ /dev/null @@ -1,229 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -type delegate_selection = - (Raw_level_repr.t * (Round_repr.t * Signature.public_key_hash) list) list - -module LevelRoundMap = Map.Make (struct - type t = Level_repr.t * Round_repr.t - - let compare (l1, r1) (l2, r2) = - Stdlib.compare - (Raw_level_repr.to_int32 l1.Level_repr.level, Round_repr.to_int32 r1) - (Raw_level_repr.to_int32 l2.Level_repr.level, Round_repr.to_int32 r2) -end) - -let _ = Client_keys.register_signer (module Tezos_signer_backends.Unencrypted) - -(* Initialize a context in memory with the Mockup *) -let init_context ?constants_overrides_json ?bootstrap_accounts_json parameters = - let open Lwt_result_syntax in - let parameters = - Data_encoding.Binary.of_bytes_exn Mockup.M.parameters_encoding - @@ Data_encoding.Binary.to_bytes_exn - Mockup.Protocol_parameters.encoding - parameters - in - let* mockup_init = - Mockup.M.init - ~cctxt:Client_context.null_printer - ~parameters - ~constants_overrides_json - ~bootstrap_accounts_json - in - let ctxt = mockup_init.rpc_context.context in - let timestamp = Time.Protocol.of_seconds 0L in - (* The timestamp is irrelevant for the rights *) - let*! result = - Raw_context.prepare - ctxt - ~level:1l - ~predecessor_timestamp:timestamp - ~timestamp - ~adaptive_issuance_enable:false - in - Lwt.return @@ Environment.wrap_tzresult result - -(* Change the initial seed for the first preserved cycles. This suppose that the - seeds for these cycles are already set, which is the case because this - function is always called after {!init_context}. *) -let change_seed ?initial_seed ctxt = - let open Lwt_result_syntax in - let delay = Constants_storage.consensus_rights_delay ctxt in - let+ (_ : int), ctxt = - List.fold_left_es - (fun (c, ctxt) seed -> - let cycle = Cycle_repr.of_int32_exn (Int32.of_int c) in - let* ctxt = Storage.Seed.For_cycle.remove_existing ctxt cycle in - let+ ctxt = Storage.Seed.For_cycle.init ctxt cycle seed in - (c + 1, ctxt)) - (0, ctxt) - (Seed_repr.initial_seeds ?initial_seed (delay + 2)) - in - ctxt - -let init ?constants_overrides_json ?bootstrap_accounts_json parameters = - let open Lwt_result_syntax in - let* ctxt = - init_context ?constants_overrides_json ?bootstrap_accounts_json parameters - in - let blocks_per_cycle = Constants_storage.blocks_per_cycle ctxt in - let blocks_per_commitment = Constants_storage.blocks_per_commitment ctxt in - let cycle_eras = - [ - Level_repr. - { - first_level = Raw_level_repr.of_int32_exn 0l; - first_cycle = Cycle_repr.root; - blocks_per_cycle; - blocks_per_commitment; - }; - ] - in - let*? cycle_eras = - Level_repr.create_cycle_eras cycle_eras |> Environment.wrap_tzresult - in - return (ctxt, cycle_eras) - -(* Check if the given selection correponds to the baking rights assigned by the - protocol (with the initial seeds registered in the context). Returns [true] - when the selection is the one of the protocol or [false] otherwise. *) -let check ctxt ~selection = - let open Lwt_result_syntax in - Lwt.catch - (fun () -> - let* _ctxt = - LevelRoundMap.fold_es - (fun (level, round) delegate ctxt -> - let* ctxt, _, pk = - let*! result = - Delegate_sampler.baking_rights_owner ctxt level ~round - in - Lwt.return @@ Environment.wrap_tzresult result - in - if not (Signature.Public_key_hash.equal delegate pk.delegate) then - raise Exit - else return ctxt) - selection - ctxt - in - return_true) - (function Exit -> return_false | e -> Lwt.reraise e) - -(* Create random 32 bytes *) -let rnd_bytes32 () = - let b1 = Random.int64 Int64.max_int in - let b2 = Random.int64 Int64.max_int in - let b3 = Random.int64 Int64.max_int in - let b4 = Random.int64 Int64.max_int in - let b = Bytes.make 32 '\000' in - TzEndian.set_int64 b 0 b1 ; - TzEndian.set_int64 b 8 b2 ; - TzEndian.set_int64 b 16 b3 ; - TzEndian.set_int64 b 24 b4 ; - b - -let mk_selection_map cycle_eras selection = - List.fold_left - (fun acc (level, round_delegates) -> - let level = Level_repr.level_from_raw ~cycle_eras level in - List.fold_left - (fun acc (round, delegate) -> - if LevelRoundMap.mem (level, round) acc then - Stdlib.failwith "Duplicate level/round" ; - LevelRoundMap.add (level, round) delegate acc) - acc - round_delegates) - LevelRoundMap.empty - selection - -(* Bruteforce an initial seed nonce for the desired delegate selection *) -let bruteforce ?(show_progress = false) ?(random_seed = 0) ?max - ?(parameters = Mockup.Protocol_parameters.default_value) - ?constants_overrides_json ?bootstrap_accounts_json selection = - let open Lwt_result_syntax in - Random.init random_seed ; - let* ctxt, cycle_eras = - init ?constants_overrides_json ?bootstrap_accounts_json parameters - in - let selection = mk_selection_map cycle_eras selection in - let last_nb_chars = ref 0 in - let frames = - [| - "( ● )"; - "( ● )"; - "( ● )"; - "( ● )"; - "( ●)"; - "( ● )"; - "( ● )"; - "( ● )"; - "( ● )"; - "(● )"; - |] - in - let nframes = Array.length frames in - let frame n = frames.(n mod nframes) in - let rec loop n = - if show_progress && n <> 0 && n mod 10_000 = 0 then ( - Format.eprintf "%s" (String.make !last_nb_chars '\b') ; - let s = frame (n / 10_000) ^ " " ^ string_of_int n in - last_nb_chars := String.length s ; - Format.eprintf "%s%!" s) ; - match max with - | Some max when n > max -> failwith "Did not find seed nonce" - | _ -> ( - let initial_seed = - if n = 0 then None - else Some (State_hash.of_bytes_exn (rnd_bytes32 ())) - in - let* ctxt = - let*! result = change_seed ?initial_seed ctxt in - Lwt.return @@ Environment.wrap_tzresult result - in - let* result = check ctxt ~selection in - match result with - | true -> - Format.eprintf "%s%!" (String.make !last_nb_chars '\b') ; - return initial_seed - | false -> loop (n + 1)) - in - loop 0 - -(* Check that an initial seed corresonds to the desired delegate selection *) -let check_seed ?(parameters = Mockup.Protocol_parameters.default_value) - ?constants_overrides_json ?bootstrap_accounts_json ~seed selection = - let open Lwt_result_syntax in - let* ctxt, cycle_eras = - init ?constants_overrides_json ?bootstrap_accounts_json parameters - in - let selection = mk_selection_map cycle_eras selection in - let* ctxt = - let*! result = change_seed ?initial_seed:seed ctxt in - Lwt.return @@ Environment.wrap_tzresult result - in - check ctxt ~selection diff --git a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/tenderbrute.mli b/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/tenderbrute.mli deleted file mode 100644 index 7b6915d2cfd283a3fed1b2dd55a2e2be4b3194fb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/lib/tenderbrute.mli +++ /dev/null @@ -1,83 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(** The type of desired delegate selection. For each level, and each round, - one can provide a public key hash that would be the proposer. All non- - specified level and rounds are not constrained. *) -type delegate_selection = - (Raw_level_repr.t * (Round_repr.t * Signature.public_key_hash) list) list - -(** Brute-force an initial seed nonce for the desired delegate selection. - When found, the seed nonce is returned as a byte sequence of size 32. If - no nonce is necessary to obtain the desired selection, [None] is returned - (there won't be any brute-forcing then). - - {b Note}: When using this function in your tests, take care of saving the - nonce once it is found locallty (in this case call {!check_seed_nonce} to - ensure it yields the desired selection) to avoid unnecessary computation - (in particular this function should not be called in the CI). - - @param show_progress if [true], display a spinner and the number of iterations - on the output (stderr) while [brutefore] is running. - @param random_seed initialize OCaml's random number generator with this seed - (by default [0]). This is useful to spawn multiple bruteforce in - parallel or on multiple machines. - @param constants_overrides_json JSON representation of some constants that are - to be overwritten for the in-memory context. The most useful change is to - set the size of cycles (which directly impacts the attribution of rights) or - the committee size with {i e.g.} - {[ { "blocks_per_cycle" : 8, "consensus_committee_size" : 25 } ]} - @param bootstrap_accounts_json JSON representation of bootstrap accounts of - the form: - {[ - [ { "name" : "bootstrap1" - "sk_uri": "unencrypted:edsk3gUfUPyBSfrS9CCgmCiQsTCHGkviBDusMxDJstFtojtc1zcpsh", - "amount": "3000000000000" }, - ...] - ]} - @param parameters parameters of the protocol (optional). - @param selection is the desired delegate selection. See {!delegate_selection}. - *) -val bruteforce : - ?show_progress:bool -> - ?random_seed:int -> - ?max:int -> - ?parameters:Mockup.Protocol_parameters.t -> - ?constants_overrides_json:json -> - ?bootstrap_accounts_json:json -> - delegate_selection -> - State_hash.t option tzresult Lwt.t - -(** Check that an initial seed nonce yields to the desired delegate selection. - See {!bruteforce} for the arguments. *) -val check_seed : - ?parameters:Mockup.Protocol_parameters.t -> - ?constants_overrides_json:json -> - ?bootstrap_accounts_json:json -> - seed:State_hash.t option -> - delegate_selection -> - bool tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/tenderbrute_main.ml b/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/tenderbrute_main.ml deleted file mode 100644 index 8d44cecef2c911b57c5a067c22d92f7187a6b69b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/tenderbrute/tenderbrute_main.ml +++ /dev/null @@ -1,187 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -let bootstrap_accounts = ref None - -let constants_overrides = ref None - -let selection = ref [] - -let max = ref None - -let random_seed = ref None - -let report_err res = - match res with - | Error e -> - Format.eprintf "\n%a@." Error_monad.pp_print_trace e ; - exit 2 - | Ok res -> res - -let delegate_encoding = - let open Data_encoding in - union - [ - case - ~title:"Public key hash" - (Tag 0) - Signature.Public_key_hash.encoding - (function `Pkh p -> Some p | _ -> None) - (fun p -> `Pkh p); - case - ~title:"Alias" - (Tag 1) - string - (function `Alias a -> Some a | _ -> None) - (fun a -> `Alias a); - ] - -let selection_encoding = - let open Data_encoding in - list - (tup2 - Raw_level_repr.encoding - (list (tup2 Round_repr.encoding delegate_encoding))) - -let mk_bootstrap_aliases bootstrap_accounts_json = - let open Lwt_result_syntax in - let parameters = Mockup.Protocol_parameters.default_value in - let open Alpha_context.Parameters in - match bootstrap_accounts_json with - | None -> - List.mapi - (fun i a -> (Format.sprintf "bootstrap%d" i, a.public_key_hash)) - parameters.bootstrap_accounts - |> return - | Some j -> - let open Data_encoding in - let accounts = Json.destruct (list Mockup.Parsed_account.encoding) j in - List.map_ep - (fun a -> - let+ acc = Mockup.Parsed_account.to_bootstrap_account a in - (a.name, acc.public_key_hash)) - accounts - -let selection_to_pkhs bootstrap_accounts_json selection = - let open Lwt_result_syntax in - let+ bootstrap_aliases = mk_bootstrap_aliases bootstrap_accounts_json in - List.map - (fun (level, l) -> - ( level, - List.map - (fun (round, d) -> - ( round, - match d with - | `Pkh d -> d - | `Alias a -> ( - match List.assoc ~equal:String.equal a bootstrap_aliases with - | None -> Stdlib.failwith @@ "Unknown alias " ^ a - | Some d -> d) )) - l )) - selection - -let parse_json_or_file s = - let open Lwt_syntax in - let+ json_opt = Tezos_stdlib_unix.Lwt_utils_unix.Json.read_file s in - match json_opt with - | Ok json -> Ok json - | Error errs -> ( - match Data_encoding.Json.from_string s with - | Ok json -> Ok json - | Error e -> Error (Exn (Failure e) :: errs)) - -let set_selection s = - let open Lwt_syntax in - Lwt_main.run - (let+ json = - let+ json = parse_json_or_file s in - report_err json - in - selection := Data_encoding.Json.destruct selection_encoding json) - -let main () = - let open Lwt_result_syntax in - let thread = - let* bootstrap_accounts_json = - match !bootstrap_accounts with - | None -> return_none - | Some read -> - let+ json = read in - Option.some json - in - let* constants_overrides_json = - match !constants_overrides with - | None -> return_none - | Some read -> - let+ json = read in - Option.some json - in - let* selection = selection_to_pkhs bootstrap_accounts_json !selection in - Tenderbrute.bruteforce - ~show_progress:true - ?max:!max - ?random_seed:!random_seed - ?bootstrap_accounts_json - ?constants_overrides_json - selection - in - Lwt_main.run - (let*! seed = - let*! result = thread in - Lwt.return @@ report_err result - in - let seed_str = - match seed with None -> "None" | Some s -> State_hash.to_b58check s - in - Lwt.return @@ Format.printf "%s@." seed_str) - -let specs = - [ - ( "--max", - Arg.Int (fun m -> max := Some m), - " set maximum number of tries to " ); - ( "--random-seed", - Arg.Int (fun i -> random_seed := Some i), - " initialize the random generator with (useful to spawn mutliple \ - instances)" ); - ( "--constants-overrides", - Arg.String (fun s -> constants_overrides := Some (parse_json_or_file s)), - " set overrides for constants in protocol parameters (e.g. \ - blocks_per_cycle)" ); - ( "--bootstrap-accounts", - Arg.String (fun s -> bootstrap_accounts := Some (parse_json_or_file s)), - " set bootstrap accounts of protocol" ); - ] - -let usage = - Format.sprintf - {|usage: %s '[[1, [[0, "tz1..."], [1, "tz1..."]]], [2, [[0, "tz1..."]]]]'|} - Sys.argv.(0) - -let () = - Arg.parse (Arg.align specs) set_selection usage ; - main () diff --git a/src/proto_019_PtParisB/lib_delegate/test/test_scenario.ml b/src/proto_019_PtParisB/lib_delegate/test/test_scenario.ml deleted file mode 100644 index a3aaa72330f58996a751e489e45ddc548eb9fe0c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_delegate/test/test_scenario.ml +++ /dev/null @@ -1,1986 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(* Testing - ------- - Component: Protocol, delegate - Invocation: dune exec src/proto_019_PtParisB/lib_delegate/test/main.exe \ - -- --file test_scenario.ml - Subject: Test different scenario for delegate -*) - -open Mockup_simulator - -let bootstrap1 = Signature.Public_key.hash bootstrap1 - -let bootstrap2 = Signature.Public_key.hash bootstrap2 - -let bootstrap3 = Signature.Public_key.hash bootstrap3 - -let bootstrap4 = Signature.Public_key.hash bootstrap4 - -let bootstrap5 = Signature.Public_key.hash bootstrap5 - -let some_seed s = Some (Protocol.State_hash.of_b58check_exn s) - -(* - -Test that the chain reaches the 5th level. - -*) - -let test_level_5 () = - let open Lwt_result_syntax in - let level_to_reach = 5l in - let module Hooks : Hooks = struct - include Default_hooks - - let stop_on_event = function - | Baking_state.New_head_proposal {block; _} -> - (* Stop the node as soon as we receive a proposal with a level - higher than [level_to_reach]. *) - block.shell.level > level_to_reach - | _ -> false - - let check_chain_on_success ~chain = - (* Make sure that all decided blocks have been decided at round 0. *) - let round_is_zero block = - let level = block.rpc_context.block_header.level in - let* round = get_block_round block in - if Int32.equal round 0l then return_unit - else failwith "block at level %ld was selected at round %ld" level round - in - List.iter_es round_is_zero chain - end in - (* Here we start two bakers, one with 3 delegates (bootstrap1, bootstrap2, - bootstrap3) and the other with 2 delegates (bootstrap4, bootstrap5). - The simulation continues till both nodes stop, see [stop_on_event] - above. *) - let config = - { - default_config with - timeout = Int32.to_int level_to_reach * 3 * 2; - round0 = 2L; - round1 = 3L; - } - in - run ~config [(3, (module Hooks)); (2, (module Hooks))] - -let test_preattest_on_valid () = - let open Lwt_result_syntax in - let level_to_reach = 2l in - let round_to_reach = 1l in - let module Hooks : Hooks = struct - include Default_hooks - - let on_new_head ~block_hash ~block_header = - (* Stop notifying heads on the level to reach, only notify that - it has been validated *) - if block_header.Block_header.shell.level < level_to_reach then - Lwt.return_some (block_hash, block_header) - else Lwt.return_none - - let seen_candidate = ref None - - let pqc_noticed = ref false - - let qc_noticed = ref false - - let stop_on_event = function - | Baking_state.Prequorum_reached (candidate, _) -> - (* Register the PQC notice. *) - (match !seen_candidate with - | Some seen_candidate - when Block_hash.(candidate.hash = seen_candidate) -> - pqc_noticed := true - | _ -> ()) ; - false - | Baking_state.Quorum_reached (candidate, _) -> - (* Because attestations are sent regardless of whether - a head has been applied, we can expect a quorum to - be received regardless of a head not being produced. *) - (match !seen_candidate with - | Some seen_candidate - when Block_hash.(candidate.hash = seen_candidate) -> - qc_noticed := true - | _ -> ()) ; - false - | New_head_proposal {block; _} -> - (* Ensure that we never notice a new head at the level where - we are not supposed to. *) - if block.shell.level = level_to_reach then - Stdlib.failwith "Unexpected new head event" - else false - | New_valid_proposal {block; _} -> - (* Register the seen valid proposal candidate. *) - if - block.shell.level = level_to_reach - && Protocol.Alpha_context.Round.to_int32 block.round = 0l - then seen_candidate := Some block.hash ; - (* Stop the node when we reach level 2 / round 2. *) - block.shell.level = level_to_reach - && Protocol.Alpha_context.Round.to_int32 block.round >= round_to_reach - | _ -> false - - let check_chain_on_success ~chain:_ = - assert (!seen_candidate <> None) ; - assert !pqc_noticed ; - assert !qc_noticed ; - return_unit - end in - let config = {default_config with timeout = 10} in - run ~config [(1, (module Hooks))] - -let test_reset_delayed_pqc () = - let open Lwt_syntax in - let module Hooks : Hooks = struct - include Default_hooks - - let should_wait = ref true - - let trigger = ref false - - let on_new_operation x = - let* () = - if !should_wait then Lwt_unix.sleep 0.5 else Lwt_unix.sleep 0.2 - in - if !trigger then ( - trigger := false ; - Lwt.return_none) - else Lwt.return_some x - - let on_new_head ~block_hash ~(block_header : Block_header.t) = - let block_round = - match - Protocol.Alpha_context.Fitness.round_from_raw - block_header.shell.fitness - with - | Error _ -> assert false - | Ok x -> x - in - if - block_header.Block_header.shell.level = 1l - && Protocol.Alpha_context.Round.(block_round = zero) - then ( - let* () = Lwt_unix.sleep 1. in - should_wait := false ; - trigger := true ; - Lwt.return_some (block_hash, block_header)) - else Lwt.return_some (block_hash, block_header) - - let stop_on_event = function - | Baking_state.New_valid_proposal {block; _} -> - let is_high_round = - let open Protocol.Alpha_context.Round in - match of_int 5 with - | Ok high_round -> block.round = high_round - | _ -> assert false - in - (block.shell.level = 1l && is_high_round) || block.shell.level > 1l - | _ -> false - - let check_chain_on_success ~chain = - let head = Stdlib.List.hd chain in - if head.rpc_context.block_header.level = 1l then failwith "baker is stuck" - else return_ok_unit - end in - let config = {default_config with round0 = 2L; round1 = 3L; timeout = 50} in - run ~config [(1, (module Hooks))] - -(* - -Scenario T1 - -1. Node A proposes at the round 0. -2. Both node A and node B preattest. -3. Node A stops. -4. Node B attests in the round 0 and locks. No decision is taken at the - round 0 because A did not attest. -5. We check that in round 1 (the next slot for B), B proposes the same - value as A proposed in the round 0, not a new proposal. -*) - -let test_scenario_t1 () = - let open Lwt_result_syntax in - let original_proposal = ref None in - let a_preattested = ref false in - let b_preattested = ref false in - let b_attested = ref false in - let b_reproposed = ref false in - (* Here we use custom hooks to make each node/baker behave according to - its role in the scenario. *) - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let check_mempool_after_processing ~mempool = - mempool_has_op_ref - ~mempool - ~predicate: - (op_is_both - (op_is_signed_by ~public_key:Mockup_simulator.bootstrap1) - (op_is_preattestation ~level:1l ~round:0l)) - ~var:a_preattested - - let stop_on_event _ = !a_preattested - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let check_block_before_processing ~level ~round ~block_hash ~block_header - ~(protocol_data : Protocol.Alpha_context.Block_header.protocol_data) = - let* () = - match (!b_attested, level, round) with - | false, 1l, 0l -> - (* If any of the checks fails the whole scenario will fail. *) - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap1 - in - save_proposal_payload ~protocol_data ~var:original_proposal - | true, 1l, 1l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap2 - in - let* () = - verify_payload_hash - ~protocol_data - ~original_proposal - ~message:"a new block proposed instead of reproposal" - in - b_reproposed := true ; - return_unit - | _ -> failwith "unexpected level = %ld / round = %ld" level round - in - return_unit - - let check_mempool_after_processing ~mempool = - let* () = - mempool_has_op_ref - ~mempool - ~predicate: - (op_is_both - (op_is_signed_by ~public_key:Mockup_simulator.bootstrap2) - (op_is_preattestation ~level:1l ~round:0l)) - ~var:b_preattested - in - mempool_has_op_ref - ~mempool - ~predicate: - (op_is_both - (op_is_signed_by ~public_key:Mockup_simulator.bootstrap2) - (op_is_preattestation ~level:1l ~round:0l)) - ~var:b_attested - - let stop_on_event _ = !b_reproposed - end in - let config = - { - default_config with - initial_seed = None; - delegate_selection = [(1l, [(0l, bootstrap1); (1l, bootstrap2)])]; - } - in - run ~config [(1, (module Node_a_hooks)); (1, (module Node_b_hooks))] - -(* - -Scenario T2 - -1. Node A should propose at the round 0, but it is dead. -2. Node B waits til it has its proposal slot at round 1 and proposes then. - -*) - -let test_scenario_t2 () = - let open Lwt_result_syntax in - let b_proposed = ref false in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let stop_on_event _ = true (* Node A stops immediately. *) - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let check_block_before_processing ~level ~round ~block_hash ~block_header - ~protocol_data:_ = - (* Here we test that the only block that B observes is its own - proposal for level 1 at round 1. *) - match (level, round) with - | 1l, 1l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap2 - in - b_proposed := true ; - return_unit - | _ -> failwith "unexpected level = %ld / round = %ld" level round - - let stop_on_event _ = - (* Stop as soon as B has proposed. This ends the test. *) - !b_proposed - end in - let config = - { - default_config with - initial_seed = None; - delegate_selection = [(1l, [(0l, bootstrap1); (1l, bootstrap2)])]; - } - in - run ~config [(1, (module Node_a_hooks)); (1, (module Node_b_hooks))] - -(* - -Scenario T3 - -1. There are four nodes: A, B, C, and D. -2. C is the proposer at the round 0. It sends the proposal, which is - received by all bakers except for D. -3. Due to how the messages propagate, only B sees 3 preattestations. It - attests and locks. Other nodes all see fewer than 3 preattestations. - - A -> A and B - B -> B - C -> C and B - -4. D proposes at the round 1. Its message reaches 3 nodes, including B. - - D -> D, B, C - -5. B does not preattest because it is locked. -6. No decision is taken at the round 1. -7. B proposes at the round 2. There are no more problems with propagation of - messages, so a decision is reached. - -*) - -let test_scenario_t3 () = - let open Lwt_result_syntax in - let b_observed_pqc = ref false in - let original_proposal = ref None in - let we_are_done = ref false in - let stop_on_event0 _ = !we_are_done in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_operation ~op_hash ~op = - if !b_observed_pqc then return (op_hash, op, [Pass; Pass; Pass; Pass]) - else - let* is_preattestation = - op_is_preattestation ~level:1l ~round:0l op_hash op - in - if is_preattestation then - return (op_hash, op, [Pass; Pass; Block; Block]) - else failwith "unexpected operation from the node D" - - let stop_on_event = stop_on_event0 - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~(protocol_data : Protocol.Alpha_context.Block_header.protocol_data) = - match (level, round) with - | 1l, 2l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap2 - in - we_are_done := true ; - let* () = - verify_payload_hash - ~protocol_data - ~original_proposal - ~message:"a new block proposed instead of reproposal" - in - return (block_hash, block_header, operations, [Pass; Pass; Pass; Pass]) - | _ -> - failwith - "unexpected injection on the node B, level = %ld / round = %ld" - level - round - - let on_inject_operation ~op_hash ~op = - if !b_observed_pqc then return (op_hash, op, [Pass; Pass; Pass; Pass]) - else - let* is_preattestation = - op_is_preattestation ~level:1l ~round:0l op_hash op - in - if is_preattestation then - return (op_hash, op, [Block; Pass; Block; Block]) - else failwith "unexpected operation from the node B" - - let check_mempool_after_processing ~mempool = - let predicate op_hash op = - op_is_preattestation ~level:1l ~round:0l op_hash op - in - let* n = mempool_count_ops ~mempool ~predicate in - if n > 3 then - failwith "B received too many preattestations, expected to see only 3" - else if n = 3 then ( - b_observed_pqc := true ; - return_unit) - else return_unit - - let stop_on_event = stop_on_event0 - end in - let module Node_c_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~(protocol_data : Protocol.Alpha_context.Block_header.protocol_data) = - match (level, round) with - | 1l, 0l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap3 - in - let* () = - save_proposal_payload ~protocol_data ~var:original_proposal - in - return - (block_hash, block_header, operations, [Pass; Pass; Pass; Block]) - | _ -> - failwith - "unexpected injection on the node C, level = %ld / round = %ld" - level - round - - let on_inject_operation ~op_hash ~op = - if !b_observed_pqc then return (op_hash, op, [Pass; Pass; Pass; Pass]) - else - let* is_preattestation = - op_is_preattestation ~level:1l ~round:0l op_hash op - in - if is_preattestation then - return (op_hash, op, [Block; Pass; Pass; Block]) - else failwith "unexpected operation from the node C" - - let stop_on_event = stop_on_event0 - end in - let module Node_d_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - match (level, round) with - | 1l, 1l -> - return - (block_hash, block_header, operations, [Block; Pass; Pass; Pass]) - | _ -> - failwith - "unexpected injection on the node D, level = %ld / round = %ld" - level - round - - let on_inject_operation ~op_hash ~op = - if !b_observed_pqc then return (op_hash, op, [Pass; Pass; Pass; Pass]) - else return (op_hash, op, [Block; Block; Block; Block]) - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngFtAUcm1EneHCCrxxSWAaxSukwEhSPvpTnFjVdKLEjgkapUy1pP"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap3); - (1l, bootstrap4); - (2l, bootstrap2); - (3l, bootstrap1); - ] ); - ( 2l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ]; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Node_b_hooks)); - (1, (module Node_c_hooks)); - (1, (module Node_d_hooks)); - ] - -(* Scenario T4 - - 1. There are two nodes A B: - A can propose at level 1, round 0 and level 2, round 1 - B can propose at level 1, round 1 and level 2, round 0 - 4. Node A proposes at level 1, round 0, - 5. Both nodes preattest the proposal at level 1, round 0, - 6. Both nodes attest the proposal at level 1, round 0, - 7. Only A receives the block application at level 1, round 0, - 8. B does not propose at level 2, round 0, - 9. A proposes at level 2, round 1. - Predecessor hash is block at level 1, round 0. -*) - -let test_scenario_t4 () = - let open Lwt_result_syntax in - let level_to_reach = 4l in - let a_proposal_level_1 = ref None in - let a_proposal_level_2_predecessor = ref None in - let b_attested_level_1 = ref false in - let b_proposed_level_2 = ref false in - - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> - block.shell.level >= level_to_reach - | _ -> false - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - let () = - match (level, round) with - | 1l, 0l -> a_proposal_level_1 := Some block_hash - | 2l, 1l -> - a_proposal_level_2_predecessor := - Some block_header.Block_header.shell.predecessor - | _ -> () - in - return (block_hash, block_header, operations, [Pass; Pass]) - - let stop_on_event = stop_on_event0 - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_new_head ~block_hash ~block_header = - (* Stop notifying heads to node B for block proposed at level 1, round 0. *) - match !a_proposal_level_1 with - | Some a_proposal_level_1_block_hash - when Block_hash.(a_proposal_level_1_block_hash = block_hash) -> - Lwt.return_none - | _ -> Lwt.return_some (block_hash, block_header) - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - let () = - match (level, round) with - | 2l, 0l -> b_proposed_level_2 := true - | _ -> () - in - return (block_hash, block_header, operations, [Pass; Pass]) - - let on_inject_operation ~op_hash ~op = - let* is_attestation = op_is_attestation ~level:1l ~round:0l op_hash op in - if is_attestation then b_attested_level_1 := true ; - - return (op_hash, op, [Pass; Pass; Pass; Pass]) - - let check_chain_on_success ~chain:_ = - if not !b_attested_level_1 then - failwith "Node B did not attest proposal at level 1, round 0" - else if - not - @@ Option.equal - Block_hash.equal - !a_proposal_level_2_predecessor - !a_proposal_level_1 - then - failwith - "Invalid predecessor block for A's proposal at level 2: proposal had \ - predecessor %a, expected %a\n" - (Format.pp_print_option Block_hash.pp_short) - !a_proposal_level_1 - (Format.pp_print_option Block_hash.pp_short) - !a_proposal_level_2_predecessor - else return_unit - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngG9pS9mbDWnz6YLUFrd8sbb9KMUzfAUMpSpnxNHY9BFnSB8L3zq"; - delegate_selection = - [ - (1l, [(0l, bootstrap1); (1l, bootstrap2)]); - (2l, [(0l, bootstrap2); (1l, bootstrap1)]); - ]; - } - in - run ~config [(1, (module Node_a_hooks)); (1, (module Node_b_hooks))] - -(* - -Scenario F1 - -1. Node C (bootstrap3) proposes at level 1 round 0, its proposal reaches all - nodes. -2. Propagation of preattestations happens in such a way that only Node A - (bootstrap1) observes PQC: - - A -> A - B -> B and A - C -> C and A - D -> D and A - - Node A locks. - -3. At the level 1 round 1 node D (bootstrap4) proposes. Propagation of - messages is normal. - -4. Node A (bootstrap1) should propose at level 2 round 0. - -*) - -let test_scenario_f1 () = - let open Lwt_result_syntax in - let c_proposed_l1_r0 = ref false in - let d_proposed_l1_r1 = ref false in - let a_proposed_l2_r0 = ref false in - let stop_on_event0 _ = !a_proposed_l2_r0 in - let pass = - (* This is to be sure that the proposal for round r arrives while - the baker is in round r, and not in round r-1. (See related - issue: - https://gitlab.com/tezos/tezos/-/issues/4143). Otherwise, the - test does not perform as expected. *) - Delay 0.5 - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - match (!c_proposed_l1_r0, !d_proposed_l1_r1, level, round) with - | true, true, 2l, 0l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap1 - in - let* () = - a_proposed_l2_r0 := true ; - return_unit - in - return (block_hash, block_header, operations, [pass; pass; pass; pass]) - | _ -> - failwith - "unexpected injection on the node A, level = %ld / round = %ld" - level - round - - let on_inject_operation ~op_hash ~op = - match (!c_proposed_l1_r0, !d_proposed_l1_r1) with - | true, false -> return (op_hash, op, [Pass; Block; Block; Block]) - | _ -> return (op_hash, op, [Pass; Pass; Pass; Pass]) - - let stop_on_event = stop_on_event0 - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_inject_operation ~op_hash ~op = - match (!c_proposed_l1_r0, !d_proposed_l1_r1) with - | true, false -> return (op_hash, op, [Pass; Pass; Block; Block]) - | _ -> return (op_hash, op, [Pass; Pass; Pass; Pass]) - - let stop_on_event = stop_on_event0 - end in - let module Node_c_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - match (!c_proposed_l1_r0, !d_proposed_l1_r1, level, round) with - | false, false, 1l, 0l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap3 - in - let* () = - c_proposed_l1_r0 := true ; - return_unit - in - return (block_hash, block_header, operations, [pass; pass; pass; pass]) - | _ -> - failwith - "unexpected injection on the node C, level = %ld / round = %ld" - level - round - - let on_inject_operation ~op_hash ~op = - match (!c_proposed_l1_r0, !d_proposed_l1_r1) with - | true, false -> return (op_hash, op, [Pass; Block; Pass; Block]) - | _ -> return (op_hash, op, [Pass; Pass; Pass; Pass]) - - let stop_on_event = stop_on_event0 - end in - let module Node_d_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - match (!d_proposed_l1_r1, level, round) with - | false, 1l, 1l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap4 - in - let* () = - d_proposed_l1_r1 := true ; - return_unit - in - return (block_hash, block_header, operations, [pass; pass; pass; pass]) - | _ -> - failwith - "unexpected injection on the node D, level = %ld / round = %ld" - level - round - - let on_inject_operation ~op_hash ~op = - match (!c_proposed_l1_r0, !d_proposed_l1_r1) with - | true, false -> return (op_hash, op, [Pass; Block; Block; Pass]) - | _ -> return (op_hash, op, [Pass; Pass; Pass; Pass]) - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGohKUZjXzv69sxvDqAYRd4XPDQSxDoEpP72znu2jduBuhcYiSE"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap3); - (1l, bootstrap4); - (2l, bootstrap1); - (3l, bootstrap2); - ] ); - ( 2l, - [ - (0l, bootstrap1); - (1l, bootstrap4); - (2l, bootstrap2); - (3l, bootstrap3); - ] ); - ]; - timeout = 30; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Node_b_hooks)); - (1, (module Node_c_hooks)); - (1, (module Node_d_hooks)); - ] - -(* - -Scenario F2 - -1. There are four nodes: A, B, C, and D. -2. A proposes at 1.0 and observes EQC. -3. A has the slot at 2.0 but somehow it doesn't propose or its proposal is lost. -4. B, C, and D have the rounds 1, 2, and 3 respectively, but they also do not propose. -5. A should still propose at 2.4. - -*) - -let test_scenario_f2 () = - let open Lwt_result_syntax in - let proposal_2_4_observed = ref false in - let module Hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - let propagation_vector = - match (level, round) with - | 1l, 0l -> [Pass; Pass; Pass; Pass] - | 2l, 0l -> [Pass; Block; Block; Block] - | 2l, 4l -> - proposal_2_4_observed := true ; - [Pass; Pass; Pass; Pass] - | _ -> [Block; Block; Block; Block] - in - return (block_hash, block_header, operations, propagation_vector) - - let stop_on_event _ = !proposal_2_4_observed - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGPSm87ZqWxJmZu7rewiLiyKY72ffCQQvxDuWmFBw59dWAL5VTB"; - delegate_selection = - [ - (1l, [(0l, bootstrap1)]); - ( 2l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - (4l, bootstrap1); - ] ); - ]; - timeout = 60; - round0 = 2L; - round1 = 3L; - } - in - run - ~config - [ - (1, (module Hooks)); - (1, (module Hooks)); - (1, (module Hooks)); - (1, (module Hooks)); - ] - -(* - -Scenario M1 - -1. Four nodes start, each with 1 delegate. -2. As soon as 2nd level is proposed all communication between nodes becomes - impossible. -3. The situation continues for 5 seconds. -4. After communication is resumed the bakers must continue making progress. - -*) - -let test_scenario_m1 () = - let open Lwt_result_syntax in - let observed_level2_timestamp = ref None in - let network_down_sec = 5. in - let module Hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - let propagation_vector = - match !observed_level2_timestamp with - | None -> - if Compare.Int32.(level >= 2l) then ( - observed_level2_timestamp := Some (Unix.time ()) ; - [Pass; Pass; Pass; Pass]) - else [Pass; Pass; Pass; Pass] - | Some level2_observed -> - if Unix.time () -. level2_observed < network_down_sec then - [Block; Block; Block; Block] - else [Pass; Pass; Pass; Pass] - in - return (block_hash, block_header, operations, propagation_vector) - - let on_inject_operation ~op_hash ~op = - let propagation_vector = - match !observed_level2_timestamp with - | None -> [Pass; Pass; Pass; Pass] - | Some level2_observed -> - if Unix.time () -. level2_observed < network_down_sec then - [Block; Block; Block; Block] - else [Pass; Pass; Pass; Pass] - in - return (op_hash, op, propagation_vector) - - let stop_on_event = function - | Baking_state.New_head_proposal {block; _} -> block.shell.level > 4l - | _ -> false - end in - let config = {default_config with timeout = 60} in - run - ~config - [ - (1, (module Hooks)); - (1, (module Hooks)); - (1, (module Hooks)); - (1, (module Hooks)); - ] - -(* - -Scenario M2 - -1. Five nodes start (single delegate per node). -2. They decide level 1. -3. However, the node that has the slot for level 2 round 0 is not there - to participate. -4. We check that the chain continues advancing despite that. - -*) - -let test_scenario_m2 () = - let module Normal_node : Hooks = struct - include Default_hooks - - let stop_on_event = function - | Baking_state.New_head_proposal {block; _} -> block.shell.level > 5l - | _ -> false - end in - let module Missing_node : Hooks = struct - include Default_hooks - - let stop_on_event _ = true (* stop immediately *) - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGo77zNC59bYiQMk2M14aDZZu4KXG8BV1C8pi7afjJ7cXyqB3M1"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ( 2l, - [ - (0l, bootstrap5); - (1l, bootstrap1); - (2l, bootstrap2); - (3l, bootstrap3); - (4l, bootstrap4); - ] ); - ]; - round0 = 2L; - round1 = 3L; - timeout = 60; - } - in - run - ~config - [ - (1, (module Normal_node)); - (1, (module Normal_node)); - (1, (module Normal_node)); - (1, (module Normal_node)); - (1, (module Missing_node)); - ] - -(* - -Scenario M3 - -1. There are four nodes: A, B, C, and D. -2. A and B propose in turns. Messages from A reach every node, but messages - from other nodes only go to A. -3. The chain should not make progress. Since we have both bootstrap1 and - bootstrap2 in delegate selection they have equal voting power. Therefore - it is necessary to have 2 votes for prequorums (which is achieved when A - is proposing) and 2 votes for quorums (impossible because B has no way to - obtain PQC and thus cannot send attestations). - -*) - -let test_scenario_m3 () = - let open Lwt_result_syntax in - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> - block.shell.level = 1l - && Protocol.Alpha_context.Round.to_int32 block.round = 6l - | _ -> false - in - - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let stop_on_event = stop_on_event0 - end in - let module Other_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - return (block_hash, block_header, operations, [Pass; Block; Block; Block]) - - let on_inject_operation ~op_hash ~op = - return (op_hash, op, [Pass; Block; Block; Block]) - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGaxNJcwEVJLgQXmnN8KN5skn6fhU4Awtu8zVDKViTd5gsfT51M"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap1); - (3l, bootstrap2); - (4l, bootstrap1); - (5l, bootstrap2); - (6l, bootstrap1); - ] ); - ]; - round0 = 2L; - round1 = 3L; - timeout = 60; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Other_hooks)); - (1, (module Other_hooks)); - (1, (module Other_hooks)); - ] - -(* - -Scenario M4 - -1. There are four bakers: A, B, C, and D. -2. A proposes at level 1 round 0. Its proposal reaches A, B, C, and D, but - with a delay of 0.5 seconds. -3. 3 votes are enough for consensus, because voting powers of all delegates - are equal. Preattestations propagate freely, however attestations from C - are blocked. -4. Check that at level 1 round 0 quorum is reached (from the point of view - of A). This means that D sends an attestation despite receiving - preattestations before the proposal. - -*) - -let test_scenario_m4 () = - let open Lwt_result_syntax in - let a_observed_qc = ref false in - let stop_on_event0 _ = !a_observed_qc in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - match (level, round) with - | 1l, 0l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap1 - in - return - (block_hash, block_header, operations, [Pass; Pass; Pass; Delay 0.5]) - | _ -> - failwith - "unexpected injection on the node A, level = %ld / round = %ld" - level - round - - let check_mempool_after_processing ~mempool = - let predicate op_hash op = - op_is_attestation ~level:1l ~round:0l op_hash op - in - let* n = mempool_count_ops ~mempool ~predicate in - if n > 3 then - failwith "A received too many attestations, expected to see only 3" - else if n = 3 then ( - a_observed_qc := true ; - return_unit) - else return_unit - - let stop_on_event = stop_on_event0 - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let stop_on_event = stop_on_event0 - end in - let module Node_c_hooks : Hooks = struct - include Default_hooks - - let on_inject_operation ~op_hash ~op = - let* is_attestation = op_is_attestation ~level:1l ~round:0l op_hash op in - return - ( op_hash, - op, - if is_attestation then [Block; Block; Block; Block] - else [Pass; Pass; Pass; Pass] ) - - let stop_on_event = stop_on_event0 - end in - let module Node_d_hooks : Hooks = struct - include Default_hooks - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGJmwLi7kPvGwV2LR3kjNQ6xamGPCZ9ooep9QcafbqRXZhYEciT"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ]; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Node_b_hooks)); - (1, (module Node_c_hooks)); - (1, (module Node_d_hooks)); - ] - -(* - -Scenario M5 - -1. There are four bakers: A, B, C, and D. -2. A proposes at level 1 round 0. Its proposal reaches A, B, C, and D, but with - a delay of 1 second. There are no problems with propagation of - preattestations and attestations. -3. At the level 1 all four bakers have proposer slots, however we block possible - proposals from B and C at higher rounds. -4. Check that D proposes at the level 2 round 0, which means that it has - observed QC. - -*) - -let test_scenario_m5 () = - let open Lwt_result_syntax in - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> block.shell.level >= 2l - | _ -> false - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - match (level, round) with - | 1l, 0l -> - let* () = - check_block_signature - ~block_hash - ~block_header - ~public_key:Mockup_simulator.bootstrap1 - in - return - (block_hash, block_header, operations, [Pass; Pass; Pass; Delay 1.0]) - | _ -> - failwith - "unexpected injection on the node A, level = %ld / round = %ld" - level - round - - let stop_on_event = stop_on_event0 - end in - let module Other_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - return (block_hash, block_header, operations, [Block; Block; Block; Block]) - - let stop_on_event = stop_on_event0 - end in - let module Node_d_hooks : Hooks = struct - include Default_hooks - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGJmwLi7kPvGwV2LR3kjNQ6xamGPCZ9ooep9QcafbqRXZhYEciT"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ]; - round0 = 3L; - round1 = 4L; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Other_hooks)); - (1, (module Other_hooks)); - (1, (module Node_d_hooks)); - ] - -(* - -Scenario M6 - -1. There are four bakers: A, B, C, and D. -2. A proposes at level 1 round 0. Its proposal reaches all nodes, and they - observe PQC. Only A observes a QC. -3. At level 1 round 1 it is B's turn to propose. Since it has observed the - PQC, it reproposes A's proposal. A does not see it. -4. B observes PQC and QC for its proposal. -5. A proposes at level 2 round 0. No one sees the proposal. -6. B proposes at level 2 round 1. A sees B's proposal and switches its branch. -7. We wait 2 more levels before checking A's chain to verify that it has - adopted B's proposal. - -*) - -let test_scenario_m6 () = - let open Lwt_result_syntax in - let b_proposal_2_1 = ref None in - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> block.shell.level > 4l - | _ -> false - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - let propagation_vector = - match (level, round) with - | 2l, 0l -> [Pass; Block; Block; Block] - | _ -> [Pass; Pass; Pass; Pass] - in - return (block_hash, block_header, operations, propagation_vector) - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - return - ( op_hash, - op, - if is_a10_attestation then [Pass; Block; Block; Block] - else [Pass; Pass; Pass; Pass] ) - - let stop_on_event = stop_on_event0 - - let check_chain_on_success ~chain = - match List.nth (List.rev chain) 2 with - | None -> failwith "Node A has empty chain" - | Some (block : block) -> - verify_payload_hash - ~protocol_data:block.protocol_data - ~original_proposal:b_proposal_2_1 - ~message:"A did not switch to B's proposal (level 2, round 1)" - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data = - let* propagation_vector = - match (level, round) with - | 1l, 1l -> return [Block; Delay 0.1; Delay 0.1; Delay 0.1] - | 2l, 1l -> - let* () = - save_proposal_payload ~protocol_data ~var:b_proposal_2_1 - in - return [Pass; Pass; Pass; Pass] - | _ -> return [Pass; Pass; Pass; Pass] - in - return (block_hash, block_header, operations, propagation_vector) - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - return - ( op_hash, - op, - if is_a10_attestation then [Pass; Block; Block; Block] - else [Pass; Pass; Pass; Pass] ) - - let stop_on_event = stop_on_event0 - end in - let module Other_node : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - return (block_hash, block_header, operations, [Pass; Pass; Pass; Pass]) - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - return - ( op_hash, - op, - if is_a10_attestation then [Pass; Block; Block; Block] - else [Pass; Pass; Pass; Pass] ) - - let stop_on_event = stop_on_event0 - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGnwG2gApiRzo1kdbCgQheqtZroUsAjsJzyw2RBbtg3gtTeMQ9F"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ( 2l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ]; - timeout = 60; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Node_b_hooks)); - (1, (module Other_node)); - (1, (module Other_node)); - ] - -(* - -Scenario M7 - -The same as M6, but: - -5. B proposes at level 2 round 0 (A does not see the proposal). -6. A proposes at 2.1. B switches to A's branch when it receives 2.1. -7. We wait 2 more levels before checking everyone's chain to verify that - A's proposal has been selected. - -*) - -let test_scenario_m7 () = - let open Lwt_result_syntax in - let a_proposal_2_1 = ref None in - let c_received_2_1 = ref false in - let d_received_2_1 = ref false in - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> block.shell.level > 4l - | _ -> false - in - let check_chain_on_success0 node_label ~chain = - match List.nth (List.rev chain) 2 with - | None -> failwith "Node %s has empty chain" node_label - | Some (block : block) -> - verify_payload_hash - ~protocol_data:block.protocol_data - ~original_proposal:a_proposal_2_1 - ~message: - (Format.sprintf - "%s did not switch to A's proposal (level 2, round 1)" - node_label) - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data = - let* () = - match (level, round) with - | 2l, 1l -> save_proposal_payload ~protocol_data ~var:a_proposal_2_1 - | _ -> return_unit - in - return (block_hash, block_header, operations, [Pass; Pass; Pass; Pass]) - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - return - ( op_hash, - op, - if is_a10_attestation then [Pass; Block; Block; Block] - else [Pass; Pass; Pass; Pass] ) - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "A" - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - let* propagation_vector = - match (level, round) with - | 1l, 1l -> return [Block; Delay 0.1; Delay 0.1; Delay 0.1] - | 2l, 0l -> return [Block; Pass; Pass; Pass] - | _ -> return [Pass; Pass; Pass; Pass] - in - return (block_hash, block_header, operations, propagation_vector) - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - let* level2_preattestation = op_is_preattestation ~level:2l op_hash op in - let* level2_attestation = op_is_attestation ~level:2l op_hash op in - let propagation_vector = - match - (is_a10_attestation, level2_preattestation, level2_attestation) - with - | true, _, _ -> [Pass; Block; Block; Block] - | _, true, _ | _, _, true -> [Block; Block; Block; Block] - | _, _, _ -> [Pass; Pass; Pass; Pass] - in - return (op_hash, op, propagation_vector) - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "B" - end in - let module Node_c_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - let propagation_vector = - if !c_received_2_1 then [Pass; Pass; Pass; Pass] - else [Block; Block; Block; Block] - in - return (block_hash, block_header, operations, propagation_vector) - - let check_chain_after_processing ~level ~round ~chain:_ = - match (level, round) with - | 2l, 1l -> - c_received_2_1 := true ; - return_unit - | _ -> return_unit - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - let* level2_preattestation = op_is_preattestation ~level:2l op_hash op in - let* level2_attestation = op_is_attestation ~level:2l op_hash op in - let propagation_vector = - match - ( is_a10_attestation, - !c_received_2_1, - level2_preattestation, - level2_attestation ) - with - | true, _, _, _ -> [Pass; Block; Block; Block] - | _, false, true, _ | _, false, _, true -> [Block; Block; Block; Block] - | _, _, _, _ -> [Pass; Pass; Pass; Pass] - in - return (op_hash, op, propagation_vector) - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "C" - end in - let module Node_d_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - let propagation_vector = - if !d_received_2_1 then [Pass; Pass; Pass; Pass] - else [Block; Block; Block; Block] - in - return (block_hash, block_header, operations, propagation_vector) - - let check_chain_after_processing ~level ~round ~chain:_ = - match (level, round) with - | 2l, 1l -> - d_received_2_1 := true ; - return_unit - | _ -> return_unit - - let on_inject_operation ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - let* level2_preattestation = op_is_preattestation ~level:2l op_hash op in - let* level2_attestation = op_is_attestation ~level:2l op_hash op in - let propagation_vector = - match - ( is_a10_attestation, - !d_received_2_1, - level2_preattestation, - level2_attestation ) - with - | true, _, _, _ -> [Pass; Block; Block; Block] - | _, false, true, _ | _, false, _, true -> [Block; Block; Block; Block] - | _, _, _, _ -> [Pass; Pass; Pass; Pass] - in - return (op_hash, op, propagation_vector) - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "D" - end in - let config = - { - default_config with - initial_seed = - some_seed "rngGJ7ReXwsjWuzpeqCgHAjudFwJtxdYz44Genz1FnyJ8R226hoKh"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ( 2l, - [ - (0l, bootstrap2); - (1l, bootstrap1); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ]; - timeout = 60; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Node_b_hooks)); - (1, (module Node_c_hooks)); - (1, (module Node_d_hooks)); - ] - -(* - -Scenario M8 - -5. B proposes at 2.0 and observes PQC but not QC. -6. C re-proposes at 2.1 and similarly observes PQC but not QC. -7. A proposes at 2.2. B, C, and D do not switch to A's branch; moreover A - switches to their branch when it receives the next proposal (2.3). This - happens because B, C, and D have PQC despite A having a higher round (2 > 1). -8. We wait 2 more levels before checking everyone's chain to verify that - B's proposal has been selected. - -*) - -let test_scenario_m8 () = - let open Lwt_result_syntax in - let b_proposal_2_0 = ref None in - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> block.shell.level > 4l - | _ -> false - in - let on_inject_operation0 ~op_hash ~op = - let* is_a10_attestation = - op_is_attestation ~level:1l ~round:0l op_hash op - in - let* is_b20_attestation = - op_is_attestation ~level:2l ~round:0l op_hash op - in - let* is_c21_attestation = - op_is_attestation ~level:2l ~round:1l op_hash op - in - let propagation_vector = - if is_a10_attestation then [Pass; Block; Block; Block] - else if is_b20_attestation || is_c21_attestation then - [Block; Block; Block; Block] - else [Pass; Pass; Pass; Pass] - in - return (op_hash, op, propagation_vector) - in - let check_chain_on_success0 node_label ~chain = - match List.nth (List.rev chain) 2 with - | None -> failwith "Node %s has empty chain" node_label - | Some (block : block) -> - verify_payload_hash - ~protocol_data:block.protocol_data - ~original_proposal:b_proposal_2_0 - ~message: - (Format.sprintf - "%s did not switch to B's proposal (level 2, round 0)" - node_label) - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - return (block_hash, block_header, operations, [Pass; Pass; Pass; Pass]) - - let on_inject_operation = on_inject_operation0 - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "A" - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data = - let* propagation_vector = - match (level, round) with - | 1l, 1l -> return [Block; Delay 0.1; Delay 0.1; Delay 0.1] - | 2l, 0l -> - let* () = - save_proposal_payload ~protocol_data ~var:b_proposal_2_0 - in - return [Block; Pass; Pass; Pass] - | _ -> return [Pass; Pass; Pass; Pass] - in - return (block_hash, block_header, operations, propagation_vector) - - let on_inject_operation = on_inject_operation0 - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "B" - end in - let module Node_c_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level ~round ~block_hash ~block_header ~operations - ~protocol_data:_ = - let propagation_vector = - match (level, round) with - | 2l, 1l -> [Block; Pass; Pass; Pass] - | _ -> [Pass; Pass; Pass; Pass] - in - return (block_hash, block_header, operations, propagation_vector) - - let on_inject_operation = on_inject_operation0 - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "C" - end in - let module Node_d_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - return (block_hash, block_header, operations, [Pass; Pass; Pass; Pass]) - - let on_inject_operation = on_inject_operation0 - - let stop_on_event = stop_on_event0 - - let check_chain_on_success = check_chain_on_success0 "D" - end in - let config = - { - default_config with - initial_seed = - some_seed "rngFy2zFmgg25SXrE6aawqQVhD1kdw9eCCRxc843RLQjz5MZ6MGER"; - delegate_selection = - [ - ( 1l, - [ - (0l, bootstrap1); - (1l, bootstrap2); - (2l, bootstrap3); - (3l, bootstrap4); - ] ); - ( 2l, - [ - (0l, bootstrap2); - (1l, bootstrap3); - (2l, bootstrap1); - (3l, bootstrap4); - ] ); - ]; - timeout = 60; - } - in - run - ~config - [ - (1, (module Node_a_hooks)); - (1, (module Node_b_hooks)); - (1, (module Node_c_hooks)); - (1, (module Node_d_hooks)); - ] - -let compute_expected_injection_time config latest_proposal at_round = - let latest_proposal_block_time = - Option.value - ~default:Time.Protocol.epoch - (Option.map - (fun b -> b.Baking_state.shell.Block_header.timestamp) - latest_proposal) - in - let round = Protocol.Alpha_context.Round.to_int32 at_round in - let expected_delay = - Int64.of_int - @@ - match round with - | 0l -> 0 - | 1l -> Int64.to_int config.round0 - | n -> - Int64.to_int config.round0 - + Int32.(to_int (mul (pred n) (Int64.to_int32 config.round1))) - in - Time.Protocol.(add latest_proposal_block_time expected_delay) - |> Time.System.of_protocol_exn - -(* - Scenario M9 - - Two nodes: A, B - - 1. L1 - A proposes and reaches QC. - 2. L1 - When QC is reached, observe that B emits time to prepare - event before the beginning of the round. - 3. L2 - A observes the block from B and ends. - -*) -let test_scenario_m9 () = - let stop_level = Int32.of_int 2 in - let node_b_qc = ref false in - let node_b_level = ref Int32.zero in - let bh : Block_hash.t option ref = ref None in - let stop_on_event0 = function - | Baking_state.New_head_proposal {block; _} -> - block.shell.level >= stop_level - | _ -> false - in - let config = - { - default_config with - delegate_selection = [(1l, [(0l, bootstrap1)]); (2l, [(0l, bootstrap2)])]; - round0 = 3L; - round1 = 4L; - } - in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let raise_error : string option ref = ref None - - let block_round block_header = - let open Block_header in - match - Protocol.Alpha_context.Fitness.round_from_raw block_header.shell.fitness - with - | Error _ -> assert false - | Ok x -> x - - let on_new_head ~block_hash ~block_header = - let open Block_header in - let block_round = block_round block_header in - let level = block_header.shell.level in - let is_round0 = - Protocol.Alpha_context.Round.equal - block_round - Protocol.Alpha_context.Round.zero - in - match level with - | 2l -> - raise_error := - if - is_round0 - && not (Block_hash.equal block_hash (Stdlib.Option.get !bh)) - then Some "Block hash was not equal" - else if not is_round0 then - Some "Level 2 expected to have a block at round 0" - else None ; - Lwt.return @@ Some (block_hash, block_header) - | _ -> Lwt.return @@ Some (block_hash, block_header) - - let stop_on_event = stop_on_event0 - - let check_chain_on_success ~chain:_ = - match !raise_error with - | Some err -> Stdlib.failwith err - | _ -> Lwt_result_syntax.return_unit - end in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let on_inject_block ~level:_ ~round:_ ~block_hash ~block_header ~operations - ~protocol_data:_ = - bh := Some block_hash ; - Lwt_result_syntax.return - (block_hash, block_header, operations, [Pass; Pass]) - - let latest_proposal : Baking_state.block_info option ref = ref None - - let stop_on_event = function - | Baking_state.Quorum_reached _ when !node_b_level = 1l -> - node_b_qc := true ; - false - | Baking_state.Timeout timeout when !node_b_level = 1l -> ( - match timeout with - | Time_to_prepare_next_level_block {at_round} -> - let expected_injection_time = - compute_expected_injection_time config !latest_proposal at_round - in - (* We should bake before the block's expected timestamp *) - if Time.System.(expected_injection_time >= now ()) then - Stdlib.failwith - "bootstrap2 was expected to prepare the block before its \ - timestamp@." ; - if !node_b_qc then false - else - Stdlib.failwith "time to prepare emitted without observing qc" - | End_of_round _ -> - Stdlib.failwith "End of round timeout not expected") - | Baking_state.New_valid_proposal {block; _} -> - latest_proposal := Some block ; - node_b_level := block.shell.level ; - false - | event -> stop_on_event0 event - end in - run ~config [(1, (module Node_a_hooks)); (1, (module Node_b_hooks))] - -(* - Scenario M10 - - Two nodes : A, B - - 1. Node A is the proposer at level 1, round 0, but is dead - 2. Node B proposes at level 1, round 1, therefore the - Time_to_prepare_next_level_block was not called before its - timestamp. -*) -let test_scenario_m10 () = - let stop_level = 1l in - let stop_round = Protocol.Alpha_context.Round.(succ zero) in - let module Node_a_hooks : Hooks = struct - include Default_hooks - - let stop_on_event _ = true (* Node A stops immediately. *) - end in - let config = - { - default_config with - round0 = 3L; - round1 = 4L; - delegate_selection = [(1l, [(0l, bootstrap1); (1l, bootstrap2)])]; - } - in - let module Node_b_hooks : Hooks = struct - include Default_hooks - - let latest_proposal : Baking_state.block_info option ref = ref None - - let stop_on_event = function - | Baking_state.Timeout (Time_to_prepare_next_level_block {at_round}) -> - let expected_injection_time = - compute_expected_injection_time config !latest_proposal at_round - in - let current_time = Time.System.now () in - if Time.System.(current_time < expected_injection_time) then - Stdlib.failwith - "bootstrap2 was not supposed to prepare a block before the block \ - expected injection time" ; - false - (* When we get to level = 1, round = 1, the time to prepare timeout should - not have been called *) - | Baking_state.New_head_proposal {block; _} -> - latest_proposal := Some block ; - let block_round = block.round in - block.shell.level >= stop_level && block_round = stop_round - | _ -> false - end in - run ~config [(1, (module Node_a_hooks)); (1, (module Node_b_hooks))] - -let () = - let open Lwt_result_syntax in - (* Activate a sink to record baker's events *) - let t = lazy (Tezt_sink.activate ()) in - let proto_name = - String.lowercase_ascii Protocol.name - |> String.map (function '-' -> '_' | x -> x) - in - let register_test (title, test) = - Test.register - ~__FILE__ - ~title - ~tags:[proto_name; "baker"; "mockup"; Tag.time_sensitive] - @@ fun () -> - let*! () = Lazy.force t in - let*! r = test () in - match r with - | Ok () -> unit - | Error errs -> Test.fail ~__LOC__ "%a" pp_print_trace errs - in - List.iter - register_test - [ - (Protocol.name ^ ": reaches level 5", test_level_5); - ( Protocol.name ^ ": cannot progress without new head", - test_preattest_on_valid ); - (Protocol.name ^ ": reset delayed pqc", test_reset_delayed_pqc); - (Protocol.name ^ ": scenario t1", test_scenario_t1); - (Protocol.name ^ ": scenario t2", test_scenario_t2); - (Protocol.name ^ ": scenario t3", test_scenario_t3); - (Protocol.name ^ ": scenario t4", test_scenario_t4); - (Protocol.name ^ ": scenario f1", test_scenario_f1); - (Protocol.name ^ ": scenario f2", test_scenario_f2); - (Protocol.name ^ ": scenario m1", test_scenario_m1); - (Protocol.name ^ ": scenario m2", test_scenario_m2); - (Protocol.name ^ ": scenario m3", test_scenario_m3); - (Protocol.name ^ ": scenario m4", test_scenario_m4); - (Protocol.name ^ ": scenario m5", test_scenario_m5); - (Protocol.name ^ ": scenario m6", test_scenario_m6); - (Protocol.name ^ ": scenario m7", test_scenario_m7); - (Protocol.name ^ ": scenario m8", test_scenario_m8); - (Protocol.name ^ ": scenario m9", test_scenario_m9); - (Protocol.name ^ ": scenario m10", test_scenario_m10); - ] diff --git a/src/proto_019_PtParisB/lib_plugin/index.mld b/src/proto_019_PtParisB/lib_plugin/index.mld index 5df8df340496f579ed019d9f4643a8f673e4d77f..1f310d174c378ec03e50d050d58bd8cb1501cf17 100644 --- a/src/proto_019_PtParisB/lib_plugin/index.mld +++ b/src/proto_019_PtParisB/lib_plugin/index.mld @@ -4,7 +4,6 @@ This is a package containing some libraries related to the Tezos 019-PtParisB pr It contains the following libraries: -- {{!module-Tezos_019_PtParisB_test_helpers}Tezos_019_PtParisB_test_helpers}: Protocol testing framework - {{!module-Tezos_baking_019_PtParisB}Tezos_baking_019_PtParisB}: Base library for `tezos-baker/accuser` - {{!module-Tezos_baking_019_PtParisB_commands}Tezos_baking_019_PtParisB_commands}: Protocol-specific commands for baking - {{!module-Tezos_client_019_PtParisB}Tezos_client_019_PtParisB}: Protocol specific library for `octez-client` diff --git a/src/proto_019_PtParisB/lib_plugin/test/dune b/src/proto_019_PtParisB/lib_plugin/test/dune deleted file mode 100644 index f9f4b9d70580771bccc6abad344f784ffbc6c271..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_plugin/test/dune +++ /dev/null @@ -1,62 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_plugin_test_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-libs.base-test-helpers - octez-libs.base.unix - octez-alcotezt - octez-libs.test-helpers - qcheck-alcotest - octez-libs.stdlib-unix - octez-libs.micheline - octez-protocol-019-PtParisB-libs.plugin - tezos-protocol-019-PtParisB.protocol - tezos-protocol-019-PtParisB.parameters - octez-protocol-019-PtParisB-libs.test-helpers) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_base_test_helpers - -open Octez_alcotezt - -open Tezos_test_helpers - -open Tezos_micheline - -open Tezos_protocol_plugin_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_protocol_019_PtParisB.Protocol - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_019_PtParisB_test_helpers) - (modules - helpers - test_conflict_handler - test_consensus_filter - test_fee_needed_to_overtake - test_fee_needed_to_replace_by_fee)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_plugin_test_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package octez-protocol-019-PtParisB-libs) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_plugin/test/helpers.ml b/src/proto_019_PtParisB/lib_plugin/test/helpers.ml deleted file mode 100644 index cb44f4007624e1602872bbdc8f11fc0c83f3d50b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_plugin/test/helpers.ml +++ /dev/null @@ -1,172 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** One-element list containing the Tezt tag of the local protocol, - e.g. "alpha", "nairobi", "mumbai", etc. *) -let proto_tags = Alcotezt_utils.is_proto_test __FILE__ - -(** Register a plugin test, with file-specific tags and prefix in title. *) -let register_test ~__FILE__ ~file_title ~file_tags ~title ~additional_tags = - Test.register - ~__FILE__ - ~title:(sf "%s/plugin: %s: %s" Protocol.name file_title title) - ~tags:(proto_tags @ ("plugin" :: (file_tags @ additional_tags))) - -(** Generator for a packed operation preceded by its hash. *) -let oph_and_op_gen = QCheck2.Gen.map snd Operation_generator.generate_operation - -(** Generator for a packed non-manager operation. *) -let non_manager_operation_gen = - Operation_generator.generate_non_manager_operation - -(** Generator for a packed manager operation. *) -let manager_operation_gen = - let open QCheck2.Gen in - let* batch_size = int_range 1 Operation_generator.max_batch_size in - Operation_generator.generate_manager_operation batch_size - -(** Generator for a packed manager operation with the specified - total fee and gas limit. *) -let manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas = - let open Alpha_context in - let open QCheck2.Gen in - let rec set_fee_and_gas : - type kind. _ -> _ -> kind contents_list -> kind contents_list t = - fun desired_total_fee desired_total_gas -> function - | Single (Manager_operation data) -> - let fee = Tez.of_mutez_exn (Int64.of_int desired_total_fee) in - let gas_limit = Gas.Arith.integral_of_int_exn desired_total_gas in - return (Single (Manager_operation {data with fee; gas_limit})) - | Cons (Manager_operation data, tail) -> - let* local_fee = - (* We generate some corner cases where some individual - operations in the batch have zero fees. *) - let* r = frequencyl [(7, `Random); (2, `Zero); (1, `All)] in - match r with - | `Random -> int_range 0 desired_total_fee - | `Zero -> return 0 - | `All -> return desired_total_fee - in - let* local_gas = int_range 0 desired_total_gas in - let fee = Tez.of_mutez_exn (Int64.of_int local_fee) in - let gas_limit = Gas.Arith.integral_of_int_exn local_gas in - let* tail = - set_fee_and_gas - (desired_total_fee - local_fee) - (desired_total_gas - local_gas) - tail - in - return (Cons (Manager_operation {data with fee; gas_limit}, tail)) - | Single _ -> - (* This function is only called on a manager operation. *) assert false - in - (* Generate a random manager operation. *) - let* batch_size = int_range 1 Operation_generator.max_batch_size in - let* op = Operation_generator.generate_manager_operation batch_size in - (* Modify its fee and gas to match the [fee_in_mutez] and [gas] inputs. *) - let {shell = _; protocol_data = Operation_data protocol_data} = op in - let* contents = set_fee_and_gas fee_in_mutez gas protocol_data.contents in - let protocol_data = {protocol_data with contents} in - let op = {op with protocol_data = Operation_data protocol_data} in - return (Operation.hash_packed op, op) - -(** Generate a packed manager operation with the specified total fee - and gas limit. *) -let generate_manager_op_with_fee_and_gas ~fee_in_mutez ~gas = - QCheck2.Gen.generate1 (manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas) - -(** Change the total fee of the packed operation [op] to [fee] (in mutez). - Also change its source to [source] if the argument is provided. - - Precondition: [op] must be a manager operation. *) -let set_fee_and_source fee ?source op = - let open Alpha_context in - let open QCheck2.Gen in - let rec set_fee_contents_list_gen : - type kind. int64 -> kind contents_list -> kind contents_list t = - fun desired_total_fee (* in mutez *) -> function - | Single (Manager_operation data) -> - let fee = Tez.of_mutez_exn desired_total_fee in - let contents = - match source with - | Some source -> Manager_operation {data with fee; source} - | None -> Manager_operation {data with fee} - in - return (Single contents) - | Cons (Manager_operation data, tail) -> - let* local_fee = - (* We generate some corner cases where some individual - operations in the batch have zero fees. *) - let* r = frequencyl [(7, `Random); (2, `Zero); (1, `All)] in - match r with - | `Random -> - let* n = int_range 0 (Int64.to_int desired_total_fee) in - return (Int64.of_int n) - | `Zero -> return 0L - | `All -> return desired_total_fee - in - let fee = Tez.of_mutez_exn local_fee in - let contents = - match source with - | Some source -> Manager_operation {data with fee; source} - | None -> Manager_operation {data with fee} - in - let* tail = - set_fee_contents_list_gen (Int64.sub desired_total_fee local_fee) tail - in - return (Cons (contents, tail)) - | Single _ -> (* see precondition: manager operation *) assert false - in - let {shell = _; protocol_data = Operation_data data} = op in - let contents = generate1 (set_fee_contents_list_gen fee data.contents) in - {op with protocol_data = Operation_data {data with contents}} - -let set_fee fee op = set_fee_and_source fee op - -(** Return an [Operation_hash.t] that is distinct from [different_from]. *) -let different_oph ~different_from = - if Operation_hash.(different_from = zero) then ( - let new_hash = Operation_hash.hash_string ["1"] in - assert (Operation_hash.(new_hash <> zero)) ; - new_hash) - else Operation_hash.zero - -(** List helpers *) - -let rec iter_neighbors f = function - | [] | [_] -> () - | x :: (y :: _ as l) -> - f x y ; - iter_neighbors f l - -let iter2_exn f l1 l2 = - match List.iter2 ~when_different_lengths:() f l1 l2 with - | Ok () -> () - | Error () -> - Test.fail - ~__LOC__ - "Lists have respective lengths %d and %d." - (List.length l1) - (List.length l2) diff --git a/src/proto_019_PtParisB/lib_plugin/test/test_conflict_handler.ml b/src/proto_019_PtParisB/lib_plugin/test/test_conflict_handler.ml deleted file mode 100644 index c6a2e9e6b15986a7b7c636fc546a170972cd1622..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_plugin/test/test_conflict_handler.ml +++ /dev/null @@ -1,226 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Plugin.Mempool - Invocation: dune exec src/proto_019_PtParisB/lib_plugin/test/main.exe \ - -- --file test_conflict_handler.ml - Subject: Unit tests the Mempool.conflict_handler function of the plugin -*) - -let register_test = - Helpers.register_test - ~__FILE__ - ~file_title:"conflict_handler" - ~file_tags:["mempool"; "conflict_handler"] - -let pp_answer fmt = function - | `Keep -> Format.fprintf fmt "Keep" - | `Replace -> Format.fprintf fmt "Replace" - -let check_answer ?__LOC__ expected actual = - assert - (Qcheck2_helpers.qcheck_eq ~pp:pp_answer ?__LOC__ expected actual : bool) - -let is_manager_op ((_ : Operation_hash.t), op) = - (* This is implemented differently from - [Plugin.Mempool.is_manager_operation] (which relies on - [Alpha_context.Operation.acceptable_pass]), used in - [Plugin.Mempool.conflict_handler], to avoid the test being just a - copy of the code. *) - let {Alpha_context.protocol_data = Operation_data proto_data; _} = op in - match proto_data.contents with - | Single (Manager_operation _) | Cons (Manager_operation _, _) -> true - | _ -> false - -(** Test that when the operations are not both manager operations, the - conflict handler picks the higher operation according to - [Operation.compare]. *) -let () = - register_test - ~title:"non-manager operations" - ~additional_tags:["nonmanager"; "random"] - @@ fun () -> - let ops = - QCheck2.Gen.( - generate ~n:100 (pair Helpers.oph_and_op_gen Helpers.oph_and_op_gen)) - in - List.iter - (fun (op1, op2) -> - let answer = - Plugin.Mempool.conflict_handler - Plugin.Mempool.default_config - ~existing_operation:op1 - ~new_operation:op2 - in - if is_manager_op op1 && is_manager_op op2 then - (* When both operations are manager operations, the result is - complicated and depends on the [config]. Testing it here - would mean basically reimplementing - [conflict_handler]. Instead, we test this case in the - "manager operations" test below. *) - () - else if - (* When there is at least one non-manager operation, the - conflict handler defers to [Operation.compare]: the higher - operation is selected. *) - Alpha_context.Operation.compare op1 op2 >= 0 - then check_answer ~__LOC__ `Keep answer - else check_answer ~__LOC__ `Replace answer) - ops ; - unit - -let check_conflict_handler ~__LOC__ config ~old ~nw expected = - let answer = - Plugin.Mempool.conflict_handler - config - ~existing_operation:old - ~new_operation:nw - in - check_answer ~__LOC__ expected answer - -(** Test the semantics of the conflict handler on manager operations, - with either hand-picked or carefully generated fee and gas. *) -let () = - register_test - ~title:"manager operations" - ~additional_tags:["manager"; "random"] - @@ fun () -> - let make_op = Helpers.generate_manager_op_with_fee_and_gas in - - (* Test operations with specific fee and gas, using the default - configuration. This configuration replaces the old operation when - the new one is at least 5% better, in terms of both fees and - fee/gas ratios. *) - let default = Plugin.Mempool.default_config in - let ref_fee = 10_000_000 in - let ref_gas = 2100 in - (* Reference operation arbitrarily has 10 tez of fees and 2100 - gas. The gas is chosen to still give an integer when multiplied - by 100/105. *) - let old = make_op ~fee_in_mutez:ref_fee ~gas:ref_gas in - (* Operation with same fee and ratio. *) - let op_same = make_op ~fee_in_mutez:ref_fee ~gas:ref_gas in - check_conflict_handler ~__LOC__ default ~old ~nw:op_same `Keep ; - (* 5% better fee but same ratio (because gas is also 5% more). *) - let more5 = Q.make (Z.of_int 105) (Z.of_int 100) in - let fee_more5 = Q.(to_int (mul more5 (of_int ref_fee))) in - let gas_more5 = Q.(to_int (mul more5 (of_int ref_gas))) in - let op_fee5 = make_op ~fee_in_mutez:fee_more5 ~gas:gas_more5 in - check_conflict_handler ~__LOC__ default ~old ~nw:op_fee5 `Keep ; - (* 5% better ratio but same fee (because gas is multiplied by 100/105). *) - let less5 = Q.make (Z.of_int 100) (Z.of_int 105) in - let gas_less5 = Q.(to_int (mul less5 (of_int ref_gas))) in - let op_ratio5 = make_op ~fee_in_mutez:ref_fee ~gas:gas_less5 in - check_conflict_handler ~__LOC__ default ~old ~nw:op_ratio5 `Keep ; - (* Both 5% better fee and 5% better ratio. *) - let op_both5 = make_op ~fee_in_mutez:fee_more5 ~gas:ref_gas in - check_conflict_handler ~__LOC__ default ~old ~nw:op_both5 `Replace ; - - (* Config that requires 10% better fee and ratio to replace. *) - let config10 = - Plugin.Mempool.Internal_for_tests.default_config_with_replace_factor - (Q.make (Z.of_int 11) (Z.of_int 10)) - in - - check_conflict_handler ~__LOC__ config10 ~old ~nw:op_same `Keep ; - check_conflict_handler ~__LOC__ config10 ~old ~nw:op_fee5 `Keep ; - check_conflict_handler ~__LOC__ config10 ~old ~nw:op_ratio5 `Keep ; - check_conflict_handler ~__LOC__ config10 ~old ~nw:op_both5 `Keep ; - (* Config that replaces when the new op has at least as much fee and ratio. *) - let config0 = - Plugin.Mempool.Internal_for_tests.default_config_with_replace_factor Q.one - in - check_conflict_handler ~__LOC__ config0 ~old ~nw:op_same `Replace ; - check_conflict_handler ~__LOC__ config0 ~old ~nw:op_fee5 `Replace ; - check_conflict_handler ~__LOC__ config0 ~old ~nw:op_ratio5 `Replace ; - check_conflict_handler ~__LOC__ config0 ~old ~nw:op_both5 `Replace ; - (* This config does not replace when the new operation has worse - fees (even when the ratio is higher). *) - let op_less_fee = make_op ~fee_in_mutez:(ref_fee - 1) ~gas:(ref_gas - 1) in - check_conflict_handler ~__LOC__ default ~old ~nw:op_less_fee `Keep ; - (* This config does not replace either when the ratio is smaller. *) - let op_worse_ratio = make_op ~fee_in_mutez:ref_fee ~gas:(ref_gas + 1) in - check_conflict_handler ~__LOC__ default ~old ~nw:op_worse_ratio `Keep ; - - (* Generate random operations which do not have 5% better fees than - the reference [op]: they should not replace [op] when using the - default config. *) - let open QCheck2.Gen in - let repeat = 30 in - let max_gas = 5 * ref_gas in - let generator_not_5more_fee = - let* fee_in_mutez = int_range 0 (fee_more5 - 1) in - let* gas = int_range 0 max_gas in - Format.eprintf "op_not_fee5: fee = %d; gas = %d@." fee_in_mutez gas ; - Helpers.manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas - in - let ops_not_5more_fee = generate ~n:repeat generator_not_5more_fee in - List.iter - (fun nw -> check_conflict_handler ~__LOC__ default ~old ~nw `Keep) - ops_not_5more_fee ; - (* Generate random operations which do not have 5% better ratio than - the reference [op]: they should not replace [op] when using the - default config. *) - let ratio_5more = - Q.(mul more5 (make (Z.of_int ref_fee) (Z.of_int ref_gas))) - in - let generator_not_5more_ratio = - let* gas = int_range 0 max_gas in - let fee_for_5more_ratio = Q.(mul (of_int gas) ratio_5more) in - let fee_upper_bound = Q.to_int fee_for_5more_ratio - 1 in - let* fee_in_mutez = int_range 0 (max 0 fee_upper_bound) in - Format.eprintf "op_not_ratio5: fee = %d; gas = %d@." fee_in_mutez gas ; - Helpers.manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas - in - let ops_not_5more_ratio = generate ~n:repeat generator_not_5more_ratio in - List.iter - (fun nw -> check_conflict_handler ~__LOC__ default ~old ~nw `Keep) - ops_not_5more_ratio ; - (* Generate random operations which have both 5% higher fees and 5% - better ratio than the reference [op]: they should replace [op] - when using the default config. *) - let max_fee = - (* We use a significantly higher factor to define [max_fee] from - [ref_fee] than [max_gas] from [ref_gas]. Therefore, even if we - generate a gas equal to [max_gas], we can still generate a fee - that makes the ratio at least 5% better than the reference - operation's. *) - 10 * ref_fee - in - let generator_both_5more = - let* gas = int_range 0 max_gas in - let fee_for_5more_ratio = Q.(mul (of_int gas) ratio_5more) in - let fee_lower_bound = max fee_more5 (Q.to_int fee_for_5more_ratio + 1) in - let* fee_in_mutez = int_range fee_lower_bound max_fee in - Format.eprintf "op_both_better: fee = %d; gas = %d@." fee_in_mutez gas ; - Helpers.manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas - in - let ops_both_5more = generate ~n:repeat generator_both_5more in - List.iter - (fun nw -> check_conflict_handler ~__LOC__ default ~old ~nw `Replace) - ops_both_5more ; - Lwt.return_unit diff --git a/src/proto_019_PtParisB/lib_plugin/test/test_consensus_filter.ml b/src/proto_019_PtParisB/lib_plugin/test/test_consensus_filter.ml deleted file mode 100644 index 5b7c0f3bdfb8f8476b75e477ee2449ade7152301..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_plugin/test/test_consensus_filter.ml +++ /dev/null @@ -1,491 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Plugin.Mempool - Invocation: dune exec src/proto_019_PtParisB/lib_plugin/test/main.exe \ - -- --file test_consensus_filter.ml - Subject: Unit tests the Mempool consensus filter -*) - -open Qcheck2_helpers -open Alpha_context -open Plugin.Mempool.Internal_for_tests - -(** {2. Conversion helpers} *) - -let timestamp_of_int32 ts = Timestamp.of_seconds (Int64.of_int32 ts) - -(** Data Generators *) -module Generator = struct - open QCheck2.Gen - - let decorate ?(prefix = "") ?(suffix = "") printer d = - prefix ^ printer d ^ suffix - - let config = - let* drift_int_opt = opt small_nat in - let clock_drift = - Option.map - (fun drift_int -> Period.of_seconds_exn (Int64.of_int drift_int)) - drift_int_opt - in - return (default_config_with_clock_drift clock_drift) - - let print_config = - decorate ~prefix:"clock_drift " (fun config -> - Option.fold - ~none:"round_0 duration" - ~some:(fun drift -> Int64.to_string @@ Period.to_seconds drift) - (get_clock_drift config)) - - let of_result = Result.value_f ~default:(fun _ -> assert false) - - let small_nat_32 = - let+ small_nat in - Int32.of_int small_nat - - let small_signed_32 = - let+ small_signed_int in - Int32.of_int small_signed_int - - let dup gen = - let+ x = gen in - (x, x) - - let round = - let+ x = map (fun i32 -> Round.of_int32 i32) small_nat_32 in - of_result x - - let print_round = Format.asprintf "%a" Round.pp - - let same_rounds = dup round - - let level = - let+ x = map Raw_level.of_int32 small_nat_32 in - of_result x - - let print_level = Format.asprintf "%a" Raw_level.pp - - let same_levels = dup level - - let timestamp = - let+ i32 = int32 in - timestamp_of_int32 i32 - - let print_timestamp = Timestamp.to_notation - - let near_timestamps = - let+ i, diff = pair int32 small_signed_32 in - timestamp_of_int32 i |> fun ts1 -> - timestamp_of_int32 Int32.(add i diff) |> fun ts2 -> (ts1, ts2) - - let successive_timestamp = - let+ ts, (diff : int) = pair timestamp small_nat in - let x = - let open Result_syntax in - let* diff = Period.of_seconds (Int64.of_int diff) in - let* ts2 = Timestamp.(ts +? diff) in - Ok (ts, ts2) - in - of_result x - - let param_acceptable ?(rounds = pair round round) ?(levels = pair level level) - ?(timestamps = near_timestamps) () = - pair config (pair (pair rounds levels) timestamps) - - let print_param_acceptable = - let open QCheck2.Print in - let print_levels = pair print_level print_level in - let print_timestamps = pair print_timestamp print_timestamp in - let print_rounds = pair print_round print_round in - pair print_config (pair (pair print_rounds print_levels) print_timestamps) -end - -let assert_no_error d = match d with Error _ -> assert false | Ok d -> d - -(** Constants : - This could be generated but it would largely increase the search space. *) -let round_durations : Round.round_durations = - assert_no_error - @@ Round.Durations.create - ~first_round_duration:Period.(of_seconds_exn 4L) - ~delay_increment_per_round:Period.(of_seconds_exn 10L) - -let round_zero_duration = Round.round_duration round_durations Round.zero - -(** Don't allow test to fail *) -let no_error = function - | Ok b -> b - | Error errs -> - Format.printf - "test fail due to error : %a@." - Error_monad.pp_print_trace - (Environment.wrap_tztrace errs) ; - false - -(** Helper to compute *) -let durations round_durations start stop = - let open Result_syntax in - List.map_e - (fun round -> - let+ round = Round.of_int round in - Round.round_duration round_durations round |> Period.to_seconds) - Tezos_stdlib.Utils.Infix.(start -- stop) - -(** Expected timestamp for the begining of a round at same level that - the proposal. - - It has been developped before the Round.timestamp_of_round_same_level and has a - different implementation. - -*) -let timestamp_of_round round_durations ~proposal_timestamp ~proposal_round - ~round = - let open Result_syntax in - let* _rnd_dur, exp_ts = - let iproposal_round = Int32.to_int @@ Round.to_int32 proposal_round in - let iround = Int32.to_int @@ Round.to_int32 round in - if Round.(proposal_round = round) then - return (Period.zero, proposal_timestamp) - else if Round.(proposal_round < round) then - let* durations = durations round_durations iproposal_round (iround - 1) in - let* rounds_duration = - Period.of_seconds @@ List.fold_left Int64.add Int64.zero durations - in - let+ ts = Timestamp.(proposal_timestamp +? rounds_duration) in - (rounds_duration, ts) - else - let* durations = durations round_durations iround (iproposal_round - 1) in - List.fold_left Int64.add Int64.zero durations |> fun rounds_duration -> - Timestamp.of_seconds - @@ Int64.sub (Timestamp.to_seconds proposal_timestamp) rounds_duration - |> fun ts -> - let+ rounds_duration = Period.of_seconds rounds_duration in - (rounds_duration, ts) - in - return exp_ts - -let drift_of = - let r0_dur = Round.round_duration round_durations Round.zero in - fun clock_drift -> Option.value ~default:r0_dur clock_drift - -(** [max_ts] computes the upper bound on future timestamps given the - accepted round drift. -*) -let max_ts clock_drift prop_ts now = - Timestamp.(max prop_ts now +? drift_of clock_drift) - -let predecessor_start proposal_timestamp proposal_round grandparent_round = - let open Result_syntax in - assert_no_error - @@ let* proposal_level_offset = - Round.level_offset_of_round - round_durations - ~round:Round.(succ grandparent_round) - in - let* proposal_round_offset = - Round.level_offset_of_round round_durations ~round:proposal_round - in - let* proposal_offset = - Period.(add proposal_level_offset proposal_round_offset) - in - Ok Timestamp.(proposal_timestamp - proposal_offset) - -(** {2. Tests} *) - -(** Test past operations that are accepted whatever the current timestamp is: - strictly before the predecessor level or at the current level and with a - strictly lower round than the head. *) - -let test_acceptable_past_level = - let open QCheck2 in - Test.make - ~print:Generator.print_param_acceptable - ~name:"acceptable past op " - (Generator.param_acceptable ()) - (fun - ( config, - ( ((proposal_round, op_round), (proposal_level, op_level)), - (proposal_timestamp, now_timestamp) ) ) - -> - Raw_level.( - proposal_level > succ op_level - || (proposal_level = op_level && Round.(proposal_round > op_round))) - ==> no_error - @@ acceptable_op - ~config - ~round_durations - ~round_zero_duration - ~proposal_level - ~proposal_round - ~proposal_timestamp - ~proposal_predecessor_level_start: - (predecessor_start - proposal_timestamp - proposal_round - Round.zero) - ~op_level - ~op_round - ~now_timestamp) - -(** Test acceptable operations at current level, current round, i.e. on the - currently considered proposal *) -let test_acceptable_current_level_current_round = - let open QCheck2 in - Test.make - ~print:Generator.print_param_acceptable - ~name:"same round, same level " - Generator.(param_acceptable ~rounds:same_rounds ~levels:same_levels ()) - (fun ( config, - (((op_round, _), (_, op_level)), (proposal_timestamp, now_timestamp)) - ) -> - let proposal_level = op_level in - let proposal_round = op_round in - no_error - @@ acceptable_op - ~config - ~round_durations - ~round_zero_duration - ~proposal_level - ~proposal_round - ~proposal_timestamp - ~proposal_predecessor_level_start: - (predecessor_start proposal_timestamp proposal_round Round.zero) - ~op_level - ~op_round - ~now_timestamp) - -(** Test operations at same level, different round, with an acceptable expected - timestamp for the operation. *) -let test_acceptable_current_level = - let open Result_syntax in - let open QCheck2 in - Test.make - ~print:Generator.print_param_acceptable - ~name:"same level, different round, acceptable op" - Generator.(param_acceptable ~levels:same_levels ()) - (fun ( config, - ( ((proposal_round, op_round), (_, op_level)), - (proposal_timestamp, now_timestamp) ) ) -> - let proposal_level = op_level in - no_error - (let* expected_time = - timestamp_of_round - round_durations - ~proposal_timestamp - ~proposal_round - ~round:op_round - in - let* max_timestamp = - max_ts (get_clock_drift config) proposal_timestamp now_timestamp - in - return Timestamp.(expected_time <= max_timestamp)) - ==> no_error - @@ acceptable_op - ~config - ~round_durations - ~round_zero_duration - ~proposal_level - ~proposal_round - ~proposal_timestamp - ~proposal_predecessor_level_start: - (predecessor_start - proposal_timestamp - proposal_round - Round.zero) - ~op_level - ~op_round - ~now_timestamp) - -(** Test operations at same level, different round, with a too high expected - timestamp for the operation, and not at current round (which is always accepted). *) -let test_not_acceptable_current_level = - let open Result_syntax in - let open QCheck2 in - Test.make - ~print:Generator.print_param_acceptable - ~name:"same level, different round, too far" - Generator.(param_acceptable ~levels:same_levels ()) - (fun ( config, - ( ((proposal_round, op_round), (_, op_level)), - (proposal_timestamp, now_timestamp) ) ) -> - let proposal_level = op_level in - no_error - (let* expected_time = - timestamp_of_round - round_durations - ~proposal_timestamp - ~proposal_round - ~round:op_round - in - let* max_timestamp = - max_ts (get_clock_drift config) proposal_timestamp now_timestamp - in - return - Timestamp.( - expected_time > max_timestamp && Round.(proposal_round <> op_round))) - ==> no_error - (let+ result = - acceptable_op - ~config - ~round_durations - ~round_zero_duration - ~proposal_level - ~proposal_round - ~proposal_timestamp - ~proposal_predecessor_level_start: - (predecessor_start - proposal_timestamp - proposal_round - Round.zero) - ~op_level - ~op_round - ~now_timestamp - in - not result)) - -(** Test operations at next level, different round, with an acceptable timestamp for - the operation. *) -let test_acceptable_next_level = - let open Result_syntax in - let open QCheck2 in - Test.make - ~print:Generator.print_param_acceptable - ~name:"next level, acceptable op" - Generator.(param_acceptable ~levels:same_levels ()) - (fun ( config, - ( ((proposal_round, op_round), (proposal_level, _)), - (proposal_timestamp, now_timestamp) ) ) -> - let op_level = Raw_level.succ proposal_level in - no_error - (let* current_level_start = - timestamp_of_round - round_durations - ~proposal_timestamp - ~proposal_round - ~round:Round.zero - in - let* expected_time = - Round.timestamp_of_round - round_durations - ~predecessor_timestamp:current_level_start - ~predecessor_round:Round.zero - ~round:op_round - in - let* max_timestamp = - max_ts (get_clock_drift config) proposal_timestamp now_timestamp - in - return Timestamp.(expected_time <= max_timestamp)) - ==> no_error - @@ acceptable_op - ~config - ~round_durations - ~round_zero_duration - ~proposal_level - ~proposal_round - ~proposal_timestamp - ~proposal_predecessor_level_start: - (predecessor_start - proposal_timestamp - proposal_round - Round.zero) - ~op_level - ~op_round - ~now_timestamp) - -(** Test operations at next level, different round, with a too high timestamp - for the operation. *) -let test_not_acceptable_next_level = - let open Result_syntax in - let open QCheck2 in - Test.make - ~print:Generator.print_param_acceptable - ~name:"next level, too far" - Generator.( - param_acceptable ~levels:same_levels ~timestamps:successive_timestamp ()) - (fun ( config, - ( ((proposal_round, op_round), (proposal_level, _)), - (proposal_timestamp, now_timestamp) ) ) -> - let op_level = Raw_level.succ proposal_level in - QCheck2.assume - @@ no_error - (let* current_level_start = - timestamp_of_round - round_durations - ~proposal_timestamp - ~proposal_round - ~round:Round.zero - in - let* expected_time = - Round.timestamp_of_round - round_durations - ~predecessor_timestamp:current_level_start - ~predecessor_round:Round.zero - ~round:op_round - in - let* next_level_ts = - Timestamp.( - proposal_timestamp - +? Round.round_duration round_durations proposal_round) - in - let* max_timestamp = - max_ts (get_clock_drift config) next_level_ts now_timestamp - in - return Timestamp.(expected_time > max_timestamp)) ; - no_error - @@ let+ result = - acceptable_op - ~config - ~round_durations - ~round_zero_duration - ~proposal_level - ~proposal_round - ~proposal_timestamp - ~proposal_predecessor_level_start: - (predecessor_start proposal_timestamp proposal_round Round.zero) - ~op_level - ~op_round - ~now_timestamp - in - not result) - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [ - ( "pre_filter", - qcheck_wrap - [ - test_acceptable_past_level; - test_acceptable_current_level_current_round; - test_acceptable_current_level; - test_not_acceptable_current_level; - test_acceptable_next_level; - test_not_acceptable_next_level; - ] ); - ] diff --git a/src/proto_019_PtParisB/lib_plugin/test/test_fee_needed_to_overtake.ml b/src/proto_019_PtParisB/lib_plugin/test/test_fee_needed_to_overtake.ml deleted file mode 100644 index 0b7a463e42358d556742b8e64e83946c93f44f99..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_plugin/test/test_fee_needed_to_overtake.ml +++ /dev/null @@ -1,178 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Plugin.Mempool - Invocation: dune exec src/proto_019_PtParisB/lib_plugin/test/main.exe \ - -- --file test_fee_needed_to_overtake.ml - Subject: Unit tests the Mempool.fee_needed_to_overtake - function of the plugin -*) - -let register_test = - Helpers.register_test - ~__FILE__ - ~file_title:"fee_needed_to_overtake" - ~file_tags:["mempool"; "fee_needed_to_overtake"] - -(** Test that [fee_needed_to_overtake] returns [None] when at least - one argument is a non-manager operation. *) -let () = - register_test - ~title:"non-manager operations" - ~additional_tags:["nonmanager"; "random"] - @@ fun () -> - let n = (* Number of non-manager operations to generate *) 30 in - let non_manager_ops = - QCheck2.Gen.generate ~n Helpers.non_manager_operation_gen - in - (* Test with two non-manager operations. *) - let test op_to_overtake candidate_op = - assert ( - Option.is_none - (Plugin.Mempool.fee_needed_to_overtake ~op_to_overtake ~candidate_op)) - in - Helpers.iter_neighbors test non_manager_ops ; - (* Test with one non-manager and one manager operation. *) - let manager_ops = QCheck2.Gen.generate ~n Helpers.manager_operation_gen in - let test_both op1 op2 = - test op1 op2 ; - test op2 op1 - in - Helpers.iter2_exn test_both non_manager_ops manager_ops ; - unit - -(** Check that {!Plugin.Mempool.fee_needed_to_overtake} correctly - returns the minimal fee with which [candidate_op] would be - guaranteed to be greater than [op_to_overtake]. - - Precondition: both operations are manager operations with respective - total fee and gas limit [fee_o], [gas_o] and [fee_c], [gas_c]. *) -let test_manager_ops (op_to_overtake, fee_o, gas_o) (candidate_op, fee_c, gas_c) - = - Log.debug - "Test op_to_overtake: {fee=%dmutez; gas=%d} and candidate_op: \ - {fee=%dmutez; gas=%d}" - fee_o - gas_o - fee_c - gas_c ; - let fee_needed = - WithExceptions.Option.get ~loc:__LOC__ - @@ Plugin.Mempool.fee_needed_to_overtake - ~op_to_overtake:(snd op_to_overtake) - ~candidate_op:(snd candidate_op) - in - Log.debug " --> fee_needed: %Ld" fee_needed ; - (* We need to ensure that in the operation comparisons below, the - hashes provided as first elements of the pairs are distinct. - Indeed, {!Alpha_context.Operation.compare} always returns 0 when - these hashes are equal, regardless of the operations themselves. *) - let fake_oph = Helpers.different_oph ~different_from:(fst op_to_overtake) in - (* We also set the source to {!Signature.Public_key_hash.zero} in - the operation that will be compared to [op_to_overtake], so that - if their weights (fee/gas ratio) are equal, then the former is - smaller (see [Operation_repr.compare_manager_weight]). *) - let source = Signature.Public_key_hash.zero in - let with_fee fee = - (fake_oph, Helpers.set_fee_and_source fee ~source (snd candidate_op)) - in - let fee_smaller = Int64.sub fee_needed 1L in - if Alpha_context.Operation.compare (with_fee fee_smaller) op_to_overtake > 0 - then - Test.fail - ~__LOC__ - "Adjusted candidate_op: {fee=%Ldmutez; gas=%d} with fee smaller than \ - fee_needed should be smaller than or equal to op_to_overtake: \ - {fee=%dmutez; gas=%d}" - fee_smaller - gas_c - fee_o - gas_o ; - if Alpha_context.Operation.compare (with_fee fee_needed) op_to_overtake <= 0 - then - Test.fail - ~__LOC__ - "Adjusted candidate_op: {fee=%Ldmutez; gas=%d} with fee_needed should be \ - greater than op_to_overtake: {fee=%dmutez; gas=%d}" - fee_needed - gas_c - fee_o - gas_o - -(** Test manager operations with hand-picked fee and gas. *) -let () = - register_test - ~title:"hand-picked fee and gas" - ~additional_tags:["manager"; "handpicked"] - @@ fun () -> - (* Various relative gas limits and fees: equal, off by one, - multiple/divisor, high ppcm, coprime, zero, one, much higher/lower, etc. *) - let fee_in_mutez_and_gas_list = - [ - (1000, 1000); - (500, 1000); - (1000, 1001); - (1000, 999); - (1000, 500); - (1000, 4000); - (1000, 1200); - (333, 777); - (11, 7); - (1000, 31); - (1000, 1); - (1, 100_000); - (1_000_000, 100_001); - (0, 10); - ] - in - let ops = - List.map - (fun (fee_in_mutez, gas) -> - let op = - Helpers.generate_manager_op_with_fee_and_gas ~fee_in_mutez ~gas - in - (op, fee_in_mutez, gas)) - fee_in_mutez_and_gas_list - in - List.iter (fun op -> List.iter (test_manager_ops op) ops) ops ; - unit - -(** Test manager operations with random fee and gas. *) -let () = - register_test - ~title:"random fee and gas" - ~additional_tags:["manager"; "random"] - @@ fun () -> - let gen = - let open QCheck2.Gen in - let* fee_in_mutez = int_range 0 100_000_000 in - let* gas = int_range 1 50_000_000 in - let* op = Helpers.manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas in - return (op, fee_in_mutez, gas) - in - Helpers.iter_neighbors test_manager_ops (QCheck2.Gen.generate ~n:100 gen) ; - unit diff --git a/src/proto_019_PtParisB/lib_plugin/test/test_fee_needed_to_replace_by_fee.ml b/src/proto_019_PtParisB/lib_plugin/test/test_fee_needed_to_replace_by_fee.ml deleted file mode 100644 index f9223b5e0fca37138543e555f96d5ad5baf0c838..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_plugin/test/test_fee_needed_to_replace_by_fee.ml +++ /dev/null @@ -1,210 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Plugin.Mempool - Invocation: dune exec src/proto_019_PtParisB/lib_plugin/test/main.exe \ - -- --file test_fee_needed_to_replace_by_fee.ml - Subject: Unit tests the fee_needed_to_replace_by_fee function - of the mempool plugin -*) - -let register_test = - Helpers.register_test - ~__FILE__ - ~file_title:"fee_needed_to_replace_by_fee" - ~file_tags:["mempool"; "fee_needed_to_replace_by_fee"] - -(** Test that [fee_needed_to_replace_by_fee] returns [None] when at least - one argument is a non-manager operation. *) -let () = - register_test - ~title:"non-manager operations" - ~additional_tags:["nonmanager"; "random"] - @@ fun () -> - let n = (* Number of non-manager operations to generate *) 30 in - let non_manager_ops = - QCheck2.Gen.generate ~n Helpers.non_manager_operation_gen - in - (* Test with two non-manager operations. *) - let test op_to_replace candidate_op = - assert ( - Option.is_none - (Plugin.Mempool.Internal_for_tests.fee_needed_to_replace_by_fee - Plugin.Mempool.default_config - ~op_to_replace - ~candidate_op)) - in - Helpers.iter_neighbors test non_manager_ops ; - (* Test with one non-manager and one manager operation. *) - let manager_ops = QCheck2.Gen.generate ~n Helpers.manager_operation_gen in - let test_both op1 op2 = - test op1 op2 ; - test op2 op1 - in - Helpers.iter2_exn test_both non_manager_ops manager_ops ; - unit - -(** Check that {!Plugin.Mempool.fee_needed_to_replace_by_fee} - correctly returns the minimal fee that [candidate_op] would need to - replace [op_to_replace] through {!Plugin.Mempool.conflict_handler}. - - Precondition: both operations are manager operations with respective - total fee and gas limit [fee_r], [gas_r] and [fee_c], [gas_c]. *) -let test_manager_ops config (op_to_replace, fee_r, gas_r) - (candidate_op, fee_c, gas_c) = - Log.debug - "Test op_to_replace: {fee=%dmutez; gas=%d} and candidate_op: {fee=%dmutez; \ - gas=%d}" - fee_r - gas_r - fee_c - gas_c ; - let fee_needed = - WithExceptions.Option.get ~loc:__LOC__ - @@ Plugin.Mempool.Internal_for_tests.fee_needed_to_replace_by_fee - config - ~op_to_replace:(snd op_to_replace) - ~candidate_op:(snd candidate_op) - in - Log.debug " --> fee_needed: %Ld" fee_needed ; - let with_fee fee = - (fst candidate_op, Helpers.set_fee fee (snd candidate_op)) - in - (if fee_needed > 0L then - let fee_smaller = Int64.pred fee_needed in - match - Plugin.Mempool.conflict_handler - config - ~existing_operation:op_to_replace - ~new_operation:(with_fee fee_smaller) - with - | `Keep -> () - | `Replace -> - Test.fail - ~__LOC__ - "Adjusted candidate_op: {fee=%Ldmutez; gas=%d} with fee smaller \ - than fee_needed should not be allowed to replace op_to_replace: \ - {fee=%dmutez; gas=%d}" - fee_smaller - gas_c - fee_r - gas_r) ; - match - Plugin.Mempool.conflict_handler - config - ~existing_operation:op_to_replace - ~new_operation:(with_fee fee_needed) - with - | `Keep -> - Test.fail - ~__LOC__ - "Adjusted candidate_op: {fee=%Ldmutez; gas=%d} with fee_needed should \ - replace op_to_replace: {fee=%dmutez; gas=%d}" - fee_needed - gas_c - fee_r - gas_r - | `Replace -> () - -(** Test manager operations with hand-picked fee and gas. *) -let () = - register_test - ~title:"hand-picked fee and gas" - ~additional_tags:["manager"; "handpicked"] - @@ fun () -> - let fee_in_mutez_and_gas_list = - [ - (* Various relative gas limits and fees: equal, off by one, - multiple/divisor, high ppcm, coprime, zero, one, much - higher/lower etc. *) - (1000, 1000); - (500, 1000); - (1000, 1001); - (1000, 999); - (1000, 500); - (1000, 4000); - (1000, 1200); - (333, 777); - (11, 7); - (1000, 31); - (1000, 1); - (1, 100_000); - (1_000_000, 100_001); - (0, 10); - (* Values such that fee or fee/gas, relative to (1000, 1000) that - appears above in the list, is close to the default - [replace_by_fee_factor] of 105/100 or its inverse. *) - (1050, 1000); - (1051, 1000); - (1049, 1000); - (1050, 1001); - (1050, 999); - (1000, 1050); - (1000, 1051); - (1000, 1049); - ] - in - let ops = - List.map - (fun (fee_in_mutez, gas) -> - let op = - Helpers.generate_manager_op_with_fee_and_gas ~fee_in_mutez ~gas - in - (op, fee_in_mutez, gas)) - fee_in_mutez_and_gas_list - in - List.iter - (fun op -> - List.iter (test_manager_ops Plugin.Mempool.default_config op) ops) - ops ; - unit - -(** Test manager operations with random fee and gas, and random config. *) -let () = - register_test - ~title:"random fee, gas, and config" - ~additional_tags:["manager"; "random"] - @@ fun () -> - let open QCheck2.Gen in - let gen = - let* fee_in_mutez = int_range 0 100_000_000 in - let* gas = int_range 1 50_000_000 in - let* op = Helpers.manager_op_with_fee_and_gas_gen ~fee_in_mutez ~gas in - return (op, fee_in_mutez, gas) - in - let gen_config = - let* num = int_range 0 1000 in - let* den = int_range 1 1000 in - return - (Plugin.Mempool.Internal_for_tests.default_config_with_replace_factor - (Q.of_ints num den)) - in - let test_manager_ops op_fee_gas1 op_fee_gas2 = - test_manager_ops (generate1 gen_config) op_fee_gas1 op_fee_gas2 - in - Helpers.iter_neighbors test_manager_ops (generate ~n:100 gen) ; - Lwt.return_unit diff --git a/src/proto_019_PtParisB/lib_protocol/test/README.md b/src/proto_019_PtParisB/lib_protocol/test/README.md deleted file mode 100644 index 6e7e33a67ec084fb7465114b95fe32f53bb28887..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# lib_protocol tests - -This folder contains unit, integration and property-based tests for -the economic protocol definition. The tests are organized in -sub-folders: first by type of test, and for integration, a further -subdivision by theme: - -- `unit`: tests that sit below `Alpha_context`. -- `integration`: tests that require passing around a context. - - `michelson`: tests that involve Micheline expressions. - - `consensus`: tests for consensus: baking, attestation, etc. - - `gas`: tests for gas. - - `operations`: test for operations. -- `pbt`: for property-based tests using `qcheck`. - -Finally, `helpers/` contains common definitions for writing tests. - -There might not be a clear-cut location for new tests. For new -integration tests, either add them directly to `integration/` or -create a new sub-folder corresponding to the theme of the test. - -# Running - -To run all the tests, run: - -``` -dune runtest src/proto_019_PtParisB/lib_protocol/ -``` - -To run an individual test file, consult its `Invocation` header. diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/README.md b/src/proto_019_PtParisB/lib_protocol/test/helpers/README.md deleted file mode 100644 index b071cfb4ec038daa53226eb6a5742579144e4598..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Helpers to build unit/integration tests for the protocol - -The OPAM package `tezos-alpha-test-helpers` contains helpers to build unit/integration tests, like forging a block, a context, nonces, operations, etc. diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/account.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/account.ml deleted file mode 100644 index 444ccc5e4d524e8c8263aafc4035e39b95159f76..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/account.ml +++ /dev/null @@ -1,147 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -type t = { - pkh : Signature.Public_key_hash.t; - pk : Signature.Public_key.t; - sk : Signature.Secret_key.t; -} - -type account = t - -let known_accounts = Signature.Public_key_hash.Table.create 17 - -let random_seed ~rng_state = - Bytes.init Tezos_crypto.Hacl.Ed25519.sk_size (fun _i -> - Char.chr (Random.State.int rng_state 256)) - -let random_algo ~rng_state : Signature.algo = - match Random.State.int rng_state 3 with - | 0 -> Ed25519 - | 1 -> Secp256k1 - | 2 -> P256 - | 3 -> Bls - | _ -> assert false - -let new_account ?(rng_state = Random.State.make_self_init ()) - ?(seed = random_seed ~rng_state) ?(algo = random_algo ~rng_state) () = - let pkh, pk, sk = Signature.generate_key ~algo ~seed () in - let account = {pkh; pk; sk} in - Signature.Public_key_hash.Table.add known_accounts pkh account ; - account - -let add_account ({pkh; _} as account) = - Signature.Public_key_hash.Table.add known_accounts pkh account - -let activator_account = - let seed = random_seed ~rng_state:(Random.State.make [|0x1337533D|]) in - new_account ~seed () - -let find pkh = - let open Lwt_result_syntax in - match Signature.Public_key_hash.Table.find known_accounts pkh with - | Some k -> return k - | None -> failwith "Missing account: %a" Signature.Public_key_hash.pp pkh - -let find_alternate pkh = - let exception Found of t in - try - Signature.Public_key_hash.Table.iter - (fun pkh' account -> - if not (Signature.Public_key_hash.equal pkh pkh') then - raise (Found account)) - known_accounts ; - raise Not_found - with Found account -> account - -let dummy_account = - let seed = - random_seed ~rng_state:(Random.State.make [|0x1337533D; 0x1337533D|]) - in - new_account ~seed () - -let default_initial_balance = Tez.of_mutez_exn 4_000_000_000_000L - -let generate_accounts ?rng_state n : t list tzresult = - Signature.Public_key_hash.Table.clear known_accounts ; - List.init ~when_negative_length:[] n (fun _i -> new_account ?rng_state ()) - -let commitment_secret = - Blinded_public_key_hash.activation_code_of_hex - "aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb" - |> WithExceptions.Option.get ~loc:__LOC__ - -let new_commitment ?seed () = - let open Lwt_result_wrap_syntax in - let pkh, pk, sk = Signature.generate_key ?seed ~algo:Ed25519 () in - let unactivated_account = {pkh; pk; sk} in - let open Commitment in - let pkh = match pkh with Ed25519 pkh -> pkh | _ -> assert false in - let bpkh = Blinded_public_key_hash.of_ed25519_pkh commitment_secret pkh in - let*?@ amount = Tez.(one *? 4_000L) in - return (unactivated_account, {blinded_public_key_hash = bpkh; amount}) - -let pkh_of_contract_exn = function - | Contract.Implicit pkh -> pkh - | Originated _ -> assert false - -let make_bootstrap_account ?(balance = default_initial_balance) - ?(delegate_to = None) ?(consensus_key = None) account = - Parameters. - { - public_key_hash = account.pkh; - public_key = Some account.pk; - amount = balance; - delegate_to; - consensus_key; - } - -let rec make_bootstrap_accounts ?(bootstrap_balances = []) - ?(bootstrap_delegations = []) ?(bootstrap_consensus_keys = []) accounts = - let decons_of_opt = function x :: xs -> (x, xs) | [] -> (None, []) in - let decons = function x :: xs -> (Some x, xs) | [] -> (None, []) in - match accounts with - | account :: accounts -> - let balance, bootstrap_balances = decons bootstrap_balances in - let delegate_to, bootstrap_delegations = - decons_of_opt bootstrap_delegations - in - let consensus_key, bootstrap_consensus_keys = - decons_of_opt bootstrap_consensus_keys - in - make_bootstrap_account - ?balance:(Option.map Tez.of_mutez_exn balance) - ~delegate_to - ~consensus_key - account - :: make_bootstrap_accounts - ~bootstrap_balances - ~bootstrap_delegations - ~bootstrap_consensus_keys - accounts - | [] -> [] diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/account.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/account.mli deleted file mode 100644 index 62ae056b2e6ab784dd512b3edd9598f14b09662c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/account.mli +++ /dev/null @@ -1,100 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -type t = { - pkh : Signature.Public_key_hash.t; - pk : Signature.Public_key.t; - sk : Signature.Secret_key.t; -} - -type account = t - -val known_accounts : t Signature.Public_key_hash.Table.t - -val activator_account : account - -val dummy_account : account - -(** [new_account ?rng_state ?seed ?algo ()] creates a new account with curve - [algo] with the given [seed] (or [rng_state] to generate the seed) and add - it to the global account state. -*) -val new_account : - ?rng_state:Random.State.t -> - ?seed:Bytes.t -> - ?algo:Signature.algo -> - unit -> - account - -val add_account : t -> unit - -val find : Signature.Public_key_hash.t -> t tzresult Lwt.t - -val find_alternate : Signature.Public_key_hash.t -> t - -(** 4.000.000.000 tez *) -val default_initial_balance : Tez.t - -(** [generate_accounts ?rng_state n] first frees the global account state then - generates [n] random accounts with [rng_state] to generate the seed and adds - them to the global account state. -*) -val generate_accounts : ?rng_state:Random.State.t -> int -> t list tzresult - -val commitment_secret : Blinded_public_key_hash.activation_code - -val new_commitment : - ?seed:Bytes.t -> unit -> (account * Commitment.t) tzresult Lwt.t - -(** Fails if the contract is not an implicit one *) -val pkh_of_contract_exn : Contract.t -> Signature.Public_key_hash.t - -(** [make_bootstrap_account ~initial_balance ~delegate_to account] creates a - {!Parameters.bootstrap_account} from an account with the default or set - values. default [initial_balance] is [default_initial_balance], - [delegate_to] is [None] and [consensus_key] is [None]. -*) -val make_bootstrap_account : - ?balance:Tez.t -> - ?delegate_to:Signature.public_key_hash option -> - ?consensus_key:Signature.public_key option -> - t -> - Parameters.bootstrap_account - -(** [make_bootstrap_accounts ~bootstrap_balances ~bootstrap_delegations - ~bootstrap_consensus_keys accounts] combines the lists [accounts], - [bootstrap_balances], [bootstrap_delegations] and [bootstrap_consensus_keys] - to create a list of {!Parameters.bootstrap_account} using - [make_bootstrap_account]. -*) -val make_bootstrap_accounts : - ?bootstrap_balances:int64 list -> - ?bootstrap_delegations:Signature.public_key_hash option list -> - ?bootstrap_consensus_keys:Signature.public_key option list -> - t list -> - Parameters.bootstrap_account list diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/account_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/account_helpers.ml deleted file mode 100644 index 2378e47d532213cce1135570428b1596a904bbca..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/account_helpers.ml +++ /dev/null @@ -1,546 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** [Account_helpers] defines a type abstracting the information of an account - in the protocol. This includes its pkh, delegate, any funds, staking - parameters, etc... - - A type [balance] is also defined, as an observed state of funds for a - given account, i.e balance information that one might get from calling - RPCs. *) - -open Adaptive_issuance_helpers -open Tez_staking_helpers - -let fail_account_not_found func_name account_name = - Log.error "State_account.%s: account %s not found" func_name account_name ; - assert false - -module CycleMap = Map.Make (Cycle) - -(** Abstract information of accounts *) -type account_state = { - pkh : Signature.Public_key_hash.t; - contract : Protocol.Alpha_context.Contract.t; - delegate : string option; - parameters : staking_parameters; - liquid : Tez.t; - bonds : Tez.t; - (* The three following fields contain maps from the account's stakers to, - respectively, their frozen stake, their unstaked frozen balance, and - their unstaked finalizable funds. Additionally, [unstaked_frozen] indexes - the maps with the cycle at which the unstake operation occurred. *) - frozen_deposits : Frozen_tez.t; - unstaked_frozen : Unstaked_frozen.t; - unstaked_finalizable : Unstaked_finalizable.t; - staking_delegator_numerator : Z.t; - staking_delegate_denominator : Z.t; - frozen_rights : Tez.t CycleMap.t; - (** The portion of rights that comes from staking, used for - baking/attesting during the specified cycle. - - At the end of cycle [c], the current frozen deposits of the - delegate (own + co-staked, taking - limit_of_staking_over_baking into account) are added to this - table for cycle [c + consensus_rights_delay + 1]. The table - is unmodified if at that time, the account is not a delegate - or is a deactivated delegate. *) - slashed_cycles : Cycle.t list; - last_active_cycle : Cycle.t; -} - -let init_account ?delegate ~pkh ~contract ~parameters ?(liquid = Tez.zero) - ?(bonds = Tez.zero) ?(frozen_deposits = Frozen_tez.zero) - ?(unstaked_frozen = Unstaked_frozen.zero) - ?(unstaked_finalizable = Unstaked_finalizable.zero) - ?(staking_delegator_numerator = Z.zero) - ?(staking_delegate_denominator = Z.zero) ?(frozen_rights = CycleMap.empty) - ?(slashed_cycles = []) ?(last_active_cycle = Cycle.root) () = - { - pkh; - contract; - delegate; - parameters; - liquid; - bonds; - frozen_deposits; - unstaked_frozen; - unstaked_finalizable; - staking_delegator_numerator; - staking_delegate_denominator; - frozen_rights; - slashed_cycles; - last_active_cycle; - } - -type account_map = account_state String.Map.t - -(** Balance returned by RPCs. Partial tez are rounded down *) -type balance = { - liquid_b : Tez.t; - bonds_b : Tez.t; - staked_b : Partial_tez.t; - unstaked_frozen_b : Tez.t; - unstaked_finalizable_b : Tez.t; - staking_delegator_numerator_b : Z.t; - staking_delegate_denominator_b : Z.t; -} - -let balance_zero = - { - liquid_b = Tez.zero; - bonds_b = Tez.zero; - staked_b = Partial_tez.zero; - unstaked_frozen_b = Tez.zero; - unstaked_finalizable_b = Tez.zero; - staking_delegator_numerator_b = Z.zero; - staking_delegate_denominator_b = Z.zero; - } - -let balance_of_account account_name (account_map : account_map) = - match String.Map.find account_name account_map with - | None -> fail_account_not_found "balance_of_account.src" account_name - | Some - { - pkh = _; - contract = _; - delegate; - parameters = _; - liquid; - bonds; - frozen_deposits = _; - unstaked_frozen = _; - unstaked_finalizable = _; - staking_delegator_numerator; - staking_delegate_denominator; - frozen_rights = _; - slashed_cycles = _; - last_active_cycle = _; - } -> - let balance = - { - balance_zero with - liquid_b = liquid; - bonds_b = bonds; - staking_delegator_numerator_b = staking_delegator_numerator; - staking_delegate_denominator_b = staking_delegate_denominator; - } - in - let balance = - match delegate with - | None -> balance - | Some d -> ( - match String.Map.find d account_map with - | None -> fail_account_not_found "balance_of_account.delegate" d - | Some delegate_account -> - { - balance with - staked_b = - Frozen_tez.get account_name delegate_account.frozen_deposits; - }) - in - (* Because an account can still have frozen or finalizable funds from a delegate - that is not its own, we iterate over all of them *) - let unstaked_frozen_b, unstaked_finalizable_b = - String.Map.fold - (fun _delegate_name delegate (frozen, finalzbl) -> - let frozen = - Tez.( - frozen - +! Unstaked_frozen.get_total - account_name - delegate.unstaked_frozen) - in - let finalzbl = - Tez.( - finalzbl - +! Unstaked_finalizable.get - account_name - delegate.unstaked_finalizable) - in - (frozen, finalzbl)) - account_map - (Tez.zero, Tez.zero) - in - {balance with unstaked_frozen_b; unstaked_finalizable_b} - -let balance_pp fmt - { - liquid_b; - bonds_b; - staked_b; - unstaked_frozen_b; - unstaked_finalizable_b; - staking_delegator_numerator_b; - staking_delegate_denominator_b; - } = - Format.fprintf - fmt - "{@;\ - @[ liquid : %a@;\ - bonds : %a@;\ - staked : %a@;\ - unstaked_frozen : %a@;\ - unstaked_finalizable : %a@;\ - staking_delegator_numerator : %a@;\ - staking_delegate_denominator : %a@;\ - }@." - Tez.pp - liquid_b - Tez.pp - bonds_b - Partial_tez.pp - staked_b - Tez.pp - unstaked_frozen_b - Tez.pp - unstaked_finalizable_b - Z.pp_print - staking_delegator_numerator_b - Z.pp_print - staking_delegate_denominator_b - -let balance_update_pp fmt - ( { - liquid_b = a_liquid_b; - bonds_b = a_bonds_b; - staked_b = a_staked_b; - unstaked_frozen_b = a_unstaked_frozen_b; - unstaked_finalizable_b = a_unstaked_finalizable_b; - staking_delegator_numerator_b = a_staking_delegator_numerator_b; - staking_delegate_denominator_b = a_staking_delegate_denominator_b; - }, - { - liquid_b = b_liquid_b; - bonds_b = b_bonds_b; - staked_b = b_staked_b; - unstaked_frozen_b = b_unstaked_frozen_b; - unstaked_finalizable_b = b_unstaked_finalizable_b; - staking_delegator_numerator_b = b_staking_delegator_numerator_b; - staking_delegate_denominator_b = b_staking_delegate_denominator_b; - } ) = - Format.fprintf - fmt - "{@;\ - @[ liquid : %a -> %a@;\ - bonds : %a -> %a@;\ - staked : %a -> %a@;\ - unstaked_frozen : %a -> %a@;\ - unstaked_finalizable : %a -> %a@;\ - staking_delegator_numerator : %a -> %a@;\ - staking_delegate_denominator : %a -> %a@;\ - }@." - Tez.pp - a_liquid_b - Tez.pp - b_liquid_b - Tez.pp - a_bonds_b - Tez.pp - b_bonds_b - Partial_tez.pp - a_staked_b - Partial_tez.pp - b_staked_b - Tez.pp - a_unstaked_frozen_b - Tez.pp - b_unstaked_frozen_b - Tez.pp - a_unstaked_finalizable_b - Tez.pp - b_unstaked_finalizable_b - Z.pp_print - a_staking_delegator_numerator_b - Z.pp_print - b_staking_delegator_numerator_b - Z.pp_print - a_staking_delegate_denominator_b - Z.pp_print - b_staking_delegate_denominator_b - -let assert_balance_equal ~loc account_name - { - liquid_b = a_liquid_b; - bonds_b = a_bonds_b; - staked_b = a_staked_b; - unstaked_frozen_b = a_unstaked_frozen_b; - unstaked_finalizable_b = a_unstaked_finalizable_b; - staking_delegator_numerator_b = a_staking_delegator_numerator_b; - staking_delegate_denominator_b = a_staking_delegate_denominator_b; - } - { - liquid_b = b_liquid_b; - bonds_b = b_bonds_b; - staked_b = b_staked_b; - unstaked_frozen_b = b_unstaked_frozen_b; - unstaked_finalizable_b = b_unstaked_finalizable_b; - staking_delegator_numerator_b = b_staking_delegator_numerator_b; - staking_delegate_denominator_b = b_staking_delegate_denominator_b; - } = - let open Lwt_result_syntax in - let f s = Format.asprintf "%s: %s" account_name s in - let* () = - List.fold_left - (fun a b -> - let*! a in - let*! b in - Assert.join_errors a b) - return_unit - [ - Assert.equal - ~loc - Tez.equal - (f "Liquid balances do not match") - Tez.pp - a_liquid_b - b_liquid_b; - Assert.equal - ~loc - Tez.equal - (f "Bonds balances do not match") - Tez.pp - a_bonds_b - b_bonds_b; - Assert.equal - ~loc - Tez.equal - (f "Staked balances do not match") - Tez.pp - (Partial_tez.to_tez ~round:`Down a_staked_b) - (Partial_tez.to_tez ~round:`Down b_staked_b); - Assert.equal - ~loc - Tez.equal - (f "Unstaked frozen balances do not match") - Tez.pp - a_unstaked_frozen_b - b_unstaked_frozen_b; - Assert.equal - ~loc - Tez.equal - (f "Unstaked finalizable balances do not match") - Tez.pp - a_unstaked_finalizable_b - b_unstaked_finalizable_b; - Assert.equal - ~loc - Z.equal - (f "Staking delegator numerators do not match") - Z.pp_print - a_staking_delegator_numerator_b - b_staking_delegator_numerator_b; - Assert.equal - ~loc - Z.equal - (f "Staking delegate denominators do not match") - Z.pp_print - a_staking_delegate_denominator_b - b_staking_delegate_denominator_b; - ] - in - return_unit - -let update_account ~f account_name account_map = - String.Map.update - account_name - (function - | None -> fail_account_not_found "update_account" account_name - | Some x -> Some (f x)) - account_map - -let balance_and_total_balance_of_account account_name account_map = - let ({ - liquid_b; - bonds_b; - staked_b; - unstaked_frozen_b; - unstaked_finalizable_b; - staking_delegator_numerator_b = _; - staking_delegate_denominator_b = _; - } as balance) = - balance_of_account account_name account_map - in - ( balance, - Tez.( - liquid_b +! bonds_b - +! Partial_tez.to_tez ~round:`Down staked_b - +! unstaked_frozen_b +! unstaked_finalizable_b) ) - -let assert_pseudotokens_consistency ~loc balance account account_name - account_map = - let open Lwt_result_syntax in - let {delegate; staking_delegator_numerator = num_pt; _} = account in - let exact_staking_balance = balance.staked_b in - match delegate with - | None -> return_unit - | Some delegate_name -> ( - if account_name = delegate_name then return_unit - else - match String.Map.find delegate_name account_map with - | None -> - fail_account_not_found - "assert_pseudotokens_consistency" - delegate_name - | Some delegate_account -> - let total_co = - Frozen_tez.total_co_current_q - delegate_account.frozen_deposits.co_current - in - let den_pt = delegate_account.staking_delegate_denominator in - if Z.(equal den_pt zero) then - Assert.equal - ~loc - Q.equal - (Format.asprintf - "%s : Delegate should not have external stake with a 0 \ - staking denominator" - account_name) - Q.pp_print - total_co - Q.zero - else - let expected = Q.(num_pt /// den_pt * total_co) in - Assert.equal - ~loc - Q.equal - (Format.asprintf - "%s : Pseudotokens do not match exact staking balance" - account_name) - Q.pp_print - exact_staking_balance - expected) - -let get_balance_from_context ctxt contract = - let open Lwt_result_syntax in - let* liquid_b = Context.Contract.balance ctxt contract in - let* bonds_b = Context.Contract.frozen_bonds ctxt contract in - let* staked_b = Context.Contract.staked_balance ctxt contract in - let staked_b = - Option.value ~default:Tez.zero staked_b |> Partial_tez.of_tez - in - let* unstaked_frozen_b = - Context.Contract.unstaked_frozen_balance ctxt contract - in - let unstaked_frozen_b = Option.value ~default:Tez.zero unstaked_frozen_b in - let* unstaked_finalizable_b = - Context.Contract.unstaked_finalizable_balance ctxt contract - in - let unstaked_finalizable_b = - Option.value ~default:Tez.zero unstaked_finalizable_b - in - let* total_balance = Context.Contract.full_balance ctxt contract in - let* staking_delegator_numerator_b = - Context.Contract.staking_numerator ctxt contract - in - let*! staking_delegate_denominator_b = - match (contract : Protocol.Alpha_context.Contract.t) with - | Implicit pkh -> - let*! result = Context.Delegate.staking_denominator ctxt pkh in - Lwt.return - (match result with - | Ok v -> v - | Error _ -> (* Not a delegate *) Z.zero) - | Originated _ -> Lwt.return Z.zero - in - let bd = - { - liquid_b; - bonds_b; - staked_b; - unstaked_frozen_b; - unstaked_finalizable_b; - staking_delegator_numerator_b; - staking_delegate_denominator_b; - } - in - return (bd, total_balance) - -let assert_balance_check ~loc ctxt account_name account_map = - let open Lwt_result_syntax in - match String.Map.find account_name account_map with - | None -> fail_account_not_found "assert_balance_check" account_name - | Some account -> - let* balance_ctxt, total_balance_ctxt = - get_balance_from_context ctxt account.contract - in - let balance, total_balance = - balance_and_total_balance_of_account account_name account_map - in - let*! r0 = - assert_pseudotokens_consistency - ~loc - balance - account - account_name - account_map - in - let*! r1 = assert_balance_equal ~loc account_name balance_ctxt balance in - let*! r1 = Assert.join_errors r0 r1 in - let*! r2 = - Assert.equal - ~loc - Tez.equal - (Format.asprintf "%s : Total balances do not match" account_name) - Tez.pp - total_balance_ctxt - total_balance - in - Assert.join_errors r1 r2 - -let log_debug_balance account_name account_map : unit = - let balance, total_balance = - balance_and_total_balance_of_account account_name account_map - in - Log.debug - "Model balance of %s:\n%aTotal balance: %a\n" - account_name - balance_pp - balance - Tez.pp - total_balance - -let log_debug_rpc_balance name contract block : unit tzresult Lwt.t = - let open Lwt_result_syntax in - let* balance, total_balance = get_balance_from_context (B block) contract in - Log.debug - "RPC balance of %s:\n%aTotal balance: %a\n" - name - balance_pp - balance - Tez.pp - total_balance ; - return_unit - -let log_debug_balance_update account_name old_account_map new_account_map : unit - = - let old_balance, old_total_balance = - balance_and_total_balance_of_account account_name old_account_map - in - let new_balance, new_total_balance = - balance_and_total_balance_of_account account_name new_account_map - in - Log.debug - "Balance update of %s:\n%aTotal balance: %a -> %a\n" - account_name - balance_update_pp - (old_balance, new_balance) - Tez.pp - old_total_balance - Tez.pp - new_total_balance - -let current_total_frozen_deposits_with_limits account_state = - Frozen_tez.total_current_with_limits - ~limit_of_staking_over_baking: - account_state.parameters.limit_of_staking_over_baking - account_state.frozen_deposits - -let update_activity account constants ~level current_cycle = - if not (Block.last_level_of_cycle constants ~level) then - {account with last_active_cycle = current_cycle} - else {account with last_active_cycle = Cycle.succ current_cycle} diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/adaptive_issuance_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/adaptive_issuance_helpers.ml deleted file mode 100644 index 111fc53c73d7c95b933f35750ac3cc67b1672105..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/adaptive_issuance_helpers.ml +++ /dev/null @@ -1,116 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Abstraction of the staking parameters for tests *) -type staking_parameters = { - limit_of_staking_over_baking : Q.t; - edge_of_baking_over_staking : Q.t; -} - -let default_params = - let Protocol.Staking_parameters_repr. - { - limit_of_staking_over_baking_millionth; - edge_of_baking_over_staking_billionth; - } = - Protocol.Staking_parameters_repr.default - in - { - limit_of_staking_over_baking = - Q.(Int32.to_int limit_of_staking_over_baking_millionth // 1_000_000); - edge_of_baking_over_staking = - Q.(Int32.to_int edge_of_baking_over_staking_billionth // 1_000_000_000); - } - -let get_launch_cycle ~loc blk = - let open Lwt_result_syntax in - let* launch_cycle_opt = Context.get_adaptive_issuance_launch_cycle (B blk) in - Assert.get_some ~loc launch_cycle_opt - -(** AI operations *) - -let stake ctxt contract amount = - Op.transaction - ctxt - ~entrypoint:Protocol.Alpha_context.Entrypoint.stake - ~fee:Tez_helpers.zero - contract - contract - amount - -let set_delegate_parameters ctxt delegate - ~parameters:{limit_of_staking_over_baking; edge_of_baking_over_staking} = - let entrypoint = Protocol.Alpha_context.Entrypoint.set_delegate_parameters in - let limit_of_staking_over_baking_millionth = - Q.mul limit_of_staking_over_baking (Q.of_int 1_000_000) |> Q.to_int - in - let edge_of_baking_over_staking_billionth = - Q.mul edge_of_baking_over_staking (Q.of_int 1_000_000_000) |> Q.to_int - in - let parameters = - Protocol.Alpha_context.Script.lazy_expr - (Expr.from_string - (Printf.sprintf - "Pair %d (Pair %d Unit)" - limit_of_staking_over_baking_millionth - edge_of_baking_over_staking_billionth)) - in - Op.transaction - ctxt - ~entrypoint - ~parameters - ~fee:Tez_helpers.zero - delegate - delegate - Tez_helpers.zero - -let unstake ctxt contract amount = - Op.transaction - ctxt - ~entrypoint:Protocol.Alpha_context.Entrypoint.unstake - ~fee:Tez_helpers.zero - contract - contract - amount - -let finalize_unstake ctxt ?(amount = Tez_helpers.zero) contract = - Op.transaction - ctxt - ~entrypoint:Protocol.Alpha_context.Entrypoint.finalize_unstake - ~fee:Tez_helpers.zero - contract - contract - amount - -let portion_of_rewards_to_liquid_for_cycle ctxt cycle pkh rewards = - let open Lwt_result_syntax in - let* {frozen; weighted_delegated} = - Context.Delegate.stake_for_cycle ctxt cycle pkh - in - let portion = - Tez_helpers.(ratio weighted_delegated (frozen +! weighted_delegated)) - in - let to_liquid = Tez_helpers.mul_q rewards portion in - return (Tez_helpers.of_q ~round:`Down to_liquid) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/assert.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/assert.ml deleted file mode 100644 index 2e00f89b65d602bcfb54204bb1c24feead04ea28..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/assert.ml +++ /dev/null @@ -1,369 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2021-2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -let error ~loc v f = - let open Lwt_result_syntax in - match v with - | Error err when List.exists f err -> return_unit - | Ok _ -> failwith "Unexpected successful result (%s)" loc - | Error err -> failwith "@[Unexpected error (%s): %a@]" loc pp_print_trace err - -let join_errors e1 e2 = - let open Lwt_result_syntax in - match (e1, e2) with - | Ok (), Ok () -> return_unit - | Error e, Ok () | Ok (), Error e -> fail e - | Error e1, Error e2 -> fail (e1 @ e2) - -let test_error_encodings e = - let module E = Environment.Error_monad in - ignore (E.pp Format.str_formatter e) ; - let e' = E.json_of_error e |> E.error_of_json in - assert (e = e') - -let proto_error ~loc v f = - error ~loc v (function - | Environment.Ecoproto_error err -> - test_error_encodings err ; - f err - | _ -> false) - -let proto_error_with_info ?(error_info_field = `Title) ~loc v - expected_error_info = - let info err = - let i = Error_monad.find_info_of_error (Environment.wrap_tzerror err) in - match error_info_field with - | `Title -> i.title - | `Id -> i.id - | `Description -> i.description - | `Message -> Format.asprintf "%a" Environment.Error_monad.pp err - in - proto_error ~loc v (function err -> - Format.printf - "@[THE ERROR IS: %s@,EXPECTED: %s@]@." - (info err) - expected_error_info ; - let info = info err in - String.equal info expected_error_info) - -let as_proto_error = function - | Environment.Ecoproto_error err -> Ok err - | err -> Error err - -(** Similar to {!proto_error}, except that [errs] is directly an error - trace instead of a [tzresult]. - - [expect_error ~loc errs] has the right type to be used as the - [expect_failure] or [expect_apply_failure] argument of - {!Incremental.add_operation}. *) -let expect_error ~loc errs f = - let open Lwt_result_syntax in - let proto_errs = List.map_e as_proto_error errs in - match proto_errs with - | Ok proto_errs when f proto_errs -> - List.iter test_error_encodings proto_errs ; - return_unit - | Ok _ | Error _ -> - failwith - "%s: expected a specific error, but instead got:@, %a" - loc - Error_monad.pp_print_trace - errs - -let equal ~loc (cmp : 'a -> 'a -> bool) msg pp a b = - let open Lwt_result_syntax in - if not (cmp a b) then - failwith "@[@[[%s]@] - @[%s : %a is not equal to %a@]@]" loc msg pp a pp b - else return_unit - -let leq ~loc (cmp : 'a -> 'a -> int) msg pp a b = - let open Lwt_result_syntax in - if cmp a b > 0 then - failwith - "@[@[[%s]@] - @[%s : %a is not less or equal to %a@]@]" - loc - msg - pp - a - pp - b - else return_unit - -let lt ~loc (cmp : 'a -> 'a -> int) msg pp a b = - let open Lwt_result_syntax in - if cmp a b >= 0 then - failwith "@[@[[%s]@] - @[%s : %a is not less than %a@]@]" loc msg pp a pp b - else return_unit - -let not_equal ~loc (cmp : 'a -> 'a -> bool) msg pp a b = - let open Lwt_result_syntax in - if cmp a b then - failwith "@[@[[%s]@] - @[%s : %a is equal to %a@]@]" loc msg pp a pp b - else return_unit - -module Int32 = struct - include Int32 - - let pp pp v = Format.pp_print_int pp (Int32.to_int v) -end - -module Int64 = struct - include Int64 - - let pp pp v = Format.pp_print_int pp (Int64.to_int v) -end - -(* char *) -let equal_char ~loc a b = - equal ~loc Char.equal "Characters aren't equal" Format.pp_print_char a b - -(* int *) -let equal_int ~loc (a : int) (b : int) = - equal ~loc Int.equal "Integers aren't equal" Format.pp_print_int a b - -let not_equal_int ~loc (a : int) (b : int) = - not_equal ~loc Int.equal "Integers are equal" Format.pp_print_int a b - -let leq_int ~loc (a : int) (b : int) = - leq ~loc Compare.Int.compare "Integer comparison" Format.pp_print_int a b - -(* int32 *) -let equal_int32 ~loc (a : int32) (b : int32) = - equal ~loc Int32.equal "Int32 aren't equal" Int32.pp a b - -let leq_int32 ~loc (a : int32) (b : int32) = - leq ~loc Compare.Int32.compare "Int32 comparison" Int32.pp a b - -let lt_int32 ~loc (a : int32) (b : int32) = - lt ~loc Compare.Int32.compare "Int32 comparison" Int32.pp a b - -(* int64 *) -let equal_int64 ~loc (a : int64) (b : int64) = - equal ~loc Compare.Int64.( = ) "Int64 aren't equal" Int64.pp a b - -let not_equal_int64 ~loc (a : int64) (b : int64) = - not_equal ~loc Int64.equal "Int64 are equal" Int64.pp a b - -let leq_int64 ~loc (a : int64) (b : int64) = - leq ~loc Compare.Int64.compare "Int64 comparison" Int64.pp a b - -let equal_z ~loc (a : Z.t) (b : Z.t) = - equal ~loc Compare.Z.( = ) "Z are not equal" Z.pp_print a b - -let equal_q ~loc (a : Q.t) (b : Q.t) = - equal ~loc Compare.Q.( = ) "Q are not equal" Q.pp_print a b - -(* bool *) -let equal_bool ~loc (a : bool) (b : bool) = - equal ~loc Bool.equal "Booleans aren't equal" Format.pp_print_bool a b - -let not_equal_bool ~loc (a : bool) (b : bool) = - not_equal ~loc Bool.equal "Booleans are equal" Format.pp_print_bool a b - -let is_true ~loc (a : bool) = - equal ~loc Bool.equal "Boolean is not true" Format.pp_print_bool a true - -(* string *) -let equal_string ~loc (a : string) (b : string) = - equal ~loc String.equal "Strings aren't equal" Format.pp_print_string a b - -let not_equal_string ~loc (a : string) (b : string) = - not_equal ~loc String.equal "Strings are equal" Format.pp_print_string a b - -(* tez *) -let equal_tez ~loc (a : Alpha_context.Tez.t) (b : Alpha_context.Tez.t) = - let open Alpha_context in - equal ~loc Tez.( = ) "Tez aren't equal" Tez.pp a b - -let not_equal_tez ~loc (a : Alpha_context.Tez.t) (b : Alpha_context.Tez.t) = - let open Alpha_context in - not_equal ~loc Tez.( = ) "Tez are equal" Tez.pp a b - -(* pkh *) -let equal_pkh ~loc (a : Signature.Public_key_hash.t) - (b : Signature.Public_key_hash.t) = - let module PKH = Signature.Public_key_hash in - equal ~loc PKH.equal "Public key hashes aren't equal" PKH.pp a b - -let not_equal_pkh ~loc (a : Signature.Public_key_hash.t) - (b : Signature.Public_key_hash.t) = - let module PKH = Signature.Public_key_hash in - not_equal ~loc PKH.equal "Public key hashes are equal" PKH.pp a b - -(* protocol hash *) -let equal_protocol_hash ~loc (a : Protocol_hash.t) (b : Protocol_hash.t) = - equal - ~loc - Protocol_hash.equal - "Protocol hashes aren't equal" - Protocol_hash.pp - a - b - -let not_equal_protocol_hash ~loc (a : Protocol_hash.t) (b : Protocol_hash.t) = - not_equal - ~loc - Protocol_hash.equal - "Protocol hashes are equal" - Protocol_hash.pp - a - b - -let get_some ~loc = - let open Lwt_result_syntax in - function Some x -> return x | None -> failwith "Unexpected None (%s)" loc - -let is_none ~loc ~pp = - let open Lwt_result_syntax in - function - | Some x -> failwith "Unexpected (Some %a) (%s)" pp x loc - | None -> return_unit - -let equal_result ~loc ~pp_ok ~pp_error eq_ok eq_error a b = - equal - ~loc - (Result.equal ~ok:eq_ok ~error:eq_error) - "Results are not equal" - (Format.pp_print_result ~ok:pp_ok ~error:pp_error) - a - b - -let is_error ~loc ~pp = - let open Lwt_result_syntax in - function - | Ok x -> failwith "Unexpected (Ok %a) (%s)" pp x loc | Error _ -> return_unit - -let get_ok ~__LOC__ = - let open Lwt_result_syntax in - function - | Ok r -> return r - | Error err -> - failwith "@[Unexpected error (%s): %a@]" __LOC__ pp_print_trace err - -open Context - -(* Some asserts for account operations *) - -let contract_property_is property ~loc b contract expected = - let open Lwt_result_syntax in - let* balance = property b contract in - equal_tez ~loc balance expected - -(** [balance_is b c amount] checks that the current balance [b] of contract [c] - is [amount]. -*) -let balance_is = contract_property_is Contract.balance - -(** [frozen_bonds_is b c amount] checks that the current frozen bonds of - contract [c] is [amount]. -*) -let frozen_bonds_is = contract_property_is Contract.frozen_bonds - -let balance_or_frozen_bonds_was_operated ~is_balance ~operand ~loc b contract - old_balance amount = - let open Lwt_result_wrap_syntax in - let*?@ expected = operand old_balance amount in - let f = if is_balance then balance_is else frozen_bonds_is in - f ~loc b contract expected - -(** [balance_was_credited ~loc ctxt contract old_balance amount] checks - that [contract]'s balance was credited [amount] tez in comparison to - [old_balance]. -*) -let balance_was_credited = - balance_or_frozen_bonds_was_operated - ~is_balance:true - ~operand:Alpha_context.Tez.( +? ) - -(** [balance_was_credited ~loc ctxt contract old_balance amount] checks - that [contract]'s balance was debited [amount] tez in comparison to - [old_balance]. -*) -let balance_was_debited = - balance_or_frozen_bonds_was_operated - ~is_balance:true - ~operand:Alpha_context.Tez.( -? ) - -(** [frozen_bonds_was_credited ~loc ctxt contract old_balance amount] checks - that [contract]'s frozen bonds was credited [amount] tez in comparison to - [old_balance]. -*) -let frozen_bonds_was_credited = - balance_or_frozen_bonds_was_operated - ~is_balance:false - ~operand:Alpha_context.Tez.( +? ) - -(** [frozen_bonds_was_credited ~loc ctxt contract old_balance amount] checks - that [contract]'s frozen bonds was credited [amount] tez in comparison to - [old_balance]. -*) -let frozen_bonds_was_debited = - balance_or_frozen_bonds_was_operated - ~is_balance:false - ~operand:Alpha_context.Tez.( -? ) - -let pp_print_list pp out xs = - let list_pp fmt = - Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@.") fmt - in - Format.fprintf out "[%a]" (list_pp pp) xs - -let assert_equal_list ~loc eq msg pp = - equal ~loc (List.equal eq) msg (pp_print_list pp) - -let assert_equal_list_opt ~loc eq msg pp = - equal - ~loc - (Option.equal (List.equal eq)) - msg - (Format.pp_print_option (pp_print_list pp)) - -(** Checks that both lists have the same elements, not taking the - order of these elements into account, but taking their - multiplicity into account. *) -let equal_list_any_order ~loc ~compare msg pp list1 list2 = - let ordered_list1 = List.sort compare list1 in - let ordered_list2 = List.sort compare list2 in - equal - ~loc - (List.equal (fun a b -> compare a b = 0)) - msg - (pp_print_list pp) - ordered_list1 - ordered_list2 - -let to_json_string encoding x = - x - |> Data_encoding.Json.construct encoding - |> Format.asprintf "\n%a\n" Data_encoding.Json.pp - -let equal_with_encoding ~loc encoding a b = - equal_string ~loc (to_json_string encoding a) (to_json_string encoding b) - -let not_equal_with_encoding ~loc encoding a b = - not_equal_string ~loc (to_json_string encoding a) (to_json_string encoding b) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/big_map_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/big_map_helpers.ml deleted file mode 100644 index 46827683863ce5a3d2f71e96fa5f806fcf966033..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/big_map_helpers.ml +++ /dev/null @@ -1,71 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -let make_big_map block ~source ~key_type ~value_type key_values = - let open Lwt_result_wrap_syntax in - let key_type = Expr.from_string key_type in - let value_type = Expr.from_string value_type in - let* operation, originated = - Op.contract_origination_hash (B block) source ~script:Op.dummy_script - in - let* block = Block.bake ~operation block in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let*@ ctxt, big_map_id = Big_map.fresh ~temporary:false ctxt in - let* updates, ctxt = - List.fold_left_es - (fun (kvs, ctxt) (key, value) -> - let key_hash = - match - Data_encoding.Binary.to_bytes_opt Script_repr.expr_encoding key - with - | Some bytes -> Script_expr_hash.hash_bytes [bytes] - | None -> assert false - in - return ({Big_map.key; key_hash; value = Some value} :: kvs, ctxt)) - ([], ctxt) - key_values - in - let*@ ctxt = - Contract.update_script_storage - ctxt - originated - key_type - (Some - [ - Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update - { - init = Lazy_storage.Alloc Big_map.{key_type; value_type}; - updates; - }); - ]) - in - return (big_map_id, ctxt) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/big_map_helpers.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/big_map_helpers.mli deleted file mode 100644 index eca8c1dbd083b9cd5f639af9bf5327612eb01361..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/big_map_helpers.mli +++ /dev/null @@ -1,40 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(** [make_big_map block ~source ~key_type ~value_type key_values] constructs a - new big-map with the given key-type [key_type] and value type [value_type]. - - The big-map is owned by a new contract that is originated from [source], - with script {!Op.dummy_script}, and consists of a list of key-value pairs - according to the given [key_values] list of Micheline expressions. *) -val make_big_map : - Block.t -> - source:Alpha_context.Contract.t -> - key_type:string -> - value_type:string -> - (Script_repr.expr * Script_repr.expr) list -> - (Lazy_storage_kind.Big_map.Id.t * Alpha_context.context) tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/block.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/block.ml deleted file mode 100644 index f40e9af073e0d8162e9de6e8356d0daea262d5a6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/block.ml +++ /dev/null @@ -1,1341 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2020 Metastate AG *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -module Proto_Nonce = Nonce (* Renamed otherwise is masked by Alpha_context *) -open Alpha_context - -(* This type collects a block and the context that results from its application *) -type t = { - hash : Block_hash.t; - header : Block_header.t; - operations : Operation.packed list; - context : Tezos_protocol_environment.Context.t; - constants : Constants.Parametric.t; -} - -type block = t - -let rpc_context block = - { - Environment.Updater.block_hash = block.hash; - block_header = block.header.shell; - context = block.context; - } - -let rpc_ctxt = - new Environment.proto_rpc_context_of_directory - rpc_context - Plugin.RPC.rpc_services - -(******** Policies ***********) - -(* Policies are functions that take a block and return a tuple - [(account, level, timestamp)] for the [forge_header] function. *) - -(* This type is used only to provide a simpler interface to the exterior. *) -type baker_policy = - | By_round of int - | By_account of public_key_hash - | Excluding of public_key_hash list - -type baking_mode = Application | Baking - -let get_next_baker_by_round round block = - let open Lwt_result_syntax in - let+ bakers = - Plugin.RPC.Baking_rights.get rpc_ctxt ~all:true ~max_round:(round + 1) block - in - let {Plugin.RPC.Baking_rights.delegate = pkh; consensus_key; timestamp; _} = - WithExceptions.Option.get ~loc:__LOC__ - @@ List.find - (fun {Plugin.RPC.Baking_rights.round = r; _} -> - Round.to_int32 r = Int32.of_int round) - bakers - in - ( pkh, - consensus_key, - round, - WithExceptions.Option.to_exn ~none:(Failure "") timestamp ) - -type error += No_slots_found_for of Signature.Public_key_hash.t - -let () = - register_error_kind - `Permanent - ~id:(Protocol.name ^ "_Block.No_slots_found_for") - ~title:"No slots found for given pkh" - ~description:"No slots found for given public key hash" - ~pp:(fun ppf pkh -> - Format.fprintf - ppf - "No slots found for %a" - Signature.Public_key_hash.pp - pkh) - Data_encoding.(obj1 (req "pkh" Signature.Public_key_hash.encoding)) - (function No_slots_found_for pkh -> Some pkh | _ -> None) - (fun pkh -> No_slots_found_for pkh) - -let get_next_baker_by_account pkh block = - let open Lwt_result_wrap_syntax in - let* bakers = Plugin.RPC.Baking_rights.get rpc_ctxt ~delegates:[pkh] block in - let* { - Plugin.RPC.Baking_rights.delegate = pkh; - consensus_key; - timestamp; - round; - _; - } = - match List.hd bakers with - | Some b -> return b - | None -> tzfail (No_slots_found_for pkh) - in - let*?@ round = Round.to_int round in - return - ( pkh, - consensus_key, - round, - WithExceptions.Option.to_exn ~none:(Failure __LOC__) timestamp ) - -(* Returns the first baker able to bake that is not in the list of excluded keys. *) -let get_next_baker_excluding excludes block = - let open Lwt_result_wrap_syntax in - let* bakers = Plugin.RPC.Baking_rights.get rpc_ctxt block in - let* baker_opt = - List.find_es - (fun {Plugin.RPC.Baking_rights.consensus_key; delegate; _} -> - let* info = Plugin.RPC.Delegates.info rpc_ctxt block delegate in - let* forbidden = - Plugin.RPC.Staking.is_forbidden rpc_ctxt block delegate - in - return - @@ ((not info.deactivated) && (not forbidden) - && not - (List.mem - ~equal:Signature.Public_key_hash.equal - consensus_key - excludes))) - bakers - in - let { - Plugin.RPC.Baking_rights.delegate = pkh; - consensus_key; - timestamp; - round; - _; - } = - WithExceptions.Option.get ~loc:__LOC__ baker_opt - in - let*?@ round = Round.to_int round in - return - ( pkh, - consensus_key, - round, - WithExceptions.Option.to_exn ~none:(Failure "") timestamp ) - -let dispatch_policy = function - | By_round r -> get_next_baker_by_round r - | By_account a -> get_next_baker_by_account a - | Excluding al -> get_next_baker_excluding al - -let get_next_baker ?(policy = By_round 0) = dispatch_policy policy - -let get_round (b : t) = - let open Result_syntax in - let fitness = b.header.shell.fitness in - Fitness.( - let+ fitness = from_raw fitness in - round fitness) - -module Forge = struct - type header = { - baker : public_key_hash; - consensus_key : public_key_hash; - (* the signer of the block *) - shell : Block_header.shell_header; - contents : Block_header.contents; - } - - let default_proof_of_work_nonce = - Bytes.create Constants.proof_of_work_nonce_size - - let rec naive_pow_miner ~proof_of_work_threshold shell header = - let open Lwt_result_syntax in - match - Hacl_star.Hacl.RandomBuffer.randombytes - ~size:Constants.proof_of_work_nonce_size - with - | Some proof_of_work_nonce -> - let cand = Block_header.{header with proof_of_work_nonce} in - if - Block_header.Proof_of_work.check_header_proof_of_work_stamp - shell - cand - proof_of_work_threshold - then return cand - else naive_pow_miner ~proof_of_work_threshold shell header - | None -> failwith "Impossible to gather randomness" - - let make_contents - ?(proof_of_work_threshold = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_test - .proof_of_work_threshold) ~payload_hash ~payload_round - ?(liquidity_baking_toggle_vote = Per_block_votes.Per_block_vote_pass) - ?(adaptive_issuance_vote = Per_block_votes.Per_block_vote_pass) - ~seed_nonce_hash shell = - naive_pow_miner - ~proof_of_work_threshold - shell - Block_header. - { - payload_hash; - payload_round; - proof_of_work_nonce = default_proof_of_work_nonce; - seed_nonce_hash; - per_block_votes = - { - liquidity_baking_vote = liquidity_baking_toggle_vote; - adaptive_issuance_vote; - }; - } - - let make_shell ~level ~predecessor ~timestamp ~fitness ~operations_hash = - Tezos_base.Block_header. - { - level; - predecessor; - timestamp; - fitness; - operations_hash; - (* We don't care of the following values, only the shell validates them. *) - proto_level = 0; - validation_passes = 0; - context = Context_hash.zero; - } - - let set_seed_nonce_hash - ?(proof_of_work_threshold = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_test - .proof_of_work_threshold) seed_nonce_hash - {baker; consensus_key; shell; contents} = - let open Lwt_result_syntax in - let+ contents = - naive_pow_miner - ~proof_of_work_threshold - shell - {contents with seed_nonce_hash} - in - {baker; consensus_key; shell; contents} - - let set_baker baker ?(consensus_key = baker) header = - {header with baker; consensus_key} - - let sign_header {consensus_key; shell; contents; _} = - let open Lwt_result_syntax in - let+ signer_account = Account.find consensus_key in - let unsigned_bytes = - Data_encoding.Binary.to_bytes_exn - Block_header.unsigned_encoding - (shell, contents) - in - let signature = - Signature.sign - ~watermark:Block_header.(to_watermark (Block_header Chain_id.zero)) - signer_account.sk - unsigned_bytes - in - Block_header.{shell; protocol_data = {contents; signature}} - - let classify_operations operations = - let validation_passes_len = List.length Main.validation_passes in - let t = Array.make validation_passes_len [] in - List.iter - (fun (op : packed_operation) -> - match Main.acceptable_pass op with - | None -> () - | Some pass -> t.(pass) <- op :: t.(pass)) - operations ; - let t = Array.map List.rev t in - Array.to_list t - - let forge_header ?(locked_round = None) ?(payload_round = None) - ?(policy = By_round 0) ?timestamp ?(operations = []) - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote pred = - let open Lwt_result_wrap_syntax in - let pred_fitness = - match Fitness.from_raw pred.header.shell.fitness with - | Ok pred_fitness -> pred_fitness - | _ -> assert false - in - let predecessor_round = Fitness.round pred_fitness in - let* delegate, consensus_key, round, expected_timestamp = - dispatch_policy policy pred - in - let timestamp = Option.value ~default:expected_timestamp timestamp in - let level = Int32.succ pred.header.shell.level in - let*?@ raw_level = Raw_level.of_int32 level in - let*?@ round = Round.of_int round in - let*?@ fitness = - Fitness.create ~level:raw_level ~predecessor_round ~round ~locked_round - in - let fitness = Fitness.to_raw fitness in - let* seed_nonce_hash = - let+ level = Plugin.RPC.current_level ~offset:1l rpc_ctxt pred in - match level with - | {expected_commitment = true; _} -> Some (fst (Proto_Nonce.generate ())) - | {expected_commitment = false; _} -> None - in - let hashes = List.map Operation.hash_packed operations in - let operations_hash = - Operation_list_list_hash.compute [Operation_list_hash.compute hashes] - in - let shell = - make_shell - ~level - ~predecessor:pred.hash - ~timestamp - ~fitness - ~operations_hash - in - let operations = classify_operations operations in - let non_consensus_operations = - List.concat (match List.tl operations with None -> [] | Some l -> l) - in - let hashes = List.map Operation.hash_packed non_consensus_operations in - let payload_round = - match payload_round with None -> round | Some r -> r - in - let payload_hash = - Block_payload.hash - ~predecessor_hash:shell.predecessor - ~payload_round - hashes - in - let+ contents = - make_contents - ~seed_nonce_hash - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - ~payload_hash - ~payload_round - shell - in - {baker = delegate; consensus_key; shell; contents} - - (* compatibility only, needed by incremental *) - let contents - ?(proof_of_work_threshold = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_test - .proof_of_work_threshold) ?seed_nonce_hash - ?(liquidity_baking_toggle_vote = Per_block_votes.Per_block_vote_pass) - ?(adaptive_issuance_vote = Per_block_votes.Per_block_vote_pass) - ~payload_hash ~payload_round shell_header = - naive_pow_miner - ~proof_of_work_threshold - shell_header - { - Block_header.proof_of_work_nonce = default_proof_of_work_nonce; - seed_nonce_hash; - per_block_votes = - { - liquidity_baking_vote = liquidity_baking_toggle_vote; - adaptive_issuance_vote; - }; - payload_hash; - payload_round; - } -end - -(********* Genesis creation *************) - -(* Hard-coded context key *) -let protocol_param_key = ["protocol_parameters"] - -let check_constants_consistency constants = - let open Lwt_result_syntax in - let open Constants.Parametric in - let {blocks_per_cycle; blocks_per_commitment; nonce_revelation_threshold; _} = - constants - in - let* () = - Error_monad.unless (blocks_per_commitment <= blocks_per_cycle) (fun () -> - failwith - "Inconsistent constants : blocks_per_commitment must be less than \ - blocks_per_cycle") - in - Error_monad.unless (nonce_revelation_threshold <= blocks_per_cycle) (fun () -> - failwith - "Inconsistent constants : nonce_revelation_threshold must be less than \ - blocks_per_cycle") - -let prepare_main_init_params ?bootstrap_contracts commitments constants - bootstrap_accounts = - let open Lwt_syntax in - let open Tezos_protocol_019_PtParisB_parameters in - let parameters = - Default_parameters.parameters_of_constants - ~bootstrap_accounts - ?bootstrap_contracts - ~commitments - constants - in - let json = Default_parameters.json_of_parameters parameters in - let proto_params = - Data_encoding.Binary.to_bytes_exn Data_encoding.json json - in - Tezos_protocol_environment.Context.( - let empty = Tezos_protocol_environment.Memory_context.empty in - let* ctxt = add empty ["version"] (Bytes.of_string "genesis") in - add ctxt protocol_param_key proto_params) - -let initial_context ?(commitments = []) ?bootstrap_contracts chain_id constants - header bootstrap_accounts = - let open Lwt_result_wrap_syntax in - let*! ctxt = - prepare_main_init_params - ?bootstrap_contracts - commitments - constants - bootstrap_accounts - in - let+@ {context; _} = Main.init chain_id ctxt header in - context - -let initial_alpha_context ?(commitments = []) constants - (block_header : Block_header.shell_header) bootstrap_accounts = - let open Lwt_result_wrap_syntax in - let*! ctxt = - prepare_main_init_params commitments constants bootstrap_accounts - in - let level = block_header.level in - let timestamp = block_header.timestamp in - let predecessor = block_header.predecessor in - let typecheck_smart_contract (ctxt : Alpha_context.context) - (script : Alpha_context.Script.t) = - let allow_forged_tickets_in_storage, allow_forged_lazy_storage_id_in_storage - = - (false, false) - (* There should be no forged value in bootstrap contracts. *) - in - let* Ex_script (Script parsed_script), ctxt = - Script_ir_translator.parse_script - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets_in_storage - ~allow_forged_lazy_storage_id_in_storage - script - in - let* storage, lazy_storage_diff, ctxt = - Script_ir_translator.extract_lazy_storage_diff - ctxt - Optimized - parsed_script.storage_type - parsed_script.storage - ~to_duplicate:Script_ir_translator.no_lazy_storage_id - ~to_update:Script_ir_translator.no_lazy_storage_id - ~temporary:false - in - let+ storage, ctxt = - Script_ir_translator.unparse_data - ctxt - Optimized - parsed_script.storage_type - storage - in - let storage = Alpha_context.Script.lazy_expr storage in - (({script with storage}, lazy_storage_diff), ctxt) - in - let*@ result = - Alpha_context.prepare_first_block - ~typecheck_smart_contract - ~typecheck_smart_rollup: - Sc_rollup_operations.validate_untyped_parameters_ty - ~level - ~timestamp - ~predecessor - Chain_id.zero - ctxt - in - return result - -let genesis_with_parameters parameters = - let open Lwt_result_wrap_syntax in - let hash = - Block_hash.of_b58check_exn - "BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU" - in - let fitness = - Fitness_repr.create_without_locked_round - ~level:(Protocol.Raw_level_repr.of_int32_exn 0l) - ~predecessor_round:Round_repr.zero - ~round:Round_repr.zero - |> Fitness_repr.to_raw - in - let shell = - Forge.make_shell - ~level:0l - ~predecessor:hash - ~timestamp:Time.Protocol.epoch - ~fitness - ~operations_hash:Operation_list_list_hash.zero - in - let* contents = - Forge.make_contents - ~payload_hash:Block_payload_hash.zero - ~payload_round:Round.zero - ~seed_nonce_hash:None - shell - in - let open Tezos_protocol_019_PtParisB_parameters in - let json = Default_parameters.json_of_parameters parameters in - let proto_params = - Data_encoding.Binary.to_bytes_exn Data_encoding.json json - in - let*! ctxt = - Tezos_protocol_environment.Context.( - let empty = Tezos_protocol_environment.Memory_context.empty in - let*! ctxt = add empty ["version"] (Bytes.of_string "genesis") in - add ctxt protocol_param_key proto_params) - in - let chain_id = Chain_id.of_block_hash hash in - let*@ {context; _} = Main.init chain_id ctxt shell in - return - { - hash; - header = {shell; protocol_data = {contents; signature = Signature.zero}}; - operations = []; - context; - constants = parameters.constants; - } - -let validate_bootstrap_accounts - (bootstrap_accounts : Parameters.bootstrap_account list) minimal_stake = - let open Lwt_result_wrap_syntax in - if bootstrap_accounts = [] then - Stdlib.failwith "Must have one account with minimal_stake to bake" ; - (* Check there are at least minimal_stake tokens *) - Lwt.catch - (fun () -> - let* (_ : Tez.t) = - List.fold_left_es - (fun acc (Parameters.{amount; _} : Parameters.bootstrap_account) -> - let*?@ acc = Tez.( +? ) acc amount in - if acc >= minimal_stake then raise Exit else return acc) - Tez.zero - bootstrap_accounts - in - failwith - "Insufficient tokens in initial accounts: the amount should be at \ - least minimal_stake") - (function Exit -> return_unit | exc -> Lwt.reraise exc) - -let prepare_initial_context_params ?consensus_committee_size - ?consensus_threshold ?min_proposal_quorum ?level ?cost_per_byte - ?issuance_weights ?origination_size ?blocks_per_cycle - ?cycles_per_voting_period ?sc_rollup_arith_pvm_enable - ?sc_rollup_private_enable ?sc_rollup_riscv_pvm_enable ?dal_enable - ?zk_rollup_enable ?hard_gas_limit_per_block ?nonce_revelation_threshold ?dal - ?adaptive_issuance ?consensus_rights_delay () = - let open Lwt_result_syntax in - let open Tezos_protocol_019_PtParisB_parameters in - let constants = Default_parameters.constants_test in - let min_proposal_quorum = - Option.value ~default:constants.min_proposal_quorum min_proposal_quorum - in - let cost_per_byte = - Option.value ~default:constants.cost_per_byte cost_per_byte - in - let issuance_weights = - Option.value ~default:constants.issuance_weights issuance_weights - in - let origination_size = - Option.value ~default:constants.origination_size origination_size - in - let blocks_per_cycle = - Option.value ~default:constants.blocks_per_cycle blocks_per_cycle - in - let cycles_per_voting_period = - Option.value - ~default:constants.cycles_per_voting_period - cycles_per_voting_period - in - let consensus_threshold = - Option.value ~default:constants.consensus_threshold consensus_threshold - in - let consensus_committee_size = - Option.value - ~default:constants.consensus_committee_size - consensus_committee_size - in - let sc_rollup_arith_pvm_enable = - Option.value - ~default:constants.sc_rollup.arith_pvm_enable - sc_rollup_arith_pvm_enable - in - let sc_rollup_riscv_pvm_enable = - Option.value - ~default:constants.sc_rollup.riscv_pvm_enable - sc_rollup_riscv_pvm_enable - in - let sc_rollup_private_enable = - Option.value - ~default:constants.sc_rollup.private_enable - sc_rollup_private_enable - in - let dal_enable = - Option.value ~default:constants.dal.feature_enable dal_enable - in - let zk_rollup_enable = - Option.value ~default:constants.zk_rollup.enable zk_rollup_enable - in - let hard_gas_limit_per_block = - Option.value - ~default:constants.hard_gas_limit_per_block - hard_gas_limit_per_block - in - let nonce_revelation_threshold = - Option.value - ~default:constants.nonce_revelation_threshold - nonce_revelation_threshold - in - let dal = Option.value ~default:constants.dal dal in - let adaptive_issuance = - Option.value ~default:constants.adaptive_issuance adaptive_issuance - in - let consensus_rights_delay = - Option.value - ~default:constants.consensus_rights_delay - consensus_rights_delay - in - - let constants = - { - constants with - issuance_weights; - origination_size; - blocks_per_cycle; - cycles_per_voting_period; - min_proposal_quorum; - cost_per_byte; - consensus_committee_size; - consensus_threshold; - sc_rollup = - { - constants.sc_rollup with - arith_pvm_enable = sc_rollup_arith_pvm_enable; - private_enable = sc_rollup_private_enable; - riscv_pvm_enable = sc_rollup_riscv_pvm_enable; - }; - dal = {dal with feature_enable = dal_enable}; - zk_rollup = {constants.zk_rollup with enable = zk_rollup_enable}; - adaptive_issuance; - hard_gas_limit_per_block; - nonce_revelation_threshold; - consensus_rights_delay; - } - in - let* () = check_constants_consistency constants in - let hash = - Block_hash.of_b58check_exn - "BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU" - in - let level = Option.value ~default:0l level in - let fitness = - Fitness_repr.create_without_locked_round - ~level:(Protocol.Raw_level_repr.of_int32_exn level) - ~predecessor_round:Round_repr.zero - ~round:Round_repr.zero - |> Fitness_repr.to_raw - in - let shell = - Forge.make_shell - ~level - ~predecessor:hash - ~timestamp:Time.Protocol.epoch - ~fitness - ~operations_hash:Operation_list_list_hash.zero - in - return (constants, shell, hash) - -(* if no parameter file is passed we check in the current directory - where the test is run *) -let genesis ?commitments ?consensus_committee_size ?consensus_threshold - ?min_proposal_quorum ?bootstrap_contracts ?level ?cost_per_byte - ?issuance_weights ?origination_size ?blocks_per_cycle - ?cycles_per_voting_period ?sc_rollup_arith_pvm_enable - ?sc_rollup_private_enable ?sc_rollup_riscv_pvm_enable ?dal_enable - ?zk_rollup_enable ?hard_gas_limit_per_block ?nonce_revelation_threshold ?dal - ?adaptive_issuance (bootstrap_accounts : Parameters.bootstrap_account list) - = - let open Lwt_result_syntax in - let* constants, shell, hash = - prepare_initial_context_params - ?consensus_committee_size - ?consensus_threshold - ?min_proposal_quorum - ?level - ?cost_per_byte - ?issuance_weights - ?origination_size - ?blocks_per_cycle - ?cycles_per_voting_period - ?sc_rollup_arith_pvm_enable - ?sc_rollup_private_enable - ?sc_rollup_riscv_pvm_enable - ?dal_enable - ?zk_rollup_enable - ?hard_gas_limit_per_block - ?nonce_revelation_threshold - ?dal - ?adaptive_issuance - () - in - let* () = - validate_bootstrap_accounts bootstrap_accounts constants.minimal_stake - in - let* context = - initial_context - ?commitments - ?bootstrap_contracts - (Chain_id.of_block_hash hash) - constants - shell - bootstrap_accounts - in - let+ contents = - Forge.make_contents - ~payload_hash:Block_payload_hash.zero - ~payload_round:Round.zero - ~seed_nonce_hash:None - shell - in - { - hash; - header = {shell; protocol_data = {contents; signature = Signature.zero}}; - operations = []; - context; - constants; - } - -let alpha_context ?commitments ?min_proposal_quorum ?consensus_rights_delay - (bootstrap_accounts : Parameters.bootstrap_account list) = - let open Lwt_result_syntax in - let* constants, shell, _hash = - prepare_initial_context_params - ?min_proposal_quorum - ?consensus_rights_delay - () - in - let* () = - validate_bootstrap_accounts bootstrap_accounts constants.minimal_stake - in - initial_alpha_context ?commitments constants shell bootstrap_accounts - -(********* Baking *************) - -let begin_validation_and_application ctxt chain_id mode ~predecessor = - let open Lwt_result_syntax in - let* validation_state = begin_validation ctxt chain_id mode ~predecessor in - let* application_state = begin_application ctxt chain_id mode ~predecessor in - return (validation_state, application_state) - -let get_application_vstate (pred : t) (operations : Protocol.operation trace) = - let open Lwt_result_wrap_syntax in - let* header = Forge.forge_header pred ~operations in - let* header = Forge.sign_header header in - let*@ result = - begin_validation_and_application - pred.context - Chain_id.zero - (Application header) - ~predecessor:pred.header.shell - in - return result - -(* Note that by calling this function without [protocol_data], we - force the mode to be partial construction. *) -let get_construction_vstate ?(policy = By_round 0) ?timestamp - ?(protocol_data = None) (pred : t) = - let open Lwt_result_wrap_syntax in - let open Protocol in - let* _pkh, _ck, _round, expected_timestamp = dispatch_policy policy pred in - let timestamp = Option.value ~default:expected_timestamp timestamp in - let mode = - match protocol_data with - | None -> Partial_construction {predecessor_hash = pred.hash; timestamp} - | Some block_header_data -> - Construction - {predecessor_hash = pred.hash; timestamp; block_header_data} - in - let*@ result = - begin_validation_and_application - pred.context - Chain_id.zero - mode - ~predecessor:pred.header.shell - in - return result - -let validate_and_apply_operation (validation_state, application_state) op = - let open Lwt_result_syntax in - let oph = Operation.hash_packed op in - let* validation_state = validate_operation validation_state oph op in - let* application_state, receipt = apply_operation application_state oph op in - return ((validation_state, application_state), receipt) - -let finalize_validation_and_application (validation_state, application_state) - shell_header = - let open Lwt_result_syntax in - let* () = finalize_validation validation_state in - finalize_application application_state shell_header - -let detect_manager_failure : - type kind. kind Apply_results.operation_metadata -> _ = - let open Result_syntax in - let rec detect_manager_failure : - type kind. kind Apply_results.contents_result_list -> _ = - let open Apply_results in - let open Apply_operation_result in - let open Apply_internal_results in - let detect_manager_failure_single (type kind) - (Manager_operation_result - {operation_result; internal_operation_results; _} : - kind Kind.manager Apply_results.contents_result) = - let detect_manager_failure (type kind) - (result : (kind, _, _) operation_result) = - match result with - | Applied _ -> return_unit - | Skipped _ -> assert false - | Backtracked (_, None) -> - (* there must be another error for this to happen *) - return_unit - | Backtracked (_, Some errs) -> fail errs - | Failed (_, errs) -> fail errs - in - let* () = detect_manager_failure operation_result in - List.iter_e - (fun (Internal_operation_result (_, r)) -> detect_manager_failure r) - internal_operation_results - in - function - | Single_result (Manager_operation_result _ as res) -> - detect_manager_failure_single res - | Single_result _ -> return_unit - | Cons_result (res, rest) -> - let* () = detect_manager_failure_single res in - detect_manager_failure rest - in - fun {contents} -> detect_manager_failure contents - -let apply_with_metadata ?(policy = By_round 0) ?(check_size = true) - ?(baking_mode = Application) ~allow_manager_failures header - ?(operations = []) pred = - let open Lwt_result_wrap_syntax in - let* context, result, contents_result = - let* vstate = - match baking_mode with - | Application -> - let*@ result = - begin_validation_and_application - pred.context - Chain_id.zero - (Application header) - ~predecessor:pred.header.shell - in - return result - | Baking -> - get_construction_vstate - ~policy - ~protocol_data:(Some header.protocol_data) - (pred : t) - in - let*@ vstate, contents_result = - List.fold_left_es - (fun (vstate, contents_result) op -> - (if check_size then - let operation_size = - Data_encoding.Binary.length Operation.encoding op - in - if operation_size > Constants_repr.max_operation_data_length then - raise - (invalid_arg - (Format.sprintf - "The operation size is %d, it exceeds the constant \ - maximum size %d" - operation_size - Constants_repr.max_operation_data_length))) ; - let* state, result = validate_and_apply_operation vstate op in - if allow_manager_failures then - return (state, result :: contents_result) - else - match result with - | No_operation_metadata -> return (state, contents_result) - | Operation_metadata metadata -> - let*? () = detect_manager_failure metadata in - return (state, result :: contents_result)) - (vstate, []) - operations - in - let+@ validation, result = - finalize_validation_and_application vstate (Some header.shell) - in - (validation.context, result, List.rev contents_result) - in - let hash = Block_header.hash header in - let+ constants = Alpha_services.Constants.parametric rpc_ctxt pred in - ({hash; header; operations; context; constants}, (result, contents_result)) - -let apply header ?(operations = []) ?(allow_manager_failures = false) pred = - let open Lwt_result_syntax in - let* t, _metadata = - apply_with_metadata - header - ~operations - pred - ~baking_mode:Application - ~allow_manager_failures - in - return t - -let bake_with_metadata ?locked_round ?policy ?timestamp ?operation ?operations - ?payload_round ?check_size ?baking_mode ?(allow_manager_failures = false) - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote pred = - let open Lwt_result_syntax in - let operations = - match (operation, operations) with - | Some op, Some ops -> Some (op :: ops) - | Some op, None -> Some [op] - | None, Some ops -> Some ops - | None, None -> None - in - let* header = - Forge.forge_header - ?payload_round - ?locked_round - ?timestamp - ?policy - ?operations - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - pred - in - let* header = Forge.sign_header header in - apply_with_metadata - ?policy - ?check_size - ?baking_mode - ~allow_manager_failures - header - ?operations - pred - -let bake_n_with_metadata ?locked_round ?policy ?timestamp ?payload_round - ?check_size ?baking_mode ?(allow_manager_failures = false) - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote n pred = - let open Lwt_result_syntax in - let get_next b = - bake_with_metadata - ?locked_round - ?policy - ?timestamp - ?payload_round - ?check_size - ?baking_mode - ~allow_manager_failures - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - b - in - let* b = get_next pred in - List.fold_left_es (fun (b, _metadata) _ -> get_next b) b (2 -- n) - -let bake ?baking_mode ?(allow_manager_failures = false) ?payload_round - ?locked_round ?policy ?timestamp ?operation ?operations - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote ?check_size pred = - let open Lwt_result_syntax in - let* t, (_metadata : block_header_metadata * operation_receipt list) = - bake_with_metadata - ?payload_round - ?baking_mode - ~allow_manager_failures - ?locked_round - ?policy - ?timestamp - ?operation - ?operations - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - ?check_size - pred - in - return t - -(********** Cycles ****************) - -let bake_n ?baking_mode ?policy ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote n b = - List.fold_left_es - (fun b _ -> - bake - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - b) - b - (1 -- n) - -let rec bake_while_with_metadata ?baking_mode ?policy - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote - ?(invariant = fun _ -> Lwt_result_syntax.return_unit) ?previous_metadata - predicate b = - let open Lwt_result_syntax in - let* () = invariant b in - let* new_block, (metadata, _) = - bake_with_metadata - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - b - in - if predicate new_block metadata then - (bake_while_with_metadata [@ocaml.tailcall]) - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - ~previous_metadata:metadata - ~invariant - predicate - new_block - else return (b, (previous_metadata, metadata)) - -let bake_while_with_metadata = bake_while_with_metadata ?previous_metadata:None - -let bake_while ?baking_mode ?policy ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote ?invariant predicate b = - let open Lwt_result_syntax in - let* b, _ = - bake_while_with_metadata - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - ?invariant - (fun block _metadata -> predicate block) - b - in - return b - -let bake_until_level ?baking_mode ?policy ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote level b = - bake_while - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - (fun b -> b.header.shell.level <= Raw_level.to_int32 level) - b - -let balance_update_of_internal_operation_result = function - | Protocol.Apply_internal_results.Internal_operation_result (_, iopr) -> ( - match iopr with - | Protocol.Apply_operation_result.Backtracked _ | Failed _ | Skipped _ -> - assert false - | Applied siopr -> ( - match siopr with - | ITransaction_result - (Transaction_to_contract_result {balance_updates; _}) - | ITransaction_result - (Transaction_to_zk_rollup_result {balance_updates; _}) - | IOrigination_result {balance_updates; _} - | IDelegation_result {balance_updates; _} -> - balance_updates - | ITransaction_result (Transaction_to_sc_rollup_result _) - | IEvent_result _ -> - [])) - -let balance_update_of_operation_result : - type a. - a Protocol.Apply_results.manager_operation_result -> - Protocol.Alpha_context.Receipt.balance_updates = function - | Protocol.Apply_operation_result.Backtracked _ | Failed _ | Skipped _ -> - assert false - | Applied siopr -> ( - match siopr with - | Protocol.Apply_results.Transaction_result - (Transaction_to_sc_rollup_result _) - | Reveal_result _ | Update_consensus_key_result _ - | Set_deposits_limit_result _ | Transfer_ticket_result _ - | Dal_publish_commitment_result _ | Sc_rollup_originate_result _ - | Sc_rollup_add_messages_result _ | Sc_rollup_cement_result _ - | Sc_rollup_publish_result _ | Sc_rollup_refute_result _ - | Sc_rollup_timeout_result _ | Sc_rollup_execute_outbox_message_result _ - | Sc_rollup_recover_bond_result _ | Zk_rollup_origination_result _ - | Zk_rollup_publish_result _ | Zk_rollup_update_result _ -> - [] - | Delegation_result {balance_updates; _} - | Transaction_result - ( Transaction_to_contract_result {balance_updates; _} - | Transaction_to_zk_rollup_result {balance_updates; _} ) - | Origination_result {balance_updates; _} - | Register_global_constant_result {balance_updates; _} - | Increase_paid_storage_result {balance_updates; _} -> - balance_updates) - -let balance_updates_of_single_content : - type a. - a Protocol.Apply_results.contents_result -> - Protocol.Alpha_context.Receipt.balance_updates = function - | Proposals_result | Ballot_result -> [] - | Preattestation_result {balance_updates; _} - | Attestation_result {balance_updates; _} - | Seed_nonce_revelation_result balance_updates - | Vdf_revelation_result balance_updates - | Double_attestation_evidence_result {balance_updates; _} - | Double_preattestation_evidence_result {balance_updates; _} - | Double_baking_evidence_result {balance_updates; _} - | Activate_account_result balance_updates - | Drain_delegate_result {balance_updates; _} -> - balance_updates - | Manager_operation_result - {balance_updates; internal_operation_results; operation_result} -> - balance_updates - @ (List.map - balance_update_of_internal_operation_result - internal_operation_results - |> List.flatten) - @ balance_update_of_operation_result operation_result - -let rec balance_updates_of_contents : - type a. - a Protocol.Apply_results.contents_result_list -> - Protocol.Alpha_context.Receipt.balance_updates = function - | Single_result c -> balance_updates_of_single_content c - | Cons_result (h, t) -> - balance_updates_of_single_content h @ balance_updates_of_contents t - -let balance_updates_of_packed_operation_metadata : - Protocol.Apply_results.packed_operation_metadata -> - Protocol.Alpha_context.Receipt.balance_updates = function - | No_operation_metadata -> [] - | Operation_metadata {contents} -> balance_updates_of_contents contents - -let get_balance_updates_from_metadata - ( Apply_results.{balance_updates; implicit_operations_results; _}, - operation_receipts ) = - let implicit_balance_updates = - List.( - map - (fun (Protocol.Apply_results.Successful_manager_result r) -> - balance_update_of_operation_result (Applied r)) - implicit_operations_results) - |> List.flatten - in - balance_updates - @ (List.map balance_updates_of_packed_operation_metadata operation_receipts - |> List.flatten) - @ implicit_balance_updates - -let bake_n_with_all_balance_updates ?baking_mode ?policy - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote n b = - let open Lwt_result_syntax in - let+ b, balance_updates_rev = - List.fold_left_es - (fun (b, balance_updates_rev) _ -> - let* b, metadata = - bake_with_metadata - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - b - in - let balance_updates_rev = - List.rev_append - balance_updates_rev - (get_balance_updates_from_metadata metadata) - in - return (b, balance_updates_rev)) - (b, []) - (1 -- n) - in - (b, List.rev balance_updates_rev) - -let bake_n_with_origination_results ?baking_mode ?policy n b = - let open Lwt_result_syntax in - let+ b, origination_results_rev = - List.fold_left_es - (fun (b, origination_results_rev) _ -> - let* b, (metadata, _) = bake_with_metadata ?baking_mode ?policy b in - let origination_results_rev = - List.fold_left - (fun origination_results_rev -> - let open Apply_results in - function - | Successful_manager_result (Reveal_result _) - | Successful_manager_result (Delegation_result _) - | Successful_manager_result (Update_consensus_key_result _) - | Successful_manager_result (Transaction_result _) - | Successful_manager_result (Register_global_constant_result _) - | Successful_manager_result (Set_deposits_limit_result _) - | Successful_manager_result (Increase_paid_storage_result _) - | Successful_manager_result (Transfer_ticket_result _) - | Successful_manager_result (Dal_publish_commitment_result _) - | Successful_manager_result (Sc_rollup_originate_result _) - | Successful_manager_result (Sc_rollup_add_messages_result _) - | Successful_manager_result (Sc_rollup_cement_result _) - | Successful_manager_result (Sc_rollup_publish_result _) - | Successful_manager_result (Sc_rollup_refute_result _) - | Successful_manager_result (Sc_rollup_timeout_result _) - | Successful_manager_result - (Sc_rollup_execute_outbox_message_result _) - | Successful_manager_result (Sc_rollup_recover_bond_result _) - | Successful_manager_result (Zk_rollup_origination_result _) - | Successful_manager_result (Zk_rollup_publish_result _) - | Successful_manager_result (Zk_rollup_update_result _) -> - origination_results_rev - | Successful_manager_result (Origination_result x) -> - Origination_result x :: origination_results_rev) - origination_results_rev - metadata.implicit_operations_results - in - return (b, origination_results_rev)) - (b, []) - (1 -- n) - in - (b, List.rev origination_results_rev) - -let bake_n_with_liquidity_baking_toggle_ema ?baking_mode ?policy - ?liquidity_baking_toggle_vote ?adaptive_issuance_vote n b = - let open Lwt_result_syntax in - let+ b, (metadata, _) = - bake_n_with_metadata - ?baking_mode - ?policy - ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote - n - b - in - (b, metadata.liquidity_baking_toggle_ema) - -let current_cycle_of_level ~blocks_per_cycle ~current_level = - let current_cycle = Int32.div current_level blocks_per_cycle in - let current_cycle = Cycle.add Cycle.root (Int32.to_int current_cycle) in - current_cycle - -let current_cycle b = - let blocks_per_cycle = b.constants.blocks_per_cycle in - let current_level = b.header.shell.level in - current_cycle_of_level ~blocks_per_cycle ~current_level - -let last_level_of_cycle (constants : Constants.Parametric.t) ~level = - let blocks_per_cycle = constants.blocks_per_cycle in - let mod_plus_one = Int32.(rem (succ level) blocks_per_cycle) in - Int32.(equal mod_plus_one zero) - -let last_block_of_cycle b = - last_level_of_cycle b.constants ~level:b.header.shell.level - -let bake_until_cycle ?baking_mode ?policy cycle (b : t) = - let open Lwt_result_syntax in - let* final_block_of_previous_cycle = - bake_while - ?baking_mode - ?policy - (fun block -> Cycle.(current_cycle block < cycle)) - b - in - bake ?baking_mode ?policy final_block_of_previous_cycle - -let bake_until_cycle_with_metadata ?baking_mode ?policy cycle (b : t) = - bake_while_with_metadata - ?baking_mode - ?policy - (fun block _ -> Cycle.(current_cycle block < cycle)) - b - -let bake_until_cycle_end ?baking_mode ?policy b = - let cycle = current_cycle b in - bake_until_cycle ?baking_mode ?policy (Cycle.succ cycle) b - -let bake_until_cycle_end_with_metadata ?baking_mode ?policy b = - let open Lwt_result_syntax in - let cycle = current_cycle b in - let* blk, (eoc_metadata, nxt_metadata) = - bake_until_cycle_with_metadata ?baking_mode ?policy (Cycle.succ cycle) b - in - return (blk, eoc_metadata, nxt_metadata) - -let bake_until_n_cycle_end ?baking_mode ?policy n b = - let cycle = current_cycle b in - bake_until_cycle ?baking_mode ?policy (Cycle.add cycle n) b - -let bake_until_n_cycle_end_with_metadata ?baking_mode ?policy n b = - let open Lwt_result_syntax in - let cycle = current_cycle b in - let* blk, (eoc_metadata, nxt_metadata) = - bake_until_cycle_with_metadata ?baking_mode ?policy (Cycle.add cycle n) b - in - return (blk, eoc_metadata, nxt_metadata) - -let debited_of_balance_update_item (it : Receipt.balance_update_item) : - Tez.t option = - let open Receipt in - match it with - | Balance_update_item (Contract _, Debited tez, _) -> Some tez - | _ -> None - -let autostaked_opt baker (metadata : block_header_metadata) = - let autostaked_bal_up_opt = - List.find - (function - | Receipt.Balance_update_item - (Contract tzbaker, Receipt.Debited debited_tez, _origin) - when tzbaker = Implicit baker -> - List.exists - (function - | Receipt.Balance_update_item - (Deposits _staker, Receipt.Credited tez, _origin) -> - Tez.(tez = debited_tez) - | _ -> false) - metadata.balance_updates - | _ -> false) - metadata.balance_updates - in - Option.map - (fun receipt -> - match debited_of_balance_update_item receipt with - | None -> assert false - | Some tez -> tez) - autostaked_bal_up_opt - -let autostaked ?(loc = __LOC__) baker metadata = - ignore loc ; - match autostaked_opt baker metadata with None -> Tez.zero | Some tez -> tez diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/block.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/block.mli deleted file mode 100644 index 401382c096ebddaf8eaa481839b406c0b9858c57..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/block.mli +++ /dev/null @@ -1,431 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2020 Metastate AG *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -type t = { - hash : Block_hash.t; - header : Block_header.t; - operations : Operation.packed list; - context : Tezos_protocol_environment.Context.t; (** Resulting context *) - constants : Constants.Parametric.t; -} - -type block = t - -val rpc_ctxt : t Environment.RPC_context.simple - -(** Policies to select the next baker: - - [By_round r] selects the baker at round [r] - - [By_account pkh] selects the first slot for baker [pkh] - - [Excluding pkhs] selects the first valid baker that doesn't belong to [pkhs] - - Note that bakers can have active consensus keys different from - their regular delegate keys. For the [By_account pkh] policy, [pkh] - refers to the baker's delegate key. However, for the [Excluding pkhs] - policy, [pkhs] refer to the baker's active consensus key. *) -type baker_policy = - | By_round of int - | By_account of public_key_hash - | Excluding of public_key_hash list - -(** - The default baking functions below is to use (blocks) [Application] mode. - Setting [baking_mode] allows to switch to [Full_construction] mode. -*) -type baking_mode = Application | Baking - -type error += No_slots_found_for of Signature.Public_key_hash.t - -(** Returns (account, consensus_key, round, timestamp) of the next baker given - a policy, defaults to By_round 0. *) -val get_next_baker : - ?policy:baker_policy -> - t -> - (public_key_hash * public_key_hash * int * Time.Protocol.t) tzresult Lwt.t - -val get_round : block -> Round.t Environment.Error_monad.tzresult - -module Forge : sig - val contents : - ?proof_of_work_threshold:Int64.t -> - ?seed_nonce_hash:Nonce_hash.t -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - payload_hash:Block_payload_hash.t -> - payload_round:Round.t -> - Block_header.shell_header -> - Block_header.contents tzresult Lwt.t - - type header - - val classify_operations : packed_operation list -> packed_operation list list - - (** Forges a correct header following the policy. - The header can then be modified and applied with [apply]. *) - val forge_header : - ?locked_round:Alpha_context.Round.t option -> - ?payload_round:Round.t option -> - ?policy:baker_policy -> - ?timestamp:Timestamp.time -> - ?operations:Operation.packed list -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - t -> - header tzresult Lwt.t - - (** Sets uniquely seed_nonce_hash of a header *) - val set_seed_nonce_hash : - ?proof_of_work_threshold:int64 -> - Nonce_hash.t option -> - header -> - (header, tztrace) result Lwt.t - - (** Sets the baker that will sign the header to an arbitrary pkh *) - val set_baker : - public_key_hash -> - ?consensus_key:Signature.public_key_hash -> - header -> - header - - (** Signs the header with the key of the baker configured in the header. - The header can no longer be modified, only applied. *) - val sign_header : header -> Block_header.block_header tzresult Lwt.t -end - -val check_constants_consistency : Constants.Parametric.t -> unit tzresult Lwt.t - -(** [genesis accounts] : generates an initial block with the - given constants [] and initializes [accounts] with their - associated amounts. -*) -val genesis : - ?commitments:Commitment.t list -> - ?consensus_committee_size:int -> - ?consensus_threshold:int -> - ?min_proposal_quorum:int32 -> - ?bootstrap_contracts:Parameters.bootstrap_contract list -> - ?level:int32 -> - ?cost_per_byte:Tez.t -> - ?issuance_weights:Constants.Parametric.issuance_weights -> - ?origination_size:int -> - ?blocks_per_cycle:int32 -> - ?cycles_per_voting_period:int32 -> - ?sc_rollup_arith_pvm_enable:bool -> - ?sc_rollup_private_enable:bool -> - ?sc_rollup_riscv_pvm_enable:bool -> - ?dal_enable:bool -> - ?zk_rollup_enable:bool -> - ?hard_gas_limit_per_block:Gas.Arith.integral -> - ?nonce_revelation_threshold:int32 -> - ?dal:Constants.Parametric.dal -> - ?adaptive_issuance:Constants.Parametric.adaptive_issuance -> - Parameters.bootstrap_account list -> - block tzresult Lwt.t - -val genesis_with_parameters : Parameters.t -> block tzresult Lwt.t - -(** [alpha_context accounts] : instantiates an alpha_context with the - given constants [] and initializes [accounts] with their - associated amounts. -*) -val alpha_context : - ?commitments:Commitment.t list -> - ?min_proposal_quorum:int32 -> - ?consensus_rights_delay:int -> - Parameters.bootstrap_account list -> - Alpha_context.t tzresult Lwt.t - -(** - [get_application_vstate pred operations] constructs a protocol validation - environment for operations in application mode on top of the given block - with the given operations. It's a shortcut for [begin_application] -*) -val get_application_vstate : - t -> - Protocol.operation list -> - (validation_state * application_state) tzresult Lwt.t - -(** - [get_construction_vstate ?policy ?timestamp ?protocol_data pred] - constructs a protocol validation environment for operations in - construction mode on top of the given block. The mode is - full(baking)/partial(mempool) if [protocol_data] given/absent. It's a - shortcut for [begin_construction] - *) -val get_construction_vstate : - ?policy:baker_policy -> - ?timestamp:Timestamp.time -> - ?protocol_data:block_header_data option -> - block -> - (validation_state * application_state) tzresult Lwt.t - -(** applies a signed header and its operations to a block and - obtains a new block *) -val apply : - Block_header.block_header -> - ?operations:Operation.packed list -> - ?allow_manager_failures:bool -> - t -> - t tzresult Lwt.t - -(** [bake b] returns a block [b'] which has as predecessor block [b]. - Optional parameter [policy] allows to pick the next baker in - several ways. If [check_size] is [true] (the default case), then - the function checks that the operations passed as arguments satisfy - the size limit of Tezos operations, as defined in the protocol. - This function bundles together [forge_header], [sign_header] and - [apply]. These functions should be used instead of bake to craft - unusual blocks for testing together with setters for properties of - the headers. Setting [allow_manager_failures] (default=false), - allows baking blocks with manager operation(s) that are valid but - that could fail during their application. If this is not set, the - block is correctly baked but the operations' application will fail - silently. For examples see seed.ml or double_baking.ml -*) -val bake : - ?baking_mode:baking_mode -> - ?allow_manager_failures:bool -> - ?payload_round:Round.t option -> - ?locked_round:Alpha_context.Round.t option -> - ?policy:baker_policy -> - ?timestamp:Timestamp.time -> - ?operation:Operation.packed -> - ?operations:Operation.packed list -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - ?check_size:bool -> - t -> - t tzresult Lwt.t - -(** Variant of [bake] that returns the block metadata of the baked block. **) -val bake_with_metadata : - ?locked_round:Alpha_context.Round.t option -> - ?policy:baker_policy -> - ?timestamp:Timestamp.time -> - ?operation:Operation.packed -> - ?operations:Operation.packed list -> - ?payload_round:Round.t option -> - ?check_size:bool -> - ?baking_mode:baking_mode -> - ?allow_manager_failures:bool -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - t -> - (t * (block_header_metadata * operation_receipt list)) tzresult Lwt.t - -(** Bakes [n] blocks. *) -val bake_n : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - int -> - t -> - block tzresult Lwt.t - -(** Bakes until the given level is reached. *) -val bake_until_level : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - Raw_level.t -> - t -> - block tzresult Lwt.t - -(** Version of bake_n that returns a list of all balance updates included - in the metadata of baked blocks. **) -val bake_n_with_all_balance_updates : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - int -> - t -> - (block * Alpha_context.Receipt.balance_updates) tzresult Lwt.t - -(** Version of bake_n that returns a list of all origination results - in the metadata of baked blocks. **) -val bake_n_with_origination_results : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - int -> - t -> - (block - * Alpha_context.Kind.origination - Apply_results.successful_manager_operation_result - list) - tzresult - Lwt.t - -(** Version of bake_n that returns the liquidity baking toggle EMA after [n] blocks. **) -val bake_n_with_liquidity_baking_toggle_ema : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes.per_block_vote -> - int -> - t -> - (block * Alpha_context.Per_block_votes.Liquidity_baking_toggle_EMA.t) tzresult - Lwt.t - -(** Variant of [bake_n] that returns the block metadata of the last - baked block. [n] must be positive, otherwise a single block is baked. **) -val bake_n_with_metadata : - ?locked_round:Round.t option -> - ?policy:baker_policy -> - ?timestamp:Timestamp.time -> - ?payload_round:Round.t option -> - ?check_size:bool -> - ?baking_mode:baking_mode -> - ?allow_manager_failures:bool -> - ?liquidity_baking_toggle_vote:Per_block_votes_repr.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes_repr.per_block_vote -> - int -> - block -> - (block * (block_header_metadata * operation_receipt list)) tzresult Lwt.t - -val get_balance_updates_from_metadata : - block_header_metadata * operation_receipt list -> - Alpha_context.Receipt.balance_updates - -(** Bake blocks while a predicate over the block holds. The returned - block is the last one for which the predicate holds; in case the - predicate never holds, the input block is returned. When the - optional [invariant] argument is provided, it is checked on the - input block and on each baked block, including the returned one - (the last one satisfy the predicate); it is however not checked - on the next block (the first one to invalidate the predicate). *) -val bake_while : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes_repr.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes_repr.per_block_vote -> - ?invariant:(block -> unit tzresult Lwt.t) -> - (block -> bool) -> - block -> - block tzresult Lwt.t - -(* Same as [bake_while] but the predicate also has access to the - metadata resulting from the application of the block. - - optionnal metadata of the last block stisfying the condition and metadata of - the last block (which don't) are returned together with the block. -*) -val bake_while_with_metadata : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes_repr.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes_repr.per_block_vote -> - ?invariant:(block -> unit tzresult Lwt.t) -> - (block -> block_header_metadata -> bool) -> - block -> - (block * (block_header_metadata option * block_header_metadata)) tzresult - Lwt.t - -val current_cycle_of_level : - blocks_per_cycle:int32 -> current_level:int32 -> Cycle.t - -val current_cycle : block -> Cycle.t - -val last_level_of_cycle : Constants.Parametric.t -> level:int32 -> bool - -val last_block_of_cycle : block -> bool - -(** Given a block [b] at level [l] bakes enough blocks to complete a cycle, - that is [blocks_per_cycle - (l % blocks_per_cycle)]. *) -val bake_until_cycle_end : - ?baking_mode:baking_mode -> ?policy:baker_policy -> t -> t tzresult Lwt.t - -(** Given a block [b] at level [l] bakes enough blocks to complete a cycle, - that is [blocks_per_cycle - (l % blocks_per_cycle)]. *) -val bake_until_cycle_end_with_metadata : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - block -> - (block * block_header_metadata option * block_header_metadata) tzresult Lwt.t - -(** Bakes enough blocks to end [n] cycles. *) -val bake_until_n_cycle_end : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - int -> - t -> - t tzresult Lwt.t - -val bake_until_n_cycle_end_with_metadata : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - int -> - block -> - (block * block_header_metadata option * block_header_metadata) tzresult Lwt.t - -(** Bakes enough blocks to reach the cycle. *) -val bake_until_cycle : - ?baking_mode:baking_mode -> - ?policy:baker_policy -> - Cycle.t -> - t -> - t tzresult Lwt.t - -(** Common util function to create parameters for [initial_context] function *) -val prepare_initial_context_params : - ?consensus_committee_size:int -> - ?consensus_threshold:int -> - ?min_proposal_quorum:int32 -> - ?level:int32 -> - ?cost_per_byte:Tez.t -> - ?issuance_weights:Constants.Parametric.issuance_weights -> - ?origination_size:int -> - ?blocks_per_cycle:int32 -> - ?cycles_per_voting_period:int32 -> - ?sc_rollup_arith_pvm_enable:bool -> - ?sc_rollup_private_enable:bool -> - ?sc_rollup_riscv_pvm_enable:bool -> - ?dal_enable:bool -> - ?zk_rollup_enable:bool -> - ?hard_gas_limit_per_block:Gas.Arith.integral -> - ?nonce_revelation_threshold:int32 -> - ?dal:Constants.Parametric.dal -> - ?adaptive_issuance:Constants.Parametric.adaptive_issuance -> - ?consensus_rights_delay:int -> - unit -> - ( Constants.Parametric.t * Block_header.shell_header * Block_hash.t, - tztrace ) - result - Lwt.t - -(** [autostaked_opt delegate metadata] returns [Some amount] if [amount] tez - have been staked for the given [delegate]. [None] otherwise. *) -val autostaked_opt : public_key_hash -> block_header_metadata -> Tez.t option - -(** same as [autostaked_opt] but fails in case autostaking didn't provoke a - stake operation. *) -val autostaked : - ?loc:string -> public_key_hash -> block_header_metadata -> Tez.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/consensus_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/consensus_helpers.ml deleted file mode 100644 index c5fe62a3b10da03bd236fb657f5e821354126f36..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/consensus_helpers.ml +++ /dev/null @@ -1,191 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -type mode = Application | Construction | Mempool - -let show_mode = function - | Application -> "Application" - | Construction -> "Construction" - | Mempool -> "Mempool" - -type kind = Preattestation | Attestation - -(** Craft an attestation or preattestation, and bake a block - containing it (in application or construction modes) or inject it - into a mempool. When [error] is [None], check that it succeeds, - otherwise check that it fails as specified by [error]. - - By default, the (pre)attestation is for the first slot and is - signed by the delegate that owns this slot. Moreover, the operation - points to the given [attested_block]: in other words, it has that - block's level, round, payload hash, and its branch is the - predecessor of that block. Optional arguments allow to override - these default parameters. - - The [predecessor] is used as the predecessor of the baked block or - the head of the mempool. When it is not provided, we use the - [attested_block] for this. *) -let test_consensus_operation ?delegate ?slot ?level ?round ?block_payload_hash - ?branch ~attested_block ?(predecessor = attested_block) ?error ~loc kind - mode = - let open Lwt_result_syntax in - let* operation = - match kind with - | Preattestation -> - Op.preattestation - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - attested_block - | Attestation -> - Op.attestation - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - attested_block - in - let check_error res = - match error with - | Some error -> Assert.proto_error ~loc res error - | None -> - let*? _ = res in - return_unit - in - match mode with - | Application -> - let*! result = - Block.bake ~baking_mode:Application ~operation predecessor - in - check_error result - | Construction -> - let*! result = Block.bake ~baking_mode:Baking ~operation predecessor in - check_error result - | Mempool -> - let*! res = - let* inc = - Incremental.begin_construction ~mempool_mode:true predecessor - in - let* inc = Incremental.add_operation inc operation in - (* Finalization doesn't do much in mempool mode, but some RPCs - still call it, so we check that it doesn't fail unexpectedly. *) - Incremental.finalize_block inc - in - check_error res - -let test_consensus_operation_all_modes_different_outcomes ?delegate ?slot ?level - ?round ?block_payload_hash ?branch ~attested_block ?predecessor ~loc - ?application_error ?construction_error ?mempool_error kind = - List.iter_es - (fun (mode, error) -> - test_consensus_operation - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - ~attested_block - ?predecessor - ?error - ~loc:(Format.sprintf "%s (%s mode)" loc (show_mode mode)) - kind - mode) - [ - (Application, application_error); - (Construction, construction_error); - (Mempool, mempool_error); - ] - -let test_consensus_operation_all_modes ?delegate ?slot ?level ?round - ?block_payload_hash ?branch ~attested_block ?predecessor ?error ~loc kind = - test_consensus_operation_all_modes_different_outcomes - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - ~attested_block - ?predecessor - ~loc - ?application_error:error - ?construction_error:error - ?mempool_error:error - kind - -let delegate_of_first_slot b = - let open Lwt_result_syntax in - let module V = Plugin.RPC.Validators in - let+ attesters = Context.get_attesters b in - match attesters with - | {V.consensus_key; slots = s :: _; _} :: _ -> (consensus_key, s) - | _ -> assert false - -let delegate_of_slot ?(different_slot = false) slot b = - let open Lwt_result_syntax in - let module V = Plugin.RPC.Validators in - let+ attesters = Context.get_attesters b in - List.find_map - (function - | {V.consensus_key; slots = s :: _; _} - when if different_slot then not (Slot.equal s slot) - else Slot.equal s slot -> - Some consensus_key - | _ -> None) - attesters - |> function - | None -> assert false - | Some d -> d - -let test_consensus_op_for_next ~genesis ~kind ~next = - let open Lwt_result_syntax in - let dorsement ~attested_block ~delegate = - match kind with - | `Preattestation -> Op.preattestation ~delegate attested_block - | `Attestation -> Op.attestation ~delegate attested_block - in - let* b1 = Block.bake genesis in - let* b2 = - match next with - | `Level -> Block.bake b1 - | `Round -> Block.bake ~policy:(By_round 1) genesis - in - let* inc = Incremental.begin_construction ~mempool_mode:true b1 in - let* delegate, slot = delegate_of_first_slot (B b1) in - let* operation = dorsement ~attested_block:b1 ~delegate in - let* inc = Incremental.add_operation inc operation in - let* delegate = delegate_of_slot ~different_slot:true slot (B b2) in - let* operation = dorsement ~attested_block:b2 ~delegate in - let* (_ : Incremental.t) = Incremental.add_operation inc operation in - return_unit diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/constants_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/constants_helpers.ml deleted file mode 100644 index bb06992ed0e0c035592238d05934a3428ac4c4f7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/constants_helpers.ml +++ /dev/null @@ -1,194 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -type t = Protocol.Alpha_context.Constants.Parametric.t - -(* Warning: not a Set *) -module Set = struct - let consensus_rights_delay consensus_rights_delay (c : t) = - {c with consensus_rights_delay} - - let blocks_preservation_cycles blocks_preservation_cycles (c : t) = - {c with blocks_preservation_cycles} - - let delegate_parameters_activation_delay delegate_parameters_activation_delay - (c : t) = - {c with delegate_parameters_activation_delay} - - let blocks_per_cycle blocks_per_cycle (c : t) = {c with blocks_per_cycle} - - let blocks_per_commitment blocks_per_commitment (c : t) = - {c with blocks_per_commitment} - - let nonce_revelation_threshold nonce_revelation_threshold (c : t) = - {c with nonce_revelation_threshold} - - let cycles_per_voting_period cycles_per_voting_period (c : t) = - {c with cycles_per_voting_period} - - let hard_gas_limit_per_operation hard_gas_limit_per_operation (c : t) = - {c with hard_gas_limit_per_operation} - - let hard_gas_limit_per_block hard_gas_limit_per_block (c : t) = - {c with hard_gas_limit_per_block} - - let proof_of_work_threshold proof_of_work_threshold (c : t) = - {c with proof_of_work_threshold} - - let minimal_stake minimal_stake (c : t) = {c with minimal_stake} - - let minimal_frozen_stake minimal_frozen_stake (c : t) = - {c with minimal_frozen_stake} - - let vdf_difficulty vdf_difficulty (c : t) = {c with vdf_difficulty} - - let origination_size origination_size (c : t) = {c with origination_size} - - let cost_per_byte cost_per_byte (c : t) = {c with cost_per_byte} - - let hard_storage_limit_per_operation hard_storage_limit_per_operation (c : t) - = - {c with hard_storage_limit_per_operation} - - let quorum_min quorum_min (c : t) = {c with quorum_min} - - let quorum_max quorum_max (c : t) = {c with quorum_max} - - let min_proposal_quorum min_proposal_quorum (c : t) = - {c with min_proposal_quorum} - - let liquidity_baking_subsidy liquidity_baking_subsidy (c : t) = - {c with liquidity_baking_subsidy} - - let liquidity_baking_toggle_ema_threshold - liquidity_baking_toggle_ema_threshold (c : t) = - {c with liquidity_baking_toggle_ema_threshold} - - let max_operations_time_to_live max_operations_time_to_live (c : t) = - {c with max_operations_time_to_live} - - let minimal_block_delay minimal_block_delay (c : t) = - {c with minimal_block_delay} - - let delay_increment_per_round delay_increment_per_round (c : t) = - {c with delay_increment_per_round} - - let minimal_participation_ratio minimal_participation_ratio (c : t) = - {c with minimal_participation_ratio} - - let consensus_committee_size consensus_committee_size (c : t) = - {c with consensus_committee_size} - - let consensus_threshold consensus_threshold (c : t) = - {c with consensus_threshold} - - let limit_of_delegation_over_baking limit_of_delegation_over_baking (c : t) = - {c with limit_of_delegation_over_baking} - - let percentage_of_frozen_deposits_slashed_per_double_baking - percentage_of_frozen_deposits_slashed_per_double_baking (c : t) = - {c with percentage_of_frozen_deposits_slashed_per_double_baking} - - let percentage_of_frozen_deposits_slashed_per_double_attestation - percentage_of_frozen_deposits_slashed_per_double_attestation (c : t) = - {c with percentage_of_frozen_deposits_slashed_per_double_attestation} - - let max_slashing_per_block max_slashing_per_block (c : t) = - {c with max_slashing_per_block} - - let max_slashing_threshold max_slashing_threshold (c : t) = - {c with max_slashing_threshold} - - let testnet_dictator testnet_dictator (c : t) = {c with testnet_dictator} - - let initial_seed initial_seed (c : t) = {c with initial_seed} - - let cache_script_size cache_script_size (c : t) = {c with cache_script_size} - - let cache_stake_distribution_cycles cache_stake_distribution_cycles (c : t) = - {c with cache_stake_distribution_cycles} - - let cache_sampler_state_cycles cache_sampler_state_cycles (c : t) = - {c with cache_sampler_state_cycles} - - let dal dal (c : t) = {c with dal} - - let sc_rollup sc_rollup (c : t) = {c with sc_rollup} - - let zk_rollup zk_rollup (c : t) = {c with zk_rollup} - - let direct_ticket_spending_enable direct_ticket_spending_enable (c : t) = - {c with direct_ticket_spending_enable} - - let issuance_weights issuance_weights (c : t) = {c with issuance_weights} - - module Issuance_weights = struct - let base_total_issued_per_minute base_total_issued_per_minute (c : t) = - issuance_weights {c.issuance_weights with base_total_issued_per_minute} c - end - - let adaptive_issuance adaptive_issuance (c : t) = {c with adaptive_issuance} - - module Adaptive_issuance = struct - let activation_vote_enable activation_vote_enable (c : t) = - adaptive_issuance {c.adaptive_issuance with activation_vote_enable} c - - let autostaking_enable autostaking_enable (c : t) = - adaptive_issuance {c.adaptive_issuance with autostaking_enable} c - - let force_activation force_activation (c : t) = - adaptive_issuance {c.adaptive_issuance with force_activation} c - - let ns_enable ns_enable (c : t) = - adaptive_issuance {c.adaptive_issuance with ns_enable} c - - let launch_ema_threshold launch_ema_threshold (c : t) = - adaptive_issuance {c.adaptive_issuance with launch_ema_threshold} c - - let adaptive_rewards_params adaptive_rewards_params (c : t) = - adaptive_issuance {c.adaptive_issuance with adaptive_rewards_params} c - - module Adaptive_rewards_params = struct - let max_bonus max_bonus (c : t) = - adaptive_rewards_params - {c.adaptive_issuance.adaptive_rewards_params with max_bonus} - c - - let issuance_ratio_final_min issuance_ratio_final_min (c : t) = - adaptive_rewards_params - { - c.adaptive_issuance.adaptive_rewards_params with - issuance_ratio_final_min; - } - c - - let issuance_ratio_final_max issuance_ratio_final_max (c : t) = - adaptive_rewards_params - { - c.adaptive_issuance.adaptive_rewards_params with - issuance_ratio_final_max; - } - c - - let issuance_ratio_initial_min issuance_ratio_initial_min (c : t) = - adaptive_rewards_params - { - c.adaptive_issuance.adaptive_rewards_params with - issuance_ratio_initial_min; - } - c - - let issuance_ratio_initial_max issuance_ratio_initial_max (c : t) = - adaptive_rewards_params - { - c.adaptive_issuance.adaptive_rewards_params with - issuance_ratio_initial_max; - } - c - end - end -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/context.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/context.ml deleted file mode 100644 index 8709a4659a44fa4de60f86b7066070f148be03b9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/context.ml +++ /dev/null @@ -1,795 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -type t = B of Block.t | I of Incremental.t - -(* Begins the construction of a block with the first available baker. - Fails if no baker can bake the next block. *) -let get_alpha_ctxt c = - let open Lwt_result_syntax in - match c with - | I i -> return (Incremental.alpha_ctxt i) - | B b -> - let* i = Incremental.begin_construction ~policy:(Block.Excluding []) b in - return (Incremental.alpha_ctxt i) - -let branch = function B b -> b.hash | I i -> (Incremental.predecessor i).hash - -let pred_branch = function - | B b -> b.header.shell.predecessor - | I i -> (Incremental.predecessor i).hash - -let level = function B b -> b.header.shell.level | I i -> Incremental.level i - -let get_level ctxt = - let open Result_wrap_syntax in - let+@ res = level ctxt |> Raw_level.of_int32 in - res - -let rpc_ctxt = - object - method call_proto_service0 - : 'm 'q 'i 'o. - ( ([< Tezos_rpc.Service.meth] as 'm), - Environment.RPC_context.t, - Environment.RPC_context.t, - 'q, - 'i, - 'o ) - Tezos_rpc.Service.t -> - t -> - 'q -> - 'i -> - 'o tzresult Lwt.t = - fun s pr q i -> - match pr with - | B b -> Block.rpc_ctxt#call_proto_service0 s b q i - | I b -> Incremental.rpc_ctxt#call_proto_service0 s b q i - - method call_proto_service1 - : 'm 'a 'q 'i 'o. - ( ([< Tezos_rpc.Service.meth] as 'm), - Environment.RPC_context.t, - Environment.RPC_context.t * 'a, - 'q, - 'i, - 'o ) - Tezos_rpc.Service.t -> - t -> - 'a -> - 'q -> - 'i -> - 'o tzresult Lwt.t = - fun s pr a q i -> - match pr with - | B bl -> Block.rpc_ctxt#call_proto_service1 s bl a q i - | I bl -> Incremental.rpc_ctxt#call_proto_service1 s bl a q i - - method call_proto_service2 - : 'm 'a 'b 'q 'i 'o. - ( ([< Tezos_rpc.Service.meth] as 'm), - Environment.RPC_context.t, - (Environment.RPC_context.t * 'a) * 'b, - 'q, - 'i, - 'o ) - Tezos_rpc.Service.t -> - t -> - 'a -> - 'b -> - 'q -> - 'i -> - 'o tzresult Lwt.t = - fun s pr a b q i -> - match pr with - | B bl -> Block.rpc_ctxt#call_proto_service2 s bl a b q i - | I bl -> Incremental.rpc_ctxt#call_proto_service2 s bl a b q i - - method call_proto_service3 - : 'm 'a 'b 'c 'q 'i 'o. - ( ([< Tezos_rpc.Service.meth] as 'm), - Environment.RPC_context.t, - ((Environment.RPC_context.t * 'a) * 'b) * 'c, - 'q, - 'i, - 'o ) - Tezos_rpc.Service.t -> - t -> - 'a -> - 'b -> - 'c -> - 'q -> - 'i -> - 'o tzresult Lwt.t = - fun s pr a b c q i -> - match pr with - | B bl -> Block.rpc_ctxt#call_proto_service3 s bl a b c q i - | I bl -> Incremental.rpc_ctxt#call_proto_service3 s bl a b c q i - end - -let get_attesters ctxt = Plugin.RPC.Validators.get rpc_ctxt ctxt - -let get_first_different_attesters ctxt = - let open Lwt_result_syntax in - let+ attesters = get_attesters ctxt in - match attesters with x :: y :: _ -> (x, y) | _ -> assert false - -let get_attester ctxt = - let open Lwt_result_syntax in - let+ attesters = get_attesters ctxt in - let attester = WithExceptions.Option.get ~loc:__LOC__ @@ List.hd attesters in - (attester.consensus_key, attester.slots) - -let get_attester_slot ctxt pkh = - let open Lwt_result_syntax in - let+ attesters = get_attesters ctxt in - List.find_map - (function - | {Plugin.RPC.Validators.consensus_key; slots; _} -> - if Signature.Public_key_hash.(consensus_key = pkh) then Some slots - else None) - attesters - -let get_attester_n ctxt n = - let open Lwt_result_syntax in - let+ attesters = Plugin.RPC.Validators.get rpc_ctxt ctxt in - let attester = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth attesters n - in - (attester.consensus_key, attester.slots) - -let get_attesting_power_for_delegate ctxt ?level pkh = - let open Lwt_result_syntax in - let levels = Option.map (fun level -> [level]) level in - let* attesters = Plugin.RPC.Validators.get rpc_ctxt ?levels ctxt in - let rec find_slots_for_delegate = function - | [] -> return 0 - | {Plugin.RPC.Validators.delegate; slots; _} :: t -> - if Signature.Public_key_hash.equal delegate pkh then - return (List.length slots) - else find_slots_for_delegate t - in - find_slots_for_delegate attesters - -let get_cumulated_attesting_power_for_delegate ctxt ~levels pkh = - let open Lwt_result_syntax in - List.fold_left_es - (fun accu level -> - let+ power = get_attesting_power_for_delegate ctxt ~level pkh in - accu + power) - 0 - levels - -let get_current_voting_power = Delegate_services.current_voting_power rpc_ctxt - -let get_voting_power = Delegate_services.voting_power rpc_ctxt - -let get_total_voting_power = Alpha_services.Voting.total_voting_power rpc_ctxt - -let get_current_baking_power = Delegate_services.current_baking_power rpc_ctxt - -let get_bakers ?filter ?cycle ctxt = - let open Lwt_result_syntax in - let+ bakers = Plugin.RPC.Baking_rights.get rpc_ctxt ?cycle ctxt in - (match filter with None -> bakers | Some f -> List.filter f bakers) - |> List.map (fun p -> p.Plugin.RPC.Baking_rights.delegate) - -let get_baker ctxt ~round = - let open Lwt_result_syntax in - let* bakers = get_bakers ~filter:(fun x -> x.round = round) ctxt in - (* there is only one baker for a given round *) - match bakers with [baker] -> return baker | _ -> assert false - -let get_first_different_baker baker bakers = - WithExceptions.Option.get ~loc:__LOC__ - @@ List.find - (fun baker' -> Signature.Public_key_hash.( <> ) baker baker') - bakers - -let get_first_different_bakers ?(excluding = []) ctxt = - let open Lwt_result_syntax in - let+ bakers = get_bakers ctxt in - let bakers = - List.filter - (fun baker -> not (List.mem ~equal:( = ) baker excluding)) - bakers - in - match bakers with - | [] -> assert false - | baker_1 :: other_bakers -> - (baker_1, get_first_different_baker baker_1 other_bakers) - -let get_seed_nonce_hash ctxt = - let open Lwt_result_syntax in - let header = - match ctxt with B {header; _} -> header | I i -> Incremental.header i - in - match header.protocol_data.contents.seed_nonce_hash with - | None -> failwith "No committed nonce" - | Some hash -> return hash - -let get_seed ctxt = Alpha_services.Seed.get rpc_ctxt ctxt - -let get_seed_computation ctxt = - Alpha_services.Seed_computation.get rpc_ctxt ctxt - -let get_constants ctxt = Alpha_services.Constants.all rpc_ctxt ctxt - -let default_test_constants = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_test - -let get_issuance_per_minute ctxt = - Adaptive_issuance_services.current_issuance_per_minute rpc_ctxt ctxt - -let get_baking_reward_fixed_portion ctxt = - let open Lwt_result_wrap_syntax in - let* {Constants.parametric = csts; _} = get_constants ctxt in - let*?@ reward = - Delegate.Rewards.For_RPC.reward_from_constants - csts - ~reward_kind:Baking_reward_fixed_portion - in - return reward - -let get_bonus_reward ctxt ~attesting_power = - let open Lwt_result_wrap_syntax in - let* {Constants.parametric = {consensus_threshold; _} as csts; _} = - get_constants ctxt - in - let*?@ baking_reward_bonus_per_slot = - Delegate.Rewards.For_RPC.reward_from_constants - csts - ~reward_kind:Baking_reward_bonus_per_slot - in - let multiplier = max 0 (attesting_power - consensus_threshold) in - return Tez_helpers.(baking_reward_bonus_per_slot *! Int64.of_int multiplier) - -let get_attesting_reward ctxt ~expected_attesting_power = - let open Lwt_result_wrap_syntax in - let* {Constants.parametric = csts; _} = get_constants ctxt in - let*?@ attesting_reward_per_slot = - Delegate.Rewards.For_RPC.reward_from_constants - csts - ~reward_kind:Attesting_reward_per_slot - in - let*?@ t = - Tez.(attesting_reward_per_slot *? Int64.of_int expected_attesting_power) - in - return t - -let get_liquidity_baking_subsidy ctxt = - let open Lwt_result_wrap_syntax in - let* {Constants.parametric = csts; _} = get_constants ctxt in - let*?@ reward = - Delegate.Rewards.For_RPC.liquidity_baking_subsidy_from_constants csts - in - return reward - -let get_liquidity_baking_cpmm_address ctxt = - Alpha_services.Liquidity_baking.get_cpmm_address rpc_ctxt ctxt - -let get_adaptive_issuance_launch_cycle ctxt = - Adaptive_issuance_services.launch_cycle rpc_ctxt ctxt - -let get_total_frozen_stake ctxt = - Adaptive_issuance_services.total_frozen_stake rpc_ctxt ctxt - -let get_total_supply ctxt = - Adaptive_issuance_services.total_supply rpc_ctxt ctxt - -let get_seed_nonce_revelation_tip ctxt = - let open Lwt_result_wrap_syntax in - let* {Constants.parametric = csts; _} = get_constants ctxt in - let*?@ reward = - Delegate.Rewards.For_RPC.reward_from_constants - csts - ~reward_kind:Seed_nonce_revelation_tip - in - return reward - -let get_vdf_revelation_tip ctxt = - let open Lwt_result_wrap_syntax in - let* {Constants.parametric = csts; _} = get_constants ctxt in - let*?@ reward = - Delegate.Rewards.For_RPC.reward_from_constants - csts - ~reward_kind:Vdf_revelation_tip - in - return reward - -let get_ai_current_yearly_rate ctxt = - Adaptive_issuance_services.current_yearly_rate rpc_ctxt ctxt - -let get_ai_current_yearly_rate_exact ctxt = - Adaptive_issuance_services.current_yearly_rate_exact rpc_ctxt ctxt - -let get_ai_expected_issuance ctxt = - Adaptive_issuance_services.expected_issuance rpc_ctxt ctxt - -let get_denunciations ctxt = - Alpha_services.Denunciations.denunciations rpc_ctxt ctxt - -let get_denunciations_for_delegate ctxt = - Alpha_services.Delegate.pending_denunciations rpc_ctxt ctxt - -let estimated_shared_pending_slashed_amount ctxt = - Alpha_services.Delegate.estimated_shared_pending_slashed_amount rpc_ctxt ctxt - -let estimated_own_pending_slashed_amount ctxt = - Alpha_services.Contract.estimated_own_pending_slashed_amount rpc_ctxt ctxt - -module Dal = struct - let shards ctxt = Plugin.RPC.Dal.dal_shards rpc_ctxt ctxt -end - -(* Voting *) - -module Vote = struct - let get_ballots ctxt = Alpha_services.Voting.ballots rpc_ctxt ctxt - - let get_ballot_list ctxt = Alpha_services.Voting.ballot_list rpc_ctxt ctxt - - let get_current_period ctxt = - Alpha_services.Voting.current_period rpc_ctxt ctxt - - let get_current_quorum ctxt = - Alpha_services.Voting.current_quorum rpc_ctxt ctxt - - let get_listings ctxt = Alpha_services.Voting.listings rpc_ctxt ctxt - - let get_proposals ctxt = Alpha_services.Voting.proposals rpc_ctxt ctxt - - let get_current_proposal ctxt = - Alpha_services.Voting.current_proposal rpc_ctxt ctxt - - let get_protocol (b : Block.t) = - Tezos_protocol_environment.Context.get_protocol b.context - - let get_delegate_proposal_count ctxt pkh = - Alpha_services.Voting.delegate_proposal_count rpc_ctxt ctxt pkh - - let get_participation_ema (b : Block.t) = - let open Lwt_syntax in - let+ bytes_opt = - Environment.Context.find b.context ["votes"; "participation_ema"] - in - match bytes_opt with - | None -> assert false - | Some bytes -> Ok (TzEndian.get_int32 bytes 0) - - let set_participation_ema (b : Block.t) ema = - let open Lwt_syntax in - let bytes = Bytes.make 4 '\000' in - TzEndian.set_int32 bytes 0 ema ; - let+ context = - Environment.Context.add b.context ["votes"; "participation_ema"] bytes - in - {b with context} - - type delegate_info = Alpha_context.Vote.delegate_info = { - voting_power : Int64.t option; - current_ballot : Alpha_context.Vote.ballot option; - current_proposals : Protocol_hash.t list; - remaining_proposals : int; - } -end - -module Contract = struct - let pp = Alpha_context.Contract.pp - - let equal a b = Alpha_context.Contract.compare a b = 0 - - let pkh = function - | Contract.Implicit p -> p - | Originated _ -> Stdlib.failwith "pkh: only for implicit contracts" - - let balance ctxt contract = - Alpha_services.Contract.balance rpc_ctxt ctxt contract - - let frozen_bonds ctxt contract = - Alpha_services.Contract.frozen_bonds rpc_ctxt ctxt contract - - let balance_and_frozen_bonds ctxt contract = - Alpha_services.Contract.balance_and_frozen_bonds rpc_ctxt ctxt contract - - let staked_balance ctxt contract = - Alpha_services.Contract.staked_balance rpc_ctxt ctxt contract - - let unstaked_frozen_balance ctxt contract = - Alpha_services.Contract.unstaked_frozen_balance rpc_ctxt ctxt contract - - let unstaked_finalizable_balance ctxt contract = - Alpha_services.Contract.unstaked_finalizable_balance rpc_ctxt ctxt contract - - let full_balance ctxt contract = - Alpha_services.Contract.full_balance rpc_ctxt ctxt contract - - let staking_numerator ctxt contract = - let open Lwt_result_syntax in - let+ pseudotokens = - Alpha_services.Contract.staking_numerator rpc_ctxt ctxt contract - in - Staking_pseudotoken.Internal_for_tests.to_z pseudotokens - - let counter ctxt (contract : Contract.t) = - match contract with - | Originated _ -> invalid_arg "Helpers.Context.counter" - | Implicit mgr -> Alpha_services.Contract.counter rpc_ctxt ctxt mgr - - let manager _ (contract : Contract.t) = - match contract with - | Originated _ -> invalid_arg "Helpers.Context.manager" - | Implicit pkh -> Account.find pkh - - let is_manager_key_revealed ctxt (contract : Contract.t) = - let open Lwt_result_syntax in - match contract with - | Originated _ -> invalid_arg "Helpers.Context.is_manager_key_revealed" - | Implicit mgr -> - let+ res = Alpha_services.Contract.manager_key rpc_ctxt ctxt mgr in - res <> None - - let delegate ctxt contract = - Alpha_services.Contract.delegate rpc_ctxt ctxt contract - - let delegate_opt ctxt contract = - Alpha_services.Contract.delegate_opt rpc_ctxt ctxt contract - - let storage ctxt contract = - Alpha_services.Contract.storage rpc_ctxt ctxt contract - - let script ctxt contract = - let open Lwt_result_syntax in - let* {code; storage = _} = - Alpha_services.Contract.script rpc_ctxt ctxt contract - in - match Data_encoding.force_decode code with - | Some v -> return v - | None -> invalid_arg "Cannot force lazy script" - - let script_hash ctxt contract = - let open Lwt_result_syntax in - let* script = script ctxt contract in - let bytes = Data_encoding.Binary.to_bytes_exn Script.expr_encoding script in - return @@ Script_expr_hash.hash_bytes [bytes] -end - -module Delegate = struct - type info = Delegate_services.info = { - full_balance : Tez.t; - current_frozen_deposits : Tez.t; - frozen_deposits : Tez.t; - staking_balance : Tez.t; - frozen_deposits_limit : Tez.t option; - delegated_contracts : Alpha_context.Contract.t list; - delegated_balance : Tez.t; - min_delegated_in_current_cycle : Tez.t * Level_repr.t option; - total_delegated_stake : Tez.t; - staking_denominator : Staking_pseudotoken.t; - deactivated : bool; - grace_period : Cycle.t; - pending_denunciations : bool; - voting_info : Alpha_context.Vote.delegate_info; - active_consensus_key : Signature.Public_key_hash.t; - pending_consensus_keys : (Cycle.t * Signature.Public_key_hash.t) list; - } - - type stake = {frozen : Tez.t; weighted_delegated : Tez.t} - - let info ctxt pkh = Plugin.RPC.Delegates.info rpc_ctxt ctxt pkh - - let full_balance ctxt pkh = Delegate_services.full_balance rpc_ctxt ctxt pkh - - let current_frozen_deposits ctxt pkh = - Delegate_services.current_frozen_deposits rpc_ctxt ctxt pkh - - let initial_frozen_deposits ctxt pkh = - Delegate_services.frozen_deposits rpc_ctxt ctxt pkh - - let staking_balance ctxt pkh = - Delegate_services.staking_balance rpc_ctxt ctxt pkh - - let unstaked_frozen_deposits ctxt pkh = - Plugin.RPC.Delegates.unstaked_frozen_deposits rpc_ctxt ctxt pkh - - let staking_denominator ctxt pkh = - let open Lwt_result_syntax in - let+ pseudotokens = - Delegate_services.staking_denominator rpc_ctxt ctxt pkh - in - Staking_pseudotoken.Internal_for_tests.to_z pseudotokens - - let frozen_deposits_limit ctxt pkh = - Delegate_services.frozen_deposits_limit rpc_ctxt ctxt pkh - - let deactivated ctxt pkh = Delegate_services.deactivated rpc_ctxt ctxt pkh - - let voting_info ctxt d = Alpha_services.Delegate.voting_info rpc_ctxt ctxt d - - let consensus_key ctxt pkh = Delegate_services.consensus_key rpc_ctxt ctxt pkh - - let participation ctxt pkh = Delegate_services.participation rpc_ctxt ctxt pkh - - let is_forbidden ctxt pkh = Plugin.RPC.Staking.is_forbidden rpc_ctxt ctxt pkh - - let stake_for_cycle ctxt cycle pkh = - let open Lwt_result_wrap_syntax in - let* alpha_ctxt = get_alpha_ctxt ctxt in - let*@ stakes = - Protocol.Alpha_context.Stake_distribution.Internal_for_tests - .get_selected_distribution - alpha_ctxt - cycle - in - let stake_opt = - List.assoc ~equal:Signature.Public_key_hash.equal pkh stakes - in - let Protocol.Stake_repr.{frozen; weighted_delegated} = - Option.value ~default:Protocol.Stake_repr.zero stake_opt - in - let frozen = Protocol.Tez_repr.to_mutez frozen |> Tez.of_mutez_exn in - let weighted_delegated = - Protocol.Tez_repr.to_mutez weighted_delegated |> Tez.of_mutez_exn - in - return {frozen; weighted_delegated} -end - -module Sc_rollup = struct - let inbox ctxt = - Environment.RPC_context.make_call0 - Plugin.RPC.Sc_rollup.S.inbox - rpc_ctxt - ctxt - () - () - - let whitelist ctxt rollup = - Environment.RPC_context.make_call1 - Plugin.RPC.Sc_rollup.S.whitelist - rpc_ctxt - ctxt - rollup - () - () - - let commitment ctxt sc_rollup hash = - Environment.RPC_context.make_call2 - Plugin.RPC.Sc_rollup.S.commitment - rpc_ctxt - ctxt - sc_rollup - hash - () - () - - let genesis_info ctxt sc_rollup = - Environment.RPC_context.make_call1 - Plugin.RPC.Sc_rollup.S.genesis_info - rpc_ctxt - ctxt - sc_rollup - () - () - - let timeout ctxt sc_rollup staker1 staker2 = - Environment.RPC_context.make_call3 - Plugin.RPC.Sc_rollup.S.timeout - rpc_ctxt - ctxt - sc_rollup - staker1 - staker2 - () - () - - let ongoing_games_for_staker ctxt sc_rollup staker = - Environment.RPC_context.make_call2 - Plugin.RPC.Sc_rollup.S.ongoing_refutation_games - rpc_ctxt - ctxt - sc_rollup - staker - () - () -end - -type (_, _) tup = - | T1 : ('a, 'a) tup - | T2 : ('a, 'a * 'a) tup - | T3 : ('a, 'a * 'a * 'a) tup - | TList : int -> ('a, 'a list) tup - -let tup_hd : type a r. (a, r) tup -> r -> a = - fun tup elts -> - match (tup, elts) with - | T1, v -> v - | T2, (v, _) -> v - | T3, (v, _, _) -> v - | TList _, v :: _ -> v - | TList _, [] -> assert false - -let tup_n : type a r. (a, r) tup -> int = function - | T1 -> 1 - | T2 -> 2 - | T3 -> 3 - | TList n -> n - -let tup_get : type a r. (a, r) tup -> a list -> r = - fun tup list -> - match (tup, list) with - | T1, [v] -> v - | T2, [v1; v2] -> (v1, v2) - | T3, [v1; v2; v3] -> (v1, v2, v3) - | TList _, l -> l - | _ -> assert false - -let init_gen tup ?rng_state ?commitments ?bootstrap_balances - ?bootstrap_delegations ?bootstrap_consensus_keys ?consensus_committee_size - ?consensus_threshold ?min_proposal_quorum ?bootstrap_contracts ?level - ?cost_per_byte ?issuance_weights ?origination_size ?blocks_per_cycle - ?cycles_per_voting_period ?sc_rollup_arith_pvm_enable - ?sc_rollup_private_enable ?sc_rollup_riscv_pvm_enable ?dal_enable - ?zk_rollup_enable ?hard_gas_limit_per_block ?nonce_revelation_threshold ?dal - ?adaptive_issuance () = - let open Lwt_result_syntax in - let n = tup_n tup in - let*? accounts = Account.generate_accounts ?rng_state n in - let contracts = - List.map (fun a -> Alpha_context.Contract.Implicit Account.(a.pkh)) accounts - in - let bootstrap_accounts = - Account.make_bootstrap_accounts - ?bootstrap_balances - ?bootstrap_delegations - ?bootstrap_consensus_keys - accounts - in - let+ blk = - Block.genesis - ?commitments - ?consensus_committee_size - ?consensus_threshold - ?min_proposal_quorum - ?bootstrap_contracts - ?level - ?cost_per_byte - ?issuance_weights - ?origination_size - ?blocks_per_cycle - ?cycles_per_voting_period - ?sc_rollup_arith_pvm_enable - ?sc_rollup_private_enable - ?sc_rollup_riscv_pvm_enable - ?dal_enable - ?zk_rollup_enable - ?hard_gas_limit_per_block - ?nonce_revelation_threshold - ?dal - ?adaptive_issuance - bootstrap_accounts - in - (blk, tup_get tup contracts) - -let init_n n = init_gen (TList n) - -let init1 = init_gen T1 - -let init2 = init_gen T2 - -let init3 = init_gen T3 - -let create_bootstrap_accounts n = - let open Result_syntax in - let* accounts = Account.generate_accounts n in - let contracts = - List.map (fun a -> Alpha_context.Contract.Implicit Account.(a.pkh)) accounts - in - let bootstrap_accounts = Account.make_bootstrap_accounts accounts in - return (bootstrap_accounts, contracts) - -let init_with_constants_gen tup constants = - let open Lwt_result_syntax in - let n = tup_n tup in - let*? bootstrap_accounts, contracts = create_bootstrap_accounts n in - let parameters = - Tezos_protocol_019_PtParisB_parameters.Default_parameters - .parameters_of_constants - ~bootstrap_accounts - constants - in - let* blk = Block.genesis_with_parameters parameters in - return (blk, tup_get tup contracts) - -let init_with_constants_n constants n = - init_with_constants_gen (TList n) constants - -let init_with_constants1 = init_with_constants_gen T1 - -let init_with_constants2 = init_with_constants_gen T2 - -let init_with_parameters_gen tup parameters = - let open Lwt_result_syntax in - let n = tup_n tup in - let*? bootstrap_accounts, contracts = create_bootstrap_accounts n in - let parameters = Parameters.{parameters with bootstrap_accounts} in - let* blk = Block.genesis_with_parameters parameters in - return (blk, tup_get tup contracts) - -let init_with_parameters_n params n = init_with_parameters_gen (TList n) params - -let init_with_parameters1 = init_with_parameters_gen T1 - -let init_with_parameters2 = init_with_parameters_gen T2 - -let raw_context_from_constants constants = - let open Lwt_result_wrap_syntax in - let open Tezos_protocol_019_PtParisB_parameters in - let initial_account = Account.new_account () in - let bootstrap_accounts = - Account.make_bootstrap_account - ~balance:(Tez.of_mutez_exn 100_000_000_000L) - initial_account - in - let parameters = - Default_parameters.parameters_of_constants - ~bootstrap_accounts:[bootstrap_accounts] - ~commitments:[] - constants - in - let json = Default_parameters.json_of_parameters parameters in - let proto_params = - Data_encoding.Binary.to_bytes_exn Data_encoding.json json - in - let protocol_param_key = ["protocol_parameters"] in - let*! context = - Tezos_protocol_environment.Context.( - let empty = Tezos_protocol_environment.Memory_context.empty in - let*! ctxt = add empty ["version"] (Bytes.of_string "genesis") in - add ctxt protocol_param_key proto_params) - in - let typecheck_smart_contract ctxt script_repr = - return ((script_repr, None), ctxt) - in - let typecheck_smart_rollup ctxt _script_repr = Ok ctxt in - let*@ e = - Init_storage.prepare_first_block - Chain_id.zero - context - ~level:0l - ~timestamp:(Time.Protocol.of_seconds 1643125688L) - ~predecessor:Block_hash.zero - ~typecheck_smart_contract - ~typecheck_smart_rollup - in - return e - -let default_raw_context () = - let open Lwt_result_wrap_syntax in - let* constants, _, _ = Block.prepare_initial_context_params () in - raw_context_from_constants constants diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/context.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/context.mli deleted file mode 100644 index 3965942511b705efc40311b715b694cfc44fea00..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/context.mli +++ /dev/null @@ -1,462 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Environment - -type t = B of Block.t | I of Incremental.t - -val get_alpha_ctxt : t -> context tzresult Lwt.t - -val branch : t -> Block_hash.t - -val pred_branch : t -> Block_hash.t - -val get_level : t -> Raw_level.t tzresult - -(** Given a context, returns the list of attesters charactized by - the [level], the public key hash of the [delegate], its [consensus_key] - and its assigned [slots]. - see {! Plugin.RPC.Validator.t}. *) -val get_attesters : t -> Plugin.RPC.Validators.t list tzresult Lwt.t - -(** Return the two first elements of the list returns by [get_attesters]. *) -val get_first_different_attesters : - t -> (Plugin.RPC.Validators.t * Plugin.RPC.Validators.t) tzresult Lwt.t - -(** Return the first element [delegate,slot] of the list returns by - [get_attesters], where [delegate] is the [consensus key] when - is set. *) -val get_attester : t -> (public_key_hash * Slot.t list) tzresult Lwt.t - -(** Given a [delegate], and a context [ctxt], if [delegate] is in - [get_attesters ctxt] returns the [slots] of [delegate] otherwise - return [None]. *) -val get_attester_slot : - t -> public_key_hash -> Slot.t list option tzresult Lwt.t - -(** Return the [n]th element of the list returns by [get_attesters]. *) -val get_attester_n : t -> int -> (public_key_hash * Slot.t list) tzresult Lwt.t - -(** Counts the number of attesting slots that the given delegate has - in the requested level. If ommited, [level] defaults to the next - level. *) -val get_attesting_power_for_delegate : - t -> ?level:Raw_level.t -> public_key_hash -> int tzresult Lwt.t - -(** Sums the result of [get_attesting_power_for_delegate] over a list - of levels. *) -val get_cumulated_attesting_power_for_delegate : - t -> levels:Raw_level.t list -> public_key_hash -> int tzresult Lwt.t - -val get_current_voting_power : - t -> public_key_hash -> int64 Environment.Error_monad.shell_tzresult Lwt.t - -val get_voting_power : - t -> public_key_hash -> int64 Environment.Error_monad.shell_tzresult Lwt.t - -val get_total_voting_power : - t -> int64 Environment.Error_monad.shell_tzresult Lwt.t - -val get_current_baking_power : - t -> public_key_hash -> int64 Environment.Error_monad.shell_tzresult Lwt.t - -val get_bakers : - ?filter:(Plugin.RPC.Baking_rights.t -> bool) -> - ?cycle:Cycle.t -> - t -> - public_key_hash list tzresult Lwt.t - -val get_baker : t -> round:Round.t -> public_key_hash tzresult Lwt.t - -val get_first_different_baker : - public_key_hash -> public_key_hash trace -> public_key_hash - -val get_first_different_bakers : - ?excluding:public_key_hash list -> - t -> - (public_key_hash * public_key_hash) tzresult Lwt.t - -val get_seed_nonce_hash : t -> Nonce_hash.t tzresult Lwt.t - -(** Returns the seed of the cycle to which the block belongs to. *) -val get_seed : t -> Seed.seed tzresult Lwt.t - -val get_seed_computation : t -> Seed.seed_computation_status tzresult Lwt.t - -(** Returns all the constants of the protocol *) -val get_constants : t -> Constants.t tzresult Lwt.t - -(** The default constants used in the test framework. To be used with - [init_with_constants]. *) -val default_test_constants : Constants.Parametric.t - -val get_issuance_per_minute : t -> Tez.t tzresult Lwt.t - -val get_baking_reward_fixed_portion : t -> Tez.t tzresult Lwt.t - -val get_bonus_reward : t -> attesting_power:int -> Tez.t tzresult Lwt.t - -val get_attesting_reward : - t -> expected_attesting_power:int -> Tez.t tzresult Lwt.t - -val get_liquidity_baking_subsidy : t -> Tez.t tzresult Lwt.t - -val get_liquidity_baking_cpmm_address : t -> Contract_hash.t tzresult Lwt.t - -val get_adaptive_issuance_launch_cycle : t -> Cycle.t option tzresult Lwt.t - -val get_total_frozen_stake : t -> Tez.t tzresult Lwt.t - -val get_total_supply : t -> Tez.t tzresult Lwt.t - -val get_seed_nonce_revelation_tip : t -> Tez.t tzresult Lwt.t - -val get_vdf_revelation_tip : t -> Tez.t tzresult Lwt.t - -val get_ai_current_yearly_rate : t -> string tzresult Lwt.t - -val get_ai_current_yearly_rate_exact : t -> Q.t tzresult Lwt.t - -val get_ai_expected_issuance : - t -> Adaptive_issuance_services.expected_rewards list tzresult Lwt.t - -val get_denunciations : - t -> - (Signature.Public_key_hash.t * Denunciations_repr.item) list tzresult Lwt.t - -val get_denunciations_for_delegate : - t -> - Signature.Public_key_hash.t -> - Denunciations_repr.item list tzresult Lwt.t - -val estimated_shared_pending_slashed_amount : - t -> public_key_hash -> Tez.t tzresult Lwt.t - -val estimated_own_pending_slashed_amount : - t -> public_key_hash -> Tez.t tzresult Lwt.t - -module Vote : sig - val get_ballots : t -> Vote.ballots tzresult Lwt.t - - val get_ballot_list : - t -> (Signature.Public_key_hash.t * Vote.ballot) list tzresult Lwt.t - - val get_current_period : t -> Voting_period.info tzresult Lwt.t - - val get_current_quorum : t -> int32 tzresult Lwt.t - - val get_participation_ema : Block.t -> int32 tzresult Lwt.t - - val get_listings : - t -> (Signature.Public_key_hash.t * int64) list tzresult Lwt.t - - val get_proposals : t -> int64 Protocol_hash.Map.t tzresult Lwt.t - - val get_current_proposal : t -> Protocol_hash.t option tzresult Lwt.t - - val get_protocol : Block.t -> Protocol_hash.t Lwt.t - - val set_participation_ema : Block.t -> int32 -> Block.t Lwt.t - - type delegate_info = Alpha_context.Vote.delegate_info = { - voting_power : Int64.t option; - current_ballot : Alpha_context.Vote.ballot option; - current_proposals : Protocol_hash.t list; - remaining_proposals : int; - } - - (** See {!Vote_storage.get_delegate_proposal_count}. - - Note that unlike most functions in the current module, this one - does not call an RPC. *) - val get_delegate_proposal_count : t -> public_key_hash -> int tzresult Lwt.t -end - -module Dal : sig - val shards : - t -> - ?level:Raw_level.t -> - ?delegates:Signature.public_key_hash list -> - unit -> - Plugin.RPC.Dal.S.shards_output tzresult Lwt.t -end - -module Contract : sig - val pp : Format.formatter -> Contract.t -> unit - - val equal : Contract.t -> Contract.t -> bool - - val pkh : Contract.t -> public_key_hash - - (** Returns the balance of a contract, by default the main balance. - If the contract is implicit the frozen balances are available too: - deposit, fees or rewards. *) - val balance : t -> Contract.t -> Tez.t tzresult Lwt.t - - val frozen_bonds : t -> Contract.t -> Tez.t tzresult Lwt.t - - val balance_and_frozen_bonds : t -> Contract.t -> Tez.t tzresult Lwt.t - - val staked_balance : t -> Contract.t -> Tez.t option tzresult Lwt.t - - val unstaked_frozen_balance : t -> Contract.t -> Tez.t option tzresult Lwt.t - - val unstaked_finalizable_balance : - t -> Contract.t -> Tez.t option tzresult Lwt.t - - val full_balance : t -> Contract.t -> Tez.t tzresult Lwt.t - - val staking_numerator : t -> Contract.t -> Z.t tzresult Lwt.t - - val counter : t -> Contract.t -> Manager_counter.t tzresult Lwt.t - - val manager : t -> Contract.t -> Account.t tzresult Lwt.t - - val is_manager_key_revealed : t -> Contract.t -> bool tzresult Lwt.t - - val delegate : t -> Contract.t -> public_key_hash tzresult Lwt.t - - val delegate_opt : t -> Contract.t -> public_key_hash option tzresult Lwt.t - - val storage : t -> Contract_hash.t -> Script.expr tzresult Lwt.t - - val script : t -> Contract_hash.t -> Script.expr tzresult Lwt.t - - val script_hash : t -> Contract_hash.t -> Script_expr_hash.t tzresult Lwt.t -end - -module Delegate : sig - type info = Delegate_services.info = { - full_balance : Tez.t; - current_frozen_deposits : Tez.t; - frozen_deposits : Tez.t; - staking_balance : Tez.t; - frozen_deposits_limit : Tez.t option; - delegated_contracts : Alpha_context.Contract.t list; - delegated_balance : Tez.t; - min_delegated_in_current_cycle : Tez.t * Level_repr.t option; - total_delegated_stake : Tez.t; - staking_denominator : Staking_pseudotoken.t; - deactivated : bool; - grace_period : Cycle.t; - pending_denunciations : bool; - voting_info : Vote.delegate_info; - active_consensus_key : Signature.Public_key_hash.t; - pending_consensus_keys : (Cycle.t * Signature.Public_key_hash.t) list; - } - - type stake = {frozen : Tez.t; weighted_delegated : Tez.t} - - val info : t -> public_key_hash -> Delegate_services.info tzresult Lwt.t - - val full_balance : t -> public_key_hash -> Tez.t tzresult Lwt.t - - val current_frozen_deposits : t -> public_key_hash -> Tez.t tzresult Lwt.t - - (** calls the RPC [frozen_deposits]: we're using a different name to - be more easily distinguishable from [current_frozen_deposits] *) - val initial_frozen_deposits : t -> public_key_hash -> Tez.t tzresult Lwt.t - - val staking_balance : t -> public_key_hash -> Tez.t tzresult Lwt.t - - val unstaked_frozen_deposits : - t -> - public_key_hash -> - Protocol.Delegate_services.deposit_per_cycle list tzresult Lwt.t - - val staking_denominator : t -> public_key_hash -> Z.t tzresult Lwt.t - - val frozen_deposits_limit : - t -> public_key_hash -> Tez.t option tzresult Lwt.t - - val deactivated : t -> public_key_hash -> bool tzresult Lwt.t - - val voting_info : t -> public_key_hash -> Vote.delegate_info tzresult Lwt.t - - val consensus_key : - t -> public_key_hash -> Delegate_services.consensus_keys_info tzresult Lwt.t - - val participation : - t -> public_key_hash -> Delegate.For_RPC.participation_info tzresult Lwt.t - - val is_forbidden : t -> public_key_hash -> bool tzresult Lwt.t - - val stake_for_cycle : t -> Cycle.t -> public_key_hash -> stake tzresult Lwt.t -end - -module Sc_rollup : sig - val inbox : t -> Sc_rollup.Inbox.t tzresult Lwt.t - - val whitelist : - t -> Sc_rollup.t -> Sc_rollup.Whitelist.t option tzresult Lwt.t - - val commitment : - t -> - Sc_rollup.t -> - Sc_rollup.Commitment.Hash.t -> - Sc_rollup.Commitment.t tzresult Lwt.t - - val genesis_info : - t -> Sc_rollup.t -> Sc_rollup.Commitment.genesis_info tzresult Lwt.t - - val timeout : - t -> - Sc_rollup.t -> - Signature.Public_key_hash.t -> - Signature.Public_key_hash.t -> - Sc_rollup.Game.timeout option tzresult Lwt.t - - val ongoing_games_for_staker : - t -> - Sc_rollup.t -> - Signature.public_key_hash -> - (Sc_rollup.Game.t * Signature.public_key_hash * Signature.public_key_hash) - list - tzresult - Lwt.t -end - -type (_, _) tup = - | T1 : ('a, 'a) tup - | T2 : ('a, 'a * 'a) tup - | T3 : ('a, 'a * 'a * 'a) tup - | TList : int -> ('a, 'a list) tup - -val tup_hd : ('a, 'elts) tup -> 'elts -> 'a - -type 'accounts init := - ?rng_state:Random.State.t -> - ?commitments:Commitment.t list -> - ?bootstrap_balances:int64 list -> - ?bootstrap_delegations:Signature.Public_key_hash.t option list -> - ?bootstrap_consensus_keys:Signature.Public_key.t option list -> - ?consensus_committee_size:int -> - ?consensus_threshold:int -> - ?min_proposal_quorum:int32 -> - ?bootstrap_contracts:Parameters.bootstrap_contract list -> - ?level:int32 -> - ?cost_per_byte:Tez.t -> - ?issuance_weights:Constants.Parametric.issuance_weights -> - ?origination_size:int -> - ?blocks_per_cycle:int32 -> - ?cycles_per_voting_period:int32 -> - ?sc_rollup_arith_pvm_enable:bool -> - ?sc_rollup_private_enable:bool -> - ?sc_rollup_riscv_pvm_enable:bool -> - ?dal_enable:bool -> - ?zk_rollup_enable:bool -> - ?hard_gas_limit_per_block:Gas.Arith.integral -> - ?nonce_revelation_threshold:int32 -> - ?dal:Constants.Parametric.dal -> - ?adaptive_issuance:Constants.Parametric.adaptive_issuance -> - unit -> - (Block.t * 'accounts) tzresult Lwt.t - -(** Returns an initial block and the implicit contracts corresponding - to its bootstrap accounts. The number of bootstrap accounts, and - the structure of the returned contracts, are specified by the [tup] - argument. *) -val init_gen : (Alpha_context.Contract.t, 'accounts) tup -> 'accounts init - -(** [init_n n] : returns an initial block with [n] initialized accounts - and the associated implicit contracts *) -val init_n : int -> Alpha_context.Contract.t list init - -(** [init1] : returns an initial block with 1 initialized bootstrap account - and the associated implicit contract *) -val init1 : Alpha_context.Contract.t init - -(** [init2] : returns an initial block with 2 initialized bootstrap accounts - and the associated implicit contracts *) -val init2 : (Alpha_context.Contract.t * Alpha_context.Contract.t) init - -(** [init3] : returns an initial block with 3 initialized bootstrap accounts - and the associated implicit contracts *) -val init3 : - (Alpha_context.Contract.t - * Alpha_context.Contract.t - * Alpha_context.Contract.t) - init - -val init_with_constants_gen : - (Alpha_context.Contract.t, 'contracts) tup -> - Constants.Parametric.t -> - (Block.t * 'contracts) tzresult Lwt.t - -val init_with_constants_n : - Constants.Parametric.t -> - int -> - (Block.t * Alpha_context.Contract.t list) tzresult Lwt.t - -val init_with_constants1 : - Constants.Parametric.t -> (Block.t * Alpha_context.Contract.t) tzresult Lwt.t - -val init_with_constants2 : - Constants.Parametric.t -> - (Block.t * (Alpha_context.Contract.t * Alpha_context.Contract.t)) tzresult - Lwt.t - -(** [init_with_parameters_gen tup params] returns an initial block parametrised - with [params] and the implicit contracts corresponding to its bootstrap - accounts. The number of bootstrap accounts, and the structure of the - returned contracts, are specified by the [tup] argument. *) -val init_with_parameters_gen : - (Alpha_context.Contract.t, 'contracts) tup -> - Parameters.t -> - (Block.t * 'contracts) tzresult Lwt.t - -(** [init_with_parameters_n params n] returns an initial block parametrized - with [params] with [n] initialized accounts and the associated implicit - contracts *) -val init_with_parameters_n : - Parameters.t -> - int -> - (Block.t * Alpha_context.Contract.t list) tzresult Lwt.t - -(** [init_with_parameters1 params] returns an initial block parametrized with - [params] with one initialized account and the associated implicit - contract. *) -val init_with_parameters1 : - Parameters.t -> (Block.t * Alpha_context.Contract.t) tzresult Lwt.t - -(** [init_with_parameters2 params] returns an initial block parametrized with - [params] with two initialized accounts and the associated implicit - contracts *) -val init_with_parameters2 : - Parameters.t -> - (Block.t * (Alpha_context.Contract.t * Alpha_context.Contract.t)) tzresult - Lwt.t - -(** [default_raw_context] returns a [Raw_context.t] for use in tests - below [Alpha_context] *) -val default_raw_context : unit -> Raw_context.t tzresult Lwt.t - -(** [raw_context_from_constants] returns a [Raw_context.t] for use in tests - below [Alpha_context] *) -val raw_context_from_constants : - Constants.Parametric.t -> Raw_context.t tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/contract_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/contract_helpers.ml deleted file mode 100644 index 56b5cb458694fa135908ef56168b933479f89a24..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/contract_helpers.ml +++ /dev/null @@ -1,162 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** Initializes 2 addresses to do only operations plus one that will be - used to bake. *) -let init ?hard_gas_limit_per_block () = - let open Lwt_result_syntax in - let+ b, (src0, src1, src2) = - Context.init3 ?hard_gas_limit_per_block ~consensus_threshold:0 () - in - let baker = - match src0 with Implicit v -> v | Originated _ -> assert false - in - (b, baker, src1, src2) - -(** Return contents of a given file as string. *) -let read_file f = - In_channel.with_open_text f (fun ic -> - really_input_string ic (in_channel_length ic)) - -(** Loads a script from file. *) -let load_script ~storage file = - let contract_string = read_file file in - let code = Expr.toplevel_from_string contract_string in - let storage = Expr.from_string storage in - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - -(** Returns a block in which the contract is originated. *) -let originate_contract_hash file storage src b baker = - let open Lwt_result_syntax in - let script = load_script ~storage file in - let* operation, dst = - Op.contract_origination_hash (B b) src ~fee:(Tez_helpers.of_int 10) ~script - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) b - in - let* incr = Incremental.add_operation incr operation in - let+ b = Incremental.finalize_block incr in - (dst, b) - -let originate_contract file storage src b baker = - let open Lwt_result_syntax in - let+ dst, b = originate_contract_hash file storage src b baker in - (Contract.Originated dst, b) - -let fake_KT1 = - Contract_hash.of_b58check_exn "KT1FAKEFAKEFAKEFAKEFAKEFAKEFAKGGSE2x" - -let default_self = fake_KT1 - -let default_payer = Signature.Public_key_hash.zero - -let default_sender = Contract.Implicit default_payer - -let default_step_constants = - Script_interpreter. - { - sender = Contract default_sender; - payer = default_payer; - self = default_self; - amount = Tez.zero; - balance = Tez.zero; - chain_id = Chain_id.zero; - now = Script_timestamp.of_zint Z.zero; - level = Script_int.zero_n; - } - -(** Helper function that parses and typechecks a script, its initial storage and - parameters from strings. It then executes the typed script with the storage - and parameters and returns the result. - - The [step_constants] argument passes in some data which remains constant - throughout script's execution, hence the name. This includes addresses of - the sender and payer, the address of the smart contract, the amount of Tez - transferred to it and so on. - - An [internal] operation is an operation generated by smart contract's execution - rather than by an implicit account. *) -let run_script ctx ?logger ?(step_constants = default_step_constants) - ?(internal = false) contract ?(entrypoint = Entrypoint.default) ~storage - ~parameter () = - let open Lwt_result_wrap_syntax in - let contract_expr = Expr.from_string contract in - let storage_expr = Expr.from_string storage in - let parameter_expr = Expr.from_string parameter in - let script = - Script.{code = lazy_expr contract_expr; storage = lazy_expr storage_expr} - in - let*@ res = - Script_interpreter.execute - ctx - Readable - step_constants - ?logger - ~script - ~cached_script:None - ~entrypoint - ~parameter:parameter_expr - ~internal - in - return res - -let originate_contract_from_string_hash ~script ~storage ~source_contract ~baker - block = - let open Lwt_result_syntax in - let code = Expr.toplevel_from_string script in - let storage = Expr.from_string storage in - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - let* operation, dst = - Op.contract_origination_hash - (B block) - source_contract - ~fee:(Tez_helpers.of_int 10) - ~script - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let* incr = Incremental.add_operation incr operation in - let+ b = Incremental.finalize_block incr in - (dst, script, b) - -let originate_contract_from_string ~script ~storage ~source_contract ~baker - block = - let open Lwt_result_syntax in - let+ dst, script, b = - originate_contract_from_string_hash - ~script - ~storage - ~source_contract - ~baker - block - in - (Contract.Originated dst, script, b) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/cpmm_logic.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/cpmm_logic.ml deleted file mode 100644 index 3b50ed17945efda4606bee35007cec750744a914..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/cpmm_logic.ml +++ /dev/null @@ -1,102 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** This is a simulation of the CPMM contract, as implemented in mligo - in [src/proto_019_PtParisB/lib_protocol/contracts/cpmm.mligo]. The - interested reader should look for comments in this file to gain a - better understanding of the contract logic. *) -module Simulate_raw = struct - let mutez_to_natural t = Z.of_int64 (Tez.to_mutez t) - - let natural_to_mutez n = Tez.of_mutez_exn (Z.to_int64 n) - - let addLiquidity ~tokenPool ~xtzPool ~lqtTotal ~amount = - let xtzPool = mutez_to_natural xtzPool in - let nat_amount = mutez_to_natural amount in - let lqt_minted = Z.(nat_amount * lqtTotal / xtzPool) in - let tokens_deposited = Z.(cdiv (nat_amount * tokenPool) xtzPool) in - (lqt_minted, tokens_deposited) - - let removeLiquidity ~tokenPool ~xtzPool ~lqtTotal ~lqtBurned = - let xtz_withdrawn = - natural_to_mutez Z.(lqtBurned * mutez_to_natural xtzPool / lqtTotal) - in - let tokens_withdrawn = Z.(lqtBurned * tokenPool / lqtTotal) in - (xtz_withdrawn, tokens_withdrawn) - - let tokenToXtz ~tokenPool ~xtzPool ~tokensSold = - let fee = Z.of_int 999 in - let xtz_bought_nat = - Z.( - tokensSold * fee * mutez_to_natural xtzPool - / ((tokenPool * of_int 1000) + (tokensSold * fee))) - in - let bought = Z.(xtz_bought_nat * of_int 999 / of_int 1000) in - (natural_to_mutez bought, xtz_bought_nat) - - let xtzToToken ~tokenPool ~xtzPool ~amount = - let fee = Z.of_int 999 in - let xtzPool = mutez_to_natural xtzPool in - let nat_amount = mutez_to_natural amount in - let amount_net_burn = Z.(nat_amount * Z.of_int 999 / Z.of_int 1000) in - let tokens_bought = - Z.( - amount_net_burn * fee * tokenPool - / ((xtzPool * Z.of_int 1000) + (amount_net_burn * fee))) - in - (tokens_bought, amount_net_burn) - - let tokenToToken ~tokenPool ~xtzPool ~tokensSold = - let fee = Z.of_int 999 in - let xtz_bought_nat = - Z.( - tokensSold * fee * mutez_to_natural xtzPool - / ((tokenPool * of_int 1000) + (tokensSold * fee))) - in - let xtz_bought_net_burn = Z.(xtz_bought_nat * of_int 999 / of_int 1000) in - (natural_to_mutez xtz_bought_net_burn, xtz_bought_nat) -end - -module Simulate = struct - open Cpmm_repr.Storage - - let addLiquidity {tokenPool; xtzPool; lqtTotal; _} amount = - Simulate_raw.addLiquidity ~xtzPool ~tokenPool ~lqtTotal ~amount - - let removeLiquidity {tokenPool; xtzPool; lqtTotal; _} lqtBurned = - Simulate_raw.removeLiquidity ~tokenPool ~xtzPool ~lqtTotal ~lqtBurned - - let tokenToXtz {tokenPool; xtzPool; _} tokensSold = - Simulate_raw.tokenToXtz ~tokenPool ~xtzPool ~tokensSold - - let xtzToToken {tokenPool; xtzPool; _} amount = - Simulate_raw.xtzToToken ~tokenPool ~xtzPool ~amount - - let tokenToToken {tokenPool; xtzPool; _} tokensSold = - Simulate_raw.tokenToToken ~tokenPool ~xtzPool ~tokensSold -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/cpmm_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/cpmm_repr.ml deleted file mode 100644 index 365f5b30ac7036cfc5c272176bf9ca7f3900db12..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/cpmm_repr.ml +++ /dev/null @@ -1,386 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Expr_common - -(* // ============================================================================= - * // Storage - * // ============================================================================= *) - -module Storage = struct - type t = { - tokenPool : Z.t; - xtzPool : Tez.t; - lqtTotal : Z.t; - tokenAddress : Contract_hash.t; - lqtAddress : Contract_hash.t; - } - - let zero : t = - { - tokenPool = Z.zero; - xtzPool = Tez.zero; - lqtTotal = Z.zero; - tokenAddress = Contract_hash.zero; - lqtAddress = Contract_hash.zero; - } - - let to_string {tokenPool; xtzPool; lqtTotal; tokenAddress; lqtAddress} = - Format.asprintf - "{tokenPool : %a; xtzPool : %s; lqtTotal : %a; tokenAddress : %s; \ - lqtAddress : %s;}" - Z.pp_print - tokenPool - (Int64.to_string @@ Tez.to_mutez xtzPool) - Z.pp_print - lqtTotal - (Contract_hash.to_b58check tokenAddress) - (Contract_hash.to_b58check lqtAddress) - - let pp fmt s = Format.fprintf fmt "%s" (to_string s) - - let eq s s' = s = s' - - let to_expr : - loc:'a -> - t -> - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node = - fun ~loc {tokenPool; xtzPool; lqtTotal; tokenAddress; lqtAddress} -> - comb - ~loc - [ - int ~loc tokenPool; - mutez ~loc xtzPool; - int ~loc lqtTotal; - address_string ~loc (Contract.Originated tokenAddress); - address_string ~loc (Contract.Originated lqtAddress); - ] - - let to_michelson_string e = - let e = to_expr ~loc:0 e in - Format.asprintf - "%a" - Michelson_v1_printer.print_expr - (Micheline.strip_locations e) - - type exn += Invalid_storage_expr of string - - (** Note: parses a storage unparsed in readable mode (as - e.g. returned by [Alpha_services.Contract.storage]), so that - contracts are represented by strings. *) - let of_expr_exn : - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node -> t = - function - | Tezos_micheline.Micheline.Prim - ( _, - Script.D_Pair, - [ - Tezos_micheline.Micheline.Int (_, tokenPool); - Tezos_micheline.Micheline.Int (_, xtzPool); - Tezos_micheline.Micheline.Int (_, lqtTotal); - Tezos_micheline.Micheline.String (_, tokenAddress); - Tezos_micheline.Micheline.String (_, lqtAddress); - ], - [] ) -> - let xtzPool = Tez.of_mutez_exn (Z.to_int64 xtzPool) in - let tokenAddress = originated_of_string_exn tokenAddress in - let lqtAddress = originated_of_string_exn lqtAddress in - {tokenPool; xtzPool; lqtTotal; tokenAddress; lqtAddress} - | e -> - let canonical = Micheline.strip_locations e in - let msg = - Format.asprintf - "Not a valid CPMM storage: %s /// %a" - (try - Michelson_v1_printer.micheline_string_of_expression - ~zero_loc:true - canonical - with Z.Overflow -> - "Cannot represent as micheline due to overflowing Z -> int") - Michelson_v1_printer.print_expr - canonical - in - raise (Invalid_storage_expr msg) - - let get (ctxt : Context.t) ~(contract : Contract.t) : t tzresult Lwt.t = - let open Lwt_result_syntax in - match contract with - | Implicit _ -> - invalid_arg "Cpmm_repr.Storage.get called on implicit account" - | Originated c -> - let+ expr = Context.Contract.storage ctxt c in - Micheline.root expr |> of_expr_exn - - let of_tuple (tokenPool, xtzPool, lqtTotal, tokenAddress, lqtAddress) = - {tokenPool; xtzPool; lqtTotal; tokenAddress; lqtAddress} - - let to_tuple {tokenPool; xtzPool; lqtTotal; tokenAddress; lqtAddress} = - (tokenPool, xtzPool, lqtTotal, tokenAddress, lqtAddress) - - let valid {tokenPool; xtzPool; lqtTotal; _} = - tokenPool > Z.zero && lqtTotal > Z.zero && Tez.(xtzPool > Tez.zero) -end - -module Parameter = struct - (* // ============================================================================= - * // Entrypoints - * // ============================================================================= *) - - type add_liquidity = { - owner : Contract.t; - minLqtMinted : Z.t; - maxTokensDeposited : Z.t; - deadline : Script_timestamp.t; - } - - type remove_liquidity = { - to_ : Contract.t; - (* recipient of the liquidity redemption *) - lqtBurned : Z.t; - (* amount of lqt owned by sender to burn *) - minXtzWithdrawn : Tez.t; - (* minimum amount of Tez.t to withdraw *) - minTokensWithdrawn : Z.t; - (* minimum amount of tokens to withdraw *) - deadline : Script_timestamp.t; - (* the time before which the request must be completed *) - } - - type token_to_token = { - outputDexterContract : Contract.t; - minTokensBought : Z.t; - to_ : Contract.t; - tokensSold : Z.t; - deadline : Script_timestamp.t; - } - - type token_to_xtz = { - to_ : Contract.t; - tokensSold : Z.t; - minXtzBought : Tez.t; - deadline : Script_timestamp.t; - } - - type xtz_to_token = { - to_ : Contract.t; - minTokensBought : Z.t; - deadline : Script_timestamp.t; - } - - type t = - | AddLiquidity of add_liquidity - | Default of unit - | RemoveLiquidity of remove_liquidity - | TokenToToken of token_to_token - | TokenToXtz of token_to_xtz - | XtzToToken of xtz_to_token - - let addLiquidity p = AddLiquidity p - - let default p = Default p - - let removeLiquidity p = RemoveLiquidity p - - let tokenToToken p = TokenToToken p - - let tokenToXtz p = TokenToXtz p - - let xtzToToken p = XtzToToken p - - let add_liquidity_to_string : add_liquidity -> string = - fun {owner; minLqtMinted; maxTokensDeposited; deadline} -> - Format.asprintf - "{owner : %s; minLqtMinted : %a; maxTokensDeposited : %a; deadline : %s }" - (Contract.to_b58check owner) - Z.pp_print - minLqtMinted - Z.pp_print - maxTokensDeposited - (Script_timestamp.to_string deadline) - - let remove_liquidity_to_string : remove_liquidity -> string = - fun {to_; lqtBurned; minXtzWithdrawn; minTokensWithdrawn; deadline} -> - Format.asprintf - "{owner : %s; lqtBurned : %a; minXtzWithdrawn : %s; minTokensWithdrawn : \ - %a; deadline : %s }" - (Contract.to_b58check to_) - Z.pp_print - lqtBurned - (Int64.to_string @@ Tez.to_mutez minXtzWithdrawn) - Z.pp_print - minTokensWithdrawn - (Script_timestamp.to_string deadline) - - let token_to_token_to_string : token_to_token -> string = - fun {outputDexterContract; minTokensBought; to_; tokensSold; deadline} -> - Format.asprintf - "{outputDexterContract : %s; minTokensBought : %a; to_ : %s; tokensSold \ - : %a; deadline : %s }" - (Contract.to_b58check outputDexterContract) - Z.pp_print - minTokensBought - (Contract.to_b58check to_) - Z.pp_print - tokensSold - (Script_timestamp.to_string deadline) - - let token_to_xtz_to_string : token_to_xtz -> string = - fun {to_; tokensSold; minXtzBought; deadline} -> - Format.asprintf - "{to_ : %s; tokensSold : %a; minXtzBought : %s; deadline : %s }" - (Contract.to_b58check to_) - Z.pp_print - tokensSold - (Int64.to_string @@ Tez.to_mutez minXtzBought) - (Script_timestamp.to_string deadline) - - let xtz_to_token_to_string : xtz_to_token -> string = - fun {to_; minTokensBought; deadline} -> - Format.asprintf - "{to_ : %s; minTokensBought : %a; deadline : %s }" - (Contract.to_b58check to_) - Z.pp_print - minTokensBought - (Script_timestamp.to_string deadline) - - let to_string : t -> string = function - | AddLiquidity p -> - Format.asprintf "AddLiquidity %s" (add_liquidity_to_string p) - | Default () -> "Default ()" - | RemoveLiquidity p -> - Format.asprintf "RemoveLiquidity %s" (remove_liquidity_to_string p) - | TokenToToken p -> - Format.asprintf "TokenToToken (%s)" (token_to_token_to_string p) - | TokenToXtz p -> - Format.asprintf "TokenToXtz (%s)" (token_to_xtz_to_string p) - | XtzToToken p -> - Format.asprintf "XtzToToken (%s)" (xtz_to_token_to_string p) - - let entrypoint_of_parameter : t -> Entrypoint.t = function - | AddLiquidity _ -> Entrypoint.of_string_strict_exn "addLiquidity" - | Default _ -> Entrypoint.default - | RemoveLiquidity _ -> Entrypoint.of_string_strict_exn "removeLiquidity" - | TokenToToken _ -> Entrypoint.of_string_strict_exn "tokenToToken" - | TokenToXtz _ -> Entrypoint.of_string_strict_exn "tokenToXtz" - | XtzToToken _ -> Entrypoint.of_string_strict_exn "xtzToToken" - - let pp fmt s = Format.fprintf fmt "%s" (to_string s) - - let eq s s' = s = s' - - let to_expr_rooted : - loc:'a -> - t -> - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node = - fun ~loc -> function - | AddLiquidity {owner; minLqtMinted; maxTokensDeposited; deadline} -> - comb - ~loc - [ - address_string ~loc owner; - int ~loc minLqtMinted; - int ~loc maxTokensDeposited; - timestamp ~loc deadline; - ] - | Default () -> unit ~loc () - | RemoveLiquidity - {to_; lqtBurned; minXtzWithdrawn; minTokensWithdrawn; deadline} -> - comb - ~loc - [ - address_string ~loc to_; - int ~loc lqtBurned; - mutez ~loc minXtzWithdrawn; - int ~loc minTokensWithdrawn; - timestamp ~loc deadline; - ] - | TokenToToken - {outputDexterContract; minTokensBought; to_; tokensSold; deadline} -> - comb - ~loc - [ - address_string ~loc outputDexterContract; - int ~loc minTokensBought; - address_string ~loc to_; - int ~loc tokensSold; - timestamp ~loc deadline; - ] - | TokenToXtz {to_; tokensSold; minXtzBought; deadline} -> - comb - ~loc - [ - address_string ~loc to_; - int ~loc tokensSold; - mutez ~loc minXtzBought; - timestamp ~loc deadline; - ] - | XtzToToken {to_; minTokensBought; deadline} -> - comb - ~loc - [ - address_string ~loc to_; - int ~loc minTokensBought; - timestamp ~loc deadline; - ] - - let to_expr : - loc:'a -> - t -> - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node = - fun ~loc p -> - let rooted = to_expr_rooted ~loc p in - match p with - | AddLiquidity _ -> left ~loc @@ left ~loc @@ left ~loc rooted - | Default () -> left ~loc @@ left ~loc @@ right ~loc rooted - | RemoveLiquidity _ -> left ~loc @@ right ~loc @@ left ~loc rooted - | TokenToToken _ -> left ~loc @@ right ~loc @@ right ~loc rooted - | TokenToXtz _ -> right ~loc @@ left ~loc rooted - | XtzToToken _ -> right ~loc @@ right ~loc rooted - - let to_michelson_string e = - let e = to_expr ~loc:0 e in - Format.asprintf - "%a" - Michelson_v1_printer.print_expr - (Micheline.strip_locations e) -end - -let transaction (ctxt : Context.t) ~(contract : Contract.t) ~(src : Contract.t) - ?(amount = Tez.zero) (parameters : Parameter.t) = - let entrypoint = Parameter.entrypoint_of_parameter parameters in - let rooted_param_lazy = - parameters - |> Parameter.to_expr_rooted ~loc:0 - |> Micheline.strip_locations |> Alpha_context.Script.lazy_expr - in - Op.transaction - ctxt - src - contract - amount - ~entrypoint - ~parameters:rooted_param_lazy diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/dal_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/dal_helpers.ml deleted file mode 100644 index f4557b7e2593ec31ac8173d87758054f70b48465..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/dal_helpers.ml +++ /dev/null @@ -1,288 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -module S = Dal_slot_repr -module Slot_index = Dal_slot_index_repr -module P = S.Page -module Hist = S.History -module Ihist = Hist.Internal_for_tests - -(** Error used below for functions that don't return their failures in the monad - error. *) -type error += Test_failure of string - -let () = - let open Data_encoding in - register_error_kind - `Permanent - ~id:(Protocol.name ^ "_test_failure") - ~title:"Test failure" - ~description:"Test failure." - ~pp:(fun ppf e -> Format.fprintf ppf "Test failure: %s" e) - (obj1 (req "error" string)) - (function Test_failure e -> Some e | _ -> None) - (fun e -> Test_failure e) - -let dal_prover_srs = - lazy - (Cryptobox.init_prover_dal - ~find_srs_files:Tezos_base.Dal_srs.find_trusted_setup_files - ()) - -let mk_cryptobox dal_params = - let open Lwt_result_syntax in - let* () = Lazy.force dal_prover_srs in - match Cryptobox.make dal_params with - | Ok dal -> return dal - | Error (`Fail s) -> fail [Test_failure s] - -let derive_dal_parameters (reference : Cryptobox.parameters) ~redundancy_factor - ~constants_divider = - { - S.redundancy_factor; - page_size = reference.page_size / constants_divider; - slot_size = reference.slot_size / constants_divider; - number_of_shards = reference.number_of_shards / constants_divider; - } - -let content_slot_id = function - | Hist.Internal_for_tests.Unattested id | Attested {id; _} -> id - -module Make (Parameters : sig - val dal_parameters : Alpha_context.Constants.Parametric.dal - - val cryptobox : Cryptobox.t tzresult Lwt.t Lazy.t -end) = -struct - (* Some global constants. *) - - let params = Parameters.dal_parameters.cryptobox_parameters - - let cryptobox = Parameters.cryptobox - - let genesis_history = Hist.genesis - - let genesis_history_cache = Hist.History_cache.empty ~capacity:3000L - - let level_one = Raw_level_repr.(succ root) - - let level_ten = Raw_level_repr.(of_int32_exn 10l) - - (* Helper functions. *) - - let get_history cache h = - Hist.History_cache.(Map.find h (view cache)) |> Lwt.return - - let dal_mk_polynomial_from_slot slot_data = - let open Lwt_result_syntax in - let* cryptobox = Lazy.force cryptobox in - match Cryptobox.polynomial_from_slot cryptobox slot_data with - | Ok p -> return p - | Error (`Slot_wrong_size s) -> - fail - [ - Test_failure - (Format.sprintf "polynomial_from_slot: Slot_wrong_size (%s)" s); - ] - - let dal_commit cryptobox polynomial = - let open Result_syntax in - match Cryptobox.commit cryptobox polynomial with - | Ok cm -> return cm - | Error - ((`Invalid_degree_strictly_less_than_expected _ | `Prover_SRS_not_loaded) - as commit_error) -> - fail [Test_failure (Cryptobox.string_of_commit_error commit_error)] - - let dal_mk_prove_page polynomial page_id = - let open Lwt_result_syntax in - let* cryptobox = Lazy.force cryptobox in - match Cryptobox.prove_page cryptobox polynomial page_id.P.page_index with - | Ok p -> return p - | Error `Page_index_out_of_range -> - fail [Test_failure "compute_proof_segment: Page_index_out_of_range"] - | Error - ((`Invalid_degree_strictly_less_than_expected _ | `Prover_SRS_not_loaded) - as commit_error) -> - fail [Test_failure (Cryptobox.string_of_commit_error commit_error)] - - let mk_slot ?(level = level_one) ?(index = Slot_index.zero) - ?(fill_function = fun _i -> 'x') () = - let open Lwt_result_syntax in - let slot_data = Bytes.init params.slot_size fill_function in - let* polynomial = dal_mk_polynomial_from_slot slot_data in - let* cryptobox = Lazy.force cryptobox in - let*? commitment = dal_commit cryptobox polynomial in - return - ( slot_data, - polynomial, - S.Header.{id = {published_level = level; index}; commitment} ) - - let mk_page_id published_level slot_index page_index = - P.{slot_id = {published_level; index = slot_index}; page_index} - - let no_data = Some (fun ~default_char:_ _ -> None) - - let mk_page_info ?(default_char = 'x') ?level ?slot_index - ?(page_index = P.Index.zero) ?(custom_data = None) (slot : S.Header.t) - polynomial = - let open Lwt_result_syntax in - let level = - match level with None -> slot.id.published_level | Some level -> level - in - let slot_index = - match slot_index with None -> slot.id.index | Some index -> index - in - let page_id = mk_page_id level slot_index page_index in - let* page_proof = dal_mk_prove_page polynomial page_id in - match custom_data with - | None -> - let page_data = Bytes.make params.page_size default_char in - return (Some (page_data, page_proof), page_id) - | Some mk_data -> ( - match mk_data ~default_char params.page_size with - | None -> return (None, page_id) - | Some page_data -> return (Some (page_data, page_proof), page_id)) - - let succ_slot_index index = - Option.value_f - Slot_index.( - of_int_opt - ~number_of_slots:Parameters.dal_parameters.number_of_slots - (to_int index + 1)) - ~default:(fun () -> Slot_index.zero) - - let next_char c = Char.(chr ((code c + 1) mod 255)) - - (** Auxiliary test function used by both unit and PBT tests: This function - produces a proof from the given information and verifies the produced result, - if any. The result of each step is checked with [check_produce_result] and - [check_verify_result], respectively. *) - let produce_and_verify_proof ~check_produce ?check_verify ~get_history - skip_list ~page_info ~page_id = - let open Lwt_result_wrap_syntax in - let*!@ res = - Hist.produce_proof params ~page_info page_id ~get_history skip_list - in - let* () = check_produce res page_info in - match check_verify with - | None -> return_unit - | Some check_verify -> - let*? proof, _input_opt = res in - let@ res = Hist.verify_proof params page_id skip_list proof in - check_verify res page_info - - (* Some check functions. *) - - (** Check that/if the returned content is the expected one. *) - let assert_content_is ~__LOC__ ~expected returned = - Assert.equal - ~loc:__LOC__ - (Option.equal Bytes.equal) - "Returned %s doesn't match the expected one" - (fun fmt opt -> - match opt with - | None -> Format.fprintf fmt "" - | Some bs -> Format.fprintf fmt "" (Bytes.to_string bs)) - returned - expected - - let expected_data page_info proof_status = - match (page_info, proof_status) with - | Some (d, _p), `Confirmed -> Some d - | None, `Confirmed -> assert false - | _ -> None - - let proof_status_to_string = function - | `Confirmed -> "CONFIRMED" - | `Unconfirmed -> "UNCONFIRMED" - - let successful_check_produce_result ~__LOC__ proof_status res page_info = - let open Lwt_result_syntax in - let* proof, input_opt = Assert.get_ok ~__LOC__ res in - let* () = - if Hist.Internal_for_tests.proof_statement_is proof proof_status then - return_unit - else - failwith - "Expected to have a %s page proof. Got %a@." - (proof_status_to_string proof_status) - (Hist.pp_proof ~serialized:false) - proof - in - assert_content_is - ~__LOC__ - input_opt - ~expected:(expected_data page_info proof_status) - - let failing_check_produce_result ~__LOC__ ~expected_error res _page_info = - Assert.proto_error ~loc:__LOC__ res (fun e -> - match (e, expected_error) with - | Hist.Dal_proof_error s, Hist.Dal_proof_error expected -> - String.equal s expected - | ( Hist.Unexpected_page_size {expected_size = e1; page_size = p1}, - Hist.Unexpected_page_size {expected_size = e2; page_size = p2} ) -> - e1 = e2 && p1 = p2 - | _ -> false) - - let successful_check_verify_result ~__LOC__ proof_status res page_info = - let open Lwt_result_syntax in - let* content = Assert.get_ok ~__LOC__ res in - let expected = expected_data page_info proof_status in - assert_content_is ~__LOC__ ~expected content - - (** Checks if the two provided Page.proof are equal. *) - let eq_page_proof = - let bytes_opt_of_proof page_proof = - Data_encoding.Binary.to_bytes_opt P.proof_encoding page_proof - in - fun pp1 pp2 -> - Option.equal Bytes.equal (bytes_opt_of_proof pp1) (bytes_opt_of_proof pp2) - - let slot_confirmed_but_page_data_not_provided ~__LOC__ = - failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Dal_proof_error - "The page ID's slot is confirmed, but no page content and proof are \ - provided.") - - let slot_not_confirmed_but_page_data_provided ~__LOC__ = - failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Dal_proof_error - "The page ID's slot is not confirmed, but page content and proof \ - are provided.") - - let bad_history_cache ~__LOC__ = - failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Dal_proof_error - "Skip_list.search returned Nearest', while all given levels to \ - produce proofs are supposed to be in the skip list.") -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/dal_helpers.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/dal_helpers.mli deleted file mode 100644 index 29b721cdc1a0368f83ed5d5d4021c84669c72778..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/dal_helpers.mli +++ /dev/null @@ -1,189 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(** Returns an object of type {!Cryptobox.t} from the given DAL paramters. *) -val mk_cryptobox : Cryptobox.parameters -> Cryptobox.t tzresult Lwt.t - -(** Derive new DAL parameters from the given ones by: - - setting the given redundancy factor ; - - dividing the other fields by the given factor. -*) -val derive_dal_parameters : - Cryptobox.parameters -> - redundancy_factor:int -> - constants_divider:int -> - Cryptobox.parameters - -(** Returns the slot id of the given cell's content . *) -val content_slot_id : - Dal_slot_repr.History.Internal_for_tests.cell_content -> - Dal_slot_repr.Header.id - -module Make (P : sig - val dal_parameters : Alpha_context.Constants.Parametric.dal - - val cryptobox : Cryptobox.t tzresult Lwt.t Lazy.t -end) : sig - (** Some global constants. *) - - val genesis_history : Dal_slot_repr.History.t - - val genesis_history_cache : Dal_slot_repr.History.History_cache.t - - val level_one : Raw_level_repr.t - - val level_ten : Raw_level_repr.t - - (** Helper functions. *) - - (** Retrieves the history from a given cache. *) - val get_history : - Dal_slot_repr.History.History_cache.t -> - Dal_slot_repr.History.hash -> - Dal_slot_repr.History.t option Lwt.t - - (** Returns the slot's polynomial from the given slot's data. *) - val dal_mk_polynomial_from_slot : bytes -> Cryptobox.polynomial tzresult Lwt.t - - (* Commits to the given polynomial. *) - val dal_commit : - Cryptobox.t -> - Cryptobox.polynomial -> - (Cryptobox.commitment, error trace) result - - (** Using the given slot's polynomial, this function computes the page proof of - the page whose ID is provided. *) - val dal_mk_prove_page : - Cryptobox.polynomial -> - Dal_slot_repr.Page.t -> - Cryptobox.page_proof tzresult Lwt.t - - (** Constructs a slot whose ID is defined from the given level and given - index, and whose data are built using the given fill function. The function - returns the slot's data, polynomial, and header (in the sense: ID + kate - commitment). *) - val mk_slot : - ?level:Raw_level_repr.t -> - ?index:Dal_slot_index_repr.t -> - ?fill_function:(int -> char) -> - unit -> - (bytes * Cryptobox.polynomial * Dal_slot_repr.Header.t) tzresult Lwt.t - - (** Constructs a record value of type Page.id. *) - val mk_page_id : - Raw_level_repr.t -> Dal_slot_index_repr.t -> int -> Dal_slot_repr.Page.t - - val no_data : (default_char:char -> int -> bytes option) option - - (** Constructs a page whose level and slot indexes are those of the given slot - (except if level is redefined via [?level]), and whose page index and data - are given by arguments [page_index] and [mk_data]. If [mk_data] is set to - [No], the function returns the pair (None, page_id). Otherwise, the page's - [data] and [proof] is computed, and the function returns [Some (data, - proof), page_id]. *) - val mk_page_info : - ?default_char:char -> - ?level:Raw_level_repr.t -> - ?slot_index:Dal_slot_index_repr.t -> - ?page_index:int -> - ?custom_data:(default_char:char -> int -> bytes option) option -> - Dal_slot_repr.Header.t -> - Cryptobox.polynomial -> - ( (bytes * Cryptobox.page_proof) option * Dal_slot_repr.Page.t, - error trace ) - result - Lwt.t - - (** Returns the char after [c]. Restarts from the char whose code is 0 if [c]'s - code is 255. *) - val next_char : char -> char - - (** Increment the given slot index. Returns zero in case of overflow. *) - val succ_slot_index : Dal_slot_index_repr.t -> Dal_slot_index_repr.t - - (** Auxiliary test function used by both unit and PBT tests: This function - produces a proof from the given information and verifies the produced - result, if any. The result of each step is checked with - [check_produce_result] and [check_verify_result], respectively. *) - val produce_and_verify_proof : - check_produce: - ((Dal_slot_repr.History.proof * bytes option) tzresult -> - (bytes * Cryptobox.page_proof) option -> - (unit, tztrace) result Lwt.t) -> - ?check_verify: - (bytes option tzresult -> - (bytes * Cryptobox.page_proof) option -> - (unit, tztrace) result Lwt.t) -> - get_history: - (Dal_slot_repr.History.hash -> Dal_slot_repr.History.t option Lwt.t) -> - Dal_slot_repr.History.t -> - page_info:(bytes * Cryptobox.page_proof) option -> - page_id:Dal_slot_repr.Page.t -> - (unit, tztrace) result Lwt.t - - (** Check if two page proofs are equal. *) - val eq_page_proof : Cryptobox.page_proof -> Cryptobox.page_proof -> bool - - (** Helper for the case where produce_proof is expected to succeed. *) - val successful_check_produce_result : - __LOC__:string -> - [`Confirmed | `Unconfirmed] -> - (Dal_slot_repr.History.proof * bytes option) tzresult -> - (bytes * 'a) option -> - (unit, tztrace) result Lwt.t - - (** Helper for the case where verify_proof is expected to succeed. *) - val successful_check_verify_result : - __LOC__:string -> - [> `Confirmed] -> - bytes option tzresult -> - (bytes * 'a) option -> - (unit, tztrace) result Lwt.t - - (** Helper for the case where produce_proof is expected to fail because the slot - is confirmed but no page information are provided. *) - val slot_confirmed_but_page_data_not_provided : - __LOC__:string -> 'a tzresult -> 'b -> unit tzresult Lwt.t - - (** Helper for the case where produce_proof is expected to fail because the slot - is not confirmed but page_info are provided. *) - val slot_not_confirmed_but_page_data_provided : - __LOC__:string -> 'a tzresult -> 'b -> unit tzresult Lwt.t - - (** Helper for the case where produce_proof is expected to fail. *) - val failing_check_produce_result : - __LOC__:string -> - expected_error:Environment.Error_monad.error -> - 'a tzresult -> - 'b -> - unit tzresult Lwt.t - - (** Helper for the case where produce_proof is expected to fail because some - cells are missing in the history cache. *) - val bad_history_cache : - __LOC__:string -> 'a tzresult -> 'b -> unit tzresult Lwt.t -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/dummy_zk_rollup.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/dummy_zk_rollup.ml deleted file mode 100644 index 38ad8e2124b89f13d32672b7830dd28e72a8f3f6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/dummy_zk_rollup.ml +++ /dev/null @@ -1,632 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Dummy ZK Rollup for testing the ZKRU integration in the protocol. - The library Plompiler is used to build the circuits (in a module V as - verifier) and the corresponding functions to produce the inputs for the - circuits (in a module P as prover). - - The state of this rollup is a boolean value, which will be - represented with a scalar value of [zero] for [false] and - [one] for [true]. - - This RU has only one operation, with [op_code] 0. In addition to the - common header (see {!Zk_rollup_operation_repr}), this operation has - as payload one scalar representing a boolean value. - - The transition function [f] for this rollup is: - - {[ - f : operation -> state -> state - f (Op b) s = if b = s then not s else s - ]} - - That is, the state bool is flipped only if the operation's payload is - equal to the current state. - - The operation can be used publicly or in a private batch. The circuits - that describe the RU are: - - ["op"]: for a single public operation. - - ["batch-"[N]]: for a batch of [N] private operations. [N] is determined - by the [batch_size] parameter to the [Operator] functor. - - ["fee"]: the trivial fees circuit, since this RU has no concept of fees. - - NB: the "op" circuit does not add any constraints over the operation's - [exit_validity] other than it being in [{0, 1}]. This means that the dummy - rollup can be used to test deposits/withdrawals, but the rollup will not - perform any monetary bookkeeping. -*) - -open Plompiler - -(** Helper types and modules *) - -(** Empty types to represent bounds *) - -type balance - -type amount - -type fee - -type op_code - -(** Bounds required for the dummy rollup. *) -module Bound : sig - type 'a t = private Z.t - - val bound_balance : balance t - - val bound_amount : amount t - - val bound_fee : fee t - - val bound_op_code : op_code t - - val v : 'a t -> Z.t -end = struct - type 'a t = Z.t - - (** These bounds are exclusive. *) - - (** Upper bound for ticket balance, as found in the price field of an - operation's header *) - let bound_balance = Z.(shift_left one 20) - - (** Upper bound for ticket amount, used for fee circuit *) - let bound_amount = Z.(shift_left one 20) - - (** Upper bound for fee amount of one public operation *) - let bound_fee = Z.(shift_left one 10) - - (** Upper bound for op code *) - let bound_op_code = Z.one - - let v x = x -end - -(** Modules to manipulate bounded integers, both as OCaml values and in circuit - representation. -*) -module Bounded = Bounded.Make (Bound) - -(** Types used for the Dummy Rollup circuits. - This module is split into: - - P: concrete OCaml version of the types, - - V: Plompiler's circuit representation for P's types, and - - Encodings: conversion between P and V. -*) -module Types = struct - module P = struct - type state = bool - - module Bounded = Bounded.P - - type 'a ticket = {id : S.t; amount : 'a Bounded.t} - - type tezos_pkh = Environment.Signature.Public_key_hash.t - - type header = { - op_code : op_code Bounded.t; - price : balance ticket; - l1_dst : tezos_pkh; - rollup_id : tezos_pkh; - } - - type op = {header : header; payload : bool} - - (** Dummy values for these types. Useful to get the circuit without having - the actual inputs. *) - module Dummy = struct - let op_code = Bounded.make ~bound:Bound.bound_op_code Z.zero - - let balance = Bounded.make ~bound:Bound.bound_balance Z.zero - - let tezos_pkh = Environment.Signature.Public_key_hash.zero - - let ticket_balance = {id = S.zero; amount = balance} - - let header = - { - op_code; - price = ticket_balance; - l1_dst = tezos_pkh; - rollup_id = tezos_pkh; - } - end - end - - module V (L : LIB) = struct - open L - module Bounded_u = Bounded.V (L) - - type 'a ticket_u = {id : scalar repr; amount : 'a Bounded_u.t} - - type tezos_pkh_u = scalar repr - - type header_u = { - op_code : op_code Bounded_u.t; - price : balance ticket_u; - l1_dst : tezos_pkh_u; - rollup_id : tezos_pkh_u; - } - - type op_u = {header : header_u; payload : bool repr} - end - - module Encodings (L : LIB) = struct - module Bounded_e = Bounded.Encoding (L) - open P - - open V (L) - - open L.Encodings - - let op_code_encoding ~safety = - Bounded_e.encoding ~safety Bound.bound_op_code - - let encoding_to_scalar e x = - let bs = Data_encoding.Binary.to_bytes_exn e x in - let z = Z.of_bits @@ Bytes.to_string bs in - Bls12_381.Fr.of_z z - - let encoding_of_scalar e x = - let z = Bls12_381.Fr.to_z x in - let bs = Bytes.of_string @@ Z.to_bits z in - Data_encoding.Binary.of_bytes_exn e bs - - let tezos_pkh_encoding : (tezos_pkh, tezos_pkh_u, _) encoding = - conv - (fun pkhu -> pkhu) - (fun w -> w) - (encoding_to_scalar Signature.Public_key_hash.encoding) - (encoding_of_scalar Signature.Public_key_hash.encoding) - scalar_encoding - - let amount_encoding ~safety = Bounded_e.encoding ~safety Bound.bound_amount - - let fee_encoding ~safety = Bounded_e.encoding ~safety Bound.bound_fee - - let ticket_encoding ~safety (bound : 'a Bound.t) : - ('a ticket, 'a ticket_u, _) encoding = - conv - (fun {id; amount} -> (id, amount)) - (fun (id, amount) -> {id; amount}) - (fun ({id; amount} : 'a ticket) -> (id, amount)) - (fun (id, amount) -> {id; amount}) - (obj2_encoding scalar_encoding (Bounded_e.encoding ~safety bound)) - - let ticket_balance_encoding ~safety = - ticket_encoding ~safety Bound.bound_balance - - let header_encoding ~safety : (header, header_u, _) encoding = - conv - (fun {op_code; price; l1_dst; rollup_id} -> - (op_code, (price, (l1_dst, rollup_id)))) - (fun (op_code, (price, (l1_dst, rollup_id))) -> - {op_code; price; l1_dst; rollup_id}) - (fun ({op_code; price; l1_dst; rollup_id} : header) -> - (op_code, (price, (l1_dst, rollup_id)))) - (fun (op_code, (price, (l1_dst, rollup_id))) -> - {op_code; price; l1_dst; rollup_id}) - (obj4_encoding - (op_code_encoding ~safety) - (* We use an Unsafe Bounded scalar encoding here to be able to - detect that an out-of-range value has been passed. - This encoding is unsafe in the sense that such value will cause - a failure in proving, instead of a circuit that can prove that - the argument is out-of-range. - This is enough for Protocol testing purposes, while keeping - the dummy circuit small. - *) - (ticket_balance_encoding ~safety:Unsafe) - tezos_pkh_encoding - tezos_pkh_encoding) - - let op_encoding : (op, op_u, _) encoding = - conv - (fun {header; payload} -> (header, payload)) - (fun (header, payload) -> {header; payload}) - (fun ({header; payload} : op) -> (header, payload)) - (fun (header, payload) -> {header; payload}) - (obj2_encoding (header_encoding ~safety:NoCheck) bool_encoding) - end -end - -(** Plompiler circuits for the dummy rollup *) -module V (L : LIB) = struct - open L - module E = Types.Encodings (L) - module Encodings = L.Encodings - open Encodings - - open Types.V (L) - - let coerce (type a) (x : a Bounded_u.t) = - fst (x : a Bounded_u.t :> scalar repr * Z.t) - - (** Common logic for the state transition function *) - let logic_op ~old_state ~rollup_id op = - ignore rollup_id ; - let* valid = equal old_state op.payload in - let* new_state = Bool.bnot old_state in - let* expected_new_state = Bool.ifthenelse valid new_state old_state in - Num.assert_eq_const (coerce op.header.op_code) S.zero - (* >* assert_equal rollup_id op.header.rollup_id *) - >* ret expected_new_state - - (** Circuit definition for one public operation *) - let predicate_op ?(kind = `Public) ~old_state ~new_state ~fee ~exit_validity - ~rollup_id op = - let* old_state = input ~kind:`Public @@ Input.bool old_state in - let* new_state = input ~kind:`Public @@ Input.bool new_state in - let* (_fee : scalar repr) = - input ~kind:`Public - @@ E.((fee_encoding ~safety:Bounded_e.Unsafe).input) fee - in - let* (_exit_validity : bool repr) = - input ~kind:`Public @@ Input.bool exit_validity - in - let* rollup_id = - input ~kind:`Public @@ E.(tezos_pkh_encoding.input) rollup_id - in - let* op = input ~kind @@ E.op_encoding.input op in - let op = E.op_encoding.decode op in - let* expected_new_state = logic_op ~old_state ~rollup_id op in - assert_equal expected_new_state new_state - - (** Circuit definition for a batch of private operations *) - let predicate_batch ~old_state ~new_state ~fees ~rollup_id ops = - let* old_state = input ~kind:`Public @@ Input.bool old_state in - let* new_state = input ~kind:`Public @@ Input.bool new_state in - let* (_fees : scalar repr) = - input ~kind:`Public - @@ E.((amount_encoding ~safety:Bounded_e.Unsafe).input) fees - in - let* rollup_id = - input ~kind:`Public @@ E.(tezos_pkh_encoding.input) rollup_id - in - let* ops = input @@ (Encodings.list_encoding E.op_encoding).input ops in - let ops = (Encodings.list_encoding E.op_encoding).decode ops in - let* computed_final_state = - foldM - (fun old_state op -> logic_op ~old_state ~rollup_id op) - old_state - ops - in - assert_equal computed_final_state new_state - - (** Fee circuit *) - let predicate_fees ~old_state ~new_state ~fees = - let* old_state = input ~kind:`Public @@ Input.bool old_state in - let* new_state = input ~kind:`Public @@ Input.bool new_state in - let* (_fees : scalar repr) = - input ~kind:`Public - @@ E.((amount_encoding ~safety:Bounded_e.Unsafe).input) fees - in - assert_equal old_state new_state -end - -(** Basic rollup operator for generating Updates. *) -module Operator (Params : sig - val batch_size : int -end) : sig - open Protocol.Alpha_context - - (** Initial state of the rollup *) - val init_state : Zk_rollup.State.t - - (** Map associating every circuit identifier to its kind *) - val circuits : [`Public | `Private | `Fee] Kzg.SMap.t - - (** Commitment to the circuits *) - val lazy_pp : - (Plonk.Main_protocol.prover_public_parameters - * Plonk.Main_protocol.verifier_public_parameters) - lazy_t - - (** [craft_update state ~zk_rollup ?private_ops ?exit_validities public_ops] - will apply first the [public_ops], then the [private_ops]. While doing so, - the public inputs for every circuit will be collected. A Plonk proof of - correctness of the application these operations is created. *) - val craft_update : - Zk_rollup.State.t -> - zk_rollup:Zk_rollup.t -> - ?private_ops:Zk_rollup.Operation.t list list -> - ?exit_validities:bool list -> - Zk_rollup.Operation.t list -> - Zk_rollup.State.t * Zk_rollup.Update.t - - module Internal_for_tests : sig - val true_op : Zk_rollup.Operation.t - - val false_op : Zk_rollup.Operation.t - - val pending : Zk_rollup.Operation.t list - - val private_ops : Zk_rollup.Operation.t list list - - val lazy_update_data : Zk_rollup.Update.t lazy_t - end -end = struct - open Protocol.Alpha_context - module SMap = Kzg.SMap - module Dummy = Types.P.Dummy - module T = Types.P - module VC = V (LibCircuit) - - let lazy_srs = - lazy - (let open Octez_bls12_381_polynomial in - (Srs.generate_insecure 9 1, Srs.generate_insecure 1 1)) - - let dummy_l1_dst = - Hex.to_bytes_exn (`Hex "0002298c03ed7d454a101eb7022bc95f7e5f41ac78") - - let dummy_rollup_id = - let address = - Zk_rollup.Address.of_b58check_exn "epx18RJJqrYuJQqhB636BWvukU3XBNQGbtm8C" - in - Data_encoding.Binary.to_bytes_exn Zk_rollup.Address.encoding address - - let dummy_ticket_hash = Bytes.make 32 '0' - - let of_proto_state : Zk_rollup.State.t -> Types.P.state = - fun s -> Bls12_381.Fr.is_one s.(0) - - let to_proto_state : Types.P.state -> Zk_rollup.State.t = - fun s -> if s then [|Bls12_381.Fr.one|] else [|Bls12_381.Fr.zero|] - - let dummy_op = T.{header = Dummy.header; payload = false} - - let batch_name = "batch-" ^ string_of_int Params.batch_size - - (* Circuits that define the rollup, alongside their public input size and - solver *) - let circuit_map = - let get_circuit _name c = - let r = LibCircuit.get_cs ~optimize:true c in - (Plonk.Circuit.to_plonk r, r.public_input_size, r.solver) - in - SMap.of_list - @@ List.map - (fun (n, c) -> (n, get_circuit n c)) - [ - ( "op", - VC.predicate_op - ~old_state:false - ~new_state:true - ~fee:(T.Bounded.make ~bound:Bound.bound_fee Z.zero) - ~exit_validity:false - ~rollup_id:Dummy.tezos_pkh - dummy_op ); - ( batch_name, - VC.predicate_batch - ~old_state:false - ~new_state:true - ~fees:(T.Bounded.make ~bound:Bound.bound_amount Z.zero) - ~rollup_id:Dummy.tezos_pkh - (Stdlib.List.init Params.batch_size (Fun.const dummy_op)) ); - ( "fee", - VC.predicate_fees - ~old_state:false - ~new_state:false - ~fees:(T.Bounded.make ~bound:Bound.bound_amount Z.zero) ); - ] - - let circuits = - SMap.(add "op" `Public @@ add batch_name `Private @@ add "fee" `Fee empty) - - let lazy_pp = - lazy - (let srs = Lazy.force lazy_srs in - Plonk.Main_protocol.setup - ~zero_knowledge:false - (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) - ~srs) - - let insert s x m = - match SMap.find_opt s m with - | None -> SMap.add s [x] m - | Some l -> SMap.add s (x :: l) m - - let craft_update : - Zk_rollup.State.t -> - zk_rollup:Zk_rollup.t -> - ?private_ops:Zk_rollup.Operation.t list list -> - ?exit_validities:bool list -> - Zk_rollup.Operation.t list -> - Zk_rollup.State.t * Zk_rollup.Update.t = - fun s ~zk_rollup ?(private_ops = []) ?exit_validities pending -> - let prover_pp, public_parameters = Lazy.force lazy_pp in - let s = of_proto_state s in - let rev_inputs = SMap.empty in - let exit_validities = - match exit_validities with - | None -> List.map (Fun.const true) pending - | Some l -> - assert (List.length l = List.length pending) ; - l - in - let _circ, _pi_size, op_solver = SMap.find "op" circuit_map in - (* Process the public operations *) - let s, rev_inputs, rev_pending_pis = - Stdlib.List.fold_left2 - (fun (s, rev_inputs, rev_pending_pis) op exit_validity -> - let new_state = - if s = of_proto_state Zk_rollup.Operation.(op.payload) then not s - else s - in - let fee = Bls12_381.Fr.zero in - let pi_to_send = - Zk_rollup.Update. - {new_state = to_proto_state new_state; fee; exit_validity} - in - let exit_validity_s = - if exit_validity then Bls12_381.Fr.one else Bls12_381.Fr.zero - in - let public_inputs = - Array.concat - [ - to_proto_state s; - to_proto_state new_state; - [|fee; exit_validity_s; Zk_rollup.to_scalar zk_rollup|]; - Zk_rollup.Operation.to_scalar_array op; - ] - in - let private_inputs = Solver.solve op_solver public_inputs in - ( new_state, - insert - "op" - Plonk.Main_protocol. - {witness = private_inputs; input_commitments = []} - rev_inputs, - ("op", pi_to_send) :: rev_pending_pis )) - (s, rev_inputs, []) - pending - exit_validities - in - let pending_pis = List.rev rev_pending_pis in - - let _circ, _pi_size, batch_solver = SMap.find batch_name circuit_map in - (* Process the private operation batches *) - let s, rev_inputs, rev_private_pis = - if private_ops = [] then (s, rev_inputs, []) - else - List.fold_left - (fun (s, rev_inputs, rev_private_pis) batch -> - let new_state = - List.fold_left - (fun s op -> - if s = of_proto_state Zk_rollup.Operation.(op.payload) then - not s - else s) - s - batch - in - let fees = Bls12_381.Fr.zero in - let pi_to_send : Zk_rollup.Update.private_inner_pi = - Zk_rollup.Update.{new_state = to_proto_state new_state; fees} - in - let public_inputs = - Array.concat - [ - to_proto_state s; - to_proto_state new_state; - [|fees; Zk_rollup.to_scalar zk_rollup|]; - ] - in - let initial = - Array.concat - ([public_inputs] - @ List.map Zk_rollup.Operation.to_scalar_array batch) - in - let private_inputs = Solver.solve batch_solver initial in - ( new_state, - insert - batch_name - Plonk.Main_protocol. - {witness = private_inputs; input_commitments = []} - rev_inputs, - (batch_name, pi_to_send) :: rev_private_pis )) - (s, rev_inputs, []) - private_ops - in - let private_pis = List.rev rev_private_pis in - (* Dummy fee circuit *) - let _circ, _pi_size, fee_solver = SMap.find "fee" circuit_map in - let rev_inputs, fee_pi = - let fee_pi = Zk_rollup.Update.{new_state = to_proto_state s} in - let fees = Bls12_381.Fr.zero in - - let public_inputs = - Array.concat [to_proto_state s; to_proto_state s; [|fees|]] - in - let private_inputs = Solver.solve fee_solver public_inputs in - ( insert - "fee" - Plonk.Main_protocol.{witness = private_inputs; input_commitments = []} - rev_inputs, - fee_pi ) - in - let inputs = SMap.map List.rev rev_inputs in - let proof = Plonk.Main_protocol.prove prover_pp ~inputs in - let verifier_inputs = - Plonk.Main_protocol.to_verifier_inputs prover_pp inputs - in - assert ( - Plonk.Main_protocol.verify public_parameters ~inputs:verifier_inputs proof) ; - ( to_proto_state s, - Zk_rollup.Update.{pending_pis; private_pis; fee_pi; proof} ) - - let init_state = to_proto_state false - - module Internal_for_tests = struct - let true_op = - Zk_rollup.Operation. - { - op_code = 0; - price = - (let id = - Data_encoding.Binary.of_bytes_exn - Ticket_hash.encoding - dummy_ticket_hash - in - {id; amount = Z.zero}); - l1_dst = - Data_encoding.Binary.of_bytes_exn - Signature.Public_key_hash.encoding - dummy_l1_dst; - rollup_id = - Data_encoding.Binary.of_bytes_exn - Zk_rollup.Address.encoding - dummy_rollup_id; - payload = [|Bls12_381.Fr.one|]; - } - - let false_op = {true_op with payload = [|Bls12_381.Fr.zero|]} - - let pending = [false_op; true_op; true_op] - - let n_batches = 2 - - let private_ops = - Stdlib.List.init n_batches @@ Fun.const - @@ Stdlib.List.init Params.batch_size (fun i -> - if i mod 2 = 0 then false_op else true_op) - - let lazy_update_data = - lazy - (snd - @@ craft_update - init_state - ~zk_rollup: - (Data_encoding.Binary.of_bytes_exn - Zk_rollup.Address.encoding - dummy_rollup_id) - ~private_ops - pending) - end -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/dune b/src/proto_019_PtParisB/lib_protocol/test/helpers/dune deleted file mode 100644 index cb945491ad2677b5dbfe2760e712deb9d5f1c2bd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/dune +++ /dev/null @@ -1,39 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name tezos_019_PtParisB_test_helpers) - (public_name octez-protocol-019-PtParisB-libs.test-helpers) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - tezt-tezos - tezt - qcheck-alcotest - octez-libs.test-helpers - octez-libs.base - octez-libs.micheline - octez-libs.stdlib-unix - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.client - tezos-protocol-019-PtParisB.parameters - octez-proto-libs.protocol-environment - octez-protocol-019-PtParisB-libs.plugin - octez-shell-libs.shell-services - octez-libs.plompiler - octez-libs.crypto-dal - octez-protocol-019-PtParisB-libs.smart-rollup) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_micheline - -open Tezos_stdlib_unix - -open Tezos_protocol_019_PtParisB - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_protocol_plugin_019_PtParisB - -open Tezos_shell_services - -open Tezos_crypto_dal - -open Tezos_smart_rollup_019_PtParisB)) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/error_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/error_helpers.ml deleted file mode 100644 index 34c08aecfe95fea8aa40a3339d7ea2bbd4a1c97c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/error_helpers.ml +++ /dev/null @@ -1,59 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Helpers to check expected errors. *) - -open Protocol -open Alpha_context -open Validate_errors.Manager - -(** Identifies the [Inconsistent_sources] error. *) -let check_inconsistent_sources ~first_source:_ ~source:_ = function - | [Inconsistent_sources] -> true - | _ -> false - -(** To be used as the [expect_failure] argument of - {!Incremental.add_operation} when expecting the - [Inconsistent_sources] error. *) -let expect_inconsistent_sources ~loc ~first_source ~source errs = - Assert.expect_error - ~loc - errs - (check_inconsistent_sources ~first_source ~source) - -(** Identifies the [Inconsistent_counters] error. *) -let check_inconsistent_counters ~source:_ ~previous_counter:_ ~counter:_ = - function - | [Inconsistent_counters] -> true - | _ -> false - -(** To be used as the [expect_failure] argument of - {!Incremental.add_operation} when expecting the - [Inconsistent_counters] error. *) -let expect_inconsistent_counters ~loc ~source ~previous_counter ~counter errs = - Assert.expect_error - ~loc - errs - (check_inconsistent_counters ~source ~previous_counter ~counter) - -(** Same as {!expect_inconsistent_counters} but with [int] arguments - for counters. *) -let expect_inconsistent_counters_int ~loc ~source ~previous_counter ~counter - errs = - let counter = Manager_counter.Internal_for_tests.of_int counter in - let previous_counter = - Manager_counter.Internal_for_tests.of_int previous_counter - in - expect_inconsistent_counters ~loc ~source ~previous_counter ~counter errs - -(** To be used as the [expect_failure] argument of - {!Incremental.add_operation} when expecting the - [Incorrect_reveal_position] error. *) -let expect_incorrect_reveal_position ~loc errs = - Assert.expect_error ~loc errs (function - | [Incorrect_reveal_position] -> true - | _ -> false) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/expr.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/expr.ml deleted file mode 100644 index 468d09535ae84aa3dedf8ec49e29ea3fc82433c8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/expr.ml +++ /dev/null @@ -1,50 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -exception Expression_from_string - -(** Parse a Michelson expression from string, raising an exception on error. *) -let from_string ?(check_micheline_indentation = false) str : Script.expr = - let ast, errs = - Michelson_v1_parser.parse_expression ~check:check_micheline_indentation str - in - (match errs with - | [] -> () - | lst -> - Format.printf "expr_from_string: %a\n" Error_monad.pp_print_trace lst ; - raise Expression_from_string) ; - ast.expanded - -(** Parses a Michelson contract from string, raising an exception on error. *) -let toplevel_from_string ?(check_micheline_indentation = false) str = - let ast, errs = - Michelson_v1_parser.parse_toplevel ~check:check_micheline_indentation str - in - match errs with [] -> ast.expanded | _ -> Stdlib.failwith "parse toplevel" - -let to_string c = Format.asprintf "%a" Michelson_v1_printer.print_expr c diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/expr_common.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/expr_common.ml deleted file mode 100644 index 554bba47ce079e32b883e183899f58eee56b702f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/expr_common.ml +++ /dev/null @@ -1,98 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(* From OCaml values to Micheline expressions *) - -let seq ?(loc = 0) l = Tezos_micheline.Micheline.Seq (loc, l) - -let pair ?(loc = 0) a b = - Tezos_micheline.Micheline.Prim (loc, Script.D_Pair, [a; b], []) - -let pair_n ?(loc = 0) els = - Tezos_micheline.Micheline.Prim (loc, Script.D_Pair, els, []) - -let comb ?(loc = 0) es = - Tezos_micheline.Micheline.Prim (loc, Script.D_Pair, es, []) - -let none ?(loc = 0) () = - Tezos_micheline.Micheline.Prim (loc, Script.D_None, [], []) - -let some ?(loc = 0) a = - Tezos_micheline.Micheline.Prim (loc, Script.D_Some, [a], []) - -let left ?(loc = 0) a = - Tezos_micheline.Micheline.Prim (loc, Script.D_Left, [a], []) - -let right ?(loc = 0) b = - Tezos_micheline.Micheline.Prim (loc, Script.D_Right, [b], []) - -let unit ?(loc = 0) () = - Tezos_micheline.Micheline.Prim (loc, Script.D_Unit, [], []) - -let int ?(loc = 0) i = Tezos_micheline.Micheline.Int (loc, i) - -let bytes ?(loc = 0) s = Tezos_micheline.Micheline.Bytes (loc, s) - -let string ?(loc = 0) s = Tezos_micheline.Micheline.String (loc, s) - -let mutez ?(loc = 0) m = int ~loc (Z.of_int64 (Tez.to_mutez m)) - -(* Translate a timestamp to a Micheline expression in optimized - form *) -let timestamp ?(loc = 0) ts = int ~loc (Script_timestamp.to_zint ts) - -let address ?(loc = 0) adr = - bytes ~loc @@ Data_encoding.Binary.to_bytes_exn Contract.encoding adr - -let address_string ?(loc = 0) adr = string ~loc @@ Contract.to_b58check adr - -let big_map_id ?(loc = 0) id = int ~loc @@ Big_map.Id.unparse_to_z id - -(* From Micheline expressions to OCaml values *) - -let timestamp_of_zint zint = Script_timestamp.of_zint zint - -let public_key_of_bytes_exn b = - Data_encoding.Binary.of_bytes_exn Signature.Public_key.encoding b - -let address_of_bytes_exn b = - Data_encoding.Binary.of_bytes_exn Contract.encoding b - -type exn += Invalid_address_expr of string - -let address_of_string_exn s = - match Contract.of_b58check s with - | Ok c -> c - | Error _ -> raise @@ Invalid_address_expr s - -let originated_of_string_exn s = - match address_of_string_exn s with - | Contract.Originated addr -> addr - | Contract.Implicit _ -> - invalid_arg - "Expected originated contract address, got implicit contract address" diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/incremental.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/incremental.ml deleted file mode 100644 index decfedcbf6da08bbab9e22486d06e3aa18787110..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/incremental.ml +++ /dev/null @@ -1,311 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -module Proto_Nonce = Nonce (* Renamed otherwise is masked by Alpha_context *) -open Alpha_context - -type t = { - predecessor : Block.t; - state : validation_state * application_state; - rev_operations : Operation.packed list; - rev_tickets : operation_receipt list; - header : Block_header.t; - delegate : Account.t; - constants : Constants.Parametric.t; -} - -type incremental = t - -let predecessor {predecessor; _} = predecessor - -let header {header; _} = header - -let rev_tickets {rev_tickets; _} = rev_tickets - -let validation_state {state = vs, _; _} = vs - -let level st = st.header.shell.level - -let alpha_ctxt {state = _, application_state; _} = application_state.ctxt - -let rpc_context st = - let fitness = (header st).shell.fitness in - let result = Alpha_context.finalize (alpha_ctxt st) fitness in - { - Environment.Updater.block_hash = Block_hash.zero; - block_header = {st.header.shell with fitness = result.fitness}; - context = result.context; - } - -let rpc_ctxt = - new Environment.proto_rpc_context_of_directory - rpc_context - Plugin.RPC.rpc_services - -let set_alpha_ctxt st ctxt = - {st with state = (fst st.state, {(snd st.state) with ctxt})} - -let begin_validation_and_application ctxt chain_id mode ~predecessor = - let open Lwt_result_syntax in - let* validation_state = begin_validation ctxt chain_id mode ~predecessor in - let* application_state = begin_application ctxt chain_id mode ~predecessor in - return (validation_state, application_state) - -let begin_construction ?timestamp ?seed_nonce_hash ?(mempool_mode = false) - ?(policy = Block.By_round 0) ?liquidity_baking_toggle_vote - ?adaptive_issuance_vote (predecessor : Block.t) = - let open Lwt_result_wrap_syntax in - let* delegate, _consensus_key, round, real_timestamp = - Block.get_next_baker ~policy predecessor - in - let* delegate = Account.find delegate in - let*?@ payload_round = Round.of_int round in - let timestamp = Option.value ~default:real_timestamp timestamp in - let* seed_nonce_hash = - match seed_nonce_hash with - | Some _hash -> return seed_nonce_hash - | None -> ( - let+ level = - Plugin.RPC.current_level ~offset:1l Block.rpc_ctxt predecessor - in - match level with - | {expected_commitment = true; _} -> - Some (fst (Proto_Nonce.generate ())) - | {expected_commitment = false; _} -> None) - in - let shell : Block_header.shell_header = - { - predecessor = predecessor.hash; - proto_level = predecessor.header.shell.proto_level; - validation_passes = predecessor.header.shell.validation_passes; - fitness = predecessor.header.shell.fitness; - timestamp; - level = predecessor.header.shell.level; - context = Context_hash.zero; - operations_hash = Operation_list_list_hash.zero; - } - in - let* contents = - Block.Forge.contents - ?seed_nonce_hash - ?adaptive_issuance_vote - ?liquidity_baking_toggle_vote - ~payload_hash:Block_payload_hash.zero - ~payload_round - shell - in - let mode = - if mempool_mode then - Partial_construction {predecessor_hash = predecessor.hash; timestamp} - else - let block_header_data = - {Block_header.contents; signature = Signature.zero} - in - Construction - {predecessor_hash = predecessor.hash; timestamp; block_header_data} - in - let header = - {Block_header.shell; protocol_data = {contents; signature = Signature.zero}} - in - let*@ state = - begin_validation_and_application - predecessor.context - Chain_id.zero - mode - ~predecessor:predecessor.header.shell - in - return - { - predecessor; - state; - rev_operations = []; - rev_tickets = []; - header; - delegate; - constants = predecessor.constants; - } - -let detect_script_failure : - type kind. kind Apply_results.operation_metadata -> _ = - let open Result_syntax in - let rec detect_script_failure : - type kind. kind Apply_results.contents_result_list -> _ = - let open Apply_results in - let open Apply_operation_result in - let open Apply_internal_results in - let detect_script_failure_single (type kind) - (Manager_operation_result - {operation_result; internal_operation_results; _} : - kind Kind.manager Apply_results.contents_result) = - let detect_script_failure (type kind) - (result : (kind, _, _) operation_result) = - match result with - | Applied _ -> return_unit - | Skipped _ -> assert false - | Backtracked (_, None) -> - (* there must be another error for this to happen *) - return_unit - | Backtracked (_, Some errs) -> fail (Environment.wrap_tztrace errs) - | Failed (_, errs) -> fail (Environment.wrap_tztrace errs) - in - let* () = detect_script_failure operation_result in - List.iter_e - (fun (Internal_operation_result (_, r)) -> detect_script_failure r) - internal_operation_results - in - function - | Single_result (Manager_operation_result _ as res) -> - detect_script_failure_single res - | Single_result _ -> return_unit - | Cons_result (res, rest) -> - let* () = detect_script_failure_single res in - detect_script_failure rest - in - fun {contents} -> detect_script_failure contents - -let check_operation_size ?(check_size = true) op = - if check_size then - let operation_size = Data_encoding.Binary.length Operation.encoding op in - if operation_size > Constants_repr.max_operation_data_length then - raise - (invalid_arg - (Format.sprintf - "The operation size is %d: it exceeds the constant maximum size \ - %d." - operation_size - Constants_repr.max_operation_data_length)) - -let validate_operation ?expect_failure ?check_size st op = - let open Lwt_result_wrap_syntax in - check_operation_size ?check_size op ; - let validation_state, application_state = st.state in - let oph = Operation.hash_packed op in - let*!@ res = validate_operation validation_state oph op in - match (expect_failure, res) with - | Some _, Ok _ -> failwith "Error expected while validating operation" - | Some f, Error err -> - let* () = f err in - return st - | None, Error err -> fail err - | None, Ok validation_state -> - return {st with state = (validation_state, application_state)} - -let add_operation ?expect_failure ?expect_apply_failure ?allow_manager_failure - ?check_size st op = - let open Lwt_result_wrap_syntax in - let open Apply_results in - let* st = validate_operation ?expect_failure ?check_size st op in - match expect_failure with - | Some _ -> - (* The expected failure has already been observed in - [validate_operation]. *) - return st - | None -> ( - let validation_state, application_state = st.state in - let oph = Operation.hash_packed op in - let*@ application_state, metadata = - apply_operation application_state oph op - in - let st = - { - st with - state = (validation_state, application_state); - rev_operations = op :: st.rev_operations; - rev_tickets = metadata :: st.rev_tickets; - } - in - match allow_manager_failure with - | Some true -> return st - | None | Some false -> ( - match (expect_apply_failure, metadata) with - | None, No_operation_metadata -> return st - | None, Operation_metadata result -> - let*? () = detect_script_failure result in - return st - | Some _, No_operation_metadata -> - failwith "Error expected while adding operation" - | Some f, Operation_metadata result -> ( - match detect_script_failure result with - | Ok _ -> failwith "Error expected while adding operation" - | Error err -> - let* () = f err in - return st))) - -let finalize_validation_and_application (validation_state, application_state) - shell_header = - let open Lwt_result_syntax in - let* () = finalize_validation validation_state in - finalize_application application_state shell_header - -let finalize_block st = - let open Lwt_result_wrap_syntax in - let operations = List.rev st.rev_operations in - let operations_hash = - Operation_list_list_hash.compute - [Operation_list_hash.compute (List.map Operation.hash_packed operations)] - in - let shell_header = - { - st.header.shell with - level = Int32.succ st.header.shell.level; - operations_hash; - } - in - let*@ validation_result, _ = - finalize_validation_and_application st.state (Some shell_header) - in - let operations = List.rev st.rev_operations in - let operations_hash = - Operation_list_list_hash.compute - [Operation_list_hash.compute (List.map Operation.hash_packed operations)] - in - let header = - { - st.header with - shell = - { - st.header.shell with - level = Int32.succ st.header.shell.level; - operations_hash; - fitness = validation_result.fitness; - }; - } - in - let hash = Block_header.hash header in - return - { - Block.hash; - header; - operations; - context = validation_result.context; - constants = st.constants; - } - -let assert_validate_operation_fails expect_failure op block = - let open Lwt_result_syntax in - let* i = begin_construction block in - let* (_i : incremental) = validate_operation ~expect_failure i op in - return_unit diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/incremental.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/incremental.mli deleted file mode 100644 index a50718801060185d0a2c32a329ebafd13171dccd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/incremental.mli +++ /dev/null @@ -1,139 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -type t - -type incremental = t - -val predecessor : incremental -> Block.t - -val header : incremental -> Block_header.t - -val rev_tickets : incremental -> operation_receipt list - -val validation_state : incremental -> validation_state - -val level : incremental -> int32 - -(** [begin_construction ?mempool_mode predecessor] uses - {!Main.begin_validation_and_application} to create a validation and - application state on top of [predecessor] for the construction of a - new block. - - Optional arguments allow to override defaults: - - {ul {li [?mempool_mode:bool]: when [true], use [Partial_construction] - mode. By default, it is [false] and the mode is [Construction].}} *) -val begin_construction : - ?timestamp:Time.Protocol.t -> - ?seed_nonce_hash:Nonce_hash.t -> - ?mempool_mode:bool -> - ?policy:Block.baker_policy -> - ?liquidity_baking_toggle_vote:Per_block_votes_repr.per_block_vote -> - ?adaptive_issuance_vote:Per_block_votes_repr.per_block_vote -> - Block.t -> - incremental tzresult Lwt.t - -(** [validate_operation ?expect_failure ?check_size i op] tries to - validate [op] in the validation state of [i]. If the validation - succeeds, the function returns the incremental value with a - validation state updated after the validate. Otherwise raise the - error from the validation of [op]. - - Optional arguments allow to override defaults: - - {ul {li [?expect_failure:(error list -> unit tzresult Lwt.t)]: - validation of [op] is expected to fail and [expect_failure] should - handle the error. In case validate does not fail and an - [expect_failure] is provided, [validate_operation] fails.} - - {li [?check_size:bool]: enable the check that an operation size - should not exceed [Constants_repr.max_operation_data_length]. - Enabled (set to [true]) by default. }} *) -val validate_operation : - ?expect_failure:(error list -> unit tzresult Lwt.t) -> - ?check_size:bool -> - incremental -> - Operation.packed -> - incremental tzresult Lwt.t - -(** [add_operation ?expect_failure ?expect_apply_failure - ?allow_manager_failure ?check_size i op] tries to validate then - apply [op] in the validation and application state of [i]. If the - validation of [op] succeeds, the function returns the incremental - value with a validation state updated after the application of - [op]. Otherwise raise the error from the validation of [op]. - - Optional arguments allow to override defaults: - - @param expect_failure - validation of [op] is expected to fail and [expect_failure] should - handle the error. In case validate does not fail and - [expect_failure] is provided, [validate_operation] fails. - - @param expect_apply_failure - application of [op] is expected to fail and - [expect_apply_failure] should handle the errror. In case the - application of [op] does not fail and [expect_apply_failure] is - provided, [add_operation] fails. - - @param allow_manager_failure - marks that manager operation failures after fee taken are ignored. - - @param check_size - enable the check that an operation size should not exceed - [Constants_repr.max_operation_data_length]. Enabled (set to [true]) by - default. *) -val add_operation : - ?expect_failure:(error list -> unit tzresult Lwt.t) -> - ?expect_apply_failure:(error list -> unit tzresult Lwt.t) -> - ?allow_manager_failure:bool -> - ?check_size:bool -> - incremental -> - Operation.packed -> - incremental tzresult Lwt.t - -(** [finalize_block i] creates a [Block.t] based on the protocol - states and the operations contained in [i]. The function calls - [Main.finalize_application] to compute a new context. *) -val finalize_block : incremental -> Block.t tzresult Lwt.t - -(** [assert_validate_operation_fails expect_failure operation block] - calls {!begin_construction} on top of [block], then - {!validate_operation} with [~expect_failure]. *) -val assert_validate_operation_fails : - (tztrace -> unit tzresult Lwt.t) -> - Operation.packed -> - Block.t -> - unit tzresult Lwt.t - -val rpc_ctxt : incremental Environment.RPC_context.simple - -val alpha_ctxt : incremental -> Alpha_context.context - -val set_alpha_ctxt : incremental -> Alpha_context.context -> incremental diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_generator.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_generator.ml deleted file mode 100644 index 2a81f101afae6a8f4c97faf0fddb29d589ae483c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_generator.ml +++ /dev/null @@ -1,328 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Liquidity_baking_machine -open QCheck2.Gen - -let total_xtz = 32_000_000_000_000L - -let ten_subsidies = 25_000_000L - -let rec remove_last_element = function - | [_] -> [] - | x :: rst -> x :: remove_last_element rst - | [] -> raise (Invalid_argument "remove_last_element") - -(** Try to shrink a list by removing elements from the tail of said - list. - - The elements themselves are not shrinked. *) -let rec shrink_list l = - if l == [] then Seq.empty - else - let l = remove_last_element l in - Seq.cons l (shrink_list l) - -let gen_balances : int64 -> int -> int -> balances QCheck2.Gen.t = - fun max_xtz max_tzbtc max_liquidity -> - let open Tezos_test_helpers.Qcheck2_helpers in - let+ xtz = int64_strictly_positive_gen max_xtz - and+ tzbtc = int_strictly_positive_gen max_tzbtc - and+ liquidity = int_strictly_positive_gen max_liquidity in - {xtz; tzbtc; liquidity} - -let gen_specs : int -> int -> specs QCheck2.Gen.t = - fun total_tzbtc total_liquidity -> - (* 1. We pick a random number to decide how many implicit account we - will set-up in the specs. Note that there will be one more - implicit accounts, the [Holder], that we will use to reach the - expected balances for the CPMM and the implicit accounts. *) - let* accounts_numbers = int_range 10 20 in - (* 2. To keep the generator simpler, we do not try to strictly reach - the [total_tzbtc] and [total_liquidity] value, but rather we - compute maxima for the implicit accounts balances from - them. *) - (* 2.1. We divide a fraction of the [total_xtz] that we need to - share to the implicit accounts. The rationale is to provide - a large amount to xtz to [Holder], so that we do not have to - worry about it being “rich enough.” *) - let max_xtz = Int64.(div total_xtz (of_int (50 * accounts_numbers))) in - (* 2.2. We divide [total_tzbtc] between the implicit accounts *and* - the CPMM contract. *) - let max_tzbtc = total_tzbtc / (accounts_numbers + 1) in - (* 2.2. We divide [total_liquidity] between the implicit accounts only. *) - let max_liquidity = total_liquidity / accounts_numbers in - let+ cpmm_balance = gen_balances max_xtz max_tzbtc 1 - and+ accounts_balances = - list_repeat accounts_numbers (gen_balances max_xtz max_tzbtc max_liquidity) - in - { - cpmm_min_xtz_balance = cpmm_balance.xtz; - cpmm_min_tzbtc_balance = cpmm_balance.tzbtc; - accounts_balances; - } - -type 'a optgen = 'a option QCheck2.Gen.t - -let ( let*? ) (m : 'a optgen) (f : 'a -> 'b optgen) = - let* x = m in - match x with None -> return None | Some x -> f x - -(** [genopt_oneof l] tries to generate a value using the generators of - [l], one at a time. - - First, the list [l] is randomized, then each generator is - tried. The first one to return a result (not [None]) is picked. If - all generators returns [None], the generators tries again with the - whole list (at most 100 times). If no generator of [l] is able to - return a result, then [genopt_oneof l] returns [None]. *) -let genopt_oneof (l : 'a optgen list) : 'a optgen = - let* l = QCheck2.Gen.shuffle_l l in - let rec aux n = function - | [] -> if n = 0 then pure None else aux (n - 1) l - | g :: l -> ( - let* x = g in - match x with None -> aux n l | Some x -> pure @@ Some x) - in - aux 100 l - -let genopt_account ?choice ?(filter = Fun.const true) env : contract_id optgen = - let l = - List.filter - filter - (Option.fold ~none:env.implicit_accounts ~some:(fun x -> [x]) choice) - in - if l = [] then return None else map Option.some (oneofl l) - -let genopt_account_with_tzbtc ?choice ?(min = 1) env state = - genopt_account - ?choice - ~filter:(fun a -> SymbolicMachine.get_tzbtc_balance a env state >= min) - env - -let genopt_account_with_xtz ?choice ?(min = 1L) env state = - genopt_account - ?choice - ~filter:(fun a -> SymbolicMachine.get_xtz_balance a state >= min) - env - -let genopt_account_with_liquidity ?choice ?(min = 1) env state = - genopt_account - ?choice - ~filter:(fun a -> SymbolicMachine.get_liquidity_balance a env state >= min) - env - -let genopt_step_tzbtc_to_xtz : - ?source:contract_id -> - ?destination:contract_id -> - contract_id env -> - SymbolicMachine.t -> - contract_id step optgen = - fun ?source ?destination env state -> - let*? source = genopt_account_with_tzbtc ?choice:source env state in - let*? destination = genopt_account ?choice:destination env in - let+ tzbtc_deposit = - Tezos_test_helpers.Qcheck2_helpers.int_strictly_positive_gen - (SymbolicMachine.get_tzbtc_balance source env state) - in - (* See note (2) *) - if - SymbolicMachine.get_tzbtc_balance env.cpmm_contract env state - < Int.max_int - tzbtc_deposit - then Some (SellTzBTC {source; destination; tzbtc_deposit}) - else None - -let genopt_step_xtz_to_tzbtc : - ?source:contract_id -> - ?destination:contract_id -> - contract_id env -> - SymbolicMachine.t -> - contract_id step optgen = - fun ?source ?destination env state -> - let*? source = genopt_account_with_xtz ?choice:source env state in - let*? destination = genopt_account ?choice:destination env in - let+ xtz_deposit = - map - Int64.of_int - (int_range - 1 - (Int64.to_int @@ SymbolicMachine.get_xtz_balance source state)) - in - (* See note (2) *) - if - SymbolicMachine.get_xtz_balance env.cpmm_contract state - < Int64.(sub max_int (add ten_subsidies xtz_deposit)) - then Some (BuyTzBTC {source; destination; xtz_deposit}) - else None - -let genopt_step_add_liquidity : - ?source:contract_id -> - ?destination:contract_id -> - contract_id env -> - SymbolicMachine.t -> - contract_id step optgen = - fun ?source ?destination env state -> - let rec find_xtz_deposit candidate max_tzbtc_deposit = - let tzbtc_deposit = - SymbolicMachine.predict_required_tzbtc_deposit candidate env state - in - if tzbtc_deposit <= max_tzbtc_deposit then candidate - else find_xtz_deposit (Int64.div candidate 2L) max_tzbtc_deposit - in - let*? source = genopt_account_with_xtz ?choice:source env state in - let*? destination = genopt_account ?choice:destination env in - let source_xtz_pool = SymbolicMachine.get_xtz_balance source state in - (* the source needs at least one xtz *) - if 1L < source_xtz_pool then - let+ candidate = - Tezos_test_helpers.Qcheck2_helpers.int64_strictly_positive_gen - source_xtz_pool - in - let xtz_deposit = - find_xtz_deposit - candidate - (SymbolicMachine.get_tzbtc_balance source env state) - in - (* See note (2) *) - if - SymbolicMachine.get_xtz_balance env.cpmm_contract state - < Int64.(sub max_int (add ten_subsidies xtz_deposit)) - then Some (AddLiquidity {source; destination; xtz_deposit}) - else None - else pure None - -let genopt_step_remove_liquidity : - ?source:contract_id -> - ?destination:contract_id -> - contract_id env -> - SymbolicMachine.t -> - contract_id step optgen = - fun ?source ?destination env state -> - let*? source = genopt_account_with_liquidity ?choice:source env state in - let*? destination = genopt_account ?choice:destination env in - let lqt_available = SymbolicMachine.get_liquidity_balance source env state in - if 1 < lqt_available then - let+ lqt_burned = - int_range 1 (SymbolicMachine.get_liquidity_balance source env state) - in - Some (RemoveLiquidity {source; destination; lqt_burned}) - else return None - -let genopt_step : - ?source:contract_id -> - ?destination:contract_id -> - contract_id env -> - SymbolicMachine.t -> - contract_id step optgen = - fun ?source ?destination env state -> - genopt_oneof - [ - genopt_step_tzbtc_to_xtz env state ?source ?destination; - genopt_step_xtz_to_tzbtc env state ?source ?destination; - genopt_step_add_liquidity env state ?source ?destination; - genopt_step_remove_liquidity env state ?source ?destination; - ] - -let gen_steps : - ?source:contract_id -> - ?destination:contract_id -> - contract_id env -> - SymbolicMachine.t -> - int -> - contract_id step list QCheck2.Gen.t = - fun ?source ?destination env state size -> - let rec inner env state size random_state = - if size <= 0 then [] - else - let h = - QCheck2.Gen.generate1 - ~rand:random_state - (genopt_step ?source ?destination env state) - in - match h with - | None -> [] - | Some h -> - let state = SymbolicMachine.step h env state in - let rst = inner env state (size - 1) random_state in - h :: rst - in - QCheck2.Gen.make_primitive ~gen:(inner env state size) ~shrink:(fun l -> - shrink_list l) - -let gen_scenario : - tzbtc -> liquidity -> int -> (specs * contract_id step list) QCheck2.Gen.t = - fun total_tzbtc total_liquidity size -> - let* specs = gen_specs total_tzbtc total_liquidity in - let state, env = SymbolicMachine.build specs in - let+ scenario = gen_steps env state size in - (specs, scenario) - -let pp_scenario fmt (specs, steps) = - Format.( - fprintf - fmt - "@[{@ @[ @[specs@ = %a;@]@ @[steps@ = @[[ \ - %a]@]@]@]}@]" - pp_specs - specs - (pp_print_list - ~pp_sep:(fun fmt _ -> fprintf fmt "@ ; ") - (pp_step pp_contract_id)) - steps) - -let print_scenario = Format.asprintf "%a" pp_scenario - -let gen_adversary_scenario : - tzbtc -> - liquidity -> - int -> - (specs * contract_id * contract_id step list) QCheck2.Gen.t = - fun total_tzbtc total_liquidity size -> - let* specs = gen_specs total_tzbtc total_liquidity in - let state, env = SymbolicMachine.build ~subsidy:0L specs in - let* c = oneofl env.implicit_accounts in - let+ scenario = gen_steps ~source:c ~destination:c env state size in - (specs, c, scenario) - -let print_adversary_scenario (specs, _, steps) = - Format.asprintf "%a" pp_scenario (specs, steps) - -(* -------------------------------------------------------------------------- *) - -(* Note (1) - - We shrink a valid scenario by removing steps from its tails, - because a prefix of a valid scenario remains a valid - scenario. Removing a random element of a scenario could lead to an - invalid scenario. We have to use QCheck2.Gen.make_primitive to specify - the shrinking method of the generator, and avoid defaulting on the - shrinking implied by QCheck2.Gen.bind *) - -(* Note (2) - - If we are not being careful, it is possible to provoke an overflow - in the xtzPool and tzbtcPool. We try to avoid that as much as - possible by being very careful with the steps that are likely to - add xtz to the contract. *) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_generator.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_generator.mli deleted file mode 100644 index 02a0a12ebc93f8707cc1810b68b03d2f4ff96f12..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_generator.mli +++ /dev/null @@ -1,86 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** This module provides a set of abstractions to reason about the - so-called “liquidity baking” feature[1]. - - [1]: https://gitlab.com/tezos/tzip/-/blob/367628e1a576c3926bedc1d6107b2945607c2605/drafts/current/draft-liquidity_baking.md - - We remind that this feature is built upon three smart contracts: - (1) a CPMM contract initially based on Dexter 2, and (2) two - tokens contracts. - - Our purpose for Liquidity Baking is to easily express and test - invariants regarding the execution of these contracts. To that - end, we have introduced a set of dedicated types to describe - arbitrary contexts in terms of account balances (see - [Liquidity_baking_machine.specs]), along with [build] functions - that turn a description of a context into concrete states. - - In this module, we provide QCheck2 generators which allow to - construct arbitrary specifications for states, and so-called - scenarios ({i i.e.}, sequences of entrypoint calls). *) - -open Liquidity_baking_machine - -(** [gen_specs max_tzbtc max_liquidity] constructs arbitrary Liquidity - Baking [specs] for an initial state, where at most [max_tzbtc] and - [max_liquidity] are shared among an arbitrary number of implicit - accounts. *) -val gen_specs : tzbtc -> liquidity -> specs QCheck2.Gen.t - -(** [gen_scenario max_tzbtc max_liquidity size] constructs arbitrary - Liquidity Baking [specs] with a semantics similar to [gen_specs], along with sequences of {b valid} - scenarios ({i i.e.}, sequences of entrypoint calls) of length - [size]. By valid, we mean that running the scenario using a - Liquidity baking machine initialized with the [specs] should - succeed. *) -val gen_scenario : - tzbtc -> liquidity -> int -> (specs * contract_id step list) QCheck2.Gen.t - -(** [print_scenario scenario] produces a string representation of [scenario], - as produced by [gen_scenario]. *) -val print_scenario : specs * contract_id step list -> string - -(** [gen_adversary_scenario max_tzbtc max_liquidity size] constructs - arbitrary scenarios that can be used to challenge the “no global - gain” property of Liquidity Baking. - - The key idea of this property is the following: a given contract - cannot profit from Liquidity Baking if they are the only one to - interact with the CPMM (in the absence of subsidies). The scenario - generated by [gen_adversary_scenario] only consists in [step] - performed by one contract. This contract is identified by the - [contract_id] returned by this function. *) -val gen_adversary_scenario : - tzbtc -> - liquidity -> - int -> - (specs * contract_id * contract_id step list) QCheck2.Gen.t - -(** [print_adversary_scenario scenario] produces a string representation of [scenario], - as produced by [gen_adversary_scenario]. *) -val print_adversary_scenario : - specs * contract_id * contract_id step list -> string diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_machine.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_machine.ml deleted file mode 100644 index e18fec45dd602a749c4e310f61f5265582be120d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_machine.ml +++ /dev/null @@ -1,1399 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** To implement the interface of this module, as described and - documented in the related MLI file, we rely on the OCaml module - system. More precisely, most of the implementation of the two - public machines ([ValidationMachine] and [SymbolicMachine]) is - derived by means of functors. - - The machines provide two key functions which can be used in a - test suite: - - - [M.build specs] which allows to construct an initial state of - a machine [M] that satisfies the properties described by - [specs] (along with the so-called “environment” of the - machine) - - [M.step s env state] (resp. [M.run]) which allows to execute a - so-called scenario [step] (resp. a sequence of [step]s, {i - i.e.}, a complete scenario) by the machine [M] from the state - [state]. - - The module is organized as follows: - - 1. We introduce the necessary abstractions we later use to - specify the properties the initial state of a given machine - needs to satisfy (most notably the [specs] type). - 2. Then, we introduce the [step] type, which describes the - various actions we can make a machine perform as part of a - more complete scenario. - 3. We introduce the [MACHINE] module type which lists the - necessary types and functions we need to derive a machine - capable of executing scenarios, and the [Machine.Make] - functor that we can use to derive such a machine - automatically. - 4. We introduce the [MACHINE_WITH_INIT] module type which is a - superset of [MACHINE], extended with an [init] function - (analogous to {! Context.init_n}) to create an initial, mostly - blank state, and the [MachineBuilder.Make] functor that we - can use to derive a machine with a [build] function. - 5. We construct the [ConcreteMachine], that allows to - asynchronously execute scenarios against the Tezos - blockchain. - 6. We implement the [AbstractMachine.Make] functor, which we - can use to construct machines that can simulate the - execution scenarios completely off-chains, by reimplementing - the LB features logic in pure OCaml. - 7. We use [AbstractMachine.Make] to create the [SymbolicMachine]. - 8. We use the [AbstractMachine.Make] functor in conjuction with - the [ConcreteMachine] to introduce the [ValidationMachine]. - - _ - / \ A warning for developers willing to modify this module: - / | \ dealing with the subsidy of the Liquidity Baking (LB) - / · \ feature is probably the main source of complexity and - /_______\ fragility of this module. - - At several places (marked with a /!\ note), we need to predict the - xtz pool of the CPMM contract, in order to compute the amount of - tzBTC token it will provide or request. To make this prediction, - we need to determine how many blocks have been/will be baked. This - means that each time we modify the code of the machine functors, - we will probably have to modify the code marked with /!\ too. - - To reduce the potential to get things wrong, we have introduced - constants to prevent the use of “magic numbers” (numbers whose - meaning cannot be guessed only by looking at the formula). The - value of these constants is not statically checked, so pay extra - attention before modifying them. - - Ideally, we could probably compute these magic numbers using a - dedicated machine, whose purpose would be to count the number of - call to the [bake] function. For the sake of simplicity, we do not - do it currently. *) - -(** The number of blocks baked in order to execute the {! - AddLiquidity} step. *) -let blocks_per_add_liquidity_step = 2L - -(** The number of blocks baked by the [init] function. Since - Tenderbake, we need to compensate for deposits, so the number is - no longer constant. It is linear wrt. the number of accounts. *) -let blocks_during_init len = Int64.add 3L len - -(** The number of blocks baked by the [mint_tzbtc] functions *) -let blocks_per_mint_tzbtc = 1L - -(** A timestamp “far in the future” which should not be exceeded when - running tests. *) -let far_future = Script_timestamp.of_zint (Z.of_int 42_000) -(* Hypothesis: the tests start at timestamp 0, and 42000 is - “big enough.” *) - -(* --------------------------------------------------------------------------- *) - -(** {1 Miscellaneous Helpers} *) -module List_helpers = struct - let rec zip l r = - match (l, r) with - | xl :: rstl, xr :: rstr -> (xl, xr) :: zip rstl rstr - | _ -> [] - - let nth_exn l n = - match List.nth l n with - | Some x -> x - | _ -> raise (Invalid_argument "nth_exn") - - let assoc_exn c l = - match List.assoc ~equal:( = ) c l with - | Some x -> x - | _ -> raise (Invalid_argument "assoc_exn") -end - -(* --------------------------------------------------------------------------- *) - -(** {1 Characterizing Initial Machines States} *) - -(** In order to run so-called scenarios against our machines, we first - need to characterize their initial state. *) - -type xtz = int64 - -type tzbtc = int - -type liquidity = int - -type balances = {xtz : xtz; tzbtc : tzbtc; liquidity : liquidity} - -let pp_balances fmt b = - Format.fprintf - fmt - "@[{xtz = %a; tzbtc = %d; liquidity = %d}@]" - Tez.pp - (Tez.of_mutez_exn b.xtz) - b.tzbtc - b.liquidity - -let xtz {xtz; _} = xtz - -type specs = { - cpmm_min_xtz_balance : xtz; - cpmm_min_tzbtc_balance : tzbtc; - accounts_balances : balances list; -} - -let pp_specs fmt specs = - Format.( - fprintf - fmt - "@[{@ @[cpmm = {min_xtz = %a; min_tzbtc = %d}@ @[accounts = \ - [@ %a@ ]@]@]@ }@]" - Tez.pp - (Tez.of_mutez_exn specs.cpmm_min_xtz_balance) - specs.cpmm_min_tzbtc_balance - (pp_print_list ~pp_sep:pp_print_space pp_balances) - specs.accounts_balances) - -(* --------------------------------------------------------------------------- *) - -(** {1 Scenario [step] }*) - -type 'a step = - | SellTzBTC of {source : 'a; destination : 'a; tzbtc_deposit : tzbtc} - | BuyTzBTC of {source : 'a; destination : 'a; xtz_deposit : xtz} - | AddLiquidity of {source : 'a; destination : 'a; xtz_deposit : xtz} - | RemoveLiquidity of {source : 'a; destination : 'a; lqt_burned : liquidity} - -let pp_step pp_contract fmt = function - | SellTzBTC p -> - Format.( - fprintf - fmt - "@[SellTzBTC(%a, %dtz₿, %a)@]" - pp_contract - p.source - p.tzbtc_deposit - pp_contract - p.destination) - | BuyTzBTC p -> - Format.( - fprintf - fmt - "@[BuyTzBTC(%a, %aꜩ, %a)@]" - pp_contract - p.source - Tez.pp - (Tez.of_mutez_exn p.xtz_deposit) - pp_contract - p.destination) - | AddLiquidity p -> - Format.( - fprintf - fmt - "@[AddLiquidity(%a, %aꜩ, %a)@]" - pp_contract - p.source - Tez.pp - (Tez.of_mutez_exn p.xtz_deposit) - pp_contract - p.destination) - | RemoveLiquidity p -> - Format.( - fprintf - fmt - "@[RemoveLiquidity(%a, %d lqt, %a)@]" - pp_contract - p.source - p.lqt_burned - pp_contract - p.destination) - -type contract_id = - | Cpmm - | Holder - | TzBTC - | TzBTCAdmin - | Liquidity - | LiquidityAdmin - | ImplicitAccount of int - -let contract_id_to_string = function - | Holder -> "holder" - | Cpmm -> "cpmm" - | TzBTC -> "tzbtc" - | TzBTCAdmin -> "tzbtc_admin" - | Liquidity -> "lqt" - | LiquidityAdmin -> "lqt_admin" - | ImplicitAccount i -> Format.sprintf "#%d" i - -let pp_contract_id fmt c = Format.(fprintf fmt "[%s]" (contract_id_to_string c)) - -(* --------------------------------------------------------------------------- *) - -(** {1 Machines} *) - -(** {2 Machine Environment} *) - -type 'a env = { - cpmm_contract : 'a; - tzbtc_contract : 'a; - tzbtc_admin : 'a; - liquidity_contract : 'a; - liquidity_admin : 'a; - implicit_accounts : 'a list; - holder : 'a; - subsidy : xtz; -} - -let refine_contract env = function - | Cpmm -> env.cpmm_contract - | TzBTC -> env.tzbtc_contract - | TzBTCAdmin -> env.tzbtc_admin - | Liquidity -> env.liquidity_contract - | LiquidityAdmin -> env.liquidity_admin - | Holder -> env.holder - | ImplicitAccount i -> List_helpers.nth_exn env.implicit_accounts i - -let refine_step env step = - match step with - | SellTzBTC p -> - SellTzBTC - { - p with - source = refine_contract env p.source; - destination = refine_contract env p.destination; - } - | BuyTzBTC p -> - BuyTzBTC - { - p with - source = refine_contract env p.source; - destination = refine_contract env p.destination; - } - | AddLiquidity p -> - AddLiquidity - { - p with - source = refine_contract env p.source; - destination = refine_contract env p.destination; - } - | RemoveLiquidity p -> - RemoveLiquidity - { - p with - source = refine_contract env p.source; - destination = refine_contract env p.destination; - } - -(** {2 Machine Module Type} *) - -module type MACHINE = sig - type 'a m - - type contract - - type t - - type operation - - val pp_contract : Format.formatter -> contract -> unit - - val ( let* ) : 'a m -> ('a -> 'b m) -> 'b m - - val fold_m : ('a -> 'b -> 'a m) -> 'a -> 'b list -> 'a m - - val pure : 'a -> 'a m - - val get_balances : contract -> contract env -> t -> balances m - - val get_xtz_balance : contract -> t -> xtz m - - val get_tzbtc_balance : contract -> contract env -> t -> tzbtc m - - val get_liquidity_balance : contract -> contract env -> t -> liquidity m - - val get_cpmm_total_liquidity : contract env -> t -> liquidity m - - val bake : - invariant:(contract env -> t -> bool m) -> - baker:contract -> - operation list -> - contract env -> - t -> - t m - - val transaction : src:contract -> contract -> xtz -> t -> operation m - - val token_to_xtz : - src:contract -> contract -> tzbtc -> contract env -> t -> operation m - - val xtz_to_token : - src:contract -> contract -> xtz -> contract env -> t -> operation m - - (* [mint_or_burn_tzbtc contract amount env state] will construct an - operation to credit or remove [amount] tzbtc tokens to [contract] *) - val mint_or_burn_tzbtc : - contract -> liquidity -> contract env -> t -> operation m - - (** [approve_tzbtc contract amount env state] will construct an - operation to authorize the CPMM contract to spend [amount] tzbtc - on behalf of [contract] *) - val approve_tzbtc : contract -> tzbtc -> contract env -> t -> operation m - - val add_liquidity : - src:contract -> contract -> xtz -> tzbtc -> contract env -> t -> operation m - - val remove_liquidity : - src:contract -> contract -> liquidity -> contract env -> t -> operation m - - val reveal : Account.t -> t -> operation m -end - -(** {2 Tezos Constants} *) - -let default_subsidy = - let c = Default_parameters.constants_test in - match Delegate.Rewards.For_RPC.liquidity_baking_subsidy_from_constants c with - | Ok x -> Tez.to_mutez x - | Error _ -> assert false - -let security_deposit = 640_000_000L - -(* When calling [Context.init_n] with a list of initial balances, the - sum of these balances should be equal to this constant. *) -let total_xtz = 32_000_000_000_000L - -let tzbtc_admin_account : Account.t = - { - pkh = - Signature.Public_key_hash.of_b58check_exn - "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; - pk = - Signature.Public_key.of_b58check_exn - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"; - sk = - Signature.Secret_key.of_b58check_exn - "edsk3gUfUPyBSfrS9CCgmCiQsTCHGkviBDusMxDJstFtojtc1zcpsh"; - } - -let cpmm_initial_balance = {xtz = 100L; tzbtc = 1; liquidity = 0} - -let cpmm_initial_liquidity_supply = 100 - -(** {2 Machine Functor} *) - -module Machine = struct - module Make (S : MACHINE) = struct - open S - - let mint_tzbtc destination ~invariant amount env state = - let* op = mint_or_burn_tzbtc destination amount env state in - bake ~invariant ~baker:env.holder [op] env state - - let add_liquidity ~invariant src dst xtz_deposit tzbtc_deposit env state = - let* lqt_op = approve_tzbtc src tzbtc_deposit env state in - let* state = bake ~invariant ~baker:env.holder [lqt_op] env state in - let* cpmm_op = - add_liquidity ~src dst xtz_deposit tzbtc_deposit env state - in - bake ~invariant ~baker:env.holder [cpmm_op] env state - - let remove_liquidity ~invariant src dst lqt_burned env state = - let* cpmm_op = remove_liquidity ~src dst lqt_burned env state in - bake ~invariant ~baker:env.holder [cpmm_op] env state - - let sell_tzbtc ~invariant src dst tzbtc_deposit env state = - let* tzbtc_op = approve_tzbtc src tzbtc_deposit env state in - let* state = bake ~invariant ~baker:env.holder [tzbtc_op] env state in - let* cpmm_op = token_to_xtz ~src dst tzbtc_deposit env state in - bake ~invariant ~baker:env.holder [cpmm_op] env state - - let buy_tzbtc ~invariant src dst xtz_deposit env state = - let* cpmm_op = xtz_to_token ~src dst xtz_deposit env state in - bake ~invariant ~baker:env.holder [cpmm_op] env state - - let check_state_satisfies_specs (env : S.contract env) (state : S.t) - (specs : specs) = - let implicit_accounts_targets = - List_helpers.zip env.implicit_accounts specs.accounts_balances - in - let* () = - fold_m - (fun _ acc -> - let expected = - List_helpers.assoc_exn acc implicit_accounts_targets - in - let* amount = get_balances acc env state in - assert (expected = amount) ; - pure ()) - () - env.implicit_accounts - in - let* cpmm_tzbtc_balance = get_tzbtc_balance env.cpmm_contract env state in - assert (specs.cpmm_min_tzbtc_balance <= cpmm_tzbtc_balance) ; - let* current_cpmm_xtz = get_xtz_balance env.cpmm_contract state in - assert ( - Int64.(to_int specs.cpmm_min_xtz_balance <= to_int @@ current_cpmm_xtz)) ; - pure () - - (** [predict_required_tzbtc_deposit xtz_deposit env state] - predicts the tzbtc deposit which will be required by the CPMM - contract for a deposit of [xtz_deposit]. - - This function is used by the machines to make the according - call to the [approve] entrypoint of the TzBTC contract. *) - let predict_required_tzbtc_deposit xtz_deposit env state = - let* xtzPool = get_xtz_balance env.cpmm_contract state in - (* /!\ We need to take into accounts the number of blocks baked - to actually call the [add_liquidity] entry point of the - CPMM. *) - let xtzPool = - Tez.of_mutez_exn - Int64.(add xtzPool (mul blocks_per_add_liquidity_step env.subsidy)) - in - let* tokenPool = get_tzbtc_balance env.cpmm_contract env state in - let tokenPool = Z.of_int tokenPool in - let* lqtTotal = get_cpmm_total_liquidity env state in - let lqtTotal = Z.of_int lqtTotal in - let amount = Tez.of_mutez_exn xtz_deposit in - let _, tokens_deposited = - Cpmm_logic.Simulate_raw.addLiquidity - ~tokenPool - ~xtzPool - ~lqtTotal - ~amount - in - pure (Z.to_int tokens_deposited) - - let step ?(invariant = fun _ _ -> pure true) s env state = - match s with - | SellTzBTC {source; destination; tzbtc_deposit} -> - sell_tzbtc ~invariant source destination tzbtc_deposit env state - | BuyTzBTC {source; destination; xtz_deposit} -> - buy_tzbtc ~invariant source destination xtz_deposit env state - | AddLiquidity {source; destination; xtz_deposit} -> - let* tzbtc_deposit = - predict_required_tzbtc_deposit xtz_deposit env state - in - add_liquidity - ~invariant - source - destination - xtz_deposit - tzbtc_deposit - env - state - | RemoveLiquidity {source; destination; lqt_burned} -> - remove_liquidity ~invariant source destination lqt_burned env state - - let run ?(invariant = fun _ _ -> pure true) scenario env state = - fold_m - (fun state s -> step ~invariant (refine_step env s) env state) - state - scenario - end -end - -let initial_xtz_repartition accounts_balances = - let distributed_xtz = List.fold_left Int64.add 0L accounts_balances in - let bootstrap1_xtz = Int64.sub total_xtz distributed_xtz in - let bootstrap_balances = bootstrap1_xtz :: accounts_balances in - let n = List.length bootstrap_balances in - (n, bootstrap_balances) - -(* --------------------------------------------------------------------------- *) - -(** {1 Machines with a [build] Function} *) - -module type MACHINE_WITH_INIT = sig - include MACHINE - - (** [init balances] will create an “initial” state wherein the - [balances] have been distributed to [n] implicit contracts ([n] - being the size of the [balances] list). This function also - creates a [holder] implicit account which has the rest of the - xtz liquidity (the test framework forces the sum of xtz balances - to be equal to [total_xtz]). [init] also accepts an optional - argument [subsidy] to modify the default value of the subsidy - minted by the protocol in favor of the CPMM. *) - val init : - invariant:(contract env -> t -> bool m) -> - ?subsidy:xtz -> - xtz list -> - (t * contract env) m -end - -(** [initial_xtz_pool] balances predicts the value of the CPMM’s xtz - pool just before we start using the [add_liquidity] entrypoint to - provide to each implicit accounts the necessary liquidity - tokens. *) -let initial_xtz_pool balances subsidy = - (* /!\ In addition to the initial CPMM balances, we need to take - into account the subsidies of each block baked before this - point, which currently consist in: - - - One call to the [init] function - - One call to the [mint_tzbtc] function per implicit - accounts - - If the [build] function changes, this functions needs to be - updated accordingly. *) - let len = Int64.of_int (List.length balances) in - Int64.( - add - cpmm_initial_balance.xtz - (mul - (add (blocks_during_init len) (mul blocks_per_mint_tzbtc len)) - subsidy)) - -(** [predict_initial_balances xtz_pool tzbtc_pool lqt_total balances] - evaluates the extra xtz and tzbtc tokens to add to each balance of - the list [balances] so that the related implicit accounts can call - the [add_liquidity] entrypoint in order to have the required - liquidity token. - - For instance, for a balance [b] such that [b.liquidity = 10], we - compute [xtz_etra] and [tzbtc_extra] so that the implicit account - will be able to buy [10] liquidity tokens, and replace [b] with - [{b with xtz = b.xtz + xtz_extra; tzbtc = b.tzbtc + tzbtc_extra}] - in the returned list. - - The implementation of this function is made more complex than it - should due to the mechanism of subsidy of LB. In particular, it is - depends on the number of block baked to buy liquidities. *) -let predict_initial_balances balances subsidy = - let open Z in - let subsidy_z = of_int64 subsidy in - (* Due to the roundness of [Z.( / )], it is not straightforward to - find the inverse of the equation used to compute the number of - liquidity tokens bought with the [add_liquidity] entrypoint. To - find the suitable number of xtz to propose in order to buy - [liquidity_target], we naively search for the correct - solution. We compute a [xtz_candidate] by ignoring the roundness - of [Z.( / )], then increment it until it works. *) - let find_xtz_extra xtz_pool lqt_total liquidity_target = - let rec aux xtz_candidate = - let liquidity_z = xtz_candidate * lqt_total / xtz_pool in - if liquidity_z = liquidity_target then xtz_candidate - else aux (xtz_candidate + Z.one) - in - let xtz_extra_candidate = liquidity_target * xtz_pool / lqt_total in - aux xtz_extra_candidate - in - let rec predict_initial_balances xtz_pool tzbtc_pool lqt_total = function - | {xtz; tzbtc; liquidity} :: rst -> - (* balance inputs *) - (* /!\ We compute two blocks per [add_liquidity] entrypoint, - hence the two subsidies *) - let xtz_pool = - xtz_pool + (Z.of_int64 blocks_per_add_liquidity_step * subsidy_z) - in - let xtz_z = of_int64 xtz in - let tzbtc_z = of_int tzbtc in - let liquidity_z = of_int liquidity in - (* compute extra for being able to buy liquidity tokens *) - let xtz_extra = find_xtz_extra xtz_pool lqt_total liquidity_z in - let tzbtc_extra = cdiv (xtz_extra * tzbtc_pool) xtz_pool in - (* compute new balances *) - let xtz = to_int64 (xtz_z + xtz_extra) in - let tzbtc = to_int (tzbtc_z + tzbtc_extra) in - let liquidity = to_int liquidity_z in - (* new pools *) - let xtz_pool' = xtz_pool + xtz_extra in - let tzbtc_pool' = tzbtc_pool + tzbtc_extra in - let lqt_total' = lqt_total + liquidity_z in - (* recursion time *) - {xtz; tzbtc; liquidity} - :: predict_initial_balances xtz_pool' tzbtc_pool' lqt_total' rst - | [] -> [] - in - predict_initial_balances - (of_int64 @@ initial_xtz_pool balances subsidy) - (of_int cpmm_initial_balance.tzbtc) - (of_int cpmm_initial_liquidity_supply) - balances - -module MachineBuilder = struct - module Make (S : MACHINE_WITH_INIT) = struct - open S - include Machine.Make (S) - - let build : - ?invariant:(S.contract env -> S.t -> bool m) -> - ?subsidy:xtz -> - specs -> - (S.t * S.contract env) m = - fun ?(invariant = fun _ _ -> pure true) - ?(subsidy = default_subsidy) - ({cpmm_min_xtz_balance; accounts_balances; cpmm_min_tzbtc_balance} as - specs) -> - let accounts_balances_with_extra = - predict_initial_balances accounts_balances subsidy - in - let xtz_balances_with_extra = List.map xtz accounts_balances_with_extra in - (* 1. Create an initial context *) - let* state, env = init ~invariant ~subsidy xtz_balances_with_extra in - let* cond = invariant env state in - assert cond ; - (* 2. Provide the initial tzBTC liquidities to implicit accounts *) - let accounts = - List_helpers.zip - env.implicit_accounts - (List_helpers.zip accounts_balances accounts_balances_with_extra) - in - let* state = - fold_m - (fun state (address, (_, balances)) -> - mint_tzbtc ~invariant address balances.tzbtc env state) - state - accounts - in - (* 3. Make implicit accounts buy liquidities *) - let* state = - fold_m - (fun state (address, (target_balances, balances_with_extra)) -> - let xtz = Int64.sub balances_with_extra.xtz target_balances.xtz in - let tzbtc = balances_with_extra.tzbtc - target_balances.tzbtc in - add_liquidity ~invariant address address xtz tzbtc env state) - state - accounts - in - (* 4. Provide any missing tzbtc tokens to [cpmm_contract], if necessary *) - let* current_cpmm_tzbtc_balance = - get_tzbtc_balance env.cpmm_contract env state - in - let tzbtc_missing = cpmm_min_tzbtc_balance - current_cpmm_tzbtc_balance in - let* state = - if 0 < tzbtc_missing then - (* 4.1. Provide the tokens to the [bootstrap1] account, as a - temporary holder for CPMM missing tzBTC balance *) - let* state = - mint_tzbtc ~invariant env.holder tzbtc_missing env state - in - (* 4.1. Make [bootstrap1] buy some xtz against the appropriate - amount of tzbtc *) - sell_tzbtc ~invariant env.holder env.holder tzbtc_missing env state - else pure state - in - (* 5. Provide any missing xtz tokens to [cpmm_contract], if necessary *) - let* current_cpmm_xtz_balance = get_xtz_balance env.cpmm_contract state in - let xtz_missing = - Int64.sub cpmm_min_xtz_balance current_cpmm_xtz_balance - in - let* state = - if 0L < xtz_missing then - let* op = - transaction ~src:env.holder env.cpmm_contract xtz_missing state - in - bake ~invariant ~baker:env.holder [op] env state - else pure state - in - let* () = check_state_satisfies_specs env state specs in - pure (state, env) - end -end - -(* --------------------------------------------------------------------------- *) - -module ConcreteBaseMachine : - MACHINE_WITH_INIT - with type 'a m = 'a tzresult Lwt.t - and type contract = Contract.t - and type t = Block.t = struct - type 'a m = 'a tzresult Lwt.t - - type contract = Contract.t - - type operation = packed_operation - - type t = Block.t - - let pp_contract = Contract.pp - - let ( let* ) = Lwt_result_syntax.( let* ) - - let fold_m = Environment.List.fold_left_es - - let pure = Lwt_result_syntax.return - - let get_xtz_balance contract blk = - let* x = Context.Contract.balance (B blk) contract in - pure @@ Tez.to_mutez x - - let get_tzbtc_balance contract env blk = - let destination = Destination.Contract contract in - let* mamount = - Lqt_fa12_repr.Storage.getBalance_opt - (B blk) - ~contract:env.tzbtc_contract - {destination; entrypoint = Entrypoint.default} - in - pure (Option.value (Option.map Z.to_int mamount) ~default:0) - - let get_liquidity_balance contract env blk = - let destination = Destination.Contract contract in - let* mamount = - Lqt_fa12_repr.Storage.getBalance_opt - (B blk) - ~contract:env.liquidity_contract - {destination; entrypoint = Entrypoint.default} - in - pure (Option.value (Option.map Z.to_int mamount) ~default:0) - - let get_cpmm_total_liquidity env blk = - let* cpmm_storage = - Cpmm_repr.Storage.get (B blk) ~contract:env.cpmm_contract - in - pure @@ Z.to_int cpmm_storage.lqtTotal - - let get_balances contract env blk = - let* xtz = get_xtz_balance contract blk in - let* tzbtc = get_tzbtc_balance contract env blk in - let* liquidity = get_liquidity_balance contract env blk in - pure {xtz; tzbtc; liquidity} - - let bake ~invariant ~baker ops env blk = - let open Lwt_result_syntax in - let* incr = - Incremental.begin_construction - ~policy:(Block.By_account (Context.Contract.pkh baker)) - blk - in - let* incr = fold_m Incremental.add_operation incr ops in - let* blk = Incremental.finalize_block incr in - let* cond = invariant env blk in - assert cond ; - return blk - - let reveal (account : Account.t) blk = Op.revelation (B blk) account.pk - - let transaction ~src dst amount blk = - Op.transaction (B blk) src dst (Tez.of_mutez_exn amount) - - let token_to_xtz ~src dst tzbtc_deposit env blk = - Cpmm_repr.transaction - (B blk) - ~src - ~contract:env.cpmm_contract - (Cpmm_repr.Parameter.TokenToXtz - { - to_ = dst; - minXtzBought = Tez.zero; - tokensSold = Z.of_int tzbtc_deposit; - deadline = far_future; - }) - - let xtz_to_token ~src dst amount env blk = - Cpmm_repr.transaction - (B blk) - ~src - ~contract:env.cpmm_contract - (Cpmm_repr.Parameter.XtzToToken - {to_ = dst; minTokensBought = Z.zero; deadline = far_future}) - ~amount:(Tez.of_mutez_exn amount) - - let approve_tzbtc src tzbtc env blk = - let maxTokensDeposited = Z.of_int tzbtc in - Lqt_fa12_repr.transaction - (B blk) - ~src - ~contract:env.tzbtc_contract - (Lqt_fa12_repr.Parameter.Approve - {spender = env.cpmm_contract; value = maxTokensDeposited}) - - let mint_or_burn_tzbtc target amount env blk = - let quantity = Z.of_int amount in - let ctxt = Context.B blk in - Lqt_fa12_repr.transaction - ctxt - ~src:env.tzbtc_admin - ~contract:env.tzbtc_contract - (Lqt_fa12_repr.Parameter.mintOrBurn {target; quantity}) - - let add_liquidity ~src dst xtz_deposit tzbtc_deposit env blk = - let amount = Tez.of_mutez_exn xtz_deposit in - let maxTokensDeposited = Z.of_int tzbtc_deposit in - Cpmm_repr.transaction - (B blk) - ~src - ~contract:env.cpmm_contract - ~amount - (Cpmm_repr.Parameter.AddLiquidity - { - owner = dst; - maxTokensDeposited; - minLqtMinted = Z.zero; - deadline = far_future; - }) - - let remove_liquidity ~src dst lqt_burned env blk = - let lqtBurned = Z.of_int lqt_burned in - Cpmm_repr.transaction - (B blk) - ~src - ~contract:env.cpmm_contract - (Cpmm_repr.Parameter.RemoveLiquidity - { - to_ = dst; - lqtBurned; - minXtzWithdrawn = Tez.zero; - minTokensWithdrawn = Z.zero; - deadline = far_future; - }) - - let reveal_tzbtc_admin ~invariant env state = - Account.add_account tzbtc_admin_account ; - let* op1 = transaction ~src:env.holder env.tzbtc_admin 1L state in - let* state = bake ~invariant ~baker:env.holder [op1] env state in - let* op2 = reveal tzbtc_admin_account state in - bake ~invariant ~baker:env.holder [op2] env state - - let init ~invariant ?subsidy:_ accounts_balances = - let n, bootstrap_balances = initial_xtz_repartition accounts_balances in - let* result = - Context.init_n - n - ~consensus_threshold:0 - ~bootstrap_balances - ~cost_per_byte:Tez.zero - ~origination_size:0 - ~blocks_per_cycle:10_000l - ~cycles_per_voting_period:1l - () - in - match result with - | blk, holder :: accounts -> - let ctxt = Context.B blk in - let* cpmm_contract = Context.get_liquidity_baking_cpmm_address ctxt in - let* storage = Context.Contract.storage ctxt cpmm_contract in - let storage = Cpmm_repr.Storage.of_expr_exn (Micheline.root storage) in - let tzbtc_contract = storage.tokenAddress in - let liquidity_contract = storage.lqtAddress in - let* storage = Context.Contract.storage ctxt tzbtc_contract in - let storage = - Lqt_fa12_repr.Storage.of_expr_exn (Micheline.root storage) - in - let tzbtc_admin = storage.admin in - let* storage = Context.Contract.storage ctxt liquidity_contract in - let storage = - Lqt_fa12_repr.Storage.of_expr_exn (Micheline.root storage) - in - let liquidity_admin = storage.admin in - let* subsidy = Context.get_liquidity_baking_subsidy (B blk) in - let env = - { - cpmm_contract = Contract.Originated cpmm_contract; - tzbtc_contract = Contract.Originated tzbtc_contract; - tzbtc_admin; - liquidity_contract = Contract.Originated liquidity_contract; - liquidity_admin; - implicit_accounts = accounts; - holder; - subsidy = Tez.to_mutez subsidy; - } - in - let* blk = - reveal_tzbtc_admin ~invariant:(fun _ _ -> pure true) env blk - in - let* op = - mint_or_burn_tzbtc - env.cpmm_contract - cpmm_initial_balance.tzbtc - env - blk - in - let* blk = - bake ~invariant:(fun _ _ -> pure true) ~baker:env.holder [op] env blk - in - (* Since Tenderbake, we need to compensate for potential deposits - related to the consensus. *) - let* blk = - List.fold_left_i_es - (fun idx blk contract -> - match List.nth accounts_balances idx with - | Some target -> - let* balance = get_xtz_balance contract blk in - let delta = Int64.(sub target balance) in - if Compare.Int64.(0L = delta) then - (* We need to be able to determine the number of - blocks baked in the init function (to predict the - CPMM balance). So even when there is no delta to - compensate with, we bake an empty block. *) - bake - ~invariant:(fun _ _ -> pure true) - ~baker:env.holder - [] - env - blk - else if Compare.Int64.(0L < delta) then - let* op = transaction ~src:env.holder contract delta blk in - bake - ~invariant:(fun _ _ -> pure true) - ~baker:env.holder - [op] - env - blk - else assert false - | None -> assert false) - blk - accounts - in - (* We did not check the invariant before, because the CPMM - contract was in an inconsistent state. More precisely, it - was supposed to hold tzbtc tokens, while in practice it was - not. This was solved by the last call to [bake]. *) - let* cond = invariant env blk in - assert cond ; - pure (blk, env) - | _ -> assert false -end - -module ConcreteMachine = struct - include ConcreteBaseMachine - include Machine.Make (ConcreteBaseMachine) - include MachineBuilder.Make (ConcreteBaseMachine) -end - -(* --------------------------------------------------------------------------- *) - -(** {1 Abstract Machines} *) - -type 'a state = { - cpmm_total_liquidity : liquidity; - accounts_balances : ('a * balances) list; -} - -let refine_state env state = - { - cpmm_total_liquidity = state.cpmm_total_liquidity; - accounts_balances = - List.map - (fun (c, b) -> (refine_contract env c, b)) - state.accounts_balances; - } - -let update_balances account f state = - match List.assoc ~equal:( = ) account state.accounts_balances with - | Some b -> - { - state with - accounts_balances = - (account, f b) - :: List.remove_assoc ~equal:( = ) account state.accounts_balances; - } - | _ -> assert false - -let update_xtz_balance account f = - update_balances account (fun b -> {b with xtz = f b.xtz}) - -let update_tzbtc_balance account f = - update_balances account (fun b -> {b with tzbtc = f b.tzbtc}) - -let update_liquidity_balance account f = - update_balances account (fun b -> {b with liquidity = f b.liquidity}) - -let transfer_xtz_balance src dest d st = - update_xtz_balance src (fun b -> Int64.sub b d) st - |> update_xtz_balance dest (fun b -> Int64.add b d) - -let transfer_tzbtc_balance src dest d st = - update_tzbtc_balance src (fun b -> b - d) st - |> update_tzbtc_balance dest (fun b -> d + b) - -module AbstractMachine = struct - module type C = sig - type t - - val pp : Format.formatter -> t -> unit - end - - module Make (C : C) : - MACHINE with type 'a m = 'a and type contract = C.t and type t = C.t state = - struct - type 'a m = 'a - - type contract = C.t - - type t = C.t state - - type operation = t -> t - - let pp_contract = C.pp - - let ( let* ) x f = f x - - let pure = Fun.id - - let fold_m = List.fold_left - - let get_balances account state = - match List.assoc ~equal:( = ) account state.accounts_balances with - | Some x -> x - | _ -> assert false - - let get_xtz_balance account state = (get_balances account state).xtz - - let get_tzbtc_balance account _env state = - (get_balances account state).tzbtc - - let get_liquidity_balance account _env state = - (get_balances account state).liquidity - - let get_balances account _env state = get_balances account state - - let get_cpmm_total_liquidity _env state = state.cpmm_total_liquidity - - let reveal _pk _state state = state - - let transaction ~src dst amount _ state = - transfer_xtz_balance src dst amount state - - let xtz_bought tzbtc env state = - let xtzPool = - Tez.of_mutez_exn @@ get_xtz_balance env.cpmm_contract state - in - let tokenPool = - Z.of_int @@ get_tzbtc_balance env.cpmm_contract env state - in - let tokensSold = Z.of_int tzbtc in - let xtz_bought, xtz_net_bought = - Cpmm_logic.Simulate_raw.tokenToXtz ~xtzPool ~tokenPool ~tokensSold - in - (Z.to_int64 xtz_net_bought, Tez.to_mutez xtz_bought) - - let token_to_xtz ~src dst amount env _ state = - let xtz_bought, xtz_net_bought = xtz_bought amount env state in - state - |> transfer_tzbtc_balance src env.cpmm_contract amount - |> update_xtz_balance env.cpmm_contract (fun b -> Int64.sub b xtz_bought) - |> update_xtz_balance dst (Int64.add xtz_net_bought) - - let tzbtc_bought env state amount = - let xtzPool = - Tez.of_mutez_exn @@ get_xtz_balance env.cpmm_contract state - in - let tokenPool = - Z.of_int @@ get_tzbtc_balance env.cpmm_contract env state - in - let amount = Tez.of_mutez_exn amount in - let tzbtc_bought, xtz_earnt = - Cpmm_logic.Simulate_raw.xtzToToken ~xtzPool ~tokenPool ~amount - in - (Z.to_int tzbtc_bought, Z.to_int64 xtz_earnt) - - let xtz_to_token ~src dst amount env _ state = - let tzbtc_bought, xtz_earnt = tzbtc_bought env state amount in - update_xtz_balance src (fun b -> Int64.sub b amount) state - |> update_xtz_balance env.cpmm_contract (Int64.add xtz_earnt) - |> transfer_tzbtc_balance env.cpmm_contract dst tzbtc_bought - - let mint_or_burn_tzbtc target amount _ _ = - update_tzbtc_balance target (( + ) amount) - - let approve_tzbtc _contract _amount _env _state = Fun.id - - let add_liquidity ~src dst xtz_deposit _tzbtc_deposit env _ state = - let xtzPool = - Tez.of_mutez_exn (get_xtz_balance env.cpmm_contract state) - in - let tokenPool = - Z.of_int (get_tzbtc_balance env.cpmm_contract env state) - in - let lqtTotal = Z.of_int state.cpmm_total_liquidity in - let amount = Tez.of_mutez_exn xtz_deposit in - let lqt_minted, tokens_deposited = - Cpmm_logic.Simulate_raw.addLiquidity - ~tokenPool - ~xtzPool - ~lqtTotal - ~amount - in - let lqt_minted = Z.to_int lqt_minted in - let tokens_deposited = Z.to_int tokens_deposited in - let state = - transfer_xtz_balance src env.cpmm_contract xtz_deposit state - |> transfer_tzbtc_balance src env.cpmm_contract tokens_deposited - |> update_liquidity_balance dst (( + ) lqt_minted) - in - { - state with - cpmm_total_liquidity = state.cpmm_total_liquidity + lqt_minted; - } - - let remove_liquidity ~src dst lqt_burned env _ state = - let xtzPool = - Tez.of_mutez_exn (get_xtz_balance env.cpmm_contract state) - in - let tokenPool = - Z.of_int (get_tzbtc_balance env.cpmm_contract env state) - in - let lqtTotal = Z.of_int state.cpmm_total_liquidity in - let lqtBurned = Z.of_int lqt_burned in - let xtz_withdrawn, tokens_withdrawn = - Cpmm_logic.Simulate_raw.removeLiquidity - ~tokenPool - ~xtzPool - ~lqtTotal - ~lqtBurned - in - let xtz_withdrawn = Tez.to_mutez xtz_withdrawn in - let tokens_withdrawn = Z.to_int tokens_withdrawn in - let state = - update_xtz_balance dst (fun b -> Int64.add b xtz_withdrawn) state - |> update_tzbtc_balance dst (( + ) tokens_withdrawn) - |> update_liquidity_balance src (fun b -> b - lqt_burned) - |> update_xtz_balance env.cpmm_contract (fun b -> - Int64.sub b xtz_withdrawn) - |> update_tzbtc_balance env.cpmm_contract (fun b -> - b - tokens_withdrawn) - in - { - state with - cpmm_total_liquidity = state.cpmm_total_liquidity - lqt_burned; - } - - (* Ideally, we should also deal with the release of security - deposit, but since our tests are not long enough for this to - happen, we omit this aspect of the simulation. *) - let bake ~invariant ~baker operations env state = - let state = - update_xtz_balance env.cpmm_contract (Int64.add env.subsidy) state - |> (fun state -> List.fold_left ( |> ) state operations) - |> update_xtz_balance baker (fun b -> Int64.sub b security_deposit) - in - assert (invariant env state) ; - state - end -end - -(* --------------------------------------------------------------------------- *) - -(** {1 Symbolic Machine} *) - -module SymbolicBaseMachine : - MACHINE_WITH_INIT - with type 'a m = 'a - and type contract = contract_id - and type t = contract_id state = struct - include AbstractMachine.Make (struct - type t = contract_id - - let pp = pp_contract_id - end) - - let init ~invariant:_ ?(subsidy = default_subsidy) accounts_balances = - let _, bootstrap_balances = initial_xtz_repartition accounts_balances in - let len = Int64.of_int (List.length accounts_balances) in - match bootstrap_balances with - | holder_xtz :: accounts -> - let xtz_cpmm = - Int64.( - add cpmm_initial_balance.xtz (mul (blocks_during_init len) subsidy)) - in - ( { - cpmm_total_liquidity = cpmm_initial_liquidity_supply; - accounts_balances = - (Cpmm, {cpmm_initial_balance with xtz = xtz_cpmm}) - :: (Holder, {xtz = holder_xtz; tzbtc = 0; liquidity = 0}) - :: (TzBTCAdmin, {xtz = 0L; tzbtc = 0; liquidity = 0}) - :: List.mapi - (fun i xtz -> - (ImplicitAccount i, {xtz; tzbtc = 0; liquidity = 0})) - accounts; - }, - { - cpmm_contract = Cpmm; - tzbtc_contract = TzBTC; - tzbtc_admin = TzBTCAdmin; - liquidity_contract = Liquidity; - liquidity_admin = LiquidityAdmin; - implicit_accounts = - List.mapi (fun i _ -> ImplicitAccount i) accounts; - holder = Holder; - subsidy; - } ) - | [] -> assert false -end - -module SymbolicMachine = struct - include SymbolicBaseMachine - include Machine.Make (SymbolicBaseMachine) - include MachineBuilder.Make (SymbolicBaseMachine) -end - -(* --------------------------------------------------------------------------- *) - -(** {1 Validation Machine} *) - -module ValidationBaseMachine : - MACHINE_WITH_INIT - with type 'a m = 'a ConcreteBaseMachine.m - and type t = ConcreteBaseMachine.t * Contract.t state - and type contract = Contract.t = struct - module GhostMachine = AbstractMachine.Make (struct - type t = Contract.t - - let pp = Contract.pp - end) - - type 'a m = 'a ConcreteBaseMachine.m - - type t = ConcreteBaseMachine.t * GhostMachine.t - - type contract = Contract.t - - type operation = ConcreteBaseMachine.operation * GhostMachine.operation - - let pp_contract = Contract.pp - - let ( let* ) = ConcreteBaseMachine.( let* ) - - let fold_m = ConcreteBaseMachine.fold_m - - let pure = ConcreteBaseMachine.pure - - let get_balances contract env (_, state) = - pure (GhostMachine.get_balances contract env state) - - let get_xtz_balance contract (_, state) = - pure (GhostMachine.get_xtz_balance contract state) - - let get_tzbtc_balance contract env (_, state) = - pure (GhostMachine.get_tzbtc_balance contract env state) - - let get_liquidity_balance contract env (_, state) = - pure (GhostMachine.get_liquidity_balance contract env state) - - let get_cpmm_total_liquidity env (_, state) = - pure (GhostMachine.get_cpmm_total_liquidity env state) - - let bake ~invariant ~baker ops env (blk, state) = - let cops = List.map fst ops in - let rops = List.map snd ops in - let* blk = - ConcreteBaseMachine.( - bake ~invariant:(fun _ _ -> pure true) ~baker cops env blk) - in - let state = - GhostMachine.bake ~invariant:(fun _ _ -> true) ~baker rops env state - in - let* cond = invariant env (blk, state) in - assert cond ; - pure (blk, state) - - let transaction ~src dst xtz (blk, state) = - let* cop = ConcreteBaseMachine.transaction ~src dst xtz blk in - pure (cop, GhostMachine.transaction ~src dst xtz state) - - let token_to_xtz ~src dst tzbtc env (blk, state) = - let* cop = ConcreteBaseMachine.token_to_xtz ~src dst tzbtc env blk in - pure (cop, GhostMachine.token_to_xtz ~src dst tzbtc env state) - - let xtz_to_token ~src dst xtz env (blk, state) = - let* cop = ConcreteBaseMachine.xtz_to_token ~src dst xtz env blk in - pure (cop, GhostMachine.xtz_to_token ~src dst xtz env state) - - let mint_or_burn_tzbtc dst tzbtc env (blk, state) = - let* cop = ConcreteBaseMachine.mint_or_burn_tzbtc dst tzbtc env blk in - pure (cop, GhostMachine.mint_or_burn_tzbtc dst tzbtc env state) - - let approve_tzbtc dst tzbtc env (blk, state) = - let* cop = ConcreteBaseMachine.approve_tzbtc dst tzbtc env blk in - pure (cop, GhostMachine.approve_tzbtc dst tzbtc env state) - - let add_liquidity ~src dst xtz_deposit tzbtc_deposit env (blk, state) = - let* cop = - ConcreteBaseMachine.add_liquidity - ~src - dst - xtz_deposit - tzbtc_deposit - env - blk - in - pure - ( cop, - GhostMachine.add_liquidity ~src dst xtz_deposit tzbtc_deposit env state - ) - - let remove_liquidity ~src dst lqt_burned env (blk, state) = - let* cop = - ConcreteBaseMachine.remove_liquidity ~src dst lqt_burned env blk - in - pure (cop, GhostMachine.remove_liquidity ~src dst lqt_burned env state) - - let reveal account (blk, state) = - let* cop = ConcreteBaseMachine.reveal account blk in - pure (cop, GhostMachine.reveal account state) - - let init ~invariant ?subsidy balances = - let* blk, env = - ConcreteBaseMachine.init - ~invariant:(fun _ _ -> Lwt_result_syntax.return_true) - ?subsidy - balances - in - let state, _ = - SymbolicBaseMachine.init ~invariant:(fun _ _ -> true) ?subsidy balances - in - let state = refine_state env state in - let* cond = invariant env (blk, state) in - assert cond ; - pure ((blk, state), env) -end - -module ValidationMachine = struct - include ValidationBaseMachine - include Machine.Make (ValidationBaseMachine) - include MachineBuilder.Make (ValidationBaseMachine) - - module Symbolic = struct - let get_xtz_balance = get_xtz_balance - - let get_tzbtc_balance = get_tzbtc_balance - - let get_liquidity_balance = get_liquidity_balance - - let get_cpmm_total_liquidity = get_cpmm_total_liquidity - end - - module Concrete = struct - let get_xtz_balance contract (blk, _) = - ConcreteMachine.get_xtz_balance contract blk - - let get_tzbtc_balance contract env (blk, _) = - ConcreteMachine.get_tzbtc_balance contract env blk - - let get_liquidity_balance contract env (blk, _) = - ConcreteMachine.get_liquidity_balance contract env blk - - let get_cpmm_total_liquidity env (blk, _) = - ConcreteMachine.get_cpmm_total_liquidity env blk - end -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_machine.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_machine.mli deleted file mode 100644 index 76107f8b4d616c33e83d334a8f394e923260d148..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/liquidity_baking_machine.mli +++ /dev/null @@ -1,387 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** This module provides the means to test extensively the Liquidity - Baking (LB) feature. We recall that this feature is built upon - three smart contracts: (1) a CPMM contract initially based on - Dexter 2, and (2) two tokens contracts. Our objective is to run - “scenarios” consisting in interleaved, realistic calls to these - contracts, and to assert these scenarios do not yield any - undesirable behaviors. - - To that end, three “machines” are provided. - - - The {! SymbolicMachine} allows to simulate scenarios involving - the LB feature completely off-chain. It can be seen as an - abstraction of the concrete implementation provided by the Tezos - node. - - The {! ConcreteMachine } allows to execute scenarios on-chain. - - The {! ValidationMachine } combines the two previously mentioned - machines. In other words, the {! ValidationMachine} makes the {! - SymbolicMachine} and the [ConcreteMachine] execute the same - scenarios, and asserts they remain synchronized after each baked - block. - - The {! ValidationMachine} allows to (1) validate the {! - SymbolicMachine} ({i i.e.,} the reimplementation of the LB - contracts logic) against the real implementation provided by - Tezos, {b and} the contracts originated by the protocol correctly - implement the LB logic, as implemented by the {! SymbolicMachine}. - That is, the {! ValidationMachine} reports desynchronization of - the two machines, but cannot explain this desynchronization. *) - -(** {1 Machine State Characterization} *) - -type xtz = int64 - -type tzbtc = int - -type liquidity = int - -(** As far as liquidity baking is concerned, an account can hold three - kinds of tokens: [xtz], [tzbtc], and [liquidity]. *) -type balances = {xtz : xtz; tzbtc : tzbtc; liquidity : liquidity} - -val pp_balances : Format.formatter -> balances -> unit - -(** A value of type [specs] allows to specify an initial state of a - “machine”. - - In a nutshell, it consists in specifying the minimal balances of - the CPMM contracts and a set of implicit contracts. The two - machines provided by this module has a [build] function which - turns a [specs] into a consistent initial state for this - machine. *) -type specs = { - cpmm_min_xtz_balance : xtz; - cpmm_min_tzbtc_balance : tzbtc; - accounts_balances : balances list; -} - -val pp_specs : Format.formatter -> specs -> unit - -(** A value of type ['a env] (where ['a] is the type of contract - identifiers) summarizes the different contracts involved in the LB - feature. - - Values of type [env] are constructed by the [build] function of - the machines. *) -type 'a env = private { - cpmm_contract : 'a; - tzbtc_contract : 'a; - tzbtc_admin : 'a; - liquidity_contract : 'a; - liquidity_admin : 'a; - implicit_accounts : 'a list; - holder : 'a; - subsidy : xtz; -} - -(** A value of type ['a step] (where ['a] is the type used to identify - contracts) describes a consistent sequence of LB smart contract - calls. - - For instance, [SellTzBTC] consists in approving an allowance in - the [TzBTC] contract, then calling the [token_to_xtz] entry point - of the [CPMM]. *) -type 'a step = - | SellTzBTC of {source : 'a; destination : 'a; tzbtc_deposit : tzbtc} - | BuyTzBTC of {source : 'a; destination : 'a; xtz_deposit : xtz} - | AddLiquidity of {source : 'a; destination : 'a; xtz_deposit : xtz} - | RemoveLiquidity of {source : 'a; destination : 'a; lqt_burned : liquidity} - -val pp_step : - (Format.formatter -> 'a -> unit) -> Format.formatter -> 'a step -> unit - -(** A summary of the state of a machine, parameterized by the type of - contract identifier. *) -type 'a state = { - cpmm_total_liquidity : liquidity; - accounts_balances : ('a * balances) list; -} - -(** {1 The Symbolic Machine} *) - -(** In the {! SymbolicMachine}, a contract is identified by a symbolic - value. *) -type contract_id = - | Cpmm - | Holder - | TzBTC - | TzBTCAdmin - | Liquidity - | LiquidityAdmin - (* We use integers to distinguish between implicit account because - this integer has the extra benefit of being the index of the - related account in [env.implicit_accounts]. *) - | ImplicitAccount of int - -val pp_contract_id : Format.formatter -> contract_id -> unit - -module SymbolicMachine : sig - (** The state of the {! SymbolicMachine}. *) - type t = contract_id state - - (** [get_xtz_balance c state] returns the amount of mutez owned by - [c] in [state]. *) - val get_xtz_balance : contract_id -> t -> xtz - - (** [get_tzbtc_balance c env state] returns the amount of TzBTC - owned by [c] in [state], according to the [TzBTC] contract. *) - val get_tzbtc_balance : contract_id -> contract_id env -> t -> tzbtc - - (** [get_liquidity_balance c env state] returns the amount of - liquidity token owned by [c] in [state], according to the - [Liquidity] contract. *) - val get_liquidity_balance : contract_id -> contract_id env -> t -> liquidity - - (** [get_cpmm_total_liquidity env state] fetches the current amount - of liquidity tokens distributed by the CPMM contract from the - state [state]. *) - val get_cpmm_total_liquidity : contract_id env -> t -> liquidity - - (** [predict_required_tzbtc_deposit xtz_deposit env state] predicts - the deposit in TzBTC which will be required by the CPMM contract - when executing a step [AddLiquidity] with [xtz_deposit] from - [state]. *) - val predict_required_tzbtc_deposit : xtz -> contract_id env -> t -> tzbtc - - (** [build specs] computes (1) an initial state for the {! - SymbolicMachine}, and (2) the environment associated to this - state. - - The machine enforces the resulting state is consistent with the - [specs] given as inputs, and raises an [Assert_failure] - exception if it does not. - - One can use the optional argument [subsidy] to set the subsidy - amount to a given value (by default, we use the same as the main - chain). Additionally, the [invariant] optional argument can be - used to verify that a given invariant holds at the end of the - initialization. *) - val build : - ?invariant:(contract_id env -> t -> bool) -> - ?subsidy:xtz -> - specs -> - t * contract_id env - - (** [step s env state] executes a single step [s] from [state]. - - The [invariant] optional argument can be used to verify that a - given invariant holds after each baked block. *) - val step : - ?invariant:(contract_id env -> t -> bool) -> - contract_id step -> - contract_id env -> - t -> - t - - (** [run steps env state] executes a list of steps from [state]. - - The [invariant] optional argument can be used to verify that a - given invariant holds after each baked block. *) - val run : - ?invariant:(contract_id env -> t -> bool) -> - contract_id step list -> - contract_id env -> - t -> - t -end - -(** A machine that can execute scenarios onchain. *) -module ConcreteMachine : sig - (** The state of the {! ConcreteMachine}. *) - type t = Block.t - - (** [get_xtz_balance c state] returns the amount of mutez owned by - [c] in [state]. *) - val get_xtz_balance : Contract.t -> t -> xtz tzresult Lwt.t - - (** [get_tzbtc_balance c env state] returns the amount of TzBTC - owned by [c] in [state], according to the [TzBTC] contract. *) - val get_tzbtc_balance : - Contract.t -> Contract.t env -> t -> tzbtc tzresult Lwt.t - - (** [get_liquidity_balance c env state] returns the amount of - liquidity token owned by [c] in [state], according to the - [Liquidity] contract. *) - val get_liquidity_balance : - Contract.t -> Contract.t env -> t -> liquidity tzresult Lwt.t - - (** [get_cpmm_total_liquidity env state] fetches the current amount - of liquidity tokens distributed by the CPMM contract from the - state [state]. *) - val get_cpmm_total_liquidity : Contract.t env -> t -> liquidity tzresult Lwt.t - - (** [build specs] asynchronously computes (1) an initial block for - the {! ConcreteMachine}, and (2) the environment associated to - this block. - - The machine enforces the resulting state is consistent with the - [specs] given as inputs, and raises an [Assert_failure] - exception if it does not. It also enforces that the machines - used underneath remain in sync. - - One can use the optional argument [subsidy] to set the subsidy - amount to a given value (by default, we use the same as the main - chain). Additionally, the [invariant] optional argument can be - used to verify that a given invariant holds at the end of the - initialization. *) - val build : - ?invariant:(Contract.t env -> t -> bool tzresult Lwt.t) -> - ?subsidy:xtz -> - specs -> - (t * Contract.t env) tzresult Lwt.t - - (** [step s env state] asynchronously executes a single step [s] - from [state]. - - The [invariant] optional argument can be used to verify that a - given invariant holds after each baked block. *) - val step : - ?invariant:(Contract.t env -> t -> bool tzresult Lwt.t) -> - Contract.t step -> - Contract.t env -> - t -> - t tzresult Lwt.t - - (** [run lss env state] asynchronously executes a list of steps from - [state]. - - The [invariant] optional argument can be used to verify that a - given invariant holds after each baked block. *) - val run : - ?invariant:(Contract.t env -> t -> bool tzresult Lwt.t) -> - contract_id step list -> - Contract.t env -> - t -> - t tzresult Lwt.t -end - -module ValidationMachine : sig - (** The state of the {! ValidationMachine}. *) - type t = ConcreteMachine.t * Contract.t state - - module Symbolic : sig - (** A collections of functions to introspect the symbolic part of - the [ValidationMachine] state. *) - - (** [get_xtz_balance c state] returns the amount of mutez owned by - [c] in the symbolic part of [state]. *) - val get_xtz_balance : Contract.t -> t -> xtz tzresult Lwt.t - - (** [get_tzbtc_balance c env state] returns the amount of TzBTC - owned by [c] in the symbolic part of [state], according to the - [TzBTC] contract. *) - val get_tzbtc_balance : - Contract.t -> Contract.t env -> t -> tzbtc tzresult Lwt.t - - (** [get_liquidity_balance c env state] returns the amount of - liquidity token owned by [c] in the symbolic part of [state], - according to the [Liquidity] contract. *) - val get_liquidity_balance : - Contract.t -> Contract.t env -> t -> liquidity tzresult Lwt.t - - (** [get_cpmm_total_liquidity env state] fetches the   current - amount of liquidity tokens distributed by the CPMM   contract - using the symbolic part of the state [state]. *) - val get_cpmm_total_liquidity : - Contract.t env -> t -> liquidity tzresult Lwt.t - end - - module Concrete : sig - (** A collections of functions to introspect the concrete part of - the [ValidationMachine] state. *) - - (** [get_xtz_balance c state] returns the amount of mutez owned by - [c] in the concrete part of [state]. *) - val get_xtz_balance : Contract.t -> t -> xtz tzresult Lwt.t - - (** [get_tzbtc_balance c env state] returns the amount of TzBTC - owned by [c] in the concrete part of [state], according to the - [TzBTC] contract. *) - val get_tzbtc_balance : - Contract.t -> Contract.t env -> t -> tzbtc tzresult Lwt.t - - (** [get_liquidity_balance c env state] returns the amount of - liquidity token owned by [c] in the concrete part of [state], - according to the [Liquidity] contract. *) - val get_liquidity_balance : - Contract.t -> Contract.t env -> t -> liquidity tzresult Lwt.t - - (** [get_cpmm_total_liquidity env state] fetches the current - amount of liquidity tokens distributed by the CPMM contract - using the concrete part of the state [state]. *) - val get_cpmm_total_liquidity : - Contract.t env -> t -> liquidity tzresult Lwt.t - end - - (** [build specs] asynchronously computes (1) an initial state for - the {! ValidationMachine}, and (2) the environment associated to - this state. - - The machine enforces the resulting state is consistent with the - [specs] given as inputs, and raises an [Assert_failure] - exception if it does not. It also enforces that the machines - used underneath remain in sync. - - One can use the optional argument [subsidy] to set the subsidy - amount to a given value (by default, we use the same as the main - chain). Additionally, the [invariant] optional argument can be - used to verify that a given invariant holds at the end of the - initialization. *) - val build : - ?invariant:(Contract.t env -> t -> bool tzresult Lwt.t) -> - ?subsidy:xtz -> - specs -> - (t * Contract.t env) tzresult Lwt.t - - (** [step s env state] asynchronously executes a single step [s] - from [state]. - - The [invariant] optional argument can be used to verify that a - given invariant holds after each baked block. *) - val step : - ?invariant:(Contract.t env -> t -> bool tzresult Lwt.t) -> - Contract.t step -> - Contract.t env -> - t -> - t tzresult Lwt.t - - (** [run lss env state] asynchronously executes a list of steps from - [state]. - - The [invariant] optional argument can be used to verify that a - given invariant holds after each baked block. *) - val run : - ?invariant:(Contract.t env -> t -> bool tzresult Lwt.t) -> - contract_id step list -> - Contract.t env -> - t -> - t tzresult Lwt.t -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/log_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/log_helpers.ml deleted file mode 100644 index af59306b9dd1b977f95dbf953fd86f700d13236b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/log_helpers.ml +++ /dev/null @@ -1,22 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -let begin_end_color = Log.Color.(BG.bright_white ++ FG.black ++ bold) - -let time_color = Log.Color.FG.yellow - -let action_color = Log.Color.FG.green - -let event_color = Log.Color.FG.blue - -let warning_color = Log.Color.FG.red - -let low_debug_color = Log.Color.FG.gray - -let assert_block_color = Log.Color.(BG.blue ++ FG.gray) - -let tez_color = Log.Color.FG.bright_white diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/lqt_fa12_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/lqt_fa12_repr.ml deleted file mode 100644 index 47f8bde4e4b8069fe084c156fffda86832f89d4b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/lqt_fa12_repr.ml +++ /dev/null @@ -1,261 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Expr_common - -module Parameter = struct - (* // ============================================================================= - * // Entrypoints - * // ============================================================================= *) - - (* Note: in the lqt_fa12 contract, [value] is a nat. Hence, it - should always be positive *) - type approve = {spender : Contract.t; value : Z.t} - - type mintOrBurn = {quantity : Z.t; target : Contract.t} - - (* Note: this wrapper does not implement a reprensentation for the - entrypoints transfer, getAllowance, getBalance, getTotalSupply, - as they are not used as of yet. *) - type t = Approve of approve | MintOrBurn of mintOrBurn - - let approve p = - assert (Z.lt Z.zero p.value || Z.equal Z.zero p.value) ; - Approve p - - let mintOrBurn p = MintOrBurn p - - let approve_to_string {spender; value} = - Format.asprintf - "{ spender: %a; value: %a }" - Contract.pp - spender - Z.pp_print - value - - let mint_or_burn_to_string {quantity; target} = - Format.asprintf - "{ quantity: %a; target: %a }" - Z.pp_print - quantity - Contract.pp - target - - let to_string : t -> string = function - | Approve p -> Format.asprintf "Approve %s" (approve_to_string p) - | MintOrBurn p -> Format.asprintf "MintOrBurn %s" (mint_or_burn_to_string p) - - let entrypoint_of_parameter : t -> Entrypoint.t = function - | Approve _ -> Entrypoint.of_string_strict_exn "approve" - | MintOrBurn _ -> Entrypoint.of_string_strict_exn "mintOrBurn" - - let pp fmt s = Format.fprintf fmt "%s" (to_string s) - - let eq s s' = s = s' - - let to_expr_rooted : - loc:'a -> - t -> - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node = - fun ~loc -> function - | MintOrBurn {quantity; target} -> - comb ~loc [int ~loc quantity; address_string ~loc target] - | Approve {spender; value} -> - comb ~loc [address_string ~loc spender; int ~loc value] - - let to_expr : - loc:'a -> - t -> - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node = - fun ~loc p -> - let rooted = to_expr_rooted ~loc p in - match p with - | MintOrBurn _ -> right ~loc @@ left ~loc rooted - | Approve _ -> left ~loc @@ left ~loc @@ left ~loc rooted - - let to_michelson_string e = - let e = to_expr ~loc:0 e in - Format.asprintf - "%a" - Michelson_v1_printer.print_expr - (Micheline.strip_locations e) -end - -(* // ============================================================================= - * // Storage - * // ============================================================================= *) - -module Storage = struct - let pp_big_map_id fmt v = Z.pp_print fmt (Big_map.Id.unparse_to_z v) - - type t = { - tokens : Big_map.Id.t; - allowances : Big_map.Id.t; - admin : Contract.t; - totalSupply : Z.t; - } - - let pp {tokens; allowances; admin; totalSupply} = - Format.asprintf - "{ tokens: %a; allowances: %a; admin: %a; totalSupply: %a}" - Z.pp_print - (Big_map.Id.unparse_to_z tokens) - Z.pp_print - (Big_map.Id.unparse_to_z allowances) - Contract.pp - admin - Z.pp_print - totalSupply - - let null : t = - { - tokens = Big_map.Id.parse_z Z.zero; - allowances = Big_map.Id.parse_z Z.one; - admin = Contract.Implicit Signature.Public_key_hash.zero; - totalSupply = Z.zero; - } - - let eq s s' = s = s' - - let to_expr : - loc:'a -> - t -> - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node = - fun ~loc {tokens; allowances; admin; totalSupply} -> - comb - ~loc - [ - big_map_id ~loc tokens; - big_map_id ~loc allowances; - address_string ~loc admin; - int ~loc totalSupply; - ] - - let to_michelson_string e = - let e = to_expr ~loc:0 e in - Format.asprintf - "%a" - Michelson_v1_printer.print_expr - (Micheline.strip_locations e) - - type exn += Invalid_storage_expr of string - - (** Note: parses a storage unparsed in readable mode (as - e.g. returned by [Alpha_services.Contract.storage]), so that - contracts are represented by strings. *) - let of_expr_exn : - ('a, Michelson_v1_primitives.prim) Tezos_micheline.Micheline.node -> t = - function - | Tezos_micheline.Micheline.Prim - ( _, - Script.D_Pair, - [ - Tezos_micheline.Micheline.Int (_, tokens); - Tezos_micheline.Micheline.Int (_, allowances); - Tezos_micheline.Micheline.String (_, admin); - Tezos_micheline.Micheline.Int (_, totalSupply); - ], - [] ) -> - let tokens = Big_map.Id.parse_z tokens in - let allowances = Big_map.Id.parse_z allowances in - let admin = address_of_string_exn admin in - {tokens; allowances; admin; totalSupply} - | e -> - let canonical = Micheline.strip_locations e in - let msg = - Format.asprintf - "Not a valid LQT_FA1.2 storage: %s /// %a" - (try - Michelson_v1_printer.micheline_string_of_expression - ~zero_loc:true - canonical - with Z.Overflow -> - "Cannot represent as micheline due to overflowing Z -> int") - Michelson_v1_printer.print_expr - canonical - in - raise (Invalid_storage_expr msg) - - let get (ctxt : Context.t) ~(contract : Contract.t) : t tzresult Lwt.t = - let open Lwt_result_syntax in - match contract with - | Implicit _ -> - invalid_arg "Lqt_fa12_repr.Storage.get called on implicit account" - | Originated c -> - let+ expr = Context.Contract.storage ctxt c in - Micheline.root expr |> of_expr_exn - - let get_alpha_context (ctxt : Context.t) : Alpha_context.t tzresult Lwt.t = - let open Lwt_result_syntax in - let+ result = - match ctxt with - | B b -> - (* can perhaps be retrieved through Raw_context.prepare ? *) - Incremental.begin_construction b - | I i -> return i - in - Incremental.alpha_ctxt result - - let getBalance_opt (ctxt : Context.t) ~(contract : Contract.t) - (owner : Script_typed_ir.address) = - let open Lwt_result_wrap_syntax in - let* storage = get ctxt ~contract in - let tokens = storage.tokens in - let* ctxt = get_alpha_context ctxt in - let*@ address_hash, ctxt = - Script_ir_translator.hash_data ctxt Script_typed_ir.address_t owner - in - let*@ _, result = Big_map.get_opt ctxt tokens address_hash in - match result with - | Some canonical -> ( - match Tezos_micheline.Micheline.root canonical with - | Tezos_micheline.Micheline.Int (_, amount) -> return_some amount - | _ -> assert false) - | None -> return_none - - let getBalance (ctxt : Context.t) ~(contract : Contract.t) - (owner : Script_typed_ir.address) = - let open Lwt_result_syntax in - let+ t = getBalance_opt ctxt ~contract owner in - Option.value ~default:Z.zero t -end - -let transaction (ctxt : Context.t) ~(contract : Contract.t) ~(src : Contract.t) - ?(amount = Tez.zero) (parameters : Parameter.t) = - let entrypoint = Parameter.entrypoint_of_parameter parameters in - let rooted_param_lazy = - parameters - |> Parameter.to_expr_rooted ~loc:0 - |> Micheline.strip_locations |> Alpha_context.Script.lazy_expr - in - Op.transaction - ctxt - src - contract - amount - ~entrypoint - ~parameters:rooted_param_lazy diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/lwt_result_wrap_syntax.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/lwt_result_wrap_syntax.ml deleted file mode 100644 index 820b0f6815e5f2ce7fe041670a316a5d55002b58..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/lwt_result_wrap_syntax.ml +++ /dev/null @@ -1,51 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -include Tezos_base.TzPervasives.Lwt_result_syntax - -let wrap m = - let open Lwt_syntax in - let+ result = m in - Environment.wrap_tzresult result - -let ( let@ ) m f = - let x = Environment.wrap_tzresult m in - f x - -let ( let*@ ) m f = - let* x = wrap m in - f x - -let ( let*?@ ) m f = - let*? x = Environment.wrap_tzresult m in - f x - -let ( let*!@ ) m f = - let*! x = wrap m in - f x - -let ( let+@ ) m f = - let+ x = wrap m in - f x diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/lwt_result_wrap_syntax.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/lwt_result_wrap_syntax.mli deleted file mode 100644 index f00f62ed6ca9d1957b573697b2eb02f760f47a3b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/lwt_result_wrap_syntax.mli +++ /dev/null @@ -1,73 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Extends the {!Lwt_result_syntax} with additional utilities for wrapping - results produced by the protocol, i.e. [Environment.Error_monad.tzresult], - to [tzresult Lwt.t] values used in the tests. - - The added utilities are binding operators. They use the same symbols as - the ones from {!Lwt_result_syntax} with an added [@] character. This - character symbolizes the {!e wrapping} of the internal error monad type in a - shell error. *) - -include module type of Tezos_base.TzPervasives.Lwt_result_syntax - -(** [wrap res] maps the result type contained in [res] to a tzresult - value. *) -val wrap : 'a Environment.Error_monad.tzresult Lwt.t -> 'a tzresult Lwt.t - -(** [let@ x = m in f x] is equivalent to [let x = Environment.wrap_tzresult m in f x] *) -val ( let@ ) : 'a Environment.Error_monad.tzresult -> ('a tzresult -> 'b) -> 'b - -(** [let*@ x = m in f x] is equivalent to [let* x = wrap m in f x]. - - Mnemonic: [@] "wraps" a protocol error in a shell error. *) -val ( let*@ ) : - 'a Environment.Error_monad.tzresult Lwt.t -> - ('a -> 'b tzresult Lwt.t) -> - 'b tzresult Lwt.t - -(** [let*?@ x = m in f x] is equivalent to [let*? x = Environment.wrap_tzresult - m in f x]. - - Mnemonic: [@] "wraps" a protocol error in a shell error. *) -val ( let*?@ ) : - 'a Environment.Error_monad.tzresult -> - ('a -> 'b tzresult Lwt.t) -> - 'b tzresult Lwt.t - -(** [let*!@ x = m in f x] is equivalent to [let*! x = wrap m in f x]. - - Mnemonic: [@] "wraps" a protocol error in a shell error. *) -val ( let*!@ ) : - 'a Environment.Error_monad.tzresult Lwt.t -> - ('a tzresult -> 'b Lwt.t) -> - 'b Lwt.t - -(** [let+@ x = m in f x] is equivalent to [let+ x = wrap m in f x]. - - Mnemonic: [@] "wraps" a protocol error in a shell error. *) -val ( let+@ ) : - 'a Environment.Error_monad.tzresult Lwt.t -> ('a -> 'b) -> 'b tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/merkle_list_helper.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/merkle_list_helper.ml deleted file mode 100644 index bf823ad6f954fecd22e67e1e42d7ed881eaa197a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/merkle_list_helper.ml +++ /dev/null @@ -1,54 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let prefix = "\001\002\003" (* 8uE(36) *) - -module Hash = - Environment.Blake2B.Make - (Environment.Base58) - (struct - let name = "Merkle_list" - - let title = "Merkle_list" - - let b58check_prefix = prefix - - let size = Some 20 - end) - -module ML = - Protocol.Merkle_list.Make - (struct - type t = bytes - - let to_bytes x = x - end) - (Hash) - -include ML - -(* Hash two hashes *) -let hash2 (h1 : Hash.t) (h2 : Hash.t) = - Hash.(hash_bytes [to_bytes h1; to_bytes h2]) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/nonce.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/nonce.ml deleted file mode 100644 index 8edff69913958449a9d5b65c05ec2d073addc379..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/nonce.ml +++ /dev/null @@ -1,33 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2014-2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(*****************************************************************************) - -open Protocol - -module Table = Hashtbl.Make (struct - type t = Nonce_hash.t - - let hash h = Int32.to_int (TzEndian.get_int32 (Nonce_hash.to_bytes h) 0) - - let equal = Nonce_hash.equal -end) - -let known_nonces = Table.create 17 - -let generate () = - match - Alpha_context.Nonce.of_bytes - @@ Tezos_crypto.Rand.generate Alpha_context.Constants.nonce_length - with - | Ok nonce -> - let hash = Alpha_context.Nonce.hash nonce in - Table.add known_nonces hash nonce ; - (hash, nonce) - | Error _ -> assert false - -let forget_all () = Table.clear known_nonces - -let get hash = Table.find known_nonces hash diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/nonce.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/nonce.mli deleted file mode 100644 index 8a8b258b065852028e44aad28577dbcb231c6ef3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/nonce.mli +++ /dev/null @@ -1,33 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -(** Returns a fresh nonce and its corresponding hash (and stores them). *) -val generate : unit -> Nonce_hash.t * Alpha_context.Nonce.t - -val get : Nonce_hash.t -> Alpha_context.Nonce.t option - -val forget_all : unit -> unit diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/op.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/op.ml deleted file mode 100644 index 7a625f8c4bc8cea30a545be9c7fc5d3ac36e0692..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/op.ml +++ /dev/null @@ -1,1065 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -let pack_operation ctxt signature contents = - let branch = Context.branch ctxt in - Operation.pack - ({shell = {branch}; protocol_data = {contents; signature}} : _ Operation.t) - -let sign ?(watermark = Signature.Generic_operation) sk branch contents = - let unsigned = - Data_encoding.Binary.to_bytes_exn - Operation.unsigned_encoding - ({branch}, Contents_list contents) - in - let signature = Some (Signature.sign ~watermark sk unsigned) in - ({shell = {branch}; protocol_data = {contents; signature}} : _ Operation.t) - -(** Generates the block payload hash based on the hash [pred_hash] of - the predecessor block and the hash of non-consensus operations of - the current block [b]. *) -let mk_block_payload_hash payload_round (b : Block.t) = - let ops = Block.Forge.classify_operations b.operations in - let non_consensus_operations = - List.concat (match List.tl ops with None -> [] | Some l -> l) - in - let hashes = List.map Operation.hash_packed non_consensus_operations in - Block_payload.hash - ~predecessor_hash:b.header.shell.predecessor - ~payload_round - hashes - -let mk_consensus_content_signer_and_branch ?delegate ?slot ?level ?round - ?block_payload_hash ?branch attested_block = - let open Lwt_result_wrap_syntax in - let branch = - match branch with - | None -> attested_block.Block.header.shell.predecessor - | Some branch -> branch - in - let* delegate_pkh, slots = - match delegate with - | None -> Context.get_attester (B attested_block) - | Some del -> ( - let* slots = Context.get_attester_slot (B attested_block) del in - match slots with - | None -> return (del, []) - | Some slots -> return (del, slots)) - in - let slot = - match slot with None -> Stdlib.List.hd slots | Some slot -> slot - in - let* level = - match level with - | None -> - let*? level = Context.get_level (B attested_block) in - return level - | Some level -> return level - in - let* round = - match round with - | None -> - let*?@ round = Block.get_round attested_block in - return round - | Some round -> return round - in - let block_payload_hash = - match block_payload_hash with - | None -> mk_block_payload_hash round attested_block - | Some block_payload_hash -> block_payload_hash - in - let consensus_content = {slot; level; round; block_payload_hash} in - let* signer = Account.find delegate_pkh in - return (consensus_content, signer.sk, branch) - -let raw_attestation ?delegate ?slot ?level ?round ?block_payload_hash - ?dal_content ?branch attested_block = - let open Lwt_result_syntax in - let* consensus_content, signer, branch = - mk_consensus_content_signer_and_branch - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - attested_block - in - let op = Single (Attestation {consensus_content; dal_content}) in - return - (sign - ~watermark:Operation.(to_watermark (Attestation Chain_id.zero)) - signer - branch - op) - -let attestation ?delegate ?slot ?level ?round ?block_payload_hash ?dal_content - ?branch attested_block = - let open Lwt_result_syntax in - let* op = - raw_attestation - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?dal_content - ?branch - attested_block - in - return (Operation.pack op) - -let raw_preattestation ?delegate ?slot ?level ?round ?block_payload_hash ?branch - attested_block = - let open Lwt_result_syntax in - let* consensus_content, signer, branch = - mk_consensus_content_signer_and_branch - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - attested_block - in - let op = Single (Preattestation consensus_content) in - return - (sign - ~watermark:Operation.(to_watermark (Preattestation Chain_id.zero)) - signer - branch - op) - -let preattestation ?delegate ?slot ?level ?round ?block_payload_hash ?branch - attested_block = - let open Lwt_result_syntax in - let* op = - raw_preattestation - ?delegate - ?slot - ?level - ?round - ?block_payload_hash - ?branch - attested_block - in - return (Operation.pack op) - -let sign ?watermark sk ctxt (Contents_list contents) = - Operation.pack (sign ?watermark sk ctxt contents) - -let batch_operations ?(recompute_counters = false) ~source ctxt - (operations : packed_operation list) = - let open Lwt_result_wrap_syntax in - let operations = - List.map - (function - | {Alpha_context.protocol_data = Operation_data {contents; _}; _} -> - Operation.to_list (Contents_list contents)) - operations - |> List.flatten - in - let* operations = - if recompute_counters then - let* counter = Context.Contract.counter ctxt source in - (* Update counters and transform into a contents_list *) - let _, rev_operations = - List.fold_left - (fun (counter, acc) -> function - | Contents (Manager_operation m) -> - ( Manager_counter.succ counter, - Contents (Manager_operation {m with counter}) :: acc ) - | x -> (counter, x :: acc)) - (Manager_counter.succ counter, []) - operations - in - return (List.rev rev_operations) - else return operations - in - let* account = Context.Contract.manager ctxt source in - let*?@ operations = Operation.of_list operations in - return @@ sign account.sk (Context.branch ctxt) operations - -type gas_limit = Max | High | Low | Zero | Custom_gas of Gas.Arith.integral - -let default_low_gas_limit op pkh = - let {shell; protocol_data = Operation_data protocol_data} = op in - let op : _ operation = {shell; protocol_data} in - let check_sig_gas = - Operation_costs.check_signature_cost - (Michelson_v1_gas.Cost_of.Interpreter.algo_of_public_key_hash pkh) - op - in - let total_cost = - Gas.(Michelson_v1_gas.Cost_of.manager_operation +@ check_sig_gas) - in - (* Some tests need milligas precision to distinguish failures in - validation from failures in application but limits in the - protocol are statically guaranteed to be integral values so we - use Obj.magic to bypass them. *) - (Obj.magic total_cost : Gas.Arith.integral) - -let default_high_gas_limit = - Gas.Arith.integral_of_int_exn - (49_000 + Michelson_v1_gas.Internal_for_tests.int_cost_of_manager_operation) - -let resolve_gas_limit ?(force_reveal = false) ctxt op source gas_limit = - let open Lwt_result_syntax in - let pkh = Context.Contract.pkh source in - let* revealed = Context.Contract.is_manager_key_revealed ctxt source in - match gas_limit with - | Max -> - let* c = Context.get_constants ctxt in - return (c.parametric.hard_gas_limit_per_operation, None) - | High -> return (default_high_gas_limit, None) - | Low when force_reveal && not revealed -> - (* If force reveal is set, the operation is a batch where the reveal is - the first operation. This operation should have a gas_limit - corresponding to the manager_operation constant (Low) + the cost of the - signature checking. The second op should only have Low as gas_limit *) - let op_gas : Gas.Arith.integral = - Obj.magic Michelson_v1_gas.Cost_of.manager_operation - in - return (op_gas, Some (default_low_gas_limit op pkh)) - | Low -> return (default_low_gas_limit op pkh, None) - | Zero -> return (Gas.Arith.zero, None) - | Custom_gas x -> return (x, None) - -let pp_gas_limit fmt = function - | Max -> Format.fprintf fmt "Max" - | High -> - Format.fprintf fmt "High: %a" Gas.Arith.pp_integral default_high_gas_limit - | Low -> Format.fprintf fmt "Low" - | Zero -> Format.fprintf fmt "Zero: %a" Gas.Arith.pp_integral Gas.Arith.zero - | Custom_gas x -> Format.fprintf fmt "Custom: %a" Gas.Arith.pp_integral x - -let combine_operations ?public_key ?counter ?spurious_operation ~source ctxt - (packed_operations : packed_operation list) = - let open Lwt_result_wrap_syntax in - assert (match packed_operations with [] -> false | _ :: _ -> true) ; - (* Hypothesis : each operation must have the same branch (is this really true?) *) - let {Tezos_base.Operation.branch} = - (WithExceptions.Option.get ~loc:__LOC__ @@ List.hd packed_operations).shell - in - assert ( - List.for_all - (fun {shell = {Tezos_base.Operation.branch = b; _}; _} -> - Block_hash.(branch = b)) - packed_operations) ; - (* TODO? : check signatures consistency *) - let unpacked_operations = - List.map - (function - | {Alpha_context.protocol_data = Operation_data {contents; _}; _} -> ( - match Contents_list contents with - | Contents_list (Single o) -> Contents o - | Contents_list - (Cons (Manager_operation {operation = Reveal _; _}, Single o)) - -> - Contents o - | _ -> (* TODO : decent error *) assert false)) - packed_operations - in - let* counter = - match counter with - | Some counter -> return counter - | None -> Context.Contract.counter ctxt source - in - (* We increment the counter *) - let counter = Manager_counter.succ counter in - let* account = Context.Contract.manager ctxt source in - let public_key = Option.value ~default:account.pk public_key in - let* manager_op, counter = - let+ is_revealed = Context.Contract.is_manager_key_revealed ctxt source in - match is_revealed with - | false -> - let reveal_op = - Manager_operation - { - source = Signature.Public_key.hash public_key; - fee = Tez.zero; - counter; - operation = Reveal public_key; - gas_limit = default_high_gas_limit; - storage_limit = Z.zero; - } - in - (Some (Contents reveal_op), Manager_counter.succ counter) - | true -> (None, counter) - in - (* Update counters and transform into a contents_list *) - let counter, rev_operations = - List.fold_left - (fun (counter, acc) -> function - | Contents (Manager_operation m) -> - ( Manager_counter.succ counter, - Contents (Manager_operation {m with counter}) :: acc ) - | x -> (counter, x :: acc)) - (counter, match manager_op with None -> [] | Some op -> [op]) - unpacked_operations - in - let operations = List.rev rev_operations in - (* patch a random operation with a corrupted pkh *) - let operations = - match spurious_operation with - | None -> operations - | Some op -> - let op = - match op with - | {protocol_data; shell = _} -> ( - match protocol_data with - | Operation_data {contents; _} -> ( - match contents with - | Cons _ -> assert false - | Single (Manager_operation m) -> - Alpha_context.Contents - (Manager_operation {m with counter}) - | Single op -> Contents op)) - in - (* Insert at the end *) - operations @ [op] - in - let*?@ operations = Operation.of_list operations in - return @@ sign account.sk (Context.branch ctxt) operations - -let manager_operation_with_fixed_gas_limit ?(force_reveal = false) ?counter - ~gas_limit ?(reveal_gas_limit = default_high_gas_limit) ?(fee = Tez.zero) - ?storage_limit ?public_key ~source ctxt operation = - let open Lwt_result_syntax in - let* counter = - match counter with - | Some counter -> return counter - | None -> Context.Contract.counter ctxt source - in - let* c = Context.get_constants ctxt in - let storage_limit = - Option.value - ~default:c.parametric.hard_storage_limit_per_operation - storage_limit - in - let* account = Context.Contract.manager ctxt source in - let public_key = Option.value ~default:account.pk public_key in - let counter = Manager_counter.succ counter in - let+ revealed = Context.Contract.is_manager_key_revealed ctxt source in - (* If the manager is revealed or we are not forcing reveals, we - generate a singleton manager operation. *) - if revealed || not force_reveal then - let op = - Manager_operation - { - source = Signature.Public_key.hash public_key; - fee; - counter; - operation; - gas_limit; - storage_limit; - } - in - Contents_list (Single op) - (* Otherwise if the manager is unrevealed and we are - force_revaling managers by default, we pre-attach a revelation - for it. *) - else - let op_reveal = - Manager_operation - { - source = Signature.Public_key.hash public_key; - fee = Tez.zero; - counter; - operation = Reveal public_key; - gas_limit = reveal_gas_limit; - storage_limit = Z.zero; - } - in - let op = - Manager_operation - { - source = Signature.Public_key.hash public_key; - fee; - counter = Manager_counter.succ counter; - operation; - gas_limit; - storage_limit; - } - in - Contents_list (Cons (op_reveal, Single op)) - -let manager_operation ?force_reveal ?counter ?fee ?(gas_limit = High) - ?storage_limit ?public_key ~source ctxt operation = - let open Lwt_result_syntax in - let default_gas_limit = default_high_gas_limit in - let* (Contents_list dummy_operation) = - manager_operation_with_fixed_gas_limit - ?force_reveal - ?counter - ~gas_limit:default_gas_limit - ?fee - ?storage_limit - ?public_key - ~source - ctxt - operation - in - let* gas_limit, reveal_gas_limit = - resolve_gas_limit - ?force_reveal - ctxt - { - shell = {branch = Context.branch ctxt}; - protocol_data = - Operation_data {contents = dummy_operation; signature = None}; - } - source - gas_limit - in - manager_operation_with_fixed_gas_limit - ?force_reveal - ?counter - ~gas_limit - ?reveal_gas_limit - ?fee - ?storage_limit - ?public_key - ~source - ctxt - operation - -let revelation_with_fixed_gas_limit ?(fee = Tez.zero) ~gas_limit - ?(storage_limit = Z.zero) ?counter ?(forge_pkh = None) ctxt public_key = - let open Lwt_result_syntax in - (* If Some pkh is provided to ?forge_pkh we take that hash at face - value, otherwise we honestly compute the hash from - [public_key]. This is useful to test forging Reveal operations - (cf. tezos!5182). *) - let pkh = - match forge_pkh with - | Some pkh -> pkh - | None -> Signature.Public_key.hash public_key - in - let source = Contract.Implicit pkh in - let+ counter = - match counter with - | None -> Context.Contract.counter ctxt source - | Some ctr -> return ctr - in - let counter = Manager_counter.succ counter in - Manager_operation - { - source = pkh; - fee; - counter; - operation = Reveal public_key; - gas_limit; - storage_limit; - } - -let revelation ?fee ?(gas_limit = High) ?storage_limit ?counter ?forge_pkh ctxt - public_key = - let open Lwt_result_syntax in - let* (Manager_operation {source; _} as dummy_operation) = - revelation_with_fixed_gas_limit - ?fee - ~gas_limit:default_high_gas_limit - ?storage_limit - ?counter - ?forge_pkh - ctxt - public_key - in - let* gas_limit, _ = - resolve_gas_limit - ctxt - { - shell = {branch = Context.branch ctxt}; - protocol_data = - Operation_data {contents = Single dummy_operation; signature = None}; - } - (Contract.Implicit source) - gas_limit - in - let* op = - revelation_with_fixed_gas_limit - ?fee - ~gas_limit - ?storage_limit - ?counter - ?forge_pkh - ctxt - public_key - in - let sop = Contents_list (Single op) in - let+ account = Context.Contract.manager ctxt (Implicit source) in - sign account.sk (Context.branch ctxt) sop - -let failing_noop ctxt source arbitrary = - let open Lwt_result_syntax in - let op = Contents_list (Single (Failing_noop arbitrary)) in - let* account = Account.find source in - return @@ sign account.sk (Context.branch ctxt) op - -let originated_contract_hash op = - let nonce = Protocol.Origination_nonce.initial (Operation.hash_packed op) in - Contract_hash.of_nonce nonce - -let originated_contract op = Contract.Originated (originated_contract_hash op) - -exception Impossible - -let contract_origination_gen k ?force_reveal ?counter ?delegate ~script - ?public_key ?credit ?fee ?gas_limit ?storage_limit ctxt source = - let open Lwt_result_syntax in - let* account = Context.Contract.manager ctxt source in - let default_credit = Tez.of_mutez @@ Int64.of_int 1000001 in - let default_credit = - WithExceptions.Option.to_exn ~none:Impossible default_credit - in - let credit = Option.value ~default:default_credit credit in - let operation = Origination {delegate; script; credit} in - let+ sop = - manager_operation - ?force_reveal - ?counter - ?public_key - ?fee - ?gas_limit - ?storage_limit - ~source - ctxt - operation - in - k (sign account.sk (Context.branch ctxt) sop) - -let contract_origination = - contract_origination_gen (fun op -> (op, originated_contract op)) - -let contract_origination_hash = - contract_origination_gen (fun op -> (op, originated_contract_hash op)) - -let register_global_constant ?force_reveal ?counter ?public_key ?fee ?gas_limit - ?storage_limit ctxt ~source ~value = - let open Lwt_result_syntax in - let* account = Context.Contract.manager ctxt source in - let operation = Register_global_constant {value} in - let+ sop = - manager_operation - ?force_reveal - ?counter - ?public_key - ?fee - ?gas_limit - ?storage_limit - ~source - ctxt - operation - in - sign account.sk (Context.branch ctxt) sop - -let unsafe_transaction ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ?(parameters = Script.unit_parameter) ?(entrypoint = Entrypoint.default) - ctxt (src : Contract.t) (destination : Contract.t) (amount : Tez.t) = - let open Lwt_result_syntax in - let top = Transaction {amount; parameters; destination; entrypoint} in - let* sop = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - top - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) sop - -let transaction ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ?parameters ?entrypoint ctxt (src : Contract.t) (dst : Contract.t) - (amount : Tez.t) = - unsafe_transaction - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ?parameters - ?entrypoint - ctxt - src - dst - amount - -let delegation ?force_reveal ?fee ?gas_limit ?counter ?storage_limit ctxt source - dst = - let open Lwt_result_syntax in - let top = Delegation dst in - let* sop = - manager_operation - ?force_reveal - ?fee - ?counter - ?gas_limit - ?storage_limit - ~source - ctxt - top - in - let+ account = Context.Contract.manager ctxt source in - sign account.sk (Context.branch ctxt) sop - -let set_deposits_limit ?force_reveal ?fee ?gas_limit ?storage_limit ?counter - ctxt source limit = - let open Lwt_result_syntax in - let top = Set_deposits_limit limit in - let* sop = - manager_operation - ?force_reveal - ?fee - ?counter - ?storage_limit - ?gas_limit - ~source - ctxt - top - in - let+ account = Context.Contract.manager ctxt source in - sign account.sk (Context.branch ctxt) sop - -let increase_paid_storage ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ctxt ~source ~destination (amount : Z.t) = - let open Lwt_result_syntax in - let top = Increase_paid_storage {amount_in_bytes = amount; destination} in - let* sop = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source - ctxt - top - in - let+ account = Context.Contract.manager ctxt source in - sign account.sk (Context.branch ctxt) sop - -let activation ctxt (pkh : Signature.Public_key_hash.t) activation_code = - let open Lwt_result_syntax in - let+ id = - match pkh with - | Ed25519 edpkh -> return edpkh - | _ -> - failwith - "Wrong public key hash : %a - Commitments must be activated with an \ - Signature.Ed25519 encrypted public key hash" - Signature.Public_key_hash.pp - pkh - in - let contents = Single (Activate_account {id; activation_code}) in - let branch = Context.branch ctxt in - { - shell = {branch}; - protocol_data = Operation_data {contents; signature = None}; - } - -let double_attestation ctxt op1 op2 = - let contents = Single (Double_attestation_evidence {op1; op2}) in - let branch = Context.branch ctxt in - { - shell = {branch}; - protocol_data = Operation_data {contents; signature = None}; - } - -let double_preattestation ctxt op1 op2 = - let contents = Single (Double_preattestation_evidence {op1; op2}) in - let branch = Context.branch ctxt in - { - shell = {branch}; - protocol_data = Operation_data {contents; signature = None}; - } - -let double_baking ctxt bh1 bh2 = - let contents = Single (Double_baking_evidence {bh1; bh2}) in - let branch = Context.branch ctxt in - { - shell = {branch}; - protocol_data = Operation_data {contents; signature = None}; - } - -let seed_nonce_revelation ctxt level nonce = - { - shell = {branch = Context.branch ctxt}; - protocol_data = - Operation_data - { - contents = Single (Seed_nonce_revelation {level; nonce}); - signature = None; - }; - } - -let vdf_revelation ctxt solution = - { - shell = {branch = Context.branch ctxt}; - protocol_data = - Operation_data - {contents = Single (Vdf_revelation {solution}); signature = None}; - } - -let get_period ?period ctxt = - let open Lwt_result_syntax in - match period with - | Some period -> return period - | None -> - let* current_period = Context.Vote.get_current_period ctxt in - return current_period.voting_period.index - -let proposals_contents ctxt proposer ?period proposals = - let open Lwt_result_syntax in - let source = Context.Contract.pkh proposer in - let* period = get_period ?period ctxt in - return (Single (Proposals {source; period; proposals})) - -let proposals ctxt proposer ?period proposals = - let open Lwt_result_syntax in - let* contents = proposals_contents ctxt proposer ?period proposals in - let* account = Account.find (Context.Contract.pkh proposer) in - return (sign account.sk (Context.branch ctxt) (Contents_list contents)) - -let ballot_contents ctxt voter ?period proposal ballot = - let open Lwt_result_syntax in - let source = Context.Contract.pkh voter in - let* period = get_period ?period ctxt in - return (Single (Ballot {source; period; proposal; ballot})) - -let ballot ctxt voter ?period proposal ballot = - let open Lwt_result_syntax in - let* contents = ballot_contents ctxt voter ?period proposal ballot in - let* account = Account.find (Context.Contract.pkh voter) in - return (sign account.sk (Context.branch ctxt) (Contents_list contents)) - -let dummy_script = - let open Micheline in - Script. - { - code = - lazy_expr - (strip_locations - (Seq - ( (), - [ - Prim ((), K_parameter, [Prim ((), T_unit, [], [])], []); - Prim ((), K_storage, [Prim ((), T_unit, [], [])], []); - Prim - ( (), - K_code, - [ - Seq - ( (), - [ - Prim ((), I_CDR, [], []); - Prim - ( (), - I_NIL, - [Prim ((), T_operation, [], [])], - [] ); - Prim ((), I_PAIR, [], []); - ] ); - ], - [] ); - ] ))); - storage = lazy_expr (strip_locations (Prim ((), D_Unit, [], []))); - } - -let dummy_script_cost = Tez_helpers.of_mutez 9_500L - -let transfer_ticket ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - ~(source : Contract.t) ~contents ~ty ~ticketer ~amount ~destination - ~entrypoint = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source - ctxt - (Transfer_ticket {contents; ty; ticketer; amount; destination; entrypoint}) - in - let+ account = Context.Contract.manager ctxt source in - sign account.sk (Context.branch ctxt) to_sign_op - -let originated_sc_rollup op = - let packed = Operation.hash_packed op in - let nonce = Origination_nonce.Internal_for_tests.initial packed in - Sc_rollup.Internal_for_tests.originated_sc_rollup nonce - -let sc_rollup_origination ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ?whitelist ctxt (src : Contract.t) kind ~boot_sector ~parameters_ty = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_originate {kind; boot_sector; parameters_ty; whitelist}) - in - let* account = Context.Contract.manager ctxt src in - let op = sign account.sk (Context.branch ctxt) to_sign_op in - let t = originated_sc_rollup op |> fun addr -> (op, addr) in - return t - -let sc_rollup_publish ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - (src : Contract.t) rollup commitment = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_publish {rollup; commitment}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let sc_rollup_cement ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - (src : Contract.t) rollup = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_cement {rollup}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let sc_rollup_execute_outbox_message ?counter ?fee ?gas_limit ?storage_limit - ?force_reveal ctxt (src : Contract.t) rollup cemented_commitment - ~output_proof = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_execute_outbox_message - {rollup; cemented_commitment; output_proof}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let sc_rollup_recover_bond ?counter ?fee ?gas_limit ?storage_limit ?force_reveal - ctxt (source : Contract.t) (sc_rollup : Sc_rollup.t) - (staker : public_key_hash) = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source - ctxt - (Sc_rollup_recover_bond {sc_rollup; staker}) - in - let+ account = Context.Contract.manager ctxt source in - sign account.sk (Context.branch ctxt) to_sign_op - -let sc_rollup_add_messages ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ctxt (src : Contract.t) messages = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_add_messages {messages}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let sc_rollup_refute ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - (src : Contract.t) rollup opponent refutation = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_refute {rollup; opponent; refutation}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let sc_rollup_timeout ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - (src : Contract.t) rollup stakers = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Sc_rollup_timeout {rollup; stakers}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let dal_publish_commitment ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ctxt (src : Contract.t) slot_header = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Dal_publish_commitment slot_header) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let originated_zk_rollup op = - let packed = Operation.hash_packed op in - let nonce = Origination_nonce.Internal_for_tests.initial packed in - Zk_rollup.Internal_for_tests.originated_zk_rollup nonce - -let zk_rollup_origination ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ctxt (src : Contract.t) ~public_parameters ~circuits_info ~init_state - ~nb_ops = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Zk_rollup_origination - {public_parameters; circuits_info; init_state; nb_ops}) - in - let+ account = Context.Contract.manager ctxt src in - let op = sign account.sk (Context.branch ctxt) to_sign_op in - originated_zk_rollup op |> fun addr -> (op, addr) - -let update_consensus_key ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ctxt (src : Contract.t) pkh = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Update_consensus_key pkh) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let drain_delegate ctxt ~consensus_key ~delegate ~destination = - let open Lwt_result_syntax in - let contents = - Single (Drain_delegate {consensus_key; delegate; destination}) - in - let+ account = - Context.Contract.manager ctxt (Contract.Implicit consensus_key) - in - sign account.sk (Context.branch ctxt) (Contents_list contents) - -let zk_rollup_publish ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - (src : Contract.t) ~zk_rollup ~ops = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Zk_rollup_publish {zk_rollup; ops}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op - -let zk_rollup_update ?force_reveal ?counter ?fee ?gas_limit ?storage_limit ctxt - (src : Contract.t) ~zk_rollup ~update = - let open Lwt_result_syntax in - let* to_sign_op = - manager_operation - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ~source:src - ctxt - (Zk_rollup_update {zk_rollup; update}) - in - let+ account = Context.Contract.manager ctxt src in - sign account.sk (Context.branch ctxt) to_sign_op diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/op.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/op.mli deleted file mode 100644 index 5f39291b0461370485350ada47e81f18f6461e94..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/op.mli +++ /dev/null @@ -1,633 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(* TODO: https://gitlab.com/tezos/tezos/-/issues/3181 - Improve documentation of the operation helpers *) - -(** Assemble the given signature and [contents_list] into a - [packed_operation]. - - The context argument is used to retrieve the branch. - - If the [signature option] argument is [None], then the resulting - operation is unsigned. - - This function is mainly useful to craft an operation with a - missing or invalid signatue. Otherwise, it is often better to use - one of the helpers below: they handle the signature internally to - directly return well-signed operations. *) -val pack_operation : - Context.t -> signature option -> 'a contents_list -> packed_operation - -val sign : - ?watermark:Signature.watermark -> - Signature.secret_key -> - Block_hash.t -> - packed_contents_list -> - packed_operation - -(** Create an unpacked attestation that is expected for given [Block.t]. - - Optional parameters allow to specify the attested values: [level], - [round], [block_payload_hash], and/or [dal_content]. - - They also allow to specify the attester ([delegate]), and/or the - [slot]. These default to the first slot and its delegate. - - Finally, the operation [branch] can be specified. It defaults to the - predecessor of the attested block. *) -val raw_attestation : - ?delegate:public_key_hash -> - ?slot:Slot.t -> - ?level:Raw_level.t -> - ?round:Round.t -> - ?block_payload_hash:Block_payload_hash.t -> - ?dal_content:dal_content -> - ?branch:Block_hash.t -> - Block.t -> - Kind.attestation Operation.t tzresult Lwt.t - -(** Create an unpacked preattestation that is expected for a given - [Block.t]. - - Optional parameters are the same than {!raw_attestation}. *) -val raw_preattestation : - ?delegate:public_key_hash -> - ?slot:Slot.t -> - ?level:Raw_level.t -> - ?round:Round.t -> - ?block_payload_hash:Block_payload_hash.t -> - ?branch:Block_hash.t -> - Block.t -> - Kind.preattestation Operation.t tzresult Lwt.t - -(** Create a packed attestation that is expected for a given - [Block.t] by packing the result of {!raw_attestation}. *) -val attestation : - ?delegate:public_key_hash -> - ?slot:Slot.t -> - ?level:Raw_level.t -> - ?round:Round.t -> - ?block_payload_hash:Block_payload_hash.t -> - ?dal_content:dal_content -> - ?branch:Block_hash.t -> - Block.t -> - Operation.packed tzresult Lwt.t - -(** Create a packed preattestation that is expected for a given - [Block.t] by packing the result of {!raw_preattestation}. *) -val preattestation : - ?delegate:public_key_hash -> - ?slot:Slot.t -> - ?level:Raw_level.t -> - ?round:Round.t -> - ?block_payload_hash:Block_payload_hash.t -> - ?branch:Block_hash.t -> - Block.t -> - Operation.packed tzresult Lwt.t - -type gas_limit = - | Max (** Max corresponds to the [max_gas_limit_per_operation] constant. *) - | High - (** High corresponds to [50_000] gas unit which should cover a - majority of use-cases. This is the default used when forging - manager operations. *) - | Low (** Low corresponds to the gas entry cost of a manager operation *) - | Zero - | Custom_gas of Gas.Arith.integral - -(** Pretty printer for gas_limit type. *) -val pp_gas_limit : Format.formatter -> gas_limit -> unit - -val transaction : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?parameters:Script.lazy_expr -> - ?entrypoint:Entrypoint.t -> - Context.t -> - Contract.t -> - Contract.t -> - Tez.t -> - Operation.packed tzresult Lwt.t - -(** Same as [transaction], but with a more generic destination - parameter. It is said unsafe because it can construct transactions - that will always fail, such as - - {ul {li Transaction to the deposit entrypoint of a transaction - rollup, as these transactions are necessarily internals.}} - - Optional arguments allow to override defaults: - - {ul {li [?force_reveal:bool]: prepend the operation to reveal - [source]'s public key if the latter has not been revealed - yet. Disabled (set to [false]) by default.}} *) -val unsafe_transaction : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?parameters: - Michelson_v1_primitives.prim Micheline.canonical Data_encoding.lazy_t -> - ?entrypoint:Entrypoint_repr.t -> - Context.t -> - Contract.t -> - Contract.t -> - Tez.t -> - packed_operation tzresult Lwt.t - -val delegation : - ?force_reveal:bool -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?counter:Manager_counter.t -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - public_key_hash option -> - Operation.packed tzresult Lwt.t - -val set_deposits_limit : - ?force_reveal:bool -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?counter:Manager_counter.t -> - Context.t -> - Contract.t -> - Tez.t option -> - Operation.packed tzresult Lwt.t - -val increase_paid_storage : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - source:Contract.t -> - destination:Contract_hash.t -> - Z.t -> - Operation.packed tzresult Lwt.t - -(** [revelation ?fee ?gas_limit ?forge_pkh ctxt pkh] Creates a new - [Reveal] {!manager_operation} to reveal a public key [pkh] - applying to current context [ctxt]. - - Optional arguments allow to override defaults: - - {ul {li [?fee:Tez.t]: specify a fee, otherwise set to - [Tez.zero].} - - {li [?gas_limit:Gas.Arith.integral]: force a gas limit, otherwise - set to 10000 gas units.} - - {li [?forge_pkh]: use a provided [pkh] as source, instead of - hashing [pkh]. Useful for forging non-honest reveal operations} - - {li [?storage_limit:Z.t]: forces a storage limit, otherwise - set to [Z.zero]}} -*) -val revelation : - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?counter:Manager_counter.t -> - ?forge_pkh:public_key_hash option -> - Context.t -> - public_key -> - (packed_operation, tztrace) result Lwt.t - -val failing_noop : - Context.t -> public_key_hash -> string -> Operation.packed tzresult Lwt.t - -(** [contract_origination ctxt source] Create a new contract origination - operation, sign it with [source] and returns it alongside the contract - address. The contract address is using the initial origination nonce with the - hash of the operation. If this operation is combined with [combine_operations] - then the contract address is false as the nonce is not based on the correct - operation hash. - - Optional arguments allow to override defaults: - - {ul {li [?force_reveal:bool]: prepend the operation to reveal - [source]'s public key if the latter has not been revealed - yet. Disabled (set to [false]) by default.}} *) -val contract_origination : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?delegate:public_key_hash -> - script:Script.t -> - ?public_key:public_key -> - ?credit:Tez.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - (Operation.packed * Contract.t) tzresult Lwt.t - -val contract_origination_hash : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?delegate:public_key_hash -> - script:Script.t -> - ?public_key:public_key -> - ?credit:Tez.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - (Operation.packed * Contract_hash.t) tzresult Lwt.t - -val originated_contract : Operation.packed -> Contract.t - -val register_global_constant : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?public_key:Signature.public_key -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - (* Account doing the registration *) - source:Contract.t -> - (* Micheline value to be registered *) - value:Protocol.Alpha_context.Script.lazy_expr -> - (Protocol.operation, tztrace) result Lwt.t - -val double_attestation : - Context.t -> - Kind.attestation Operation.t -> - Kind.attestation Operation.t -> - Operation.packed - -val double_preattestation : - Context.t -> - Kind.preattestation Operation.t -> - Kind.preattestation Operation.t -> - Operation.packed - -val double_baking : - Context.t -> - Block_header.block_header -> - Block_header.block_header -> - Operation.packed - -val activation : - Context.t -> - Signature.Public_key_hash.t -> - Blinded_public_key_hash.activation_code -> - Operation.packed tzresult Lwt.t - -val combine_operations : - ?public_key:public_key -> - ?counter:Manager_counter.t -> - ?spurious_operation:packed_operation -> - source:Contract.t -> - Context.t -> - packed_operation list -> - packed_operation tzresult Lwt.t - -(** Batch a list of (already signed) operations and (re-)sign with the - [source]. No revelation is inserted and the counters are kept as - they are unless [recompute_counters] is set to [true] (defaults false). *) -val batch_operations : - ?recompute_counters:bool -> - source:Contract.t -> - Context.t -> - packed_operation list -> - packed_operation tzresult Lwt.t - -(** Reveals a seed_nonce that was previously committed at a certain level *) -val seed_nonce_revelation : - Context.t -> Raw_level.t -> Nonce.t -> Operation.packed - -(** Reveals a VDF with a proof of correctness *) -val vdf_revelation : Context.t -> Seed.vdf_solution -> Operation.packed - -(** Craft the [contents_list] for a Proposals operation. - - Invocation: [proposals_contents ctxt source ?period proposals]. - - @param period defaults to the index of the current voting period - in [ctxt]. *) -val proposals_contents : - Context.t -> - Contract.t -> - ?period:int32 -> - Protocol_hash.t list -> - Kind.proposals contents_list tzresult Lwt.t - -(** Craft a Proposals operation. - - Invocation: [proposals ctxt source ?period proposals]. - - @param period defaults to the index of the current voting period - in [ctxt]. *) -val proposals : - Context.t -> - Contract.t -> - ?period:int32 -> - Protocol_hash.t list -> - Operation.packed tzresult Lwt.t - -(** Craft the [contents_list] for a Ballot operation. - - Invocation: [ballot_contents ctxt source ?period proposal ballot]. - - @param period defaults to the index of the current voting period - in [ctxt]. *) -val ballot_contents : - Context.t -> - Contract.t -> - ?period:int32 -> - Protocol_hash.t -> - Vote.ballot -> - Kind.ballot contents_list tzresult Lwt.t - -(** Craft a Ballot operation. - - Invocation: [ballot ctxt source ?period proposal ballot]. - - @param period defaults to the index of the current voting period - in [ctxt]. *) -val ballot : - Context.t -> - Contract.t -> - ?period:int32 -> - Protocol_hash.t -> - Vote.ballot -> - Operation.packed tzresult Lwt.t - -val dummy_script : Script.t - -val dummy_script_cost : Tez.t - -(** [transfer_ticket] allows an implicit account to transfer tickets they owned. - - The arguments are: - - {ul - {li [Context.t]: the context on which to apply the operation} - {li [source:Contract.t]: the source contract of the operation} - {li [Tx_rollup.t]: the rollup to which the withdrawal pertains} - {li [Tx_rollup_level.t]: the level on which the withdrawal was commited} - {li [contents:Script.lazy_expr]: the contents of the ticket of - the withdrawal} - {li [ty:Script.lazy_expr]: the type of the ticket of the withdrawal} - {li [ticketer:Contract.t]: the ticketer of the ticket of the withdrawal} - {li [Z.t]: the quantity of the ticket of the withdrawal} - {li [destination:Contract.t]: the destination contract that - should receive the ticket of the withdrawal} - {li [Entrypoint_repr.t]: the entrypoint of the destination - contract to which the ticket should be sent}} - - Optional arguments allow to override defaults: - - {ul {li [?force_reveal:bool]: prepend the operation to reveal - [source]'s public key if the latter has not been revealed - yet. Disabled (set to [false]) by default.}} *) -val transfer_ticket : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - source:Contract.t -> - contents:Script.lazy_expr -> - ty:Script.lazy_expr -> - ticketer:Contract.t -> - amount:Ticket_amount.t -> - destination:Contract.t -> - entrypoint:Entrypoint_repr.t -> - (packed_operation, tztrace) result Lwt.t - -(** [sc_rollup_origination ctxt source kind boot_sector] originates a - new smart contract rollup of some given [kind] booting using - [boot_sector]. - - Optional arguments allow to override defaults: - - {ul {li [?force_reveal:bool]: prepend the operation to reveal - [source]'s public key if the latter has not been revealed - yet. Disabled (set to [false]) by default.}} *) -val sc_rollup_origination : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?whitelist:Sc_rollup.Whitelist.t -> - Context.t -> - Contract.t -> - Sc_rollup.Kind.t -> - boot_sector:string -> - parameters_ty:Script.lazy_expr -> - (packed_operation * Sc_rollup.t) tzresult Lwt.t - -(** [sc_rollup_publish ctxt source rollup commitment] tries to publish - a commitment to the SCORU. Optional arguments allow to override - defaults: - - Optional arguments allow to override defaults: - - {ul {li [?force_reveal:bool]: prepend the operation to reveal - [source]'s public key if the latter has not been revealed - yet. Disabled (set to [false]) by default.}} *) -val sc_rollup_publish : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - Sc_rollup.t -> - Sc_rollup.Commitment.t -> - Operation.packed tzresult Lwt.t - -(** [sc_rollup_cement ctxt source rollup] tries to cement a commitment. - - Optional arguments allow to override defaults: - - {ul {li [?force_reveal:bool]: prepend the operation to reveal - [source]'s public key if the latter has not been revealed - yet. Disabled (set to [false]) by default.}} *) -val sc_rollup_cement : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - Sc_rollup.t -> - Operation.packed tzresult Lwt.t - -val sc_rollup_execute_outbox_message : - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?force_reveal:bool -> - Context.t -> - Contract.t -> - Sc_rollup.t -> - Sc_rollup.Commitment.Hash.t -> - output_proof:string -> - (packed_operation, tztrace) result Lwt.t - -(** [sc_rollup_recover_bond ctxt source sc_rollup staker] recovers the - commitment bond of [staker]. *) -val sc_rollup_recover_bond : - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - ?force_reveal:bool -> - Context.t -> - Contract.t -> - Sc_rollup.t -> - public_key_hash -> - Operation.packed tzresult Lwt.t - -val sc_rollup_add_messages : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - string list -> - Operation.packed tzresult Lwt.t - -val sc_rollup_refute : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - Sc_rollup.t -> - public_key_hash -> - Sc_rollup.Game.refutation -> - Operation.packed tzresult Lwt.t - -val sc_rollup_timeout : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - Sc_rollup.t -> - Sc_rollup.Game.Index.t -> - Operation.packed tzresult Lwt.t - -val dal_publish_commitment : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - Dal.Operations.Publish_commitment.t -> - (packed_operation, tztrace) result Lwt.t - -(** [zk_rollup_origination ctxt source ~public_parameters ~circuits_info - ~init_state ~nb_ops] tries to originate a ZK Rollup. *) -val zk_rollup_origination : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - public_parameters:Plonk.Main_protocol.verifier_public_parameters -> - circuits_info:[`Public | `Private | `Fee] Zk_rollup.Account.SMap.t -> - init_state:Zk_rollup.State.t -> - nb_ops:int -> - (Operation.packed * Zk_rollup.t) tzresult Lwt.t - -val update_consensus_key : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - public_key -> - (packed_operation, tztrace) result Lwt.t - -val drain_delegate : - Context.t -> - consensus_key:Signature.Public_key_hash.t -> - delegate:Signature.Public_key_hash.t -> - destination:Signature.Public_key_hash.t -> - packed_operation tzresult Lwt.t - -(** [zk_rollup_publish ctxt source ~zk_rollup ~op] tries to add an operation - to the pending list of a ZK Rollup. *) -val zk_rollup_publish : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - zk_rollup:Zk_rollup.t -> - ops:(Zk_rollup.Operation.t * Zk_rollup.Ticket.t option) list -> - Operation.packed tzresult Lwt.t - -(** [zk_rollup_update ctxt source ~zk_rollup ~update] tries to apply an update - to a ZK Rollup. *) -val zk_rollup_update : - ?force_reveal:bool -> - ?counter:Manager_counter.t -> - ?fee:Tez.t -> - ?gas_limit:gas_limit -> - ?storage_limit:Z.t -> - Context.t -> - Contract.t -> - zk_rollup:Zk_rollup.t -> - update:Zk_rollup.Update.t -> - Operation.packed tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/operation_generator.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/operation_generator.ml deleted file mode 100644 index 587f3f109276bb1a6eb3ab7675569ef0ff1f173e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/operation_generator.ml +++ /dev/null @@ -1,726 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** These generators aims at generating operations which are not - necessary correct. The goal is to tests functions such as {! - Operation.compare} with as much as possible parameters that play a - role in operation [weight] computation. - - When adding a new operation, one should also add its weight - computation, hence knows which kind of generator should be provided - for this new operation.*) - -open Protocol -open Alpha_context - -(** {2 Operations kind labelling.} *) - -let consensus_pass = `PConsensus - -let anonymous_pass = `PAnonymous - -let vote_pass = `PVote - -let manager_pass = `PManager - -let all_passes = [`PConsensus; `PAnonymous; `PVote; `PManager] - -let all_non_manager_passes = [`PConsensus; `PAnonymous; `PVote] - -let consensus_kinds = [`KPreattestation; `KAttestation] - -let anonymous_kinds = - [ - `KSeed_nonce_revelation; - `KVdf_revelation; - `KDouble_attestation; - `KDouble_preattestation; - `KDouble_baking; - `KActivate_account; - ] - -let vote_kinds = [`KProposals; `KBallot] - -(* N.b. we do not consider Failing_noop as those will never be valid. *) -let manager_kinds = - [ - `KReveal; - `KTransaction; - `KOrigination; - `KDelegation; - `KSet_deposits_limit; - `KIncrease_paid_storage; - `KRegister_global_constant; - `KTransfer_ticket; - `KDal_publish_commitment; - `KSc_rollup_originate; - `KSc_rollup_add_messages; - `KSc_rollup_cement; - `KSc_rollup_publish; - `KSc_rollup_refute; - `KSc_rollup_timeout; - `KSc_rollup_execute_outbox_message; - `KSc_rollup_recover_bond; - ] - -let pass_to_operation_kinds = function - | `PConsensus -> consensus_kinds - | `PVote -> vote_kinds - | `PAnonymous -> anonymous_kinds - | `PManager -> [`KManager] - -let pp_kind fmt k = - Format.fprintf - fmt - "%s" - (match k with - | `KPreattestation -> "KPreattestation" - | `KAttestation -> "KAttestation" - | `KDal_attestation -> "KDal_attestation" - | `KSeed_nonce_revelation -> "KSeed_nonce_revelation" - | `KVdf_revelation -> "KVdf_revelation" - | `KDouble_attestation -> "KDouble_attestation" - | `KDouble_preattestation -> "KDouble_preattestation" - | `KDouble_baking -> "KDouble_baking" - | `KActivate_account -> "KActivate_account" - | `KProposals -> "KProposals" - | `KBallot -> "KBallot" - | `KManager -> "KManager") - -(** {2 Generators} *) - -module Gen_hash (H : sig - type t - - val size : int - - val of_bytes_exn : bytes -> t -end) = -struct - let gen = - let open QCheck2.Gen in - let+ str = string_size (pure H.size) in - H.of_bytes_exn (Bytes.unsafe_of_string str) -end - -(** {3 Selection in hashes list} *) - -let gen_block_hash = - let module G = Gen_hash (Block_hash) in - G.gen - -let random_payload_hash = - let module G = Gen_hash (Block_payload_hash) in - G.gen - -let gen_algo = QCheck2.Gen.oneofl Signature.algos - -let random_seed = - let open QCheck2.Gen in - let+ str = string_size (pure Tezos_crypto.Hacl.Ed25519.sk_size) in - Bytes.unsafe_of_string str - -let random_keys = - let open QCheck2.Gen in - let* algo = gen_algo in - let+ seed = random_seed in - Signature.generate_key ~algo ~seed () - -let random_tz1 = - let open QCheck2.Gen in - let+ str = string_size (pure Signature.Ed25519.Public_key_hash.size) in - (Ed25519 (Signature.Ed25519.Public_key_hash.of_string_exn str) - : public_key_hash) - -let random_tz2 = - let open QCheck2.Gen in - let+ str = string_size (pure Signature.Secp256k1.Public_key_hash.size) in - (Secp256k1 (Signature.Secp256k1.Public_key_hash.of_string_exn str) - : public_key_hash) - -let random_tz3 = - let open QCheck2.Gen in - let+ str = string_size (pure Signature.P256.Public_key_hash.size) in - (P256 (Signature.P256.Public_key_hash.of_string_exn str) : public_key_hash) - -let random_tz4 = - let open QCheck2.Gen in - let+ str = string_size (pure Signature.Bls.Public_key_hash.size) in - (Bls (Signature.Bls.Public_key_hash.of_string_exn str) : public_key_hash) - -let random_pkh = - let open QCheck2.Gen in - let* algo = gen_algo in - match algo with - | Ed25519 -> random_tz1 - | Secp256k1 -> random_tz2 - | P256 -> random_tz3 - | Bls -> random_tz4 - -let random_pk = - let open QCheck2.Gen in - let+ _, pk, _ = random_keys in - pk - -let random_signature = - let open QCheck2.Gen in - let* algo = option ~ratio:0.8 gen_algo in - match algo with - | None -> - let+ str = string_size (pure Signature.Ed25519.size) in - (Unknown (Bytes.unsafe_of_string str) : Signature.t) - | Some Ed25519 -> - let+ str = string_size (pure Signature.Ed25519.size) in - (Ed25519 (Signature.Ed25519.of_string_exn str) : Signature.t) - | Some Secp256k1 -> - let+ str = string_size (pure Signature.Secp256k1.size) in - (Secp256k1 (Signature.Secp256k1.of_string_exn str) : Signature.t) - | Some P256 -> - let+ str = string_size (pure Signature.P256.size) in - (P256 (Signature.P256.of_string_exn str) : Signature.t) - | Some Bls -> - let+ seed = random_seed in - let _, _, sk = Signature.generate_key ~algo:Bls ~seed () in - Signature.sign sk Bytes.empty - -let random_signature = - let open QCheck2.Gen in - graft_corners - random_signature - Signature. - [ - of_ed25519 Signature.Ed25519.zero; - of_secp256k1 Signature.Secp256k1.zero; - of_p256 Signature.P256.zero; - of_bls Signature.Bls.zero; - Unknown (Bytes.make 64 '\000'); - ] - () - -let random_contract_hash = - let module G = Gen_hash (Contract_hash) in - G.gen - -let block_headers = - let bh1 = - {json|{ "level": 2, "proto": 1, "predecessor": "BLbcVY1kYiKQy2MJJfoHJMN2xRk5QPG1PEKWMDSyW2JMxBsMmiL", "timestamp": "2022-08-08T11:16:30Z", "validation_pass": 4, "operations_hash": "LLoa7bxRTKaQN2bLYoitYB6bU2DvLnBAqrVjZcvJ364cTcX2PZYKU", "fitness": [ "02", "00000002", "", "ffffffff", "00000001" ], "context": "CoUvpF8XBUfz3w9CJumt4ZKGZkrcdcfs1Qdrrd1ZeFij64E1QCud", "payload_hash": "vh2TyrWeZ2dydEy9ZjmvrjQvyCs5sdHZPypcZrXDUSM1tNuPermf", "payload_round": 1, "proof_of_work_nonce": "62de1e0d00000000", "liquidity_baking_toggle_vote": "pass", "adaptive_issuance_vote": "pass", "signature": "sigaXGo4DWsZwo1SvbKCp2hLgE5jcwd61Ufkc3iMt3sXy3NBj9jticuJKJnRhyH2ZPJQMwEuDqQTgZgoK5xRH6HeF7YxLb4u" }|json} - in - let bh2 = - {json|{ "level": 3, "proto": 1, "predecessor": "BLAUNUbzKHgA4DYQEXCbxY73wdE2roGAzvJJbFp8dQe62Ekpada", "timestamp": "2022-08-08T11:16:32Z", "validation_pass": 4, "operations_hash": "LLoaWjBX8Cm8DVpoLNtm7FPNnxUdL6Dakq122pVfNHYaf2rE9GQXi", "fitness": [ "02", "00000003", "", "fffffffe", "00000000" ], "context": "CoUtWowJUqXwMm4pbR1jjyFfVRHqRHGs6bYVDaaByvbmULoAND2x", "payload_hash": "vh1p1VzeYjZLEW6WDqdTwVy354KEmGCDgPmagEKcLN4NT4X58mNk", "payload_round": 0, "proof_of_work_nonce": "62de1e0d00000000", "liquidity_baking_toggle_vote": "pass", "adaptive_issuance_vote": "pass", "signature": "sigVqWWE7BPuxHqPWiVRmzQ1eMZZAPAxGJ94ytY2sjV8Y1Z4QH1F2bPGZS1ZeWDbqmcppPPFobRpi7wNasQ17Mm9CFGKag2t" }|json} - in - let bh3 = - {json|{ "level": 4, "proto": 1, "predecessor": "BLuurCvGmNPTzXSnGCpcFPy5h8A49PwH2LnfAWBnp5R1qv5czwe", "timestamp": "2022-08-08T11:16:33Z", "validation_pass": 4, "operations_hash": "LLoaf8AANzyNxhk715zykDrwG5Bpqw6FsZLWWNp2Dcm3ewFrcc3Wc", "fitness": [ "02", "00000004", "", "ffffffff", "00000000" ], "context": "CoVzxEBMDhxpGVxrguik6r5qVogJBFyhuvwm2KZBcsmvqhekPiwL", "payload_hash": "vh2gWcSUUhJBwvjx4vS7JN5ioMVWpHCSK6W2MKNPr5dn6NUdfFDQ", "payload_round": 0, "proof_of_work_nonce": "62de1e0d00000000", "seed_nonce_hash": "nceV3VjdHp1yk6uqcQicQBxLJY1AfWvLSabQpqnpiqkC1q2tS35EN", "liquidity_baking_toggle_vote": "pass", "adaptive_issuance_vote": "pass", "signature": "sigijumaDLSQwjh2AKK7af1VcEDsZsRwbweL8hF176puhHy3ySVocNCbrwPqJLiQP8EbqY5YL6z6b1vDaw12h8MQU2Rh4SW1" }|json} - in - List.map - (fun s -> - let open Data_encoding.Json in - from_string s |> function - | Ok json -> destruct Alpha_context.Block_header.encoding json - | Error _ -> assert false) - [bh1; bh2; bh3] - -let random_block_header = QCheck2.Gen.oneofl block_headers - -let random_sc_rollup = - let module G = Gen_hash (Sc_rollup.Address) in - G.gen - -let random_proto = - let module G = Gen_hash (Protocol_hash) in - G.gen - -let random_code = - let open QCheck2.Gen in - let+ str = string_size (pure Signature.Ed25519.Public_key_hash.size) in - let (`Hex hex) = Hex.of_string str in - Blinded_public_key_hash.activation_code_of_hex hex - |> WithExceptions.Option.get ~loc:__LOC__ - -(** {2 Operations parameters generators} *) - -let random_shell : Tezos_base.Operation.shell_header QCheck2.Gen.t = - let open QCheck2.Gen in - let+ branch = gen_block_hash in - Tezos_base.Operation.{branch} - -let gen_slot = - let open QCheck2.Gen in - let+ i = small_nat in - match Slot.Internal_for_tests.of_int i with - | Ok slot -> slot - | Error _ -> assert false - -let gen_level = - let open QCheck2.Gen in - let+ i = ui32 in - match Raw_level.of_int32 i with Ok v -> v | Error _ -> assert false - -let gen_round = - let open QCheck2.Gen in - let+ i = ui32 in - match Round.of_int32 i with Ok v -> v | Error _ -> assert false - -let generate_consensus_content : consensus_content QCheck2.Gen.t = - let open QCheck2.Gen in - let* slot = gen_slot in - let* level = gen_level in - let* round = gen_round in - let+ block_payload_hash = random_payload_hash in - {slot; level; round; block_payload_hash} - -let gen_tez = - let open QCheck2.Gen in - let+ i = ui64 in - match Tez.of_mutez i with None -> Tez.zero | Some v -> v - -let gen_fee = gen_tez - -let gen_amount = gen_tez - -let gen_amount_in_bytes = - let open QCheck2.Gen in - let+ i = nat in - Z.of_int i - -let random_contract = - let open QCheck2.Gen in - let* b = bool in - if b then - let+ pkh = random_pkh in - Contract.Implicit pkh - else - let+ contract_hash = random_contract_hash in - Contract.Originated contract_hash - -let gen_counters = - let open QCheck2.Gen in - let+ i = nat in - Manager_counter.Internal_for_tests.of_int i - -let gen_ticket_amounts = - let open QCheck2.Gen in - let+ i = nat in - Option.value (Ticket_amount.of_zint (Z.of_int i)) ~default:Ticket_amount.one - -let gen_gas_limit = - let open QCheck2.Gen in - let+ i = nat in - Gas.Arith.integral_of_int_exn i - -let gen_storage_limit = - let open QCheck2.Gen in - let+ i = nat in - Z.of_int i - -let nonces = - List.map - (fun i -> - let b = Bytes.create 32 in - Bytes.set_int8 b 0 i ; - Alpha_context.Nonce.of_bytes b |> function - | Ok v -> v - | Error _ -> assert false) - [1; 2; 3] - -let random_nonce = QCheck2.Gen.oneofl nonces - -let vdf_solutions = - let open Environment.Vdf in - let opt_assert = function Some v -> v | None -> assert false in - List.map - (fun i -> - let b = Bytes.create form_size_bytes in - Bytes.set_int8 b 0 i ; - let result = result_of_bytes_opt b |> opt_assert in - let proof = proof_of_bytes_opt b |> opt_assert in - (result, proof)) - [1; 2; 3] - -(** {2 Generators for each Operation Kind} *) - -let wrap_operation sh (pdata : 'kind protocol_data) : 'kind operation = - {shell = sh; protocol_data = pdata} - -let generate_op (gen_op : 'kind contents QCheck2.Gen.t) : - 'kind operation QCheck2.Gen.t = - let open QCheck2.Gen in - let* op = gen_op in - let* signature = option ~ratio:0.9 random_signature in - let+ shell = random_shell in - let contents = Single op in - let protocol_data = {contents; signature} in - wrap_operation shell protocol_data - -let generate_operation gen_op = - let open QCheck2.Gen in - let+ op = generate_op gen_op in - Operation.pack op - -let generate_preattestation = - let open QCheck2.Gen in - let+ cc = generate_consensus_content in - Preattestation cc - -let generate_attestation = - let open QCheck2.Gen in - let+ cc = generate_consensus_content in - Attestation {consensus_content = cc; dal_content = None} - -let generate_vdf_revelation = - let open QCheck2.Gen in - let+ solution = oneofl vdf_solutions in - Vdf_revelation {solution} - -let generate_seed_nonce_revelation = - let open QCheck2.Gen in - let* level = gen_level in - let+ nonce = random_nonce in - Seed_nonce_revelation {level; nonce} - -let generate_double_preattestation = - let open QCheck2.Gen in - let* op1 = generate_op generate_preattestation in - let+ op2 = generate_op generate_preattestation in - Double_preattestation_evidence {op1; op2} - -let generate_double_attestation = - let open QCheck2.Gen in - let* op1 = generate_op generate_attestation in - let+ op2 = generate_op generate_attestation in - Double_attestation_evidence {op1; op2} - -let generate_double_baking = - let open QCheck2.Gen in - let* bh1 = random_block_header in - let+ bh2 = random_block_header in - Double_baking_evidence {bh1; bh2} - -let generate_activate_account = - let open QCheck2.Gen in - let* activation_code = random_code in - let+ id = random_tz1 in - let id = match id with Signature.Ed25519 pkh -> pkh | _ -> assert false in - Activate_account {id; activation_code} - -let random_period = - let open QCheck2.Gen in - let+ i = ui32 in - i - -let generate_proposals = - let open QCheck2.Gen in - let* source = random_pkh in - let+ period = random_period in - let proposals = [] in - Proposals {source; period; proposals} - -let generate_ballot = - let open QCheck2.Gen in - let* source = random_pkh in - let* period = random_period in - let+ proposal = random_proto in - let ballot = Vote.Pass in - Ballot {source; period; proposal; ballot} - -let generate_manager_aux ?source gen_manop = - let open QCheck2.Gen in - let* source = - match source with None -> random_pkh | Some source -> return source - in - let* fee = gen_fee in - let* counter = gen_counters in - let* gas_limit = gen_gas_limit in - let* storage_limit = gen_storage_limit in - let+ operation = gen_manop in - Manager_operation {source; fee; counter; operation; gas_limit; storage_limit} - -let generate_manager ?source gen_manop = - generate_op (generate_manager_aux ?source gen_manop) - -let generate_manager_operation ?source gen_manop = - let open QCheck2.Gen in - let+ manop = generate_manager ?source gen_manop in - Operation.pack manop - -let generate_reveal = - let open QCheck2.Gen in - let+ pk = random_pk in - Reveal pk - -let generate_transaction = - let open QCheck2.Gen in - let* amount = gen_amount in - let+ destination = random_contract in - let parameters = Script.unit_parameter in - let entrypoint = Entrypoint.default in - Transaction {amount; parameters; entrypoint; destination} - -let generate_origination = - let open QCheck2.Gen in - let+ credit = gen_amount in - let delegate = None in - let script = Script.{code = unit_parameter; storage = unit_parameter} in - Origination {delegate; script; credit} - -let generate_delegation = - let open QCheck2.Gen in - let+ delegate = option random_pkh in - Delegation delegate - -let generate_increase_paid_storage = - let open QCheck2.Gen in - let* amount_in_bytes = gen_amount_in_bytes in - let+ destination = random_contract_hash in - Increase_paid_storage {amount_in_bytes; destination} - -let generate_set_deposits_limit = - let open QCheck2.Gen in - let+ amount_opt = option gen_amount in - Set_deposits_limit amount_opt - -let generate_register_global_constant = - let value = Script_repr.lazy_expr (Expr.from_string "Pair 1 2") in - QCheck2.Gen.pure (Register_global_constant {value}) - -let generate_transfer_ticket = - let open QCheck2.Gen in - let* ticketer = random_contract in - let* destination = random_contract in - let+ amount = gen_ticket_amounts in - let contents = Script.lazy_expr (Expr.from_string "1") in - let ty = Script.lazy_expr (Expr.from_string "nat") in - let entrypoint = Entrypoint.default in - Transfer_ticket {contents; ty; ticketer; amount; destination; entrypoint} - -let generate_dal_publish_commitment = - let slot_index = Alpha_context.Dal.Slot_index.zero in - let commitment = Alpha_context.Dal.Slot.Commitment.zero in - let commitment_proof = Alpha_context.Dal.Slot.Commitment_proof.zero in - let slot_header = - Alpha_context.Dal.Operations.Publish_commitment. - {slot_index; commitment; commitment_proof} - in - QCheck2.Gen.pure (Dal_publish_commitment slot_header) - -let generate_sc_rollup_originate = - let kind = Sc_rollup.Kind.Example_arith in - let boot_sector = "" in - let parameters_ty = Script.lazy_expr (Expr.from_string "1") in - let whitelist = None in - QCheck2.Gen.pure - (Sc_rollup_originate {kind; boot_sector; parameters_ty; whitelist}) - -let generate_sc_rollup_add_messages = - let open QCheck2.Gen in - return (Sc_rollup_add_messages {messages = []}) - -let sc_dummy_commitment = - let number_of_ticks = - match Sc_rollup.Number_of_ticks.of_value 3000L with - | None -> assert false - | Some x -> x - in - Sc_rollup.Commitment. - { - predecessor = Sc_rollup.Commitment.Hash.zero; - inbox_level = Raw_level.of_int32_exn Int32.zero; - number_of_ticks; - compressed_state = Sc_rollup.State_hash.zero; - } - -let generate_sc_rollup_cement = - let open QCheck2.Gen in - let+ rollup = random_sc_rollup in - Sc_rollup_cement {rollup} - -let generate_sc_rollup_publish = - let open QCheck2.Gen in - let+ rollup = random_sc_rollup in - let commitment = sc_dummy_commitment in - Sc_rollup_publish {rollup; commitment} - -let generate_sc_rollup_refute = - let open QCheck2.Gen in - let* opponent = random_pkh in - let+ rollup = random_sc_rollup in - let refutation : Sc_rollup.Game.refutation = - Sc_rollup.Game.Move {choice = Sc_rollup.Tick.initial; step = Dissection []} - in - Sc_rollup_refute {rollup; opponent; refutation} - -let generate_sc_rollup_timeout = - let open QCheck2.Gen in - let* source = random_pkh in - let* rollup = random_sc_rollup in - let+ staker = random_pkh in - let stakers = Sc_rollup.Game.Index.make source staker in - Sc_rollup_timeout {rollup; stakers} - -let generate_sc_rollup_execute_outbox_message = - let open QCheck2.Gen in - let+ rollup = random_sc_rollup in - let cemented_commitment = - Sc_rollup.Commitment.hash_uncarbonated sc_dummy_commitment - in - let output_proof = "" in - Sc_rollup_execute_outbox_message {rollup; cemented_commitment; output_proof} - -let generate_sc_rollup_recover_bond = - let open QCheck2.Gen in - let* staker = random_pkh in - let+ sc_rollup = random_sc_rollup in - Sc_rollup_recover_bond {sc_rollup; staker} - -(** {2 By Kind Operation Generator} *) - -let generator_of ?source = function - | `KReveal -> generate_manager_operation ?source generate_reveal - | `KTransaction -> generate_manager_operation ?source generate_transaction - | `KOrigination -> generate_manager_operation ?source generate_origination - | `KSet_deposits_limit -> - generate_manager_operation ?source generate_set_deposits_limit - | `KIncrease_paid_storage -> - generate_manager_operation ?source generate_increase_paid_storage - | `KDelegation -> generate_manager_operation ?source generate_delegation - | `KRegister_global_constant -> - generate_manager_operation ?source generate_register_global_constant - | `KTransfer_ticket -> - generate_manager_operation ?source generate_transfer_ticket - | `KDal_publish_commitment -> - generate_manager_operation ?source generate_dal_publish_commitment - | `KSc_rollup_originate -> - generate_manager_operation ?source generate_sc_rollup_originate - | `KSc_rollup_add_messages -> - generate_manager_operation ?source generate_sc_rollup_add_messages - | `KSc_rollup_cement -> - generate_manager_operation ?source generate_sc_rollup_cement - | `KSc_rollup_publish -> - generate_manager_operation ?source generate_sc_rollup_publish - | `KSc_rollup_refute -> - generate_manager_operation ?source generate_sc_rollup_refute - | `KSc_rollup_timeout -> - generate_manager_operation ?source generate_sc_rollup_timeout - | `KSc_rollup_execute_outbox_message -> - generate_manager_operation - ?source - generate_sc_rollup_execute_outbox_message - | `KSc_rollup_recover_bond -> - generate_manager_operation ?source generate_sc_rollup_recover_bond - -let generate_non_manager_operation = - let open QCheck2.Gen in - let* pass = oneofl all_non_manager_passes in - let* kind = oneofl (pass_to_operation_kinds pass) in - match kind with - | `KPreattestation -> generate_operation generate_preattestation - | `KAttestation -> generate_operation generate_attestation - | `KSeed_nonce_revelation -> generate_operation generate_seed_nonce_revelation - | `KVdf_revelation -> generate_operation generate_vdf_revelation - | `KDouble_attestation -> generate_operation generate_double_attestation - | `KDouble_preattestation -> generate_operation generate_double_preattestation - | `KDouble_baking -> generate_operation generate_double_baking - | `KActivate_account -> generate_operation generate_activate_account - | `KProposals -> generate_operation generate_proposals - | `KBallot -> generate_operation generate_ballot - | `KManager -> assert false - -let generate_manager_operation batch_size = - let open QCheck2.Gen in - let* source = random_pkh in - let source = Some source in - let* l = - flatten_l (Stdlib.List.init batch_size (fun _ -> oneofl manager_kinds)) - in - let* packed_manager_ops = flatten_l (List.map (generator_of ?source) l) in - let first_op = Stdlib.List.hd packed_manager_ops in - let unpacked_operations = - List.map - (function - | {Alpha_context.protocol_data = Operation_data {contents; _}; _} -> ( - match Contents_list contents with - | Contents_list (Single o) -> Contents o - | Contents_list - (Cons (Manager_operation {operation = Reveal _; _}, Single o)) - -> - Contents o - | _ -> assert false)) - packed_manager_ops - in - let contents_list = - List.fold_left - (fun acc -> function - | Contents (Manager_operation m) -> - Contents (Manager_operation m) :: acc - | x -> x :: acc) - [] - unpacked_operations - |> List.rev - in - let (Contents_list contents_list) = - match Operation.of_list contents_list with Ok v -> v | _ -> assert false - in - let signature = - match first_op.protocol_data with - | Operation_data {signature; _} -> signature - in - let protocol_data = {contents = contents_list; signature} in - return (Operation.pack {shell = first_op.shell; protocol_data}) - -(** The default upper bound on the number of manager operations in a batch. - - As of December 2022, there is no batch maximal size enforced - anywhere in the protocol. However, the Octez Shell only accepts - batches of at most [operations_batch_size] operations, which has a - default value of [50] in [src/lib_shell_services/shell_limits.ml]. - The protocol tests do not necessarily have to align with this - value, but there is no reason either to choose a different - one. Therefore, they use the same bound, but decremented once to - account for some tests adding a reveal at the front of the batch as - needed. *) -let max_batch_size = 49 - -let generate_operation = - let open QCheck2.Gen in - let* pass = oneofl all_passes in - let* kind = oneofl (pass_to_operation_kinds pass) in - let+ packed_operation = - match kind with - | `KPreattestation -> generate_operation generate_preattestation - | `KAttestation -> generate_operation generate_attestation - | `KSeed_nonce_revelation -> - generate_operation generate_seed_nonce_revelation - | `KVdf_revelation -> generate_operation generate_vdf_revelation - | `KDouble_attestation -> generate_operation generate_double_attestation - | `KDouble_preattestation -> - generate_operation generate_double_preattestation - | `KDouble_baking -> generate_operation generate_double_baking - | `KActivate_account -> generate_operation generate_activate_account - | `KProposals -> generate_operation generate_proposals - | `KBallot -> generate_operation generate_ballot - | `KManager -> - let* batch_size = int_range 1 max_batch_size in - generate_manager_operation batch_size - in - (kind, (Operation.hash_packed packed_operation, packed_operation)) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/result_wrap_syntax.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/result_wrap_syntax.ml deleted file mode 100644 index bcdac4e586f8e5a913ce8c86ff930af9341c7297..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/result_wrap_syntax.ml +++ /dev/null @@ -1,22 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2023 Trilitech *) -(* *) -(*****************************************************************************) - -include Tezos_base.TzPervasives.Result_syntax - -let wrap = Environment.wrap_tzresult - -let ( let@ ) m f = - let x = wrap m in - f x - -let ( let*@ ) m f = - let* x = wrap m in - f x - -let ( let+@ ) m f = - let+ x = wrap m in - f x diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/result_wrap_syntax.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/result_wrap_syntax.mli deleted file mode 100644 index 0c296a30bd6cdaaf17f62be1b06a54821fa2bb74..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/result_wrap_syntax.mli +++ /dev/null @@ -1,32 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2023 Trilitech *) -(* *) -(*****************************************************************************) - -(** Extends the {!Result_syntax} with additional utilities for wrapping - results produced by the protocol, i.e. [Environment.Error_monad.tzresult], - to [tzresult] values used in the tests. - - The added utilities are binding operators. They use the same symbols as - the ones from {!Result_syntax} with an added [@] character. This - character symbolizes the {!e wrapping} of the internal error monad type in a - shell error. *) - -include module type of Tezos_base.TzPervasives.Result_syntax - -(** [wrap res] is equivalent to [Environment.wrap_tzresult res] *) -val wrap : 'a Environment.Error_monad.tzresult -> 'a tzresult - -(** [let@ x = m in f x] is equivalent to [let x = Environment.wrap_tzresult m in f x] *) -val ( let@ ) : 'a Environment.Error_monad.tzresult -> ('a tzresult -> 'b) -> 'b - -(** [let*@ x = m in f x] is equivalent to [let* x = Environment.wrap_tzresult m in f x]. - Mnemonic: [@] "wraps" a protocol error in a shell error. *) -val ( let*@ ) : - 'a Environment.Error_monad.tzresult -> ('a -> 'b tzresult) -> 'b tzresult - -(** [let+@ x = m in f x] is equivalent to [let+ x = Environment.wrap_tzresult m in f x]. - Mnemonic: [@] "wraps" a protocol error in a shell error. *) -val ( let+@ ) : 'a Environment.Error_monad.tzresult -> ('a -> 'b) -> 'b tzresult diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/rewards.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/rewards.ml deleted file mode 100644 index 9499ddbba96144e6aa3f4c0fedfba06355ea9379..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/rewards.ml +++ /dev/null @@ -1,1641 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2019--2021 Nomadic Labs, *) -(* Copyright (c) 2019 Cryptium Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** The tables are precomputed using this the following formulas: - -let max_attestations = 256 -let max_reward = 40 - -let r = 0.5 -let a = 3. -let b = 1.5 - -let ( -- ) i j = List.init (j - i + 1) (fun x -> x + i) - -let baking_rewards = - let reward p e = - let r_aux = - if p = 0 then - r *. (float_of_int max_reward) - else - a - in - let r = r_aux /. (float_of_int max_attestations) in - let r = 1_000_000. *. r in - Float.to_int ((float_of_int e) *. (ceil r)) in - - let ps = 0 -- 2 in - let es = 0 -- max_attestations in - - List.map (fun p -> - List.map (fun e -> - reward p e - ) es |> Array.of_list - ) ps |> Array.of_list - - -let attesting_rewards = - let reward p e = - let r_aux = - (1. -. r) *. - (float_of_int max_reward) /. - (float_of_int max_attestations) in - let r = if p = 0 then r_aux else r_aux /. b in - let r = 1_000_000. *. r in - Float.to_int ((float_of_int e) *. (floor r)) in - - let ps = 0 -- 2 in - let es = 0 -- max_attestations in - - List.map (fun p -> - List.map (fun e -> - reward p e - ) es |> Array.of_list - ) ps |> Array.of_list - - *) - -let baking_rewards : int array array = - [| - [| - 0; - 78125; - 156250; - 234375; - 312500; - 390625; - 468750; - 546875; - 625000; - 703125; - 781250; - 859375; - 937500; - 1015625; - 1093750; - 1171875; - 1250000; - 1328125; - 1406250; - 1484375; - 1562500; - 1640625; - 1718750; - 1796875; - 1875000; - 1953125; - 2031250; - 2109375; - 2187500; - 2265625; - 2343750; - 2421875; - 2500000; - 2578125; - 2656250; - 2734375; - 2812500; - 2890625; - 2968750; - 3046875; - 3125000; - 3203125; - 3281250; - 3359375; - 3437500; - 3515625; - 3593750; - 3671875; - 3750000; - 3828125; - 3906250; - 3984375; - 4062500; - 4140625; - 4218750; - 4296875; - 4375000; - 4453125; - 4531250; - 4609375; - 4687500; - 4765625; - 4843750; - 4921875; - 5000000; - 5078125; - 5156250; - 5234375; - 5312500; - 5390625; - 5468750; - 5546875; - 5625000; - 5703125; - 5781250; - 5859375; - 5937500; - 6015625; - 6093750; - 6171875; - 6250000; - 6328125; - 6406250; - 6484375; - 6562500; - 6640625; - 6718750; - 6796875; - 6875000; - 6953125; - 7031250; - 7109375; - 7187500; - 7265625; - 7343750; - 7421875; - 7500000; - 7578125; - 7656250; - 7734375; - 7812500; - 7890625; - 7968750; - 8046875; - 8125000; - 8203125; - 8281250; - 8359375; - 8437500; - 8515625; - 8593750; - 8671875; - 8750000; - 8828125; - 8906250; - 8984375; - 9062500; - 9140625; - 9218750; - 9296875; - 9375000; - 9453125; - 9531250; - 9609375; - 9687500; - 9765625; - 9843750; - 9921875; - 10000000; - 10078125; - 10156250; - 10234375; - 10312500; - 10390625; - 10468750; - 10546875; - 10625000; - 10703125; - 10781250; - 10859375; - 10937500; - 11015625; - 11093750; - 11171875; - 11250000; - 11328125; - 11406250; - 11484375; - 11562500; - 11640625; - 11718750; - 11796875; - 11875000; - 11953125; - 12031250; - 12109375; - 12187500; - 12265625; - 12343750; - 12421875; - 12500000; - 12578125; - 12656250; - 12734375; - 12812500; - 12890625; - 12968750; - 13046875; - 13125000; - 13203125; - 13281250; - 13359375; - 13437500; - 13515625; - 13593750; - 13671875; - 13750000; - 13828125; - 13906250; - 13984375; - 14062500; - 14140625; - 14218750; - 14296875; - 14375000; - 14453125; - 14531250; - 14609375; - 14687500; - 14765625; - 14843750; - 14921875; - 15000000; - 15078125; - 15156250; - 15234375; - 15312500; - 15390625; - 15468750; - 15546875; - 15625000; - 15703125; - 15781250; - 15859375; - 15937500; - 16015625; - 16093750; - 16171875; - 16250000; - 16328125; - 16406250; - 16484375; - 16562500; - 16640625; - 16718750; - 16796875; - 16875000; - 16953125; - 17031250; - 17109375; - 17187500; - 17265625; - 17343750; - 17421875; - 17500000; - 17578125; - 17656250; - 17734375; - 17812500; - 17890625; - 17968750; - 18046875; - 18125000; - 18203125; - 18281250; - 18359375; - 18437500; - 18515625; - 18593750; - 18671875; - 18750000; - 18828125; - 18906250; - 18984375; - 19062500; - 19140625; - 19218750; - 19296875; - 19375000; - 19453125; - 19531250; - 19609375; - 19687500; - 19765625; - 19843750; - 19921875; - 20000000; - |]; - [| - 0; - 11719; - 23438; - 35157; - 46876; - 58595; - 70314; - 82033; - 93752; - 105471; - 117190; - 128909; - 140628; - 152347; - 164066; - 175785; - 187504; - 199223; - 210942; - 222661; - 234380; - 246099; - 257818; - 269537; - 281256; - 292975; - 304694; - 316413; - 328132; - 339851; - 351570; - 363289; - 375008; - 386727; - 398446; - 410165; - 421884; - 433603; - 445322; - 457041; - 468760; - 480479; - 492198; - 503917; - 515636; - 527355; - 539074; - 550793; - 562512; - 574231; - 585950; - 597669; - 609388; - 621107; - 632826; - 644545; - 656264; - 667983; - 679702; - 691421; - 703140; - 714859; - 726578; - 738297; - 750016; - 761735; - 773454; - 785173; - 796892; - 808611; - 820330; - 832049; - 843768; - 855487; - 867206; - 878925; - 890644; - 902363; - 914082; - 925801; - 937520; - 949239; - 960958; - 972677; - 984396; - 996115; - 1007834; - 1019553; - 1031272; - 1042991; - 1054710; - 1066429; - 1078148; - 1089867; - 1101586; - 1113305; - 1125024; - 1136743; - 1148462; - 1160181; - 1171900; - 1183619; - 1195338; - 1207057; - 1218776; - 1230495; - 1242214; - 1253933; - 1265652; - 1277371; - 1289090; - 1300809; - 1312528; - 1324247; - 1335966; - 1347685; - 1359404; - 1371123; - 1382842; - 1394561; - 1406280; - 1417999; - 1429718; - 1441437; - 1453156; - 1464875; - 1476594; - 1488313; - 1500032; - 1511751; - 1523470; - 1535189; - 1546908; - 1558627; - 1570346; - 1582065; - 1593784; - 1605503; - 1617222; - 1628941; - 1640660; - 1652379; - 1664098; - 1675817; - 1687536; - 1699255; - 1710974; - 1722693; - 1734412; - 1746131; - 1757850; - 1769569; - 1781288; - 1793007; - 1804726; - 1816445; - 1828164; - 1839883; - 1851602; - 1863321; - 1875040; - 1886759; - 1898478; - 1910197; - 1921916; - 1933635; - 1945354; - 1957073; - 1968792; - 1980511; - 1992230; - 2003949; - 2015668; - 2027387; - 2039106; - 2050825; - 2062544; - 2074263; - 2085982; - 2097701; - 2109420; - 2121139; - 2132858; - 2144577; - 2156296; - 2168015; - 2179734; - 2191453; - 2203172; - 2214891; - 2226610; - 2238329; - 2250048; - 2261767; - 2273486; - 2285205; - 2296924; - 2308643; - 2320362; - 2332081; - 2343800; - 2355519; - 2367238; - 2378957; - 2390676; - 2402395; - 2414114; - 2425833; - 2437552; - 2449271; - 2460990; - 2472709; - 2484428; - 2496147; - 2507866; - 2519585; - 2531304; - 2543023; - 2554742; - 2566461; - 2578180; - 2589899; - 2601618; - 2613337; - 2625056; - 2636775; - 2648494; - 2660213; - 2671932; - 2683651; - 2695370; - 2707089; - 2718808; - 2730527; - 2742246; - 2753965; - 2765684; - 2777403; - 2789122; - 2800841; - 2812560; - 2824279; - 2835998; - 2847717; - 2859436; - 2871155; - 2882874; - 2894593; - 2906312; - 2918031; - 2929750; - 2941469; - 2953188; - 2964907; - 2976626; - 2988345; - 3000064; - |]; - [| - 0; - 11719; - 23438; - 35157; - 46876; - 58595; - 70314; - 82033; - 93752; - 105471; - 117190; - 128909; - 140628; - 152347; - 164066; - 175785; - 187504; - 199223; - 210942; - 222661; - 234380; - 246099; - 257818; - 269537; - 281256; - 292975; - 304694; - 316413; - 328132; - 339851; - 351570; - 363289; - 375008; - 386727; - 398446; - 410165; - 421884; - 433603; - 445322; - 457041; - 468760; - 480479; - 492198; - 503917; - 515636; - 527355; - 539074; - 550793; - 562512; - 574231; - 585950; - 597669; - 609388; - 621107; - 632826; - 644545; - 656264; - 667983; - 679702; - 691421; - 703140; - 714859; - 726578; - 738297; - 750016; - 761735; - 773454; - 785173; - 796892; - 808611; - 820330; - 832049; - 843768; - 855487; - 867206; - 878925; - 890644; - 902363; - 914082; - 925801; - 937520; - 949239; - 960958; - 972677; - 984396; - 996115; - 1007834; - 1019553; - 1031272; - 1042991; - 1054710; - 1066429; - 1078148; - 1089867; - 1101586; - 1113305; - 1125024; - 1136743; - 1148462; - 1160181; - 1171900; - 1183619; - 1195338; - 1207057; - 1218776; - 1230495; - 1242214; - 1253933; - 1265652; - 1277371; - 1289090; - 1300809; - 1312528; - 1324247; - 1335966; - 1347685; - 1359404; - 1371123; - 1382842; - 1394561; - 1406280; - 1417999; - 1429718; - 1441437; - 1453156; - 1464875; - 1476594; - 1488313; - 1500032; - 1511751; - 1523470; - 1535189; - 1546908; - 1558627; - 1570346; - 1582065; - 1593784; - 1605503; - 1617222; - 1628941; - 1640660; - 1652379; - 1664098; - 1675817; - 1687536; - 1699255; - 1710974; - 1722693; - 1734412; - 1746131; - 1757850; - 1769569; - 1781288; - 1793007; - 1804726; - 1816445; - 1828164; - 1839883; - 1851602; - 1863321; - 1875040; - 1886759; - 1898478; - 1910197; - 1921916; - 1933635; - 1945354; - 1957073; - 1968792; - 1980511; - 1992230; - 2003949; - 2015668; - 2027387; - 2039106; - 2050825; - 2062544; - 2074263; - 2085982; - 2097701; - 2109420; - 2121139; - 2132858; - 2144577; - 2156296; - 2168015; - 2179734; - 2191453; - 2203172; - 2214891; - 2226610; - 2238329; - 2250048; - 2261767; - 2273486; - 2285205; - 2296924; - 2308643; - 2320362; - 2332081; - 2343800; - 2355519; - 2367238; - 2378957; - 2390676; - 2402395; - 2414114; - 2425833; - 2437552; - 2449271; - 2460990; - 2472709; - 2484428; - 2496147; - 2507866; - 2519585; - 2531304; - 2543023; - 2554742; - 2566461; - 2578180; - 2589899; - 2601618; - 2613337; - 2625056; - 2636775; - 2648494; - 2660213; - 2671932; - 2683651; - 2695370; - 2707089; - 2718808; - 2730527; - 2742246; - 2753965; - 2765684; - 2777403; - 2789122; - 2800841; - 2812560; - 2824279; - 2835998; - 2847717; - 2859436; - 2871155; - 2882874; - 2894593; - 2906312; - 2918031; - 2929750; - 2941469; - 2953188; - 2964907; - 2976626; - 2988345; - 3000064; - |]; - |] - -let attesting_rewards : int array array = - [| - [| - 0; - 78125; - 156250; - 234375; - 312500; - 390625; - 468750; - 546875; - 625000; - 703125; - 781250; - 859375; - 937500; - 1015625; - 1093750; - 1171875; - 1250000; - 1328125; - 1406250; - 1484375; - 1562500; - 1640625; - 1718750; - 1796875; - 1875000; - 1953125; - 2031250; - 2109375; - 2187500; - 2265625; - 2343750; - 2421875; - 2500000; - 2578125; - 2656250; - 2734375; - 2812500; - 2890625; - 2968750; - 3046875; - 3125000; - 3203125; - 3281250; - 3359375; - 3437500; - 3515625; - 3593750; - 3671875; - 3750000; - 3828125; - 3906250; - 3984375; - 4062500; - 4140625; - 4218750; - 4296875; - 4375000; - 4453125; - 4531250; - 4609375; - 4687500; - 4765625; - 4843750; - 4921875; - 5000000; - 5078125; - 5156250; - 5234375; - 5312500; - 5390625; - 5468750; - 5546875; - 5625000; - 5703125; - 5781250; - 5859375; - 5937500; - 6015625; - 6093750; - 6171875; - 6250000; - 6328125; - 6406250; - 6484375; - 6562500; - 6640625; - 6718750; - 6796875; - 6875000; - 6953125; - 7031250; - 7109375; - 7187500; - 7265625; - 7343750; - 7421875; - 7500000; - 7578125; - 7656250; - 7734375; - 7812500; - 7890625; - 7968750; - 8046875; - 8125000; - 8203125; - 8281250; - 8359375; - 8437500; - 8515625; - 8593750; - 8671875; - 8750000; - 8828125; - 8906250; - 8984375; - 9062500; - 9140625; - 9218750; - 9296875; - 9375000; - 9453125; - 9531250; - 9609375; - 9687500; - 9765625; - 9843750; - 9921875; - 10000000; - 10078125; - 10156250; - 10234375; - 10312500; - 10390625; - 10468750; - 10546875; - 10625000; - 10703125; - 10781250; - 10859375; - 10937500; - 11015625; - 11093750; - 11171875; - 11250000; - 11328125; - 11406250; - 11484375; - 11562500; - 11640625; - 11718750; - 11796875; - 11875000; - 11953125; - 12031250; - 12109375; - 12187500; - 12265625; - 12343750; - 12421875; - 12500000; - 12578125; - 12656250; - 12734375; - 12812500; - 12890625; - 12968750; - 13046875; - 13125000; - 13203125; - 13281250; - 13359375; - 13437500; - 13515625; - 13593750; - 13671875; - 13750000; - 13828125; - 13906250; - 13984375; - 14062500; - 14140625; - 14218750; - 14296875; - 14375000; - 14453125; - 14531250; - 14609375; - 14687500; - 14765625; - 14843750; - 14921875; - 15000000; - 15078125; - 15156250; - 15234375; - 15312500; - 15390625; - 15468750; - 15546875; - 15625000; - 15703125; - 15781250; - 15859375; - 15937500; - 16015625; - 16093750; - 16171875; - 16250000; - 16328125; - 16406250; - 16484375; - 16562500; - 16640625; - 16718750; - 16796875; - 16875000; - 16953125; - 17031250; - 17109375; - 17187500; - 17265625; - 17343750; - 17421875; - 17500000; - 17578125; - 17656250; - 17734375; - 17812500; - 17890625; - 17968750; - 18046875; - 18125000; - 18203125; - 18281250; - 18359375; - 18437500; - 18515625; - 18593750; - 18671875; - 18750000; - 18828125; - 18906250; - 18984375; - 19062500; - 19140625; - 19218750; - 19296875; - 19375000; - 19453125; - 19531250; - 19609375; - 19687500; - 19765625; - 19843750; - 19921875; - 20000000; - |]; - [| - 0; - 52083; - 104166; - 156249; - 208332; - 260415; - 312498; - 364581; - 416664; - 468747; - 520830; - 572913; - 624996; - 677079; - 729162; - 781245; - 833328; - 885411; - 937494; - 989577; - 1041660; - 1093743; - 1145826; - 1197909; - 1249992; - 1302075; - 1354158; - 1406241; - 1458324; - 1510407; - 1562490; - 1614573; - 1666656; - 1718739; - 1770822; - 1822905; - 1874988; - 1927071; - 1979154; - 2031237; - 2083320; - 2135403; - 2187486; - 2239569; - 2291652; - 2343735; - 2395818; - 2447901; - 2499984; - 2552067; - 2604150; - 2656233; - 2708316; - 2760399; - 2812482; - 2864565; - 2916648; - 2968731; - 3020814; - 3072897; - 3124980; - 3177063; - 3229146; - 3281229; - 3333312; - 3385395; - 3437478; - 3489561; - 3541644; - 3593727; - 3645810; - 3697893; - 3749976; - 3802059; - 3854142; - 3906225; - 3958308; - 4010391; - 4062474; - 4114557; - 4166640; - 4218723; - 4270806; - 4322889; - 4374972; - 4427055; - 4479138; - 4531221; - 4583304; - 4635387; - 4687470; - 4739553; - 4791636; - 4843719; - 4895802; - 4947885; - 4999968; - 5052051; - 5104134; - 5156217; - 5208300; - 5260383; - 5312466; - 5364549; - 5416632; - 5468715; - 5520798; - 5572881; - 5624964; - 5677047; - 5729130; - 5781213; - 5833296; - 5885379; - 5937462; - 5989545; - 6041628; - 6093711; - 6145794; - 6197877; - 6249960; - 6302043; - 6354126; - 6406209; - 6458292; - 6510375; - 6562458; - 6614541; - 6666624; - 6718707; - 6770790; - 6822873; - 6874956; - 6927039; - 6979122; - 7031205; - 7083288; - 7135371; - 7187454; - 7239537; - 7291620; - 7343703; - 7395786; - 7447869; - 7499952; - 7552035; - 7604118; - 7656201; - 7708284; - 7760367; - 7812450; - 7864533; - 7916616; - 7968699; - 8020782; - 8072865; - 8124948; - 8177031; - 8229114; - 8281197; - 8333280; - 8385363; - 8437446; - 8489529; - 8541612; - 8593695; - 8645778; - 8697861; - 8749944; - 8802027; - 8854110; - 8906193; - 8958276; - 9010359; - 9062442; - 9114525; - 9166608; - 9218691; - 9270774; - 9322857; - 9374940; - 9427023; - 9479106; - 9531189; - 9583272; - 9635355; - 9687438; - 9739521; - 9791604; - 9843687; - 9895770; - 9947853; - 9999936; - 10052019; - 10104102; - 10156185; - 10208268; - 10260351; - 10312434; - 10364517; - 10416600; - 10468683; - 10520766; - 10572849; - 10624932; - 10677015; - 10729098; - 10781181; - 10833264; - 10885347; - 10937430; - 10989513; - 11041596; - 11093679; - 11145762; - 11197845; - 11249928; - 11302011; - 11354094; - 11406177; - 11458260; - 11510343; - 11562426; - 11614509; - 11666592; - 11718675; - 11770758; - 11822841; - 11874924; - 11927007; - 11979090; - 12031173; - 12083256; - 12135339; - 12187422; - 12239505; - 12291588; - 12343671; - 12395754; - 12447837; - 12499920; - 12552003; - 12604086; - 12656169; - 12708252; - 12760335; - 12812418; - 12864501; - 12916584; - 12968667; - 13020750; - 13072833; - 13124916; - 13176999; - 13229082; - 13281165; - 13333248; - |]; - [| - 0; - 52083; - 104166; - 156249; - 208332; - 260415; - 312498; - 364581; - 416664; - 468747; - 520830; - 572913; - 624996; - 677079; - 729162; - 781245; - 833328; - 885411; - 937494; - 989577; - 1041660; - 1093743; - 1145826; - 1197909; - 1249992; - 1302075; - 1354158; - 1406241; - 1458324; - 1510407; - 1562490; - 1614573; - 1666656; - 1718739; - 1770822; - 1822905; - 1874988; - 1927071; - 1979154; - 2031237; - 2083320; - 2135403; - 2187486; - 2239569; - 2291652; - 2343735; - 2395818; - 2447901; - 2499984; - 2552067; - 2604150; - 2656233; - 2708316; - 2760399; - 2812482; - 2864565; - 2916648; - 2968731; - 3020814; - 3072897; - 3124980; - 3177063; - 3229146; - 3281229; - 3333312; - 3385395; - 3437478; - 3489561; - 3541644; - 3593727; - 3645810; - 3697893; - 3749976; - 3802059; - 3854142; - 3906225; - 3958308; - 4010391; - 4062474; - 4114557; - 4166640; - 4218723; - 4270806; - 4322889; - 4374972; - 4427055; - 4479138; - 4531221; - 4583304; - 4635387; - 4687470; - 4739553; - 4791636; - 4843719; - 4895802; - 4947885; - 4999968; - 5052051; - 5104134; - 5156217; - 5208300; - 5260383; - 5312466; - 5364549; - 5416632; - 5468715; - 5520798; - 5572881; - 5624964; - 5677047; - 5729130; - 5781213; - 5833296; - 5885379; - 5937462; - 5989545; - 6041628; - 6093711; - 6145794; - 6197877; - 6249960; - 6302043; - 6354126; - 6406209; - 6458292; - 6510375; - 6562458; - 6614541; - 6666624; - 6718707; - 6770790; - 6822873; - 6874956; - 6927039; - 6979122; - 7031205; - 7083288; - 7135371; - 7187454; - 7239537; - 7291620; - 7343703; - 7395786; - 7447869; - 7499952; - 7552035; - 7604118; - 7656201; - 7708284; - 7760367; - 7812450; - 7864533; - 7916616; - 7968699; - 8020782; - 8072865; - 8124948; - 8177031; - 8229114; - 8281197; - 8333280; - 8385363; - 8437446; - 8489529; - 8541612; - 8593695; - 8645778; - 8697861; - 8749944; - 8802027; - 8854110; - 8906193; - 8958276; - 9010359; - 9062442; - 9114525; - 9166608; - 9218691; - 9270774; - 9322857; - 9374940; - 9427023; - 9479106; - 9531189; - 9583272; - 9635355; - 9687438; - 9739521; - 9791604; - 9843687; - 9895770; - 9947853; - 9999936; - 10052019; - 10104102; - 10156185; - 10208268; - 10260351; - 10312434; - 10364517; - 10416600; - 10468683; - 10520766; - 10572849; - 10624932; - 10677015; - 10729098; - 10781181; - 10833264; - 10885347; - 10937430; - 10989513; - 11041596; - 11093679; - 11145762; - 11197845; - 11249928; - 11302011; - 11354094; - 11406177; - 11458260; - 11510343; - 11562426; - 11614509; - 11666592; - 11718675; - 11770758; - 11822841; - 11874924; - 11927007; - 11979090; - 12031173; - 12083256; - 12135339; - 12187422; - 12239505; - 12291588; - 12343671; - 12395754; - 12447837; - 12499920; - 12552003; - 12604086; - 12656169; - 12708252; - 12760335; - 12812418; - 12864501; - 12916584; - 12968667; - 13020750; - 13072833; - 13124916; - 13176999; - 13229082; - 13281165; - 13333248; - |]; - |] diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/sapling_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/sapling_helpers.ml deleted file mode 100644 index 25100ebcb4062b936fc86a98c240372f40634171..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/sapling_helpers.ml +++ /dev/null @@ -1,501 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol - -module Common = struct - let memo_size_of_int i = - match Alpha_context.Sapling.Memo_size.parse_z @@ Z.of_int i with - | Ok memo_size -> memo_size - | Error _ -> assert false - - let int_of_memo_size ms = - Alpha_context.Sapling.Memo_size.unparse_to_z ms |> Z.to_int - - let assert_true res = - let open Lwt_result_syntax in - let+ res in - assert res - - let assert_false res = - let open Lwt_result_syntax in - let+ res in - assert (not res) - - let assert_some res = - let open Lwt_result_syntax in - let+ result = res in - match result with Some s -> s | None -> assert false - - let assert_none res = - let open Lwt_result_syntax in - let* result = res in - match result with Some _ -> assert false | None -> return_unit - - let assert_error res = - let open Lwt_syntax in - let* result = res in - match result with Ok _ -> assert false | Error _ -> return_ok_unit - - let print ?(prefix = "") e v = - Format.printf - "%s: %s\n" - prefix - Data_encoding.(Json.to_string (Json.construct e v)) - - let to_hex x encoding = - Hex.show (Hex.of_bytes Data_encoding.Binary.(to_bytes_exn encoding x)) - - let randomized_byte ?pos v encoding = - let bytes = Data_encoding.Binary.(to_bytes_exn encoding v) in - let rec aux () = - let random_char = Random.int 256 |> char_of_int in - let pos = Option.value ~default:(Random.int (Bytes.length bytes)) pos in - if random_char = Bytes.get bytes pos then aux () - else Bytes.set bytes pos random_char - in - aux () ; - Data_encoding.Binary.(of_bytes_exn encoding bytes) - - type wallet = { - sk : Tezos_sapling.Core.Wallet.Spending_key.t; - vk : Tezos_sapling.Core.Wallet.Viewing_key.t; - } - - let wallet_gen () = - let sk = - Tezos_sapling.Core.Wallet.Spending_key.of_seed - (Tezos_crypto.Hacl.Rand.gen 32) - in - let vk = Tezos_sapling.Core.Wallet.Viewing_key.of_sk sk in - {sk; vk} - - let gen_addr n vk = - let rec aux n index res = - if Compare.Int.( <= ) n 0 then res - else - let new_index, new_addr = - Tezos_sapling.Core.Client.Viewing_key.new_address vk index - in - aux (n - 1) new_index (new_addr :: res) - in - aux n Tezos_sapling.Core.Client.Viewing_key.default_index [] - - let gen_nf () = - let {vk; _} = wallet_gen () in - let addr = - snd - @@ Tezos_sapling.Core.Wallet.Viewing_key.(new_address vk default_index) - in - let amount = 10L in - let rcm = Tezos_sapling.Core.Client.Rcm.random () in - let position = 10L in - Tezos_sapling.Core.Client.Nullifier.compute addr vk ~amount rcm ~position - - let gen_cm_cipher ~memo_size () = - let open Tezos_sapling.Core.Client in - let {vk; _} = wallet_gen () in - let addr = - snd - @@ Tezos_sapling.Core.Wallet.Viewing_key.(new_address vk default_index) - in - let amount = 10L in - let rcm = Tezos_sapling.Core.Client.Rcm.random () in - let cm = Commitment.compute addr ~amount rcm in - let cipher = - let payload_enc = - Data_encoding.Binary.to_bytes_exn - Data_encoding.bytes - (Tezos_crypto.Hacl.Rand.gen (memo_size + 4 + 16 + 11 + 32 + 8)) - in - Data_encoding.Binary.of_bytes_exn - Ciphertext.encoding - (Bytes.concat - Bytes.empty - [ - Bytes.create (32 + 32); - payload_enc; - Bytes.create (24 + 64 + 16 + 24); - ]) - in - (cm, cipher) - - (* rebuilds from empty at each call *) - let client_state_of_diff ~memo_size (root, diff) = - let open Alpha_context.Sapling in - let cs = - Tezos_sapling.Storage.add - (Tezos_sapling.Storage.empty ~memo_size) - diff.commitments_and_ciphertexts - in - assert (Tezos_sapling.Storage.get_root cs = root) ; - List.fold_left - (fun s nf -> Tezos_sapling.Storage.add_nullifier s nf) - cs - diff.nullifiers -end - -module Alpha_context_helpers = struct - include Common - - let init () = - let open Lwt_result_wrap_syntax in - let* b, _contract = Context.init1 () in - let+@ ctxt, _, _ = - Alpha_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - (* ~fitness:b.header.shell.fitness *) - in - ctxt - - (* takes a state obtained from Sapling.empty_state or Sapling.state_from_id and - passed through Sapling.verify_update *) - let finalize ctx = - let open Lwt_result_wrap_syntax in - let open Alpha_context in - let open Sapling in - function - | {id = None; diff; memo_size} -> - let*@ ctx, id = Sapling.fresh ~temporary:false ctx in - let init = Lazy_storage.Alloc {memo_size} in - let lazy_storage_diff = Lazy_storage.Update {init; updates = diff} in - let diffs = [Lazy_storage.make Sapling_state id lazy_storage_diff] in - let+@ ctx, _added_size = Lazy_storage.apply ctx diffs in - (ctx, id) - | {id = Some id; diff; _} -> - let init = Lazy_storage.Existing in - let lazy_storage_diff = Lazy_storage.Update {init; updates = diff} in - let diffs = [Lazy_storage.make Sapling_state id lazy_storage_diff] in - let+@ ctx, _added_size = Lazy_storage.apply ctx diffs in - (ctx, id) - - (* disk only version *) - let verify_update ctx ?memo_size ?id vt = - let open Lwt_result_wrap_syntax in - let anti_replay = "anti-replay" in - let* vs, ctx = - match id with - | None -> - let* memo_size = - match memo_size with - | None -> ( - match vt.Environment.Sapling.UTXO.outputs with - | [] -> failwith "Can't infer memo_size from empty outputs" - | output :: _ -> - return - @@ Environment.Sapling.Ciphertext.get_memo_size - output.ciphertext) - | Some memo_size -> return memo_size - in - let memo_size = memo_size_of_int memo_size in - let vs = Alpha_context.Sapling.empty_state ~memo_size () in - return (vs, ctx) - | Some id -> - (* let*! result = Storage.Sapling.Roots.get (Obj.magic ctx, id) 0l in *) - (* let*?@ _, root = result in *) - (* print ~prefix:"verify: " Environment.Sapling.Hash.encoding root ; *) - let*@ result = Alpha_context.Sapling.state_from_id ctx id in - return result - in - let*@ ctx, res = - Alpha_context.Sapling.verify_update ctx vs vt anti_replay - in - match res with - | None -> return_none - | Some (_balance, vs) -> - let* ctx, id = finalize ctx vs in - let fake_fitness = - Alpha_context.( - let level = - match Raw_level.of_int32 0l with - | Error _ -> assert false - | Ok l -> l - in - Fitness.create_without_locked_round - ~level - ~predecessor_round:Round.zero - ~round:Round.zero - |> Fitness.to_raw) - in - let ectx = (Alpha_context.finalize ctx fake_fitness).context in - (* bump the level *) - let+@ ctx, _, _ = - Alpha_context.prepare - ectx - ~level: - Alpha_context.( - Raw_level.to_int32 Level.((succ ctx (current ctx)).level)) - ~predecessor_timestamp:(Time.Protocol.of_seconds Int64.zero) - ~timestamp:(Time.Protocol.of_seconds Int64.zero) - in - Some (ctx, id) - - (* Same as before but for legacy *) - let verify_update_legacy ctx ?memo_size ?id vt = - let open Lwt_result_wrap_syntax in - let anti_replay = "anti-replay" in - let* vs, ctx = - match id with - | None -> - let* memo_size = - match memo_size with - | None -> ( - match vt.Environment.Sapling.UTXO.Legacy.outputs with - | [] -> failwith "Can't infer memo_size from empty outputs" - | output :: _ -> - return - @@ Environment.Sapling.Ciphertext.get_memo_size - output.ciphertext) - | Some memo_size -> return memo_size - in - let memo_size = memo_size_of_int memo_size in - let vs = Alpha_context.Sapling.empty_state ~memo_size () in - return (vs, ctx) - | Some id -> - (* let*! result = Storage.Sapling.Roots.get (Obj.magic ctx, id) 0l in *) - (* let*?@ _, root = result in *) - (* print ~prefix:"verify: " Environment.Sapling.Hash.encoding root ; *) - let*@ result = Alpha_context.Sapling.state_from_id ctx id in - return result - in - let*@ ctx, res = - Alpha_context.Sapling.Legacy.verify_update ctx vs vt anti_replay - in - match res with - | None -> return_none - | Some (_balance, vs) -> - let* ctx, id = finalize ctx vs in - let fake_fitness = - Alpha_context.( - let level = - match Raw_level.of_int32 0l with - | Error _ -> assert false - | Ok l -> l - in - Fitness.create_without_locked_round - ~level - ~predecessor_round:Round.zero - ~round:Round.zero - |> Fitness.to_raw) - in - let ectx = (Alpha_context.finalize ctx fake_fitness).context in - (* bump the level *) - let+@ ctx, _, _ = - Alpha_context.prepare - ectx - ~level: - Alpha_context.( - Raw_level.to_int32 Level.((succ ctx (current ctx)).level)) - ~predecessor_timestamp:(Time.Protocol.of_seconds Int64.zero) - ~timestamp:(Time.Protocol.of_seconds Int64.zero) - in - Some (ctx, id) - - let transfer_inputs_outputs w cs is = - (* Tezos_sapling.Storage.size cs *) - (* |> fun (a, b) -> *) - (* Printf.printf "%Ld %Ld" a b ; *) - let inputs = - List.map - (fun i -> - Tezos_sapling.Forge.Input.get cs (Int64.of_int i) w.vk - |> WithExceptions.Option.get ~loc:__LOC__ - |> snd) - is - in - let addr = - snd - @@ Tezos_sapling.Core.Wallet.Viewing_key.(new_address w.vk default_index) - in - let memo_size = Tezos_sapling.Storage.get_memo_size cs in - let o = - Tezos_sapling.Forge.make_output addr 1000000L (Bytes.create memo_size) - in - (inputs, [o]) - - let transfer w cs is = - let anti_replay = "anti-replay" in - let ins, outs = transfer_inputs_outputs w cs is in - (* change the wallet of this last line *) - Tezos_sapling.Forge.forge_transaction - ins - outs - w.sk - anti_replay - ~bound_data:"" - cs - - let transfer_legacy w cs is = - let anti_replay = "anti-replay" in - let ins, outs = transfer_inputs_outputs w cs is in - (* change the wallet of this last line *) - Tezos_sapling.Forge.forge_transaction_legacy ins outs w.sk anti_replay cs - - let client_state_alpha ctx id = - let open Lwt_result_wrap_syntax in - let*@ diff = Alpha_context.Sapling.get_diff ctx id () in - let+@ {memo_size; _}, _ctx = Alpha_context.Sapling.state_from_id ctx id in - let memo_size = int_of_memo_size memo_size in - client_state_of_diff ~memo_size diff -end - -(* - Interpreter level -*) - -module Interpreter_helpers = struct - include Common - include Contract_helpers - - (** Returns a block in which the contract is originated. - Also returns the associated anti-replay string and KT1 address. *) - let originate_contract_hash file storage src b baker = - let open Lwt_result_syntax in - let+ dst, b = originate_contract_hash file storage src b baker in - let anti_replay = - Format.asprintf "%a%a" Contract_hash.pp dst Chain_id.pp Chain_id.zero - in - (dst, b, anti_replay) - - let hex_shield ~memo_size wallet anti_replay = - let ps = Tezos_sapling.Storage.empty ~memo_size in - let addr = - snd - @@ Tezos_sapling.Core.Wallet.Viewing_key.( - new_address wallet.vk default_index) - in - let output = - Tezos_sapling.Forge.make_output addr 15L (Bytes.create memo_size) - in - let pt = - Tezos_sapling.Forge.forge_transaction - [] - [output] - wallet.sk - anti_replay - ~bound_data:"" - ps - in - let hex_string = - "0x" - ^ Hex.show - (Hex.of_bytes - Data_encoding.Binary.( - to_bytes_exn - Tezos_sapling.Core.Client.UTXO.transaction_encoding - pt)) - in - hex_string - - (* Make a transaction and sync a local client state. [to_exclude] is the list - of addresses that cannot bake the block*) - let transac_and_sync ~memo_size block parameters amount src dst baker = - let open Lwt_result_syntax in - let amount_tez = - Tez_helpers.(Alpha_context.Tez.one_mutez *! Int64.of_int amount) - in - let fee = Tez_helpers.of_int 10 in - let* operation = - Op.transaction - ~gas_limit:Max - ~fee - (B block) - src - (Alpha_context.Contract.Originated dst) - amount_tez - ~parameters - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let* incr = Incremental.add_operation incr operation in - let* block = Incremental.finalize_block incr in - let+ diff = - Alpha_services.Contract.single_sapling_get_diff - Block.rpc_ctxt - block - dst - ~offset_commitment:0L - ~offset_nullifier:0L - () - in - let state = client_state_of_diff ~memo_size diff in - (block, state) - - (* Returns a list of printed shield transactions and their total amount. *) - let shield ~memo_size sk number_transac vk printer anti_replay = - let state = Tezos_sapling.Storage.empty ~memo_size in - let rec aux number_transac number_outputs index amount_output total res = - if Compare.Int.(number_transac <= 0) then (res, total) - else - let new_index, new_addr = - Tezos_sapling.Core.Wallet.Viewing_key.(new_address vk index) - in - let outputs = - WithExceptions.List.init ~loc:__LOC__ number_outputs (fun _ -> - Tezos_sapling.Forge.make_output - new_addr - amount_output - (Bytes.create memo_size)) - in - let tr_hex = - to_hex - (Tezos_sapling.Forge.forge_transaction - ~number_dummy_inputs:0 - ~number_dummy_outputs:0 - [] - outputs - sk - anti_replay - ~bound_data:"" - state) - Tezos_sapling.Core.Client.UTXO.transaction_encoding - in - aux - (number_transac - 1) - (number_outputs + 1) - new_index - (Int64.add 20L amount_output) - (total + (number_outputs * Int64.to_int amount_output)) - (printer tr_hex :: res) - in - aux - number_transac - 2 - Tezos_sapling.Core.Wallet.Viewing_key.default_index - 20L - 0 - [] - - (* This fails if the operation is not correct wrt the block *) - let next_block block operation = - let open Lwt_result_syntax in - let* incr = Incremental.begin_construction block in - let* incr = Incremental.add_operation incr operation in - Incremental.finalize_block incr -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/sc_rollup_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/sc_rollup_helpers.ml deleted file mode 100644 index 133a589ecd601cd0b2f5429e73a5058a441da1c5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/sc_rollup_helpers.ml +++ /dev/null @@ -1,1021 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -let originated_rollup op = - let nonce = - Origination_nonce.Internal_for_tests.initial (Operation.hash_packed op) - in - Contract.Internal_for_tests.originated_contract nonce - -module Arith_pvm = Pvm_in_memory.Arith -module Wasm_pvm = Pvm_in_memory.Wasm - -module Make_in_memory_context (Context : sig - type tree - - include - Tezos_context_sigs.Context.TEZOS_CONTEXT - with type memory_context_tree := tree - and type tree := tree - and type value_key = Context_hash.t - and type node_key = Context_hash.t -end) = -struct - module Tree = struct - include Context.Tree - - type tree = Context.tree - - type t = Context.t - - type key = string list - - type value = bytes - end - - type tree = Tree.tree - - type proof = Context.Proof.tree Context.Proof.t - - let hash_tree _ = assert false - - let verify_proof p f = - Lwt.map Result.to_option (Context.verify_tree_proof p f) - - let produce_proof context state step = - let open Lwt_syntax in - let* context = Context.add_tree context [] state in - let* h = Context.commit ~time:Time.Protocol.epoch context in - let index = Context.index context in - let* context = Context.checkout_exn index h in - match Tree.kinded_key state with - | Some k -> - let index = Context.index context in - let* p = Context.produce_tree_proof index k step in - return_some p - | None -> return_none - - let kinded_hash_to_state_hash = function - | `Value hash | `Node hash -> - Sc_rollup.State_hash.context_hash_to_state_hash hash - - let proof_before proof = kinded_hash_to_state_hash proof.Context.Proof.before - - let proof_after proof = kinded_hash_to_state_hash proof.Context.Proof.after - - let proof_encoding = - Tezos_context_merkle_proof_encoding.Merkle_proof_encoding.V2.Tree2 - .tree_proof_encoding -end - -module Wrong_in_memory_context = - Make_in_memory_context (Tezos_context_memory.Context) - -module Wrong_arith_pvm : - Sc_rollup.PVM.S - with type context = Wrong_in_memory_context.Tree.t - and type state = Wrong_in_memory_context.tree - and type proof = - Tezos_context_memory.Context.Proof.tree - Tezos_context_memory.Context.Proof.t = - Sc_rollup.ArithPVM.Make (Wrong_in_memory_context) - -let genesis_commitment ~boot_sector ~origination_level kind = - let open Lwt_syntax in - let+ genesis_state_hash = Sc_rollup.genesis_state_hash_of kind ~boot_sector in - Sc_rollup.Commitment.genesis_commitment ~origination_level ~genesis_state_hash - -let genesis_commitment_raw ~boot_sector ~origination_level kind = - let open Lwt_syntax in - let origination_level = - Raw_level_repr.to_int32 origination_level - |> Alpha_context.Raw_level.of_int32_exn - in - let kind = - match kind with - | Sc_rollups.Kind.Example_arith -> Sc_rollup.Kind.Example_arith - | Sc_rollups.Kind.Wasm_2_0_0 -> Sc_rollup.Kind.Wasm_2_0_0 - | Sc_rollups.Kind.Riscv -> Sc_rollup.Kind.Riscv - in - let* res = genesis_commitment ~boot_sector ~origination_level kind in - let res = - Data_encoding.Binary.to_bytes_exn Sc_rollup.Commitment.encoding res - |> Data_encoding.Binary.of_bytes_exn Sc_rollup_commitment_repr.encoding - in - return res - -(** {2 Inbox message helpers.} *) - -(** {1 Above [Alpha_context].} *) - -let message_serialize msg = - WithExceptions.Result.get_ok - ~loc:__LOC__ - Sc_rollup.Inbox_message.(serialize msg) - -let make_external_inbox_message str = message_serialize (External str) - -let make_internal_inbox_message internal_msg = - message_serialize (Internal internal_msg) - -let make_input ?(inbox_level = Raw_level.root) ?(message_counter = Z.zero) - payload = - Sc_rollup.Inbox_message {inbox_level; message_counter; payload} - -let make_external_input ?inbox_level ?message_counter str = - let payload = make_external_inbox_message str in - make_input ?inbox_level ?message_counter payload - -let make_sol ~inbox_level = - let payload = make_internal_inbox_message Start_of_level in - make_input ~inbox_level ~message_counter:Z.zero payload - -let make_eol ~inbox_level ~message_counter = - let payload = make_internal_inbox_message End_of_level in - make_input ~inbox_level ~message_counter payload - -let make_info_per_level ~inbox_level ~predecessor_timestamp ~predecessor = - let payload = - make_internal_inbox_message - (Info_per_level {predecessor_timestamp; predecessor}) - in - make_input ~inbox_level ~message_counter:Z.one payload - -let make_protocol_migration ~inbox_level = - let payload = - make_internal_inbox_message - Sc_rollup.Inbox_message.protocol_migration_internal_message - in - make_input ~inbox_level ~message_counter:Z.(succ one) payload - -(** Message is the combination of a [message] and its associated [input]. - - [message] is used to: - - Construct the protocol inbox, when [message] is [`Message]. The protocol - adds [`SOL] and [`EOL] itself. - - Construct the players' inboxes. - - [input] is used to evaluate the players' inboxes. - -*) -type message = { - input : Sc_rollup.input; - message : - [ `SOL - | `Info_per_level of Timestamp.t * Block_hash.t - | `Message of string - | `EOL ]; -} - -(** Put as much information as possible in this record so it can be used - in different setups: - 1. Creating an inbox on the protocol-side, requires [messages] only. - 2. Re-construct an inbox, requires [payloads], [timestamp], [predecessor]. - 3. Evaluate inputs in a PVM, requires [inputs] - - [level] is useful for (1) (2) (3). - *) -type payloads_per_level = { - messages : string list; (** List of external messages. *) - payloads : Sc_rollup.Inbox_message.serialized list; - (** List of external serialized messages. *) - predecessor_timestamp : Time.Protocol.t; - (** predecessor timestamp of the [Info_per_level]. *) - predecessor : Block_hash.t; (** Predecessor of the [Info_per_level]. *) - level : Raw_level.t; - inputs : Sc_rollup.input list; - (** List of all inputs for the level, to be read by a PVM. *) -} - -let pp_input fmt (input : Sc_rollup.input) = - match input with - | Reveal _ -> assert false - | Inbox_message {inbox_level; message_counter; _} -> - Format.fprintf - fmt - "(%a, %s)" - Raw_level.pp - inbox_level - (Z.to_string message_counter) - -let pp_message fmt {input; message} = - Format.fprintf - fmt - "{ input = %a; message = %S }" - pp_input - input - (match message with - | `SOL -> "SOL" - | `Info_per_level (predecessor_timestamp, block_hash) -> - Format.asprintf - "Info_per_level (%s, %a)" - (Timestamp.to_notation predecessor_timestamp) - Block_hash.pp - block_hash - | `Message msg -> msg - | `EOL -> "EOL") - -(** Creates inputs based on string messages. *) -let strs_to_inputs inbox_level messages = - List.fold_left - (fun (acc, message_counter) message -> - let input = make_external_input ~inbox_level ~message_counter message in - ({input; message = `Message message} :: acc, Z.succ message_counter)) - ([], Z.of_int 2) - messages - -(** Transform the list of all inputs the PVM should read. *) -let make_inputs ~first_block predecessor_timestamp predecessor messages - inbox_level = - (* SOL is at index 0. *) - let sol = make_sol ~inbox_level in - (* Info_per_level is at index 1. *) - let info_per_level = - make_info_per_level ~inbox_level ~predecessor_timestamp ~predecessor - in - let mig = - if first_block then [make_protocol_migration ~inbox_level] else [] - in - (* External inputs start at index 2. *) - let external_inputs = - List.mapi - (fun i message -> - make_external_input - ~inbox_level - ~message_counter:(Z.of_int (2 + List.length mig + i)) - message) - messages - in - (* EOL is after SOL/Info_per_level and all external inputs, therefore, - at index [2 + List.length messages]. *) - let eol = - let message_counter = - Z.of_int (2 + List.length mig + List.length messages) - in - make_eol ~inbox_level ~message_counter - in - [sol; info_per_level] @ mig @ external_inputs @ [eol] - -let predecessor_timestamp_and_hash_from_level level = - let level_int64 = Int64.of_int32 @@ Raw_level.to_int32 level in - let predecessor_timestamp = Time.Protocol.of_seconds level_int64 in - let hash = Block_hash.hash_string [Int64.to_string level_int64] in - (predecessor_timestamp, hash) - -(** Wrap messages, predecessor_timestamp and predecessor of a level into a - [payloads_per_level] .*) -let wrap_messages level - ?(pred_info = predecessor_timestamp_and_hash_from_level level) messages : - payloads_per_level = - let predecessor_timestamp, predecessor = pred_info in - let payloads = List.map make_external_inbox_message messages in - let inputs = - make_inputs - ~first_block:(level = Raw_level.root || level = Raw_level.(succ root)) - predecessor_timestamp - predecessor - messages - level - in - {payloads; predecessor_timestamp; predecessor; messages; level; inputs} - -(** An empty inbox level is a SOL,IPL and EOL. *) -let make_empty_level ?pred_info inbox_level = - wrap_messages ?pred_info inbox_level [] - -let gen_messages ?pred_info inbox_level gen_message = - let open QCheck2.Gen in - let* input = gen_message in - let* inputs = small_list gen_message in - return (wrap_messages ?pred_info inbox_level (input :: inputs)) - -let gen_payloads_for_levels ~start_level ~max_level gen_message = - let open QCheck2.Gen in - let rec aux acc n = - match n with - | n when n < 0 -> - (* Prevent [Stack_overflow]. *) - assert false - | 0 -> return acc - | n -> - let inbox_level = - Raw_level.of_int32_exn (Int32.of_int (start_level + n - 1)) - in - let* empty_level = bool in - let* level_messages = - if empty_level then return (make_empty_level inbox_level) - else gen_messages inbox_level gen_message - in - aux (level_messages :: acc) (n - 1) - in - aux [] (max_level - start_level) - -(** {1 Below [Alpha_context].} *) - -let message_serialize_repr msg = - WithExceptions.Result.get_ok - ~loc:__LOC__ - Sc_rollup_inbox_message_repr.(serialize msg) - -let make_external_inbox_message_repr str = message_serialize_repr (External str) - -let make_internal_inbox_message_repr internal_msg = - message_serialize_repr (Internal internal_msg) - -let make_input_repr ?(inbox_level = Raw_level_repr.root) - ?(message_counter = Z.zero) payload = - Sc_rollup_PVM_sig.Inbox_message {inbox_level; message_counter; payload} - -let make_external_input_repr ?inbox_level ?message_counter str = - let payload = make_external_inbox_message_repr str in - make_input_repr ?inbox_level ?message_counter payload - -let make_sol_repr ~inbox_level = - let payload = make_internal_inbox_message_repr Start_of_level in - make_input_repr ~inbox_level ~message_counter:Z.zero payload - -let make_eol_repr ~inbox_level ~message_counter = - let payload = make_internal_inbox_message_repr End_of_level in - make_input_repr ~inbox_level ~message_counter payload - -(** Message is the combination of a [message] and its associated [input]. - - [message] is used to: - - Construct the protocol inbox, when [message] is [`Message]. The protocol - adds [`SOL] and [`EOL] itself. - - Construct the players' inboxes. - - [input] is used to evaluate the players' inboxes. - -*) -type message_repr = { - input_repr : Sc_rollup_PVM_sig.input; - message_repr : [`SOL | `Message of string | `EOL]; -} - -let pp_input_repr fmt (input_repr : Sc_rollup_PVM_sig.input) = - match input_repr with - | Reveal _ -> assert false - | Inbox_message {inbox_level; message_counter; _} -> - Format.fprintf - fmt - "(%a, %s)" - Raw_level_repr.pp - inbox_level - (Z.to_string message_counter) - -let pp_message_repr fmt {input_repr; message_repr} = - Format.fprintf - fmt - "{ input_repr = %a; message_repr = %S }" - pp_input_repr - input_repr - (match message_repr with - | `SOL -> "SOL" - | `Message msg -> msg - | `EOL -> "EOL") - -(** An empty inbox level is a SOL,IPL and EOL. *) -let make_empty_level_repr inbox_level = - let sol = {input_repr = make_sol_repr ~inbox_level; message_repr = `SOL} in - let eol = - { - input_repr = make_eol_repr ~inbox_level ~message_counter:Z.one; - message_repr = `EOL; - } - in - (inbox_level, [sol; eol]) - -(** Creates input_reprs based on string message_reprs. *) -let strs_to_input_reprs_repr inbox_level message_reprs = - List.fold_left - (fun (acc, message_counter) message_repr -> - let input_repr = - make_external_input_repr ~inbox_level ~message_counter message_repr - in - ( {input_repr; message_repr = `Message message_repr} :: acc, - Z.succ message_counter )) - ([], Z.one) - message_reprs - -(** Transform message_reprs into input_reprs and wrap them between SOL and EOL. *) -let wrap_message_reprs_repr inbox_level strs = - let sol = {input_repr = make_sol_repr ~inbox_level; message_repr = `SOL} in - let rev_input_reprs, message_counter = - strs_to_input_reprs_repr inbox_level strs - in - let input_reprs = List.rev rev_input_reprs in - let eol = - { - input_repr = make_eol_repr ~inbox_level ~message_counter; - message_repr = `EOL; - } - in - (sol :: input_reprs) @ [eol] - -let gen_message_reprs_for_levels_repr ~start_level ~max_level gen_message_repr = - let open QCheck2.Gen in - let rec aux acc n = - match n with - | 0 -> return acc - | n when n > 0 -> - let inbox_level = - Raw_level_repr.of_int32_exn (Int32.of_int (start_level + n - 1)) - in - let* empty_level = bool in - let* level_message_reprs = - if empty_level then return (make_empty_level_repr inbox_level) - else - let* message_reprs = - let* input_repr = gen_message_repr in - let* input_reprs = small_list gen_message_repr in - return (input_repr :: input_reprs) - in - return - (inbox_level, wrap_message_reprs_repr inbox_level message_reprs) - in - aux (level_message_reprs :: acc) (n - 1) - | _ -> - (* Prevent [Stack_overflow]. *) - assert false - in - aux [] (max_level - start_level) - -module Payloads_histories = - Map.Make (Sc_rollup.Inbox_merkelized_payload_hashes.Hash) - -type payloads_histories = - Sc_rollup.Inbox_merkelized_payload_hashes.History.t Payloads_histories.t - -let get_payloads_history payloads_histories witness = - Payloads_histories.find witness payloads_histories - |> WithExceptions.Option.get ~loc:__LOC__ - |> Lwt.return - -let get_history history i = Sc_rollup.Inbox.History.find i history |> Lwt.return - -let inbox_message_of_input input = - match input with Sc_rollup.Inbox_message x -> Some x | _ -> None - -let payloads_from_messages = - List.map (fun {input; _} -> - match input with - | Inbox_message {payload; _} -> payload - | Reveal _ -> assert false) - -let first_after payloads_per_levels level message_counter = - let payloads_at_level level = - List.find - (fun {level = payloads_level; _} -> level = payloads_level) - payloads_per_levels - in - let payloads_per_level = - WithExceptions.Option.get ~loc:__LOC__ @@ payloads_at_level level - in - match List.nth payloads_per_level.inputs (Z.to_int message_counter) with - | Some input -> inbox_message_of_input input - | None -> ( - (* If no input at (l, n), the next input is (l+1, 0). *) - let next_level = Raw_level.succ level in - match payloads_at_level next_level with - | None -> None - | Some payloads_per_level -> - let input = Stdlib.List.hd payloads_per_level.inputs in - inbox_message_of_input input) - -let list_of_inputs_from_list_of_messages - (payloads_per_levels : message list list) = - List.map - (fun inputs -> - let payloads = List.map (fun {input; _} -> input) inputs in - payloads) - payloads_per_levels - -let dumb_init level = - Sc_rollup.Inbox.genesis - ~predecessor_timestamp:Time.Protocol.epoch - ~predecessor:Block_hash.zero - level - -let dumb_init_repr level = - Sc_rollup_inbox_repr.genesis - ~protocol_migration_message: - Raw_context.protocol_migration_serialized_message - ~predecessor_timestamp:Time.Protocol.epoch - ~predecessor:Block_hash.zero - level - -let origination_op ?force_reveal ?counter ?fee ?gas_limit ?storage_limit - ?(boot_sector = "") ?(parameters_ty = "unit") ?whitelist ctxt src kind = - Op.sc_rollup_origination - ?force_reveal - ?counter - ?fee - ?gas_limit - ?storage_limit - ?whitelist - ctxt - src - kind - ~boot_sector - ~parameters_ty:(Script.lazy_expr @@ Expr.from_string parameters_ty) - -let latest_level_proof inbox = - Sc_rollup.Inbox.Internal_for_tests.level_proof_of_history_proof - @@ Sc_rollup.Inbox.old_levels_messages inbox - -let latest_level_proof_hash inbox = (latest_level_proof inbox).hash - -module Node_inbox = struct - type t = { - inbox : Sc_rollup.Inbox.t; - history : Sc_rollup.Inbox.History.t; - payloads_histories : payloads_histories; - } - - let new_inbox ?(genesis_predecessor_timestamp = Time.Protocol.epoch) - ?(genesis_predecessor = Block_hash.zero) - ?(inbox_creation_level = Raw_level.root) () = - let open Result_syntax in - let inbox = - Sc_rollup.Inbox.genesis - ~predecessor_timestamp:genesis_predecessor_timestamp - ~predecessor:genesis_predecessor - inbox_creation_level - in - let history = Sc_rollup.Inbox.History.empty ~capacity:10000L in - let payloads_histories = Payloads_histories.empty in - return {inbox; history; payloads_histories} - - let fill_inbox ~inbox_creation_level node_inbox payloads_per_levels = - let open Result_wrap_syntax in - let rec aux {inbox; history; payloads_histories} = function - | [] -> return {inbox; history; payloads_histories} - | ({ - payloads = _; - predecessor_timestamp; - predecessor; - messages; - level; - inputs = _; - } : - payloads_per_level) - :: rst -> - let messages = - List.map - (fun message -> Sc_rollup.Inbox_message.External message) - messages - in - let*@ payloads_history, history, inbox, witness, _messages = - Sc_rollup.Inbox.add_all_messages - ~first_block:Raw_level.(equal (succ inbox_creation_level) level) - ~predecessor_timestamp - ~predecessor - history - inbox - messages - in - (* Store in the history this archived level. *) - let witness_hash = - Sc_rollup.Inbox_merkelized_payload_hashes.hash witness - in - let payloads_histories = - Payloads_histories.add - witness_hash - payloads_history - payloads_histories - in - aux {inbox; history; payloads_histories} rst - in - aux node_inbox payloads_per_levels - - let construct_inbox ?(inbox_creation_level = Raw_level.root) - ?genesis_predecessor_timestamp ?genesis_predecessor payloads_per_levels = - let open Result_syntax in - let* node_inbox = - new_inbox - ?genesis_predecessor_timestamp - ?genesis_predecessor - ~inbox_creation_level - () - in - fill_inbox ~inbox_creation_level node_inbox payloads_per_levels - - let get_history history hash = - Lwt.return @@ Sc_rollup.Inbox.History.find hash history - - let produce_proof {payloads_histories; history; _} inbox_snapshot - (level, message_counter) = - let open Lwt_result_wrap_syntax in - wrap - @@ Sc_rollup.Inbox.produce_proof - ~get_payloads_history:(get_payloads_history payloads_histories) - ~get_history:(get_history history) - inbox_snapshot - (level, message_counter) - - let produce_and_expose_proof node_inbox node_inbox_snapshot - (level, message_counter) = - let open Lwt_result_syntax in - let* proof, input = - produce_proof node_inbox node_inbox_snapshot (level, message_counter) - in - let exposed_proof = Sc_rollup.Inbox.Internal_for_tests.expose_proof proof in - return (exposed_proof, input) - - let produce_payloads_proof {payloads_histories; _} - (head_cell_hash : Sc_rollup.Inbox_merkelized_payload_hashes.Hash.t) - message_counter = - let open Lwt_result_wrap_syntax in - wrap - @@ Sc_rollup.Inbox.Internal_for_tests.produce_payloads_proof - (get_payloads_history payloads_histories) - head_cell_hash - ~index:message_counter - - let produce_inclusion_proof {history; _} inbox_snapshot level = - let open Lwt_result_wrap_syntax in - wrap - @@ Sc_rollup.Inbox.Internal_for_tests.produce_inclusion_proof - (get_history history) - inbox_snapshot - level -end - -module Protocol_inbox = struct - let new_inbox ?(genesis_predecessor_timestamp = Time.Protocol.epoch) - ?(genesis_predecessor = Block_hash.zero) - ?(inbox_creation_level = Raw_level.root) () = - Sc_rollup.Inbox.genesis - ~predecessor_timestamp:genesis_predecessor_timestamp - ~predecessor:genesis_predecessor - inbox_creation_level - - let fill_inbox ~inbox_creation_level inbox payloads_per_levels = - let open Result_wrap_syntax in - let rec aux inbox = function - | [] -> return inbox - | ({ - payloads = _; - predecessor_timestamp; - predecessor; - messages; - level; - inputs = _; - } : - payloads_per_level) - :: rst -> - let payloads = - List.map - (fun message -> Sc_rollup.Inbox_message.(External message)) - messages - in - let*@ _, _, inbox, _, _ = - Sc_rollup.Inbox.add_all_messages - ~first_block:Raw_level.(equal (succ inbox_creation_level) level) - ~predecessor_timestamp - ~predecessor - (Sc_rollup.Inbox.History.empty ~capacity:1000L) - inbox - payloads - in - aux inbox rst - in - aux inbox payloads_per_levels - - let add_new_level ?pred_info inbox messages = - let next_level = Raw_level.succ @@ Sc_rollup.Inbox.inbox_level inbox in - let messages_per_level = wrap_messages ?pred_info next_level messages in - fill_inbox inbox [messages_per_level] - - let add_new_empty_level ?pred_info inbox = - let next_level = Raw_level.succ @@ Sc_rollup.Inbox.inbox_level inbox in - let empty_level = [make_empty_level ?pred_info next_level] in - fill_inbox inbox empty_level - - let construct_inbox ?(inbox_creation_level = Raw_level.root) - ?genesis_predecessor_timestamp ?genesis_predecessor payloads_per_levels = - let inbox = - new_inbox - ?genesis_predecessor_timestamp - ?genesis_predecessor - ~inbox_creation_level - () - in - fill_inbox ~inbox_creation_level inbox payloads_per_levels -end - -let construct_node_and_protocol_inbox ?inbox_creation_level - ?genesis_predecessor_timestamp ?genesis_predecessor payloads_per_levels = - let open Result_syntax in - let* node_inbox = - Node_inbox.construct_inbox - ?inbox_creation_level - ?genesis_predecessor_timestamp - ?genesis_predecessor - payloads_per_levels - in - let* protocol_inbox = - Protocol_inbox.construct_inbox - ?inbox_creation_level - ?genesis_predecessor_timestamp - ?genesis_predecessor - payloads_per_levels - in - return (node_inbox, protocol_inbox) - -module Protocol_inbox_with_ctxt = struct - let fill_inbox block list_of_messages contract = - let open Lwt_result_syntax in - let* block, list_of_messages = - List.fold_left_map_es - (fun (block : Block.t) ({messages; _} as messages_per_level) -> - let predecessor = block.hash in - let predecessor_timestamp = block.header.shell.timestamp in - - let* block = - match messages with - | [] -> - let* block = Block.bake block in - return block - | messages -> - let* operation_add_message = - Op.sc_rollup_add_messages (B block) contract messages - in - let* block = - Block.bake ~operation:operation_add_message block - in - return block - in - - return - (block, {messages_per_level with predecessor; predecessor_timestamp})) - block - list_of_messages - in - return (block, list_of_messages) -end - -let is_reveal_enabled_default = - Sc_rollup.is_reveal_enabled_predicate - Default_parameters.constants_mainnet.sc_rollup.reveal_activation_level - -let tick_of_int_exn ?(__LOC__ = __LOC__) n = - WithExceptions.Option.get ~loc:__LOC__ (Sc_rollup.Tick.of_int n) - -module type PVM_eval = sig - include Sc_rollup.PVM.S - - val make_empty_context : unit -> context - - val initial_hash : hash Lwt.t - - val eval_until_input : - fuel:int option -> - our_states:(int * hash) trace -> - int -> - state -> - (state * int option * int * (int * hash) trace) Lwt.t - - val eval_inputs_from_initial_state : - metadata:Sc_rollup.Metadata.t -> - ?fuel:int -> - ?bootsector:string -> - Sc_rollup.input trace trace -> - (state * Sc_rollup.Tick.t * (Sc_rollup.Tick.t * hash) trace, 'a) result - Lwt.t -end - -module Make_PVM_eval (PVM : sig - include Sc_rollup.PVM.S - - val make_empty_state : unit -> state - - val make_empty_context : unit -> context -end) : PVM_eval with type context = PVM.context and type state = PVM.state = -struct - include PVM - - let bootsector_state ~bootsector = - let open Lwt_syntax in - let empty = make_empty_state () in - let* state = initial_state ~empty in - let* state = install_boot_sector state bootsector in - return state - - let initial_hash = - let open Lwt_syntax in - let empty = make_empty_state () in - let* state = initial_state ~empty in - state_hash state - - let consume_fuel = Option.map pred - - let continue_with_fuel ~our_states ~(tick : int) fuel state f = - let open Lwt_syntax in - match fuel with - | Some 0 -> return (state, fuel, tick, our_states) - | _ -> f tick our_states (consume_fuel fuel) state - - (* TODO: https://gitlab.com/tezos/tezos/-/issues/3498 - - the following is almost the same code as in the rollup node, except that it - creates the association list (tick, state_hash). *) - let eval_until_input ~fuel ~our_states start_tick state = - let open Lwt_syntax in - let rec go ~our_states fuel (tick : int) state = - let* input_request = - is_input_state ~is_reveal_enabled:is_reveal_enabled_default state - in - match fuel with - | Some 0 -> return (state, fuel, tick, our_states) - | None | Some _ -> ( - match input_request with - | No_input_required -> - let* state = eval state in - let* state_hash = state_hash state in - let our_states = (tick, state_hash) :: our_states in - go ~our_states (consume_fuel fuel) (tick + 1) state - | Needs_reveal (Request_dal_page _pid) -> - (* TODO/DAL: https://gitlab.com/tezos/tezos/-/issues/4160 - We assume that there are no confirmed Dal slots. - We'll reuse the infra to provide Dal pages in the future. *) - let input = Sc_rollup.(Reveal (Dal_page None)) in - let* state = set_input input state in - let* state_hash = state_hash state in - let our_states = (tick, state_hash) :: our_states in - go ~our_states (consume_fuel fuel) (tick + 1) state - | Needs_reveal (Reveal_raw_data _) - | Needs_reveal Reveal_metadata - | Needs_reveal Reveal_dal_parameters - | Initial | First_after _ -> - return (state, fuel, tick, our_states)) - in - go ~our_states fuel start_tick state - - let eval_metadata ~fuel ~our_states tick state ~metadata = - let open Lwt_syntax in - continue_with_fuel ~our_states ~tick fuel state - @@ fun tick our_states fuel state -> - let input = Sc_rollup.(Reveal (Metadata metadata)) in - let* state = set_input input state in - let* state_hash = state_hash state in - let our_states = (tick, state_hash) :: our_states in - let tick = succ tick in - return (state, fuel, tick, our_states) - - let feed_input ~fuel ~our_states ~tick state input = - let open Lwt_syntax in - let* state, fuel, tick, our_states = - eval_until_input ~fuel ~our_states tick state - in - continue_with_fuel ~our_states ~tick fuel state - @@ fun tick our_states fuel state -> - let* state = set_input input state in - let* state_hash = state_hash state in - let our_states = (tick, state_hash) :: our_states in - let tick = tick + 1 in - let* state, fuel, tick, our_states = - eval_until_input ~fuel ~our_states tick state - in - return (state, fuel, tick, our_states) - - let eval_inbox ?fuel ~inputs ~tick state = - let open Lwt_result_syntax in - List.fold_left_es - (fun (state, fuel, tick, our_states) input -> - let*! state, fuel, tick, our_states = - feed_input ~fuel ~our_states ~tick state input - in - return (state, fuel, tick, our_states)) - (state, fuel, tick, []) - inputs - - let eval_inputs ~fuel ~tick ?(our_states = []) ~inputs_per_levels state = - let open Lwt_result_syntax in - List.fold_left_es - (fun (state, fuel, tick, our_states) inputs -> - let* state, fuel, tick, our_states' = - eval_inbox ?fuel ~inputs ~tick state - in - return (state, fuel, tick, our_states @ our_states')) - (state, fuel, tick, our_states) - inputs_per_levels - - let eval_inputs_from_initial_state ~metadata ?fuel ?(bootsector = "") - inputs_per_levels = - let open Lwt_result_syntax in - let*! state = bootsector_state ~bootsector in - let*! state_hash = state_hash state in - let tick = 0 in - let our_states = [(tick, state_hash)] in - let tick = succ tick in - (* 1. We evaluate the boot sector. *) - let*! state, fuel, tick, our_states = - eval_until_input ~fuel ~our_states tick state - in - (* 2. We evaluate the metadata. *) - let*! state, fuel, tick, our_states = - eval_metadata ~fuel ~our_states tick state ~metadata - in - (* 3. We evaluate the inbox. *) - let* state, _fuel, tick, our_states = - eval_inputs state ~fuel ~tick ~our_states ~inputs_per_levels - in - let our_states = - List.sort (fun (x, _) (y, _) -> Compare.Int.compare x y) our_states - in - let our_states = - List.map - (fun (tick_int, state) -> (tick_of_int_exn tick_int, state)) - our_states - in - let tick = tick_of_int_exn tick in - return (state, tick, our_states) -end - -module Arith_pvm_eval = Make_PVM_eval (Arith_pvm) -module Wasm_pvm_eval = Make_PVM_eval (Wasm_pvm) - -let make_pvm_with_context_and_state (type context state) - (module PVM : Sc_rollup.PVM.S - with type context = context - and type state = state) ~state ~context ~reveal ~inbox () : - (module Sc_rollup.Proof.PVM_with_context_and_state) = - let Node_inbox.{payloads_histories; history; inbox} = inbox in - (module struct - include PVM - - let context : context = context - - let state = state - - let reveal = reveal - - module Inbox_with_history = struct - let inbox = Sc_rollup.Inbox.old_levels_messages inbox - - let get_history inbox = - Sc_rollup.Inbox.History.find inbox history |> Lwt.return - - let get_payloads_history witness_hash = - Payloads_histories.find witness_hash payloads_histories - |> WithExceptions.Option.get ~loc:__LOC__ - |> Lwt.return - end - - (* FIXME/DAL-REFUTATION: https://gitlab.com/tezos/tezos/-/issues/3992 - Extend refutation game to handle Dal refutation case. *) - module Dal_with_history = struct - let confirmed_slots_history = Dal.Slots_history.genesis - - let get_history _hash = Lwt.return_none - - let page_info = None - - let dal_parameters = - Default_parameters.constants_test.dal.cryptobox_parameters - - let dal_attestation_lag = - Default_parameters.constants_test.dal.attestation_lag - - let dal_number_of_slots = - Default_parameters.constants_test.dal.number_of_slots - - let dal_activation_level = - let constants = Default_parameters.constants_test in - if constants.dal.feature_enable then - Some constants.sc_rollup.reveal_activation_level.dal_parameters - else None - - let dal_attested_slots_validity_lag = - let constants = Default_parameters.constants_test in - constants.sc_rollup.reveal_activation_level - .dal_attested_slots_validity_lag - end - end) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario.ml deleted file mode 100644 index 38a2e0be669aaa7baeb792bd7dd52d8ce26ca2ca..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario.ml +++ /dev/null @@ -1,17 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** This module centralises all modules related to [Scenario] writing and - execution. Most scenario tests would use most if not all of them, so - they only need to [open Scenario]. *) - -include Scenario_base -include Scenario_op -include Scenario_dsl -include Scenario_begin -include Scenario_constants -include Scenario_bake diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_bake.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_bake.ml deleted file mode 100644 index 356b65fb4e86566241bba590167acb53458b05ef..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_bake.ml +++ /dev/null @@ -1,555 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open State_account -open State -open Scenario_dsl -open Log_helpers -open Scenario_base - -(** Applies when baking the last block of a cycle *) -let apply_end_cycle current_cycle previous_block block state : - State.t tzresult Lwt.t = - let open Lwt_result_wrap_syntax in - Log.debug ~color:time_color "Ending cycle %a" Cycle.pp current_cycle ; - (* Apply all slashes *) - let* state = - Slashing_helpers.apply_all_slashes_at_cycle_end - current_cycle - previous_block - state - in - (* Apply autostaking *) - let* state = State_ai_flags.Autostake.run_at_cycle_end block state in - (* Sets initial frozen for future cycle *) - let* state = update_map_es ~f:(compute_future_frozen_rights block) state in - (* Apply parameter changes *) - let state, param_requests = - List.fold_left - (fun (state, remaining_requests) (name, params, wait) -> - if wait > 0 then (state, (name, params, wait - 1) :: remaining_requests) - else - let src = find_account name state in - let state = - update_account name {src with parameters = params} state - in - (state, remaining_requests)) - (state, []) - state.param_requests - in - return {state with param_requests} - -(** Applies when baking the first block of a cycle. - Technically nothing special happens, but we need to update the unslashable unstakes - since it's done lazily *) -let apply_new_cycle new_cycle state : State.t = - apply_unslashable_for_all new_cycle state - -(** After baking and applying rewards in state *) -let check_all_balances block state : unit tzresult Lwt.t = - let open Lwt_result_syntax in - let State.{account_map; total_supply; _} = state in - let* actual_total_supply = Context.get_total_supply (B block) in - let*! r1 = - String.Map.fold_s - (fun name account acc -> - log_debug_balance name account_map ; - let* () = log_debug_rpc_balance name (Implicit account.pkh) block in - let*! r = - assert_balance_check ~loc:__LOC__ (B block) name account_map - in - Assert.join_errors r acc) - account_map - Result.return_unit - in - let*! r2 = - Assert.equal - ~loc:__LOC__ - Tez.equal - "Total supplies do not match" - Tez.pp - actual_total_supply - total_supply - in - Assert.join_errors r1 r2 - -(** Misc checks at block end *) -let check_misc block state : unit tzresult Lwt.t = - let open Lwt_result_syntax in - let State.{account_map; _} = state in - String.Map.fold_s - (fun name account acc -> - match account.delegate with - | Some x when String.equal x name -> - let ufd_state = - List.map - (fun ({cycle; current; _} : Unstaked_frozen.r) -> - (cycle, current)) - account.unstaked_frozen - in - let ufnlz_state = - Unstaked_finalizable.total account.unstaked_finalizable - in - let ufd_state_map = - List.fold_left - (fun acc (cycle, v) -> CycleMap.add cycle v acc) - CycleMap.empty - ufd_state - in - let* u_rpc = - Context.Delegate.unstaked_frozen_deposits (B block) account.pkh - in - let u_rpc = - List.map - (fun ({cycle; deposit} : - Protocol.Delegate_services.deposit_per_cycle) -> - (cycle, deposit)) - u_rpc - in - let finalizable_cycle = - Cycle.sub - (Block.current_cycle block) - (state.State.constants.consensus_rights_delay + 2) - in - let ufnlz_rpc, ufd_rpc = - match finalizable_cycle with - | None -> (Tez.zero, u_rpc) - | Some finalizable_cycle -> ( - match - List.partition - (fun (cycle, _) -> Cycle.equal cycle finalizable_cycle) - u_rpc - with - | [], l -> (Tez.zero, l) - | [(_, s)], l -> (s, l) - | _ -> assert false) - in - let*! r1 = Assert.equal_tez ~loc:__LOC__ ufnlz_rpc ufnlz_state in - let*! r2 = - List.fold_left - (fun acc (cycle, v) -> - let state_val = - CycleMap.find cycle ufd_state_map - |> Option.value ~default:Tez.zero - in - let*! r = Assert.equal_tez ~loc:__LOC__ v state_val in - let*! acc in - Assert.join_errors r acc) - return_unit - ufd_rpc - in - let*! r = Assert.join_errors r1 r2 in - Assert.join_errors r acc - | _ -> Lwt.return acc) - account_map - Result.return_unit - -let check_issuance_rpc block : unit tzresult Lwt.t = - let open Lwt_result_syntax in - (* We assume one block per minute *) - let* rewards_per_block = Context.get_issuance_per_minute (B block) in - let* total_supply = Context.get_total_supply (B block) in - let* expected_issuance = Context.get_ai_expected_issuance (B block) in - let* () = - match expected_issuance with - | ei :: _ -> - (* We assume only the fixed portion is issued *) - Assert.equal_tez - ~loc:__LOC__ - rewards_per_block - ei.baking_reward_fixed_portion - | _ -> failwith "expected_issuance rpc: unexpected value" - in - let* yearly_rate = Context.get_ai_current_yearly_rate (B block) in - let* yearly_rate_exact = Context.get_ai_current_yearly_rate_exact (B block) in - let yr = float_of_string yearly_rate in - let yre = Q.to_float yearly_rate_exact in - (* Precision for yearly rate is 0.001 *) - let* () = - Assert.equal - ~loc:__LOC__ - (fun x y -> Float.(abs (x -. y) <= 0.001)) - "Yearly rate (float)" - Format.pp_print_float - yr - yre - in - (* Divided by 525_600 minutes per year, x100 because rpc returns a pct *) - let issuance_from_rate = - Tez.( - mul_q total_supply Q.(div yearly_rate_exact ~$525_600_00) - |> of_q ~round:`Down) - in - let* () = - Assert.equal - ~loc:__LOC__ - Tez.equal - "Issuance" - Tez.pp - rewards_per_block - issuance_from_rate - in - return_unit - -let attest_all_ = - let open Lwt_result_syntax in - fun (block, state) -> - let dlgs = - String.Map.bindings state.State.account_map - |> List.filter (fun (name, acc) -> - match acc.delegate with - | Some x -> String.equal x name - | None -> false) - |> List.map snd - in - let* ops = - List.map_es (fun dlg -> Op.attestation ~delegate:dlg.pkh block) dlgs - in - let state = State.add_pending_operations ops state in - return (block, state) - -(* Does not produce a new block *) -let attest_all = exec attest_all_ - -(** Bake a block, with the given baker and the given operations. *) -let bake ?baker : t -> t tzresult Lwt.t = - fun (block, state) -> - let open Lwt_result_wrap_syntax in - let previous_block = block in - let policy = - match baker with - | None -> state.baking_policy - | Some baker -> - let {pkh; _} = - try State.find_account baker state - with Not_found -> - Log.info - ~color:warning_color - "Invalid baker: %s not found. Aborting" - baker ; - assert false - in - Some (Block.By_account pkh) - in - let* baker, _, _, _ = Block.get_next_baker ?policy block in - let baker_name, {contract = baker_contract; _} = - State.find_account_from_pkh baker state - in - let current_cycle = Block.current_cycle block in - let* level = Plugin.RPC.current_level Block.rpc_ctxt block in - assert (Protocol.Alpha_context.Cycle.(level.cycle = Block.current_cycle block)) ; - Log.info - ~color:time_color - "Baking level %d (cycle %ld) with %s" - (Int32.to_int (Int32.succ Block.(block.header.shell.level))) - (Protocol.Alpha_context.Cycle.to_int32 level.cycle) - baker_name ; - let adaptive_issuance_vote = - if state.force_ai_vote_yes then - Protocol.Alpha_context.Per_block_votes.Per_block_vote_on - else Per_block_vote_pass - in - let* () = check_issuance_rpc block in - let state, operations = State.pop_pending_operations state in - let* block, state = - let* block', _metadata = - Block.bake_with_metadata ?policy ~adaptive_issuance_vote ~operations block - in - if state.burn_rewards then - (* Incremental mode *) - let* i = - Incremental.begin_construction ?policy ~adaptive_issuance_vote block - in - let* block_rewards = Context.get_issuance_per_minute (B block') in - let ctxt = Incremental.alpha_ctxt i in - let*@ context, _ = - Protocol.Alpha_context.Token.transfer - ctxt - (`Contract baker_contract) - `Burned - block_rewards - in - let i = Incremental.set_alpha_ctxt i context in - let* i = List.fold_left_es Incremental.add_operation i operations in - let* block = Incremental.finalize_block i in - let state = State.apply_burn block_rewards baker_name state in - return (block, state) - else return (block', state) - in - let baker_acc = State.find_account baker_name state in - (* update baker and attesters activity *) - let update_activity delegate_account = - Account_helpers.update_activity - delegate_account - state.constants - ~level:block.header.shell.level - (Block.current_cycle block) - in - let* attesters = - let open Tezos_raw_protocol_019_PtParisB.Alpha_context in - let* ctxt = Context.get_alpha_ctxt (B previous_block) in - List.filter_map_es - (fun op -> - let ({protocol_data = Operation_data protocol_data; _} - : packed_operation) = - op - in - match protocol_data.contents with - | Single (Attestation {consensus_content; _}) -> - let*@ _, owner = - Stake_distribution.slot_owner - ctxt - (Level.from_raw ctxt consensus_content.level) - consensus_content.slot - in - return_some owner.delegate - | _ -> return_none) - operations - in - let state = - State.update_map - ~f:(fun acc_map -> - let acc_map = - String.Map.add baker_name (update_activity baker_acc) acc_map - in - List.fold_left - (fun acc_map delegate_pkh -> - let delegate_name, delegate_acc = - State.find_account_from_pkh delegate_pkh state - in - String.Map.add delegate_name (update_activity delegate_acc) acc_map) - acc_map - attesters) - state - in - let* state = - State_ai_flags.AI_Activation.check_activation_cycle block state - in - let* state = State.apply_rewards ~baker:baker_name block state in - (* First block of a new cycle *) - let new_current_cycle = Block.current_cycle block in - let* state = - if Protocol.Alpha_context.Cycle.(current_cycle = new_current_cycle) then - return state - else ( - Log.info - ~color:time_color - "Cycle %d" - (Protocol.Alpha_context.Cycle.to_int32 new_current_cycle |> Int32.to_int) ; - return @@ apply_new_cycle new_current_cycle state) - in - (* Dawn of a new cycle *) - let* state = - if not (Block.last_block_of_cycle block) then return state - else apply_end_cycle current_cycle previous_block block state - in - let* () = check_all_balances block state in - let* () = check_misc block state in - let* block, state = - if state.force_attest_all then attest_all_ (block, state) - else return (block, state) - in - return (block, state) - -(** Bake until a cycle is reached, using [bake] instead of [Block.bake] *) -let bake_until_next_cycle : t -> t tzresult Lwt.t = - fun (init_block, init_state) -> - let open Lwt_result_syntax in - let current_cycle = Block.current_cycle init_block in - let rec step (old_block, old_state) = - let step_cycle = Block.current_cycle old_block in - if Protocol.Alpha_context.Cycle.(step_cycle > current_cycle) then - return (old_block, old_state) - else - let* new_block, new_state = bake (old_block, old_state) in - step (new_block, new_state) - in - step (init_block, init_state) - -(** Bake all the remaining blocks of the current cycle *) -let bake_until_dawn_of_next_cycle : t -> t tzresult Lwt.t = - fun (init_block, init_state) -> - let open Lwt_result_syntax in - let current_cycle = Block.current_cycle init_block in - let rec step (old_block, old_state) = - let* new_block, new_state = bake (old_block, old_state) in - let step_cycle = Block.current_cycle new_block in - if Protocol.Alpha_context.Cycle.(step_cycle > current_cycle) then - return (old_block, old_state) - else step (new_block, new_state) - in - step (init_block, init_state) - -(* ======== Operations ======== *) - -(** Bake a single block *) -let next_block = - exec (fun input -> - Log.info ~color:action_color "[Next block]" ; - bake input) - -(** Bake a single block with a specific baker *) -let next_block_with_baker baker = - exec (fun input -> - Log.info ~color:action_color "[Next block (baker %s)]" baker ; - bake ~baker input) - -(** Bake until the end of a cycle *) -let next_cycle_ input = - Log.info ~color:action_color "[Next cycle]" ; - bake_until_next_cycle input - -(** Bake until the end of a cycle *) -let next_cycle = exec next_cycle_ - -(** Executes an operation: f should return a new state and a list of operations, which are then applied *) -let exec_op f = - let open Lwt_result_syntax in - Action - (fun ((block, _state) as input) -> - let* state, ops = f input in - let state = State.add_pending_operations ops state in - return (block, state)) - --> next_block - -(** Waiting functions *) -let wait_n_cycles n = loop n next_cycle - -let wait_n_blocks n = loop n next_block - -let wait_cycle_f_es (condition : t -> t -> bool tzresult Lwt.t) : - (t, t) scenarios = - let open Lwt_result_syntax in - exec (fun init_t -> - let rec bake_while t = - let* b = condition init_t t in - if b then return t - else - let* t = next_cycle_ t in - bake_while t - in - bake_while init_t) - -(** Waits until [condition init_t current_t] is fulfilled. - It is checked on the first block of every cycle. If it returns false, - another cycle is baked, until it succeeds. -*) -let wait_cycle_f (condition : t -> t -> bool) : (t, t) scenarios = - let open Lwt_result_syntax in - let condition a b = return @@ condition a b in - wait_cycle_f_es condition - -(** Wait until we are in a cycle satisfying the given condition. - Fails if AI_activation is requested and AI is not set to be activated in the future. *) -let wait_cycle_until condition = - let to_, done_ = - let rec get_names condition = - match condition with - | `AI_activation -> ("AI activation", "AI activated") - | `AI_activation_with_votes -> - ("AI activation (with votes)", "AI activated") - | `delegate_parameters_activation -> - ("delegate parameters activation", "delegate parameters activated") - | `right_before_delegate_parameters_activation -> - ( "right before delegate parameters activation", - "delegate parameters will activate next cycle" ) - | `And (cond1, cond2) -> - let to1, done1 = get_names cond1 in - let to2, done2 = get_names cond2 in - (to1 ^ " and " ^ to2, done1 ^ " and " ^ done2) - in - get_names condition - in - let condition (init_block, init_state) = - let rec stopper condition = - match condition with - | `AI_activation -> ( - fun (block, _state) -> - (* Expects the launch cycle to be already set *) - match init_state.State.ai_activation_cycle with - | Some launch_cycle -> - let current_cycle = Block.current_cycle block in - Cycle.(current_cycle >= launch_cycle) - | _ -> - Log.error - "wait_cycle_until `AI_activation: launch cycle not found, \ - aborting." ; - assert false) - | `AI_activation_with_votes -> - fun (block, state) -> - if State_ai_flags.AI_Activation.enabled init_state then - match state.State.ai_activation_cycle with - (* Since AI_activation is enabled, we expect the activation - cycle to be set eventually *) - | Some launch_cycle -> - let current_cycle = Block.current_cycle block in - Cycle.(current_cycle >= launch_cycle) - | _ -> false - else ( - Log.error - "wait_cycle_until `AI_activation_with_votes: AI cannot \ - activate with the current protocol parameters, aborting." ; - assert false) - | `delegate_parameters_activation -> - fun (block, _state) -> - let init_cycle = Block.current_cycle init_block in - let cycles_to_wait = - (* Delegate parameters wait for at least - [delegate_parameters_activation_delay] **full - cycles** to activate, so we need to add 1 to the - number of cycles to wait. *) - init_state.constants.delegate_parameters_activation_delay + 1 - in - Cycle.(Block.current_cycle block >= add init_cycle cycles_to_wait) - | `right_before_delegate_parameters_activation -> - fun (block, _state) -> - let init_cycle = Block.current_cycle init_block in - let cycles_to_wait = - init_state.constants.delegate_parameters_activation_delay - in - Cycle.(Block.current_cycle block >= add init_cycle cycles_to_wait) - | `And (cond1, cond2) -> - let stop1 = stopper cond1 in - let stop2 = stopper cond2 in - fun (block, state) -> - let b1 = stop1 (block, state) in - let b2 = stop2 (block, state) in - b1 && b2 - in - stopper condition - in - log ~color:time_color "Fast forward to %s" to_ - --> wait_cycle_f condition - --> log ~color:event_color "%s" done_ - -(** Wait until AI activates. - Fails if AI is not set to be activated in the future. *) -let wait_ai_activation = - wait_cycle_until `AI_activation - --> exec_unit (fun (block, state) -> - assert (State_ai_flags.AI.enabled block state) ; - Lwt_result_syntax.return_unit) - -(** wait delegate_parameters_activation_delay cycles *) -let wait_delegate_parameters_activation = - wait_cycle_until `delegate_parameters_activation - -let wait_n_cycles_f_es (n_cycles : t -> int tzresult Lwt.t) = - let open Lwt_result_syntax in - let condition ((init_block, _init_state) as t_init) - ((current_block, _current_state) as _t_current) = - let* n = n_cycles t_init in - let init_cycle = Block.current_cycle init_block in - let current_cycle = Block.current_cycle current_block in - return Cycle.(current_cycle >= add init_cycle n) - in - wait_cycle_f_es condition - -let wait_n_cycles_f (n_cycles : t -> int) = - let open Lwt_result_syntax in - let n_cycles n = return @@ n_cycles n in - wait_n_cycles_f_es n_cycles diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_base.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_base.ml deleted file mode 100644 index ddcbe5f972829b65d90323b2cf3a9ca6341aa159..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_base.ml +++ /dev/null @@ -1,268 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** This module gathers the basic operations used in test scenarios. This - includes starting a scenario, baking, checking and manipulating the state, - and various wait functions *) - -open State_account -open State -open Scenario_dsl -open Log_helpers - -(** For [assert_failure], when expected error does not match the actual error. *) -type error += Unexpected_error - -(** For [assert_failure], when scenario actually succeeds when expected to fail. *) -type error += Unexpected_success - -(** Usual threaded state for the tests. Contains the current block, pending operations - and the known [State.t] *) -type t = Block.t * State.t - -let log ?(level = Cli.Logs.Info) ?color format = - Format.kasprintf - (fun s -> - exec_unit (fun _ -> - Log.log ~level ?color "%s" s ; - Lwt_result_syntax.return_unit)) - format - -(* ======== State updates ======== *) - -(** Sets the de facto baker for all future blocks *) -let set_baker baker : (t, t) scenarios = - let open Lwt_result_syntax in - exec_state (fun (_block, state) -> - let {pkh; _} = State.find_account baker state in - return {state with State.baking_policy = Some (Block.By_account pkh)}) - -(** Exclude a list of delegates from baking *) -let exclude_bakers bakers : (t, t) scenarios = - let open Lwt_result_syntax in - exec_state (fun (_block, state) -> - let bakers_pkh = - List.map (fun baker -> (State.find_account baker state).pkh) bakers - in - let log_list = - List.combine_drop bakers bakers_pkh - |> List.map (fun (name, pkh) -> - Format.asprintf "%s(%a)" name Signature.Public_key_hash.pp pkh) - in - Log.log - ~level:Cli.Logs.Info - ~color:event_color - "Excluding bakers: [ %s ]" - (String.concat ", " log_list) ; - return - {state with State.baking_policy = Some (Block.Excluding bakers_pkh)}) - -(** Unsets the baking policy, it returns to default ([By_round 0]) *) -let unset_baking_policy : (t, t) scenarios = - let open Lwt_result_syntax in - exec_state (fun (_block, state) -> - return {state with State.baking_policy = None}) - -(** Creates a snapshot of the current balances for the given account names. - Can be used to check that balances at point A and B in the execution of a test - are the same (either nothing happened, or a succession of actions resulted in - getting the same values as before *) -let snapshot_balances snap_name names_list : (t, t) scenarios = - let open Lwt_result_syntax in - exec_state (fun (_block, state) -> - Log.debug - ~color:low_debug_color - "Snapshoting balances as \"%s\"" - snap_name ; - let balances = - List.map - (fun name -> (name, balance_of_account name state.State.account_map)) - names_list - in - let snapshot_balances = - String.Map.add snap_name balances state.snapshot_balances - in - return {state with snapshot_balances}) - -(** Check balances against a previously defined snapshot *) -let check_snapshot_balances - ?(f = - fun ~name ~old_balance ~new_balance -> - assert_balance_equal ~loc:__LOC__ name old_balance new_balance) - snap_name : (t, t) scenarios = - let open Lwt_result_syntax in - exec_unit (fun (_block, state) -> - Log.debug - ~color:low_debug_color - "Checking evolution of balances between \"%s\" and now" - snap_name ; - let snapshot_balances = - String.Map.find snap_name state.State.snapshot_balances - in - match snapshot_balances with - | None -> - Log.debug - ~color:warning_color - "\"%s\" snapshot not found..." - snap_name ; - return_unit - | Some snapshot_balances -> - let* () = - List.iter_es - (fun (name, old_balance) -> - let new_balance = - balance_of_account name state.State.account_map - in - f ~name ~old_balance ~new_balance) - snapshot_balances - in - return_unit) - -(** Save the current issuance rate for future use *) -let save_current_rate : (t, t) scenarios = - let open Lwt_result_syntax in - exec_state (fun (block, state) -> - let* rate = Context.get_ai_current_yearly_rate_exact (B block) in - return {state with State.saved_rate = Some rate}) - -(** Check that [f saved_rate current_rate] is true. [f] is typically a comparison function *) -let check_rate_evolution (f : Q.t -> Q.t -> bool) : (t, t) scenarios = - let open Lwt_result_syntax in - exec_unit (fun (block, state) -> - let* new_rate = Context.get_ai_current_yearly_rate_exact (B block) in - let previous_rate = state.State.saved_rate in - match previous_rate with - | None -> failwith "check_rate_evolution: no rate previously saved" - | Some previous_rate -> - if f previous_rate new_rate then return_unit - else - failwith - "check_rate_evolution: assertion failed@.previous rate: %a@.new \ - rate: %a" - Q.pp_print - previous_rate - Q.pp_print - new_rate) - -(* ======== Misc functions ========*) - -let check_failure_aux ?(loc = __LOC__) ?expected_error : - ('a -> 'b tzresult Lwt.t) -> 'a -> 'a tzresult Lwt.t = - let open Lwt_result_syntax in - fun f input -> - Log.info ~color:assert_block_color "Entering failing scenario..." ; - let*! output = f input in - match output with - | Ok _ -> - Log.info "%s: Unexpected success@." loc ; - tzfail Unexpected_success - | Error e -> ( - match expected_error with - | None -> - Log.info ~color:assert_block_color "Rollback" ; - return input - | Some exp_e -> - let exp_e = exp_e input in - if e = exp_e then ( - Log.info ~color:assert_block_color "Rollback" ; - return input) - else ( - Log.info - "%s: Unexpected error:@.%a@.Expected:@.%a@." - loc - (Format.pp_print_list pp) - e - (Format.pp_print_list pp) - exp_e ; - tzfail Unexpected_error)) - -let check_fail_and_rollback ?(loc = __LOC__) ?expected_error : - ('a, 'b) single_scenario -> 'a -> 'a tzresult Lwt.t = - fun sc input -> check_failure_aux ~loc ?expected_error (run_scenario sc) input - -(** Useful function to test expected failures: runs the given branch until it fails, - then rollbacks to before execution. Fails if the given branch Succeeds *) -let assert_failure ?(loc = __LOC__) ?expected_error : - ('a, 'b) scenarios -> ('a, 'a) scenarios = - fun scenarios -> - match unfold_scenarios scenarios with - | [] -> Empty - | [(sc, _, _)] -> exec (check_fail_and_rollback ~loc ?expected_error sc) - | _ -> - exec (fun _ -> - failwith "%s: Error: assert_failure used with branching scenario" loc) - -(** Check a scenario does not fail, and rolls back to before the assert *) -let assert_success ?(loc = __LOC__) : ('a, 'b) scenarios -> ('a, 'a) scenarios = - fun scenarios -> - match unfold_scenarios scenarios with - | [] -> Empty - | [(sc, _, _)] -> - exec - (let open Lwt_result_syntax in - fun input -> - let* _ = run_scenario sc input in - return input) - | _ -> - exec (fun _ -> - failwith "%s: Error: assert_success used with branching scenario" loc) - -(** Loop *) -let rec loop n : ('a, 'a) scenarios -> ('a, 'a) scenarios = - fun scenario -> - (* If branching scenarios with k branches, returns a scenario with k^n branches *) - if n = 0 then Empty - else if n = 1 then scenario - else loop (n - 1) scenario --> scenario - -let rec loop_action n : ('a -> 'a tzresult Lwt.t) -> ('a, 'a) scenarios = - fun f -> - if n = 0 then Empty - else if n = 1 then exec f - else loop_action (n - 1) f --> exec f - -(** Check a specific balance field for a specific account is equal to a specific amount *) -let check_balance_field src_name field amount : (t, t) scenarios = - let open Lwt_result_syntax in - let check = Assert.equal_tez ~loc:__LOC__ amount in - let check' a = check (Partial_tez.to_tez ~round:`Down a) in - exec_unit (fun (block, state) -> - let src = State.find_account src_name state in - let src_balance, src_total = - balance_and_total_balance_of_account src_name state.account_map - in - let* rpc_balance, rpc_total = - get_balance_from_context (B block) src.contract - in - let* () = - match field with - | `Liquid -> - let* () = check rpc_balance.liquid_b in - check src_balance.liquid_b - | `Bonds -> - let* () = check rpc_balance.bonds_b in - check src_balance.bonds_b - | `Staked -> - let* () = check' rpc_balance.staked_b in - check' src_balance.staked_b - | `Unstaked_frozen_total -> - let* () = check rpc_balance.unstaked_frozen_b in - check src_balance.unstaked_frozen_b - | `Unstaked_finalizable -> - let* () = check rpc_balance.unstaked_finalizable_b in - check src_balance.unstaked_finalizable_b - | `Total -> - let* () = check rpc_total in - check src_total - in - return_unit) - -let check_balance_fields src_name ~liquid ~staked - ?(unstaked_frozen_total = Tez.zero) () = - check_balance_field src_name `Staked staked - --> check_balance_field src_name `Liquid liquid - --> check_balance_field src_name `Unstaked_frozen_total unstaked_frozen_total diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_begin.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_begin.ml deleted file mode 100644 index 6ea7a016fc18f2516429da266f3f26066d68ce11..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_begin.ml +++ /dev/null @@ -1,191 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open State_account -open Scenario_dsl -open Scenario_bake -open Scenario_base -open Log_helpers -open Adaptive_issuance_helpers -open Scenario_constants - -(** Returns when the number of bootstrap accounts created by [Context.init_n n] is not equal to [n] *) -type error += Inconsistent_number_of_bootstrap_accounts - -type starter_constants = Mainnet | Sandbox | Test - -let start ~(constants : starter_constants) : (unit, constants) scenarios = - let constants, name = - match constants with - | Mainnet -> (Default_parameters.constants_mainnet, "mainnet") - | Sandbox -> (Default_parameters.constants_sandbox, "sandbox") - | Test -> (Default_parameters.constants_test, "test") - in - Action - (fun () -> - Log.info ~color:begin_end_color "-- Begin test --" ; - Log.info "Loading constants_%s." name ; - Lwt_result_syntax.return constants) - -let start_with ~(constants : constants) : (unit, constants) scenarios = - Action - (fun () -> - Log.info ~color:begin_end_color "-- Begin test --" ; - Log.info "Loading custom constants." ; - Lwt_result_syntax.return constants) - -let start_with_list ~(constants : (string * constants) list) : - (unit, constants) scenarios = - match constants with - | [] -> - Stdlib.failwith - (Format.asprintf "%s: Cannot build scenarios from empty list" __LOC__) - | _ -> fold_tag (fun constants -> start_with ~constants) constants - -let activate_ai mode = - match mode with - | `Force -> - log ~color:event_color "Forcing AI activation at initial cycle" - --> set S.Adaptive_issuance.force_activation true - | `Zero_threshold -> - (* Requires to wait until AI is activated *) - log ~color:event_color "Setting ai vote threshold to 0" - --> set S.Adaptive_issuance.force_activation false - --> set S.Adaptive_issuance.launch_ema_threshold 0l - | `With_vote_threshold t -> - (* Requires to wait for the votes to pass the threshold, then - wait some more before AI is activated *) - log ~color:event_color "Setting ai vote threshold to %ld" t - --> set S.Adaptive_issuance.force_activation false - --> set S.Adaptive_issuance.activation_vote_enable true - --> set S.Adaptive_issuance.launch_ema_threshold t - | `Force_and_vote_with_threshold t -> - (* Force should have priority on the vote *) - log - ~color:event_color - "Forcing AI activation at initial cycle, and setting ai vote threshold \ - to %ld" - t - --> set S.Adaptive_issuance.force_activation true - --> set S.Adaptive_issuance.activation_vote_enable true - --> set S.Adaptive_issuance.launch_ema_threshold t - | `No -> - (* AI cannot be activated. *) - log ~color:event_color "Setting AI as impossible to activate" - --> set - S.Adaptive_issuance.launch_ema_threshold - (Int32.succ - Protocol.Per_block_votes_repr.Internal_for_tests.ema_max) - --> set S.Adaptive_issuance.force_activation false - --> set S.Adaptive_issuance.activation_vote_enable false - -(** Initializes the constants for testing, with well chosen default values. - Recommended over [start] or [start_with] *) -let init_constants ?(default = Test) ?(reward_per_block = 0L) - ?(deactivate_dynamic = false) ?blocks_per_cycle - ?delegate_parameters_activation_delay () = - let base_total_issued_per_minute = Tez.of_mutez reward_per_block in - start ~constants:default - --> (* default for tests: 12 *) - set_opt S.blocks_per_cycle blocks_per_cycle - --> set_opt - S.delegate_parameters_activation_delay - delegate_parameters_activation_delay - --> set - S.issuance_weights - { - base_total_issued_per_minute; - baking_reward_fixed_portion_weight = 1; - baking_reward_bonus_weight = 0; - attesting_reward_weight = 0; - seed_nonce_revelation_tip_weight = 0; - vdf_revelation_tip_weight = 0; - } - --> set S.liquidity_baking_subsidy Tez.zero - --> set S.minimal_block_delay Protocol.Alpha_context.Period.one_minute - --> set S.cost_per_byte Tez.zero - --> set S.consensus_threshold 0 - --> (if deactivate_dynamic then - set - S.Adaptive_issuance.Adaptive_rewards_params.max_bonus - (Protocol.Issuance_bonus_repr.max_bonus_parameter_of_Q_exn Q.zero) - else Empty) - --> set S.Adaptive_issuance.ns_enable false - -(** Initialize the test, given some initial parameters *) -let begin_test ?(burn_rewards = false) ?(force_attest_all = false) - delegates_name_list : (constants, t) scenarios = - exec (fun (constants : constants) -> - let open Lwt_result_syntax in - let bootstrap = "__bootstrap__" in - let delegates_name_list = bootstrap :: delegates_name_list in - (* Override threshold value if activate *) - let n = List.length delegates_name_list in - let* block, delegates = Context.init_with_constants_n constants n in - let*? init_level = Context.get_level (B block) in - let init_staked = Tez.of_mutez 200_000_000_000L in - let*? account_map = - List.fold_left2 - ~when_different_lengths:[Inconsistent_number_of_bootstrap_accounts] - (fun account_map name contract -> - let liquid = Tez.(Account.default_initial_balance -! init_staked) in - let frozen_deposits = Frozen_tez.init init_staked name name in - let frozen_rights = - List.fold_left - (fun map cycle -> CycleMap.add cycle init_staked map) - CycleMap.empty - Cycle.(root ---> add root constants.consensus_rights_delay) - in - let pkh = Context.Contract.pkh contract in - let account = - init_account - ~delegate:name - ~pkh - ~contract - ~parameters:default_params - ~liquid - ~frozen_deposits - ~frozen_rights - () - in - let account_map = String.Map.add name account account_map in - let balance, total_balance = - balance_and_total_balance_of_account name account_map - in - Log.debug "Initial balance for %s:\n%a" name balance_pp balance ; - Log.debug "Initial total balance: %a" Tez.pp total_balance ; - account_map) - String.Map.empty - delegates_name_list - delegates - in - let* total_supply = Context.get_total_supply (B block) in - let state = - State. - { - account_map; - total_supply; - constants; - param_requests = []; - force_ai_vote_yes = true; - baking_policy = None; - last_level_rewards = init_level; - snapshot_balances = String.Map.empty; - saved_rate = None; - burn_rewards; - pending_operations = []; - pending_slashes = []; - double_signings = []; - ai_activation_cycle = None; - force_attest_all; - } - in - let* () = check_all_balances block state in - let* state = - State_ai_flags.AI_Activation.check_activation_cycle block state - in - return (block, state)) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_constants.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_constants.ml deleted file mode 100644 index 019dbb46bd0879280613f298ece7af6d2719bd45..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_constants.ml +++ /dev/null @@ -1,50 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Scenario_dsl - -type constants = Constants_helpers.t - -(* Not a Set *) -module S = Constants_helpers.Set - -let set : - ('a -> constants -> constants) -> 'a -> (constants, constants) scenarios = - fun f x -> Action (fun csts -> Lwt_result_syntax.return @@ f x csts) - -let set_opt : - ('a -> constants -> constants) -> - 'a option -> - (constants, constants) scenarios = - fun f -> function None -> Empty | Some x -> set f x - -let sets : - ('a -> constants -> constants) -> - (string * 'a) list -> - (constants, constants) scenarios = - fun f -> fold_tag (set f) - -let sets_f : - ('a -> constants -> constants) -> - ('a -> string) -> - 'a list -> - (constants, constants) scenarios = - fun f f_tag -> fold_tag_f (set f) f_tag - -let branch_flag : - (bool -> constants -> constants) -> (constants, constants) scenarios = - fun f -> sets f [("true", true); ("false", false)] - -let branch_flags : - (bool -> constants -> constants) list -> (constants, constants) scenarios = - unfold branch_flag - -let sets_int : - (int -> constants -> constants) -> - int list -> - (constants, constants) scenarios = - fun f -> sets_f f string_of_int diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_dsl.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_dsl.ml deleted file mode 100644 index b53e8580b62f7f537d5b912f9ba9a91d33df2b2e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_dsl.ml +++ /dev/null @@ -1,203 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Log_helpers - -(** A scenario is a succession of actions. We define a branching path as a way to create multiple tests - from the same point. This allows easy compositionality of behaviors with minimal code sharing. - The [Tag] allows to give meaningful identifiers to the branches. It is good practice to tag each - case in a branch (it's not necessary, but since test names must be unique, at most one branch can - remain unnamed, and even then it can create conflicting names.) - *) -type ('input, 'output) scenarios = - | Action : ('input -> 'output tzresult Lwt.t) -> ('input, 'output) scenarios - | Empty : ('t, 't) scenarios - | Concat : (('a, 'b) scenarios * ('b, 'c) scenarios) -> ('a, 'c) scenarios - | Branch : (('a, 'b) scenarios * ('a, 'b) scenarios) -> ('a, 'b) scenarios - | Tag : (* Name for test branch *) string -> ('t, 't) scenarios - | Slow : (* If in scenario branch, makes the test `Slow *) - ('t, 't) scenarios - -(** Unfolded scenario type *) -type ('input, 'output) single_scenario = - | End_scenario : ('t, 't) single_scenario - | Cons : - (('input -> 't tzresult Lwt.t) * ('t, 'output) single_scenario) - -> ('input, 'output) single_scenario - -let rec cat_ss : - type a b c. - (a, b) single_scenario -> (b, c) single_scenario -> (a, c) single_scenario = - fun a b -> - match a with End_scenario -> b | Cons (act, a') -> Cons (act, cat_ss a' b) - -let combine f l1 l2 = - List.map (fun a -> List.map (fun b -> f a b) l2) l1 |> List.flatten - -let rec unfold_scenarios : - type input output. - (input, output) scenarios -> - ((input, output) single_scenario * string list * bool) list = function - | Slow -> [(End_scenario, [], true)] - | Tag s -> [(End_scenario, [s], false)] - | Empty -> [(End_scenario, [], false)] - | Action a -> [(Cons (a, End_scenario), [], false)] - | Branch (left, right) -> unfold_scenarios left @ unfold_scenarios right - | Concat (left, right) -> - let l = unfold_scenarios left in - let r = unfold_scenarios right in - combine - (fun (sl, tl, bl) (sr, tr, br) -> (cat_ss sl sr, tl @ tr, bl || br)) - l - r - -let rec run_scenario : - type input output. - (input, output) single_scenario -> input -> output tzresult Lwt.t = - let open Lwt_result_syntax in - fun scenario input -> - match scenario with - | End_scenario -> return input - | Cons (action, next) -> - let* result = action input in - run_scenario next result - -type test_closure = string * bool * (Tezt_tezos.Protocol.t -> unit Lwt.t) - -let unfolded_to_test : - (unit, unit) single_scenario * string list * bool -> test_closure = - let open Lwt_syntax in - fun (s, title, is_slow) -> - let title = - match title with - | [] -> "" - | [n] -> n - | header :: tags -> - (* We chose to separate all tags with a comma, and use the head tag as a header for the test *) - header ^ ": " ^ String.concat ", " tags - in - ( title, - is_slow, - fun _proto -> - let* r = (run_scenario s) () in - match r with - | Ok () -> return_unit - | Error e -> - let m = Format.asprintf "%a@." Error_monad.pp_print_trace e in - Stdlib.failwith m ) - -let register_test ~__FILE__ ~tags ((title, is_slow, test) : test_closure) : unit - = - let tags = if is_slow then Tezos_test_helpers.Tag.slow :: tags else tags in - Tezt_tezos.Protocol.( - register_test - ~__FILE__ - ~title - ~tags - ~uses:(fun _ -> []) - ~uses_node:false - ~uses_client:false - ~uses_admin_client:false - test - [ParisB]) - -let register_tests ~__FILE__ ~tags (l : test_closure list) : unit = - List.iter (register_test ~__FILE__ ~tags) l - -(** Useful aliases and operators *) - -(* Aliases for [Empty]. Can be used as first component of a scenario instead of a tag if its not needed. *) -let noop = Empty - -let no_tag = Empty - -let concat : - type a b c. (a, b) scenarios -> (b, c) scenarios -> (a, c) scenarios = - fun a b -> - match (a, b) with - | Empty, Empty -> Empty - | _, Empty -> a - | Empty, _ -> b - | _ -> Concat (a, b) - -let branch : type a b. (a, b) scenarios -> (a, b) scenarios -> (a, b) scenarios - = - fun a b -> match (a, b) with Empty, Empty -> Empty | _ -> Branch (a, b) - -(** Continuation connector: execute a then b *) -let ( --> ) a b = concat a b - -(** Branching connector: creates two tests with different execution paths *) -let ( |+ ) a b = branch a b - -(** Ends the test. Dump the state, returns [unit] *) -let end_test : ('a, unit) scenarios = - let open Lwt_result_syntax in - Action - (fun _ -> - Log.info ~color:begin_end_color "-- End test --" ; - return_unit) - -(** Transforms scenarios into tests *) -let tests_of_scenarios : - (string * (unit, 't) scenarios) list -> test_closure list = - fun scenarios -> - List.map (fun (s, x) -> Tag s --> x --> end_test) scenarios |> function - | [] -> [] - | a :: t -> - List.fold_left ( |+ ) a t |> unfold_scenarios |> List.map unfolded_to_test - -(** Arbitrary execution *) -let exec f = Action f - -(** Execute a function that does not modify the block, only the state *) -let exec_state f = - let open Lwt_result_syntax in - Action - (fun ((block, _state) as input) -> - let* state = f input in - return (block, state)) - -(** Execute a function that does not modify neither the block nor the state. - Usually used for checks/asserts *) -let exec_unit f = - let open Lwt_result_syntax in - Action - (fun input -> - let* () = f input in - return input) - -(** [fold f l] folds [f] over [l], fails on empty list *) -let rec fold : ('a -> ('b, 'c) scenarios) -> 'a list -> ('b, 'c) scenarios = - fun f list -> - match list with - | [] -> Stdlib.failwith "Scenario_dsl.fold: empty list" - | [x] -> f x - | h :: t -> f h |+ fold f t - -(** [fold_tag f l] folds [f] over [l], [l] has a tag for each of its elements. - Fails on empty list. *) -let fold_tag : - ('a -> ('b, 'c) scenarios) -> (string * 'a) list -> ('b, 'c) scenarios = - fun f -> - let f (s, x) = Tag s --> f x in - fold f - -(** [fold_tag_f f tag l] folds [f] over [l], [tag] returns a tag for each element of [l]. - Fails on empty list. *) -let fold_tag_f : - ('a -> ('b, 'c) scenarios) -> - ('a -> string) -> - 'a list -> - ('b, 'c) scenarios = - fun f tag -> - let f x = Tag (tag x) --> f x in - fold f - -(** [unfold f l] maps [f] over [l], and runs them in order *) -let rec unfold : ('a -> ('b, 'b) scenarios) -> 'a list -> ('b, 'b) scenarios = - fun f -> function [] -> Empty | [x] -> f x | h :: t -> f h --> unfold f t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_op.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_op.ml deleted file mode 100644 index d12946b258bcf35caa16240d6d9f6cb6879ede32..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/scenario_op.ml +++ /dev/null @@ -1,604 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** This module gathers many protocol operations in the form of scenarios. - This includes (but is not limited to) transfers and such (stake, - unstake...), as well as various ways to forge double signings. *) - -open Log_helpers -open State_account -open Adaptive_issuance_helpers -open Scenario_dsl -open Scenario_base -open Scenario_bake -open Tez_helpers.Ez_tez - -let normalize_parameters - {limit_of_staking_over_baking; edge_of_baking_over_staking} state = - let actual_limit = - Q.( - mul limit_of_staking_over_baking (1_000_000 // 1) - |> to_int |> of_int - |> mul (1 // 1_000_000)) - |> Q.max Q.zero - |> Q.min - (Q.of_int - state.State.constants.adaptive_issuance - .global_limit_of_staking_over_baking) - in - let actual_edge = - Q.( - mul edge_of_baking_over_staking (1_000_000_000 // 1) - |> to_int |> of_int - |> mul (1 // 1_000_000_000)) - |> Q.max Q.zero |> Q.min Q.one - in - { - limit_of_staking_over_baking = actual_limit; - edge_of_baking_over_staking = actual_edge; - } - -(** Set delegate parameters for the given delegate *) -let set_delegate_params delegate_name parameters : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - (* Simple example of action_atom definition: *) - let delegate = State.find_account delegate_name state in - Log.info - ~color:action_color - "[Set delegate parameters for \"%s\"]" - delegate_name ; - (* Define the operation *) - let* operation = - set_delegate_parameters (B block) delegate.contract ~parameters - in - (* Update state *) - let norm_parameters = normalize_parameters parameters state in - let wait = state.constants.delegate_parameters_activation_delay in - let state = - { - state with - param_requests = - (delegate_name, norm_parameters, wait) :: state.param_requests; - } - in - (* Return both *) - return (state, [operation])) - -(** Add a new account with the given name *) -let add_account name : (t, t) scenarios = - let open Lwt_result_syntax in - exec_state (fun (_block, state) -> - Log.info ~color:action_color "[Add account \"%s\"]" name ; - let new_account = Account.new_account () in - let pkh = new_account.pkh in - let contract = Protocol.Alpha_context.Contract.Implicit pkh in - let account_state = - init_account ~pkh ~contract ~parameters:default_params () - in - let state = State.update_account name account_state state in - return state) - -(** Reveal operation *) -let reveal name : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - let account = State.find_account name state in - Log.info ~color:action_color "[Reveal \"%s\"]" name ; - let* acc = Account.find account.pkh in - let* operation = - Op.revelation ~fee:Protocol.Alpha_context.Tez.zero (B block) acc.pk - in - return (state, [operation])) - -(** Transfer from src to dst *) -let transfer src_name dst_name amount : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - let src = State.find_account src_name state in - let dst = State.find_account dst_name state in - let amount = quantity_to_tez src.liquid amount in - Log.info - ~color:action_color - "[Transfer \"%s\" -> \"%s\" (%aꜩ)]" - src_name - dst_name - Tez.pp - amount ; - let* operation = - Op.transaction ~fee:Tez.zero (B block) src.contract dst.contract amount - in - let state = State.apply_transfer amount src_name dst_name state in - return (state, [operation])) - -let current_cycle block = - (* operation will be baked in next block *) - let predecessor_cycle = Block.current_cycle block in - if Block.last_block_of_cycle block then Cycle.succ predecessor_cycle - else predecessor_cycle - -(** Set delegate for src. If [delegate_name_opt = None], then unset current delegate *) -let set_delegate src_name delegate_name_opt : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - let src = State.find_account src_name state in - let delegate_pkh_opt = - match delegate_name_opt with - | None -> - Log.info ~color:action_color "[Unset delegate of \"%s\"]" src_name ; - None - | Some delegate_name -> - let delegate = State.find_account delegate_name state in - Log.info - ~color:action_color - "[Set delegate \"%s\" for \"%s\"]" - delegate_name - src_name ; - Some delegate.pkh - in - let is_not_changing_delegate = - Option.equal String.equal delegate_name_opt src.delegate - in - let current_cycle = current_cycle block in - let* operation = - Op.delegation ~fee:Tez.zero (B block) src.contract delegate_pkh_opt - in - let balance = balance_of_account src_name state.account_map in - let state = - if Q.(equal balance.staked_b zero) || is_not_changing_delegate then - state - else - let state = - State.apply_unstake current_cycle Tez.max_tez src_name state - in - (* Changing delegate applies finalize if unstake happened *) - State.apply_finalize src_name state - in - let state = State.update_delegate src_name delegate_name_opt state in - let pred_level = block.header.shell.level in - let level = Int32.(succ pred_level) in - let activity_cycle = - Block.current_cycle_of_level - ~blocks_per_cycle:state.constants.blocks_per_cycle - ~current_level:level - in - (* update delegate activation status *) - let state = - (* if self delegating *) - if Option.equal String.equal delegate_name_opt (Some src_name) then - let src = State.find_account src_name state in - State.update_map - ~f:(fun acc_map -> - String.Map.add - src_name - (Account_helpers.update_activity - src - state.constants - ~level - activity_cycle) - acc_map) - state - else state - in - return (state, [operation])) - -(** Stake operation *) -let stake src_name stake_value : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - let src = State.find_account src_name state in - Log.info - ~color:action_color - "[Stake for \"%s\" (%a)]" - src_name - tez_quantity_pp - stake_value ; - (* Stake applies finalize *before* the stake *) - let state = State.apply_finalize src_name state in - let amount = quantity_to_tez src.liquid stake_value in - let current_cycle = current_cycle block in - let* operation = stake (B block) src.contract amount in - let state = State.apply_stake amount current_cycle src_name state in - return (state, [operation])) - -(** unstake operation *) -let unstake src_name unstake_value : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - let src = State.find_account src_name state in - Log.info - ~color:action_color - "[Unstake for \"%s\" (%a)]" - src_name - tez_quantity_pp - unstake_value ; - let stake_balance = - (balance_of_account src_name state.account_map).staked_b - |> Partial_tez.to_tez ~round:`Down - in - let amount = quantity_to_tez stake_balance unstake_value in - let* operation = unstake (B block) src.contract amount in - let cycle = current_cycle block in - let balance = balance_of_account src_name state.account_map in - let state = - if Q.(equal balance.staked_b zero) then state - else - let state = State.apply_unstake cycle amount src_name state in - State.apply_finalize src_name state - in - return (state, [operation])) - -(** finalize unstake operation *) -let finalize_unstake src_name : (t, t) scenarios = - exec_op (fun (block, state) -> - let open Lwt_result_syntax in - let src = State.find_account src_name state in - Log.info ~color:action_color "[Finalize_unstake for \"%s\"]" src_name ; - let* operation = finalize_unstake (B block) src.contract in - let state = State.apply_finalize src_name state in - return (state, [operation])) - -(* ======== Slashing ======== *) - -let check_pending_slashings ~loc (block, state) : unit tzresult Lwt.t = - let open Lwt_result_syntax in - let* denunciations_rpc = Context.get_denunciations (B block) in - Slashing_helpers.Full_denunciation.check_same_lists_any_order - ~loc - denunciations_rpc - state.State.pending_slashes - -(** Double attestation helpers *) -let order_attestations ~correct_order op1 op2 = - let oph1 = Protocol.Alpha_context.Operation.hash op1 in - let oph2 = Protocol.Alpha_context.Operation.hash op2 in - let c = Operation_hash.compare oph1 oph2 in - if correct_order then if c < 0 then (op1, op2) else (op2, op1) - else if c < 0 then (op2, op1) - else (op1, op2) - -let op_double_attestation ?(correct_order = true) op1 op2 ctxt = - let e1, e2 = order_attestations ~correct_order op1 op2 in - Op.double_attestation ctxt e1 e2 - -let op_double_preattestation ?(correct_order = true) op1 op2 ctxt = - let e1, e2 = order_attestations ~correct_order op1 op2 in - Op.double_preattestation ctxt e1 e2 - -let order_block_hashes ~correct_order bh1 bh2 = - let hash1 = Protocol.Alpha_context.Block_header.hash bh1 in - let hash2 = Protocol.Alpha_context.Block_header.hash bh2 in - let c = Block_hash.compare hash1 hash2 in - if correct_order then if c < 0 then (bh1, bh2) else (bh2, bh1) - else if c < 0 then (bh2, bh1) - else (bh1, bh2) - -let op_double_baking ?(correct_order = true) bh1 bh2 ctxt = - let bh1, bh2 = order_block_hashes ~correct_order bh1 bh2 in - Op.double_baking ctxt bh1 bh2 - -(** [double_bake_op delegate_names (block, state)] performs a double baking with - the given delegate names. The first delegate in the list bakes the new main - branch. All delegates (including the first) will bake two other blocks at - the same level/different round. *) -let double_bake_op delegate_names (block, state) = - let open Lwt_result_syntax in - Log.info - ~color:event_color - "Double baking with (%s)" - (String.concat ", " delegate_names) ; - let delegates = - List.map - (fun delegate_name -> State.find_account delegate_name state) - delegate_names - in - let* main_branch, state = - bake - ~baker:(WithExceptions.Option.get ~loc:__LOC__ @@ List.hd delegate_names) - (block, state) - in - let* state = - List.fold_left_es - (fun state delegate -> - let* operation = - Adaptive_issuance_helpers.unstake - (B block) - delegate.contract - Tez.one_mutez - in - let* forked_block1 = - Block.bake ~policy:(By_account delegate.pkh) block - in - let* forked_block2 = - Block.bake ~policy:(By_account delegate.pkh) ~operation block - in - (* includes pending operations *) - let evidence = - op_double_baking forked_block1.header forked_block2.header - in - let*? misbehaviour = - Slashing_helpers.Misbehaviour_repr.from_duplicate_block forked_block1 - in - let dss = - { - State.culprit = delegate.pkh; - denounced = false; - evidence; - misbehaviour; - } - in - return - { - state with - State.double_signings = dss :: state.State.double_signings; - }) - state - delegates - in - return (main_branch, state) - -(* Note: advances one block *) -let double_bake delegate_name : (t, t) scenarios = - exec (double_bake_op [delegate_name]) - -let double_bake_many delegate_names : (t, t) scenarios = - exec (double_bake_op delegate_names) - -(** [double_attest_op ?other_bakers ~op ~op_evidence ~kind delegate_names - (block, state)] performs a double (pre)attestation with the given delegate - names. Starting at block level `n`, it creates two 2-block branches and all - delegates will (pre)attest the two blocks at level `n+2`. [other_bakers] can - be used to force using specific bakers to avoid reusing forbidden ones *) -let double_attest_op ?other_bakers ~op ~op_evidence ~kind delegate_names - (block, state) = - let open Lwt_result_syntax in - Log.info - ~color:event_color - "Double %s with %a" - (match kind with - | Protocol.Misbehaviour_repr.Double_preattesting -> "preattesting" - | Double_attesting -> "attesting" - | Double_baking -> assert false) - (Format.pp_print_list ~pp_sep:Format.pp_print_space Format.pp_print_string) - delegate_names ; - let delegates = - List.map - (fun delegate_name -> State.find_account delegate_name state) - delegate_names - in - let* baker, _, _, _ = - Block.get_next_baker ?policy:state.baking_policy block - in - Log.info "Baker: %a" Signature.Public_key_hash.pp baker ; - let* other_baker1, other_baker2 = - match other_bakers with - | Some (ob1, ob2) -> - let ob1 = (State.find_account ob1 state).pkh in - let ob2 = (State.find_account ob2 state).pkh in - return (ob1, ob2) - | None -> Context.get_first_different_bakers (B block) - in - let other_baker = - if not (Signature.Public_key_hash.equal baker other_baker2) then - other_baker2 - else other_baker1 - in - Log.info "Other baker: %a" Signature.Public_key_hash.pp other_baker ; - Log.info "Bake 1 block with %a" Signature.Public_key_hash.pp baker ; - let* forked_block = Block.bake ~policy:(By_account other_baker) block in - Log.info "Bake 1 block " ; - let* forked_block = Block.bake ?policy:state.baking_policy forked_block in - Log.info "Baked two blocks" ; - (* includes pending operations *) - let* block, state = bake (block, state) in - let* main_branch, state = bake (block, state) in - List.fold_left_es - (fun (main_branch, state) delegate -> - let* attestation_a = op ~delegate:delegate.pkh forked_block in - let* attestation_b = op ~delegate:delegate.pkh main_branch in - let evidence = op_evidence attestation_a attestation_b in - let dss = - { - State.culprit = delegate.pkh; - denounced = false; - evidence; - misbehaviour = - Slashing_helpers.Misbehaviour_repr.from_duplicate_operation - attestation_a; - } - in - let state : State.t = - {state with double_signings = dss :: state.State.double_signings} - in - return (main_branch, state)) - (main_branch, state) - delegates - -let double_attest_ = - double_attest_op - ~op:(fun ~delegate block -> Op.raw_attestation ~delegate block) - ~op_evidence:op_double_attestation - ~kind:Double_attesting - -(* Note: advances two blocks *) -let double_attest_many ?other_bakers delegate_names : (t, t) scenarios = - exec (double_attest_ ?other_bakers delegate_names) - -let double_attest ?other_bakers delegate_name : (t, t) scenarios = - double_attest_many ?other_bakers [delegate_name] - -let double_preattest_ = - double_attest_op - ~op:(fun ~delegate block -> Op.raw_preattestation ~delegate block) - ~op_evidence:op_double_preattestation - ~kind:Double_preattesting - -(* Note: advances two blocks *) -let double_preattest_many ?other_bakers delegate_names : (t, t) scenarios = - exec (double_preattest_ ?other_bakers delegate_names) - -let double_preattest ?other_bakers delegate_name : (t, t) scenarios = - double_preattest_many ?other_bakers [delegate_name] - -let cycle_from_level blocks_per_cycle level = - let current_cycle = Int32.div level blocks_per_cycle in - let current_cycle = Cycle.add Cycle.root (Int32.to_int current_cycle) in - current_cycle - -let pct_from_kind (block : Block.t) = function - | Protocol.Misbehaviour_repr.Double_baking -> - Protocol.Percentage.to_q - block.constants.percentage_of_frozen_deposits_slashed_per_double_baking - |> Q.(mul (100 // 1)) - |> Q.to_int - | Double_attesting | Double_preattesting -> - Protocol.Percentage.to_q - block.constants - .percentage_of_frozen_deposits_slashed_per_double_attestation - |> Q.(mul (100 // 1)) - |> Q.to_int - -let get_pending_slashed_pct_for_delegate (block, state) delegate = - let rec aux r = function - | [] -> r - | (culprit, {Protocol.Denunciations_repr.misbehaviour; _}) :: t -> - if Signature.Public_key_hash.equal delegate culprit then - let new_r = r + pct_from_kind block misbehaviour.kind in - if new_r >= 100 then 100 else aux new_r t - else aux r t - in - aux 0 state.State.pending_slashes - -let update_state_denunciation (block, state) - {State.culprit; denounced; evidence = _; misbehaviour} = - let open Lwt_result_syntax in - if denounced then ( - (* If the double signing has already been denounced, a second denunciation should fail *) - Log.info ~color:event_color "Denunciation already included" ; - return (state, denounced)) - else - let*? block_level = Context.get_level (B block) in - let next_level = - Protocol.Alpha_context.Raw_level.(to_int32 @@ succ block_level) - in - let inclusion_cycle = - cycle_from_level block.constants.blocks_per_cycle next_level - in - let ds_level = Protocol.Raw_level_repr.to_int32 misbehaviour.level in - let ds_cycle = cycle_from_level block.constants.blocks_per_cycle ds_level in - if Cycle.(ds_cycle > inclusion_cycle) then ( - (* The denunciation is trying to be included too early *) - Log.info ~color:event_color "Denunciation too early" ; - return (state, denounced)) - else if - Cycle.( - add ds_cycle Protocol.Constants_repr.max_slashing_period - <= inclusion_cycle) - then ( - (* The denunciation is too late and gets refused. *) - Log.info ~color:event_color "Denunciation too late" ; - return (state, denounced)) - else - (* for simplicity's sake (lol), the block producer and the payload producer are the same - We also assume that the current state baking policy will be used for the next block *) - let* rewarded, _, _, _ = - Block.get_next_baker ?policy:state.State.baking_policy block - in - let culprit_name, culprit_account = - State.find_account_from_pkh culprit state - in - let state = - State.update_account - culprit_name - { - culprit_account with - slashed_cycles = inclusion_cycle :: culprit_account.slashed_cycles; - } - state - in - let new_pending_slash = - ( culprit, - { - Protocol.Denunciations_repr.rewarded; - misbehaviour; - operation_hash = Operation_hash.zero; - (* unused *) - } ) - in - (* TODO: better log... *) - Log.info - ~color:event_color - "Including denunciation (misbehaviour cycle %a)" - Cycle.pp - ds_cycle ; - let state = - State. - { - state with - pending_slashes = new_pending_slash :: state.pending_slashes; - } - in - return (state, true) - -(** [make_denunciations_op ?single ?rev ?filter ()] denounces all double signers - in the state. If [single] is set, only one denunciation is made. If [rev] is - set, the denunciations are made in reverse order. If [filter] is set, only the - double signers for which the filter returns true are denounced. *) -let make_denunciations_op ?(single = false) ?(rev = false) - ?(filter = fun {State.denounced; _} -> not denounced) (block, state) = - let open Lwt_result_syntax in - let* () = check_pending_slashings ~loc:__LOC__ (block, state) in - let make_op state ({State.evidence; _} as dss) = - if filter dss then - let* state, denounced = update_state_denunciation (block, state) dss in - return (Some (evidence (B block), {dss with denounced}, state)) - else return None - in - let rec make_op_list dss_list state r_op r_dss = - match dss_list with - | d :: t -> ( - let open State in - let* new_op = make_op state d in - match new_op with - | None -> make_op_list t state r_op (d :: r_dss) - | Some (op, p_dss, new_state) -> - Log.info - ~color:event_color - "Denouncing %a for %s at level %a round %a" - Signature.Public_key_hash.pp - d.culprit - (match d.misbehaviour.kind with - | Double_baking -> "double baking" - | Double_attesting -> "double attesting" - | Double_preattesting -> "double preattesting") - Protocol.Raw_level_repr.pp - d.misbehaviour.level - Protocol.Round_repr.pp - d.misbehaviour.round ; - if single then - return @@ (new_state, op :: r_op, List.rev @@ (p_dss :: t)) - else make_op_list t new_state (op :: r_op) (p_dss :: r_dss)) - | [] -> return @@ (state, r_op, r_dss) - in - let* state, operations, double_signings = - make_op_list - (if rev then state.double_signings else List.rev state.double_signings) - state - [] - [] - in - let state = {state with double_signings} in - return (state, operations) - -(* Important note: do not change the baking policy behaviour once denunciations are made, - until the operations are included in a block (by default the next block) *) -let make_denunciations ?single ?rev ?filter () = - exec_op (make_denunciations_op ?single ?rev ?filter) - -(** Create an account and give an initial balance funded by [funder] *) -let add_account_with_funds name ~funder amount = - add_account name --> transfer funder name amount --> reveal name diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_big_map.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/script_big_map.ml deleted file mode 100644 index b5a21d8219aa3723aded617c639b7b3bcf2a5d77..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_big_map.ml +++ /dev/null @@ -1,14 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2021 Trili Tech, *) -(* *) -(*****************************************************************************) - -let update k v m ctxt = Protocol.Script_big_map.update ctxt k v m - -let of_list key_ty ty xs ctxt = - List.fold_left_es - (fun (bm, ctxt) (k, v) -> update k (Some v) bm ctxt) - (Protocol.Script_big_map.empty key_ty ty, ctxt) - xs diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_big_map.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/script_big_map.mli deleted file mode 100644 index f87ffc7733956eb18c898804b84c32d6f6ccb595..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_big_map.mli +++ /dev/null @@ -1,28 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2021 Trili Tech, *) -(* *) -(*****************************************************************************) - -(** Update a big map. See [Script_typed_ir.big_map_get_and_update] for details. *) -val update : - 'key -> - 'value option -> - ('key, 'value) Protocol.Script_typed_ir.big_map -> - Protocol.Alpha_context.t -> - (('key, 'value) Protocol.Script_typed_ir.big_map * Protocol.Alpha_context.t) - Environment.Error_monad.tzresult - Lwt.t - -(** Convert a list to a [Script_big_map]. If the list contains duplicate keys, - the first occurence is used. - *) -val of_list : - 'key Protocol.Script_typed_ir.comparable_ty -> - ('value, _) Protocol.Script_typed_ir.ty -> - ('key * 'value) list -> - Protocol.Alpha_context.t -> - (('key, 'value) Protocol.Script_typed_ir.big_map * Protocol.Alpha_context.t) - Environment.Error_monad.tzresult - Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_map.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/script_map.ml deleted file mode 100644 index 5b780f7ac8e2f4b457839b183fc4e52991be2019..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_map.ml +++ /dev/null @@ -1,36 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2020 Metastate AG *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let of_list : - type k v. - k Protocol.Script_typed_ir.comparable_ty -> - (k * v) list -> - (k, v) Protocol.Script_typed_ir.map = - fun ty1 xs -> - List.fold_left - (fun rs (k, v) -> Protocol.Script_map.update k (Some v) rs) - (Protocol.Script_map.empty ty1) - xs diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_map.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/script_map.mli deleted file mode 100644 index e81cf5956c933f1c15f23a8bbbd80fb042fde901..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_map.mli +++ /dev/null @@ -1,31 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Convert a list to a [Script_map]. If the list contains duplicate keys, - the last occurence is used. *) -val of_list : - 'k Protocol.Script_typed_ir.comparable_ty -> - ('k * 'v) list -> - ('k, 'v) Protocol.Script_typed_ir.map diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_set.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/script_set.ml deleted file mode 100644 index b02d082465a43506be1a0e37681b2122965e3310..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_set.ml +++ /dev/null @@ -1,31 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2020 Metastate AG *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let of_list ty1 xs = - List.fold_left - (fun rs k -> Protocol.Script_set.update k true rs) - (Protocol.Script_set.empty ty1) - xs diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_set.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/script_set.mli deleted file mode 100644 index 7df70020e3b3a43f2caa805541aacf465dc14ec8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/script_set.mli +++ /dev/null @@ -1,32 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2020 Metastate AG *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Convert a list to a Script IR set. If the list contains duplicates, - the last occurence is used. *) -val of_list : - 'a Protocol.Script_typed_ir.comparable_ty -> - 'a list -> - 'a Protocol.Script_typed_ir.set diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/slashing_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/slashing_helpers.ml deleted file mode 100644 index 4de8fb8d37764849d677bde5d1db6ba9816fed4a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/slashing_helpers.ml +++ /dev/null @@ -1,275 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs *) -(* *) -(*****************************************************************************) - -module Misbehaviour_repr = struct - open Protocol.Misbehaviour_repr - - let pp fmt {level; round; kind} = - Format.fprintf - fmt - "misbehaviour: %s at level %a round %a" - (match kind with - | Double_baking -> "double baking" - | Double_attesting -> "double attesting" - | Double_preattesting -> "double preattesting") - Protocol.Raw_level_repr.pp - level - Protocol.Round_repr.pp - round - - include Compare.Make (struct - type t = Protocol.Misbehaviour_repr.t - - let compare = Protocol.Misbehaviour_repr.compare - end) - - let from_duplicate_operation (type a) - (duplicate_op : - a Protocol.Alpha_context.Kind.consensus Protocol.Alpha_context.operation) - = - let ( ({slot = _; level; round; block_payload_hash = _} : - Protocol.Alpha_context.consensus_content), - kind ) = - match duplicate_op.protocol_data.contents with - | Single (Preattestation consensus_content) -> - (consensus_content, Double_preattesting) - | Single (Attestation {consensus_content; _}) -> - (consensus_content, Double_attesting) - in - let level = - Protocol.Alpha_context.Raw_level.Internal_for_tests.to_repr level - in - let round = Protocol.Alpha_context.Round.Internal_for_tests.to_repr round in - {level; round; kind} - - let check_from_duplicate_operation ~loc misbehaviour duplicate_op = - Assert.equal - ~loc - equal - "misbehaviours are not equal" - pp - misbehaviour - (from_duplicate_operation duplicate_op) - - let from_duplicate_block (b : Block.t) = - let open Result_wrap_syntax in - let open Result_syntax in - let*@ level = Protocol.Raw_level_repr.of_int32 b.header.shell.level in - let*@ round = Protocol.Fitness_repr.round_from_raw b.header.shell.fitness in - return {kind = Double_baking; level; round} -end - -module Denunciations_repr = struct - open Protocol.Denunciations_repr - - let pp_item fmt {operation_hash = _; rewarded; misbehaviour} = - Format.fprintf - fmt - "rewarded: %a; %a" - Signature.Public_key_hash.pp - rewarded - Misbehaviour_repr.pp - misbehaviour - - let compare_item_except_hash - {operation_hash = _; rewarded = r1; misbehaviour = m1} - {operation_hash = _; rewarded = r2; misbehaviour = m2} = - Compare.or_else (Protocol.Misbehaviour_repr.compare m1 m2) @@ fun () -> - Signature.Public_key_hash.compare r1 r2 -end - -module Full_denunciation = struct - open Protocol.Denunciations_repr - - type t = Signature.Public_key_hash.t * item - - let pp fmt (culprit, item) = - Format.fprintf - fmt - "culprit: %a; %a" - Signature.Public_key_hash.pp - culprit - Denunciations_repr.pp_item - item - - let compare_except_hash (culprit1, item1) (culprit2, item2) = - Compare.or_else (Signature.Public_key_hash.compare culprit1 culprit2) - @@ fun () -> Denunciations_repr.compare_item_except_hash item1 item2 - - let check_same_lists_any_order ~loc list1 list2 = - Assert.equal_list_any_order - ~loc - ~compare:compare_except_hash - "denunciation lists are not the same (not taking order into account)" - pp - list1 - list2 -end - -let apply_slashing_account all_denunciations_to_apply - ( culprit, - Protocol.Denunciations_repr.{rewarded; misbehaviour; operation_hash = _} - ) (block_before_slash : Block.t) (state : State.t) = - let open Lwt_result_syntax in - let open State_account in - let constants = state.constants in - let (account_map : State_account.account_map) = state.account_map in - let find_account_name_from_pkh_exn pkh account_map = - match - Option.map - fst - String.Map.( - choose - @@ filter - (fun _ account -> - Signature.Public_key_hash.equal pkh account.State_account.pkh) - account_map) - with - | None -> assert false - | Some x -> x - in - let slashed_cycle = - Block.current_cycle_of_level - ~blocks_per_cycle: - constants.Protocol.Alpha_context.Constants.Parametric.blocks_per_cycle - ~current_level:(Protocol.Raw_level_repr.to_int32 misbehaviour.level) - in - let culprit_name = find_account_name_from_pkh_exn culprit account_map in - let rewarded_name = find_account_name_from_pkh_exn rewarded account_map in - Log.info - "Slashing %a for %a" - Signature.Public_key_hash.pp - culprit - Misbehaviour_repr.pp - misbehaviour ; - let* slashed_pct = - match misbehaviour.kind with - | Double_baking -> - return - constants - .Protocol.Alpha_context.Constants.Parametric - .percentage_of_frozen_deposits_slashed_per_double_baking - | Double_attesting | Double_preattesting -> - State_ai_flags.NS.get_double_attestation_slashing_percentage - all_denunciations_to_apply - block_before_slash - state - misbehaviour - in - let slash_culprit - ({frozen_deposits; unstaked_frozen; frozen_rights; parameters; _} as acc) - = - Log.info - "Slashing %a for %a with frozen deposits: { %a }" - Signature.Public_key_hash.pp - acc.pkh - Misbehaviour_repr.pp - misbehaviour - Frozen_tez.pp - frozen_deposits ; - let base_rights = - CycleMap.find slashed_cycle frozen_rights - |> Option.value ~default:Tez.zero - in - Log.info "Base rights: %a" Tez.pp base_rights ; - let frozen_deposits, burnt_frozen, rewarded_frozen = - Frozen_tez.slash - ~limit:parameters.limit_of_staking_over_baking - state.constants - base_rights - slashed_pct - frozen_deposits - in - let slashed_pct_q = Protocol.Percentage.to_q slashed_pct in - let slashed_pct = Q.(100 // 1 * slashed_pct_q |> to_int) in - Log.info "Slashed %d%% of frozen deposits@." slashed_pct ; - let unstaked_frozen, slashed_unstaked = - Unstaked_frozen.slash - state.constants - ~slashable_deposits_period:constants.consensus_rights_delay - slashed_cycle - slashed_pct - unstaked_frozen - in - ( {acc with frozen_deposits; unstaked_frozen}, - (burnt_frozen, rewarded_frozen) :: slashed_unstaked ) - in - let culprit_account = - String.Map.find culprit_name account_map - |> Option.value_f ~default:(fun () -> - fail_account_not_found "apply_slashing" culprit_name) - in - let slashed_culprit_account, total_slashed = slash_culprit culprit_account in - Log.info "Slashed %a@." Signature.Public_key_hash.pp culprit_account.pkh ; - let account_map = - update_account - ~f:(fun _ -> slashed_culprit_account) - culprit_name - account_map - in - (* For each container slashed, the snitch gets a reward transferred. It gets rounded - down each time *) - let reward_to_snitch = - List.map snd total_slashed |> List.fold_left Tez.( +! ) Tez.zero - in - let account_map = - add_liquid_rewards reward_to_snitch rewarded_name account_map - in - let total_burnt_amount = - List.map fst total_slashed |> List.fold_left Tez.( +! ) Tez.zero - in - Log.info "Total burnt amount: %a" Tez.pp total_burnt_amount ; - return (account_map, total_burnt_amount) - -let apply_slashing_state all_denunciations_to_apply - ( culprit, - Protocol.Denunciations_repr.{rewarded; misbehaviour; operation_hash} ) - block_before_slash (state : State.t) : - (State.t * Tez_helpers.t) tzresult Lwt.t = - let open Lwt_result_syntax in - let* account_map, total_burnt = - apply_slashing_account - all_denunciations_to_apply - (culprit, {rewarded; misbehaviour; operation_hash}) - block_before_slash - state - in - (* TODO: add culprit's stakers *) - let log_updates = - List.map - (fun x -> fst @@ State.find_account_from_pkh x state) - [culprit; rewarded] - in - let state = State.update_map ~log_updates ~f:(fun _ -> account_map) state in - return (state, total_burnt) - -let apply_all_slashes_at_cycle_end current_cycle (block_before_slash : Block.t) - (state : State.t) : State.t tzresult Lwt.t = - let open Lwt_result_syntax in - let to_slash_later, to_slash_now = - State_ai_flags.Delayed_slashing.partition_slashes state current_cycle - in - (* Sort to_slash_now by level+round *) - let to_slash_now = - List.sort - (fun (_, item1) (_, item2) -> - Denunciations_repr.compare_item_except_hash item1 item2) - to_slash_now - in - - let* state, total_burnt = - List.fold_left_es - (fun (acc_state, acc_total) x -> - let* state, burnt = - apply_slashing_state to_slash_now x block_before_slash acc_state - in - return (state, Tez_helpers.(acc_total +! burnt))) - (state, Tez_helpers.zero) - to_slash_now - in - let total_supply = Tez_helpers.(state.total_supply -! total_burnt) in - return {state with pending_slashes = to_slash_later; total_supply} diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/slashing_helpers.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/slashing_helpers.mli deleted file mode 100644 index 106d5c250cd450919c411fc7dbb4cc7a3cc6e066..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/slashing_helpers.mli +++ /dev/null @@ -1,55 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs *) -(* *) -(*****************************************************************************) - -(** Helpers related to denunciations and slashing. *) - -(** Helpers related to {!Protocol.Misbehaviour_repr}. *) -module Misbehaviour_repr : sig - val pp : Format.formatter -> Protocol.Misbehaviour_repr.t -> unit - - (** Builds a misbehaviour object from either of the duplicate - (pre)attestations that constitute a double (pre)attestating - event. *) - val from_duplicate_operation : - 'kind Protocol.Alpha_context.Kind.consensus Protocol.Alpha_context.operation -> - Protocol.Misbehaviour_repr.t - - (** [check_from_duplicate_operation ~loc misbehaviour duplicate_op] - asserts that [misbehaviour] correctly describes a double signing - event involving [duplicate_op]. *) - val check_from_duplicate_operation : - loc:string -> - Tezos_raw_protocol_019_PtParisB.Misbehaviour_repr.t -> - 'kind Protocol.Alpha_context.Kind.consensus Protocol.Alpha_context.operation -> - unit tzresult Lwt.t - - (** Builds a misbehaviour object from either of the duplicate blocks - that constitute a double baking event. *) - val from_duplicate_block : Block.t -> Protocol.Misbehaviour_repr.t tzresult -end - -(** Helpers about "full denunciations", that is, a denunciation item - and its culprit. See type [t] of this module. *) -module Full_denunciation : sig - (** A denunciation item preceded by the culprit's pkh. Indeed, the - culprit isn't recorded inside the - {!Protocol.Denunciations_repr.item} because it serves as a key - in the protocol's storage instead. But we often need both - together in the tests. *) - type t = Signature.Public_key_hash.t * Protocol.Denunciations_repr.item - - (** Asserts that both lists contain the same elements. - - These elements may be ordered differently, but must have the - same multiplicity in both lists. *) - val check_same_lists_any_order : - loc:string -> t list -> t list -> unit tzresult Lwt.t -end - -(** Applies all slashes at cycle end in the state *) -val apply_all_slashes_at_cycle_end : - Protocol.Alpha_context.Cycle.t -> Block.t -> State.t -> State.t tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/state.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/state.ml deleted file mode 100644 index 6e245b1d77cad696202f76d06b84ac95b46571de..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/state.ml +++ /dev/null @@ -1,202 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Adaptive_issuance_helpers -open State_account -open Log_helpers - -type double_signing_state = { - culprit : Signature.Public_key_hash.t; - evidence : Context.t -> Protocol.Alpha_context.packed_operation; - denounced : bool; - misbehaviour : Protocol.Misbehaviour_repr.t; -} - -(** Type of the state *) -type t = { - account_map : account_map; - total_supply : Tez.t; - constants : Protocol.Alpha_context.Constants.Parametric.t; - param_requests : (string * staking_parameters * int) list; - force_ai_vote_yes : bool; - baking_policy : Block.baker_policy option; - last_level_rewards : Protocol.Alpha_context.Raw_level.t; - snapshot_balances : (string * balance) list String.Map.t; - saved_rate : Q.t option; - burn_rewards : bool; - pending_operations : Protocol.Alpha_context.packed_operation list; - pending_slashes : - (Signature.Public_key_hash.t * Protocol.Denunciations_repr.item) list; - double_signings : double_signing_state list; - ai_activation_cycle : Protocol.Alpha_context.Cycle.t option; - force_attest_all : bool; -} - -(** Expected number of cycles before staking parameters get applied *) -let param_wait state = state.constants.delegate_parameters_activation_delay + 1 - -(** Expected number of cycles before staking unstaked funds get unfrozen *) -let unstake_wait state = - let pc = state.constants.consensus_rights_delay in - let msp = Protocol.Constants_repr.max_slashing_period in - pc + msp - -(** From a name, returns the corresponding account *) -let find_account (account_name : string) (state : t) : account_state = - match String.Map.find account_name state.account_map with - | None -> - Log.error "State.find_account: account %s not found" account_name ; - assert false - | Some r -> r - -let find_account_from_pkh (pkh : Signature.public_key_hash) (state : t) : - string * account_state = - String.Map.filter - (fun _ acc -> Signature.Public_key_hash.equal pkh acc.pkh) - state.account_map - |> String.Map.choose - |> function - | None -> - Log.error - "State.find_account_from_pkh: account %a not found" - Signature.Public_key_hash.pp - pkh ; - assert false - | Some (name, acc) -> (name, acc) - -let liquid_delegated ~name state = - let open Result_syntax in - String.Map.fold_e - (fun _delegator account acc -> - match account.delegate with - | Some delegate when not @@ String.equal delegate name -> return acc - | None -> return acc - | _ -> Tez.(acc +? account.liquid)) - state.account_map - Tez.zero - -(** Returns true iff account is a delegate *) -let is_self_delegate (account_name : string) (state : t) : bool = - let acc = find_account account_name state in - match acc.delegate with - | None -> false - | Some del_name -> String.equal del_name account_name - -let update_map ?(log_updates = []) ~(f : account_map -> account_map) (state : t) - : t = - let log_updates = List.sort_uniq String.compare log_updates in - let new_state = {state with account_map = f state.account_map} in - List.iter - (fun x -> - log_debug_balance_update x state.account_map new_state.account_map) - log_updates ; - new_state - -let update_map_es ?(log_updates = []) - ~(f : account_map -> account_map tzresult Lwt.t) (state : t) : - t tzresult Lwt.t = - let open Lwt_result_syntax in - let log_updates = List.sort_uniq String.compare log_updates in - let* account_map = f state.account_map in - let new_state = {state with account_map} in - List.iter - (fun x -> - log_debug_balance_update x state.account_map new_state.account_map) - log_updates ; - return new_state - -let apply_burn amount src_name (state : t) : t = - let f = apply_burn amount src_name in - let state = update_map ~log_updates:[src_name] ~f state in - {state with total_supply = Tez.(state.total_supply -! amount)} - -let apply_transfer amount src_name dst_name (state : t) : t = - let f = apply_transfer amount src_name dst_name in - update_map ~log_updates:[src_name; dst_name] ~f state - -let apply_stake amount current_cycle staker_name (state : t) : t = - let f = - apply_stake - amount - current_cycle - state.constants.consensus_rights_delay - staker_name - in - update_map ~log_updates:[staker_name] ~f state - -let apply_unstake cycle amount staker_name (state : t) : t = - let f = apply_unstake cycle amount staker_name in - update_map ~log_updates:[staker_name] ~f state - -let apply_finalize staker_name (state : t) : t = - let f = apply_finalize staker_name in - update_map ~log_updates:[staker_name] ~f state - -let apply_unslashable current_cycle account_name (state : t) : t = - let unstake_wait = unstake_wait state in - match Cycle.sub current_cycle unstake_wait with - | None -> state - | Some cycle -> - let f = apply_unslashable cycle account_name in - update_map ~log_updates:[account_name] ~f state - -let apply_unslashable_for_all current_cycle (state : t) : t = - let unstake_wait = unstake_wait state in - match Cycle.sub current_cycle unstake_wait with - | None -> state - | Some cycle -> - let f = apply_unslashable_for_all cycle in - (* no log *) - update_map ~f state - -let apply_rewards ~(baker : string) block (state : t) : t tzresult Lwt.t = - let open Lwt_result_syntax in - let {last_level_rewards; total_supply; constants = _; _} = state in - let*? current_level = Context.get_level (B block) in - let current_cycle = Block.current_cycle block in - (* We assume one block per minute *) - let* rewards_per_block = Context.get_issuance_per_minute (B block) in - if Tez.(rewards_per_block = zero) then return state - else - let delta_time = - Protocol.Alpha_context.Raw_level.diff current_level last_level_rewards - |> Int64.of_int32 - in - let {parameters = _; pkh; _} = find_account baker state in - let delta_rewards = Tez_helpers.(rewards_per_block *! delta_time) in - if delta_time = 1L then - Log.info ~color:tez_color "+%aꜩ" Tez.pp rewards_per_block - else assert false ; - let* to_liquid = - portion_of_rewards_to_liquid_for_cycle - (B block) - current_cycle - pkh - delta_rewards - in - let to_frozen = Tez.(delta_rewards -! to_liquid) in - let state = update_map ~f:(add_liquid_rewards to_liquid baker) state in - let state = update_map ~f:(add_frozen_rewards to_frozen baker) state in - let*? total_supply = Tez.(total_supply +? delta_rewards) in - return {state with last_level_rewards = current_level; total_supply} - -(** Given an account name and new account state, updates [state] accordingly - Preferably use other specific update functions *) -let update_account (account_name : string) (value : account_state) (state : t) : - t = - let account_map = String.Map.add account_name value state.account_map in - {state with account_map} - -let update_delegate account_name delegate_name_opt state : t = - let account = find_account account_name state in - update_account account_name {account with delegate = delegate_name_opt} state - -let add_pending_operations operations state = - {state with pending_operations = state.pending_operations @ operations} - -let pop_pending_operations state = - ({state with pending_operations = []}, state.pending_operations) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/state_account.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/state_account.ml deleted file mode 100644 index 16bf5d2dba7c2bbcb2c42ce8c542d7c5c70e0826..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/state_account.ml +++ /dev/null @@ -1,427 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** [State_account] is dedicated to operations in [State.t] that would modify - an [account_state]. This includes any operation like [transfer], [stake], - [unstake], [set_delegate_parameters], anything related to slashing or - rewards, etc... *) - -open Adaptive_issuance_helpers -include Tez_staking_helpers -include Account_helpers - -let add_liquid_rewards amount account_name account_map = - let f account = - let liquid = Tez.(account.liquid +! amount) in - {account with liquid} - in - update_account ~f account_name account_map - -let add_frozen_rewards amount account_name account_map = - let f account = - let frozen_deposits = - Frozen_tez.add_tez_to_all_current - ~edge:account.parameters.edge_of_baking_over_staking - ~limit:account.parameters.limit_of_staking_over_baking - amount - account.frozen_deposits - in - {account with frozen_deposits} - in - update_account ~f account_name account_map - -let apply_burn amount src_name account_map = - let f src = {src with liquid = Tez.(src.liquid -! amount)} in - update_account ~f src_name account_map - -let apply_transfer amount src_name dst_name account_map = - match - (String.Map.find src_name account_map, String.Map.find dst_name account_map) - with - | Some src, Some _ -> - if Tez.(src.liquid < amount) then - (* Invalid amount: operation will fail *) - account_map - else - let f_src src = - let liquid = Tez.(src.liquid -! amount) in - {src with liquid} - in - let f_dst dst = - let liquid = Tez.(dst.liquid +! amount) in - {dst with liquid} - in - let account_map = update_account ~f:f_src src_name account_map in - update_account ~f:f_dst dst_name account_map - | None, _ -> fail_account_not_found "apply_transfer.src" src_name - | _, None -> fail_account_not_found "apply_transfer.dst" dst_name - -let stake_from_unstake amount current_cycle consensus_rights_delay delegate_name - account_map = - match String.Map.find delegate_name account_map with - | None -> fail_account_not_found "stake_from_unstake" delegate_name - | Some ({unstaked_frozen; frozen_deposits; slashed_cycles; _} as account) -> - let oldest_slashable_cycle = - Cycle.(sub current_cycle (consensus_rights_delay + 1)) - |> Option.value ~default:Cycle.root - in - if - List.exists - (fun x -> Cycle.(x >= oldest_slashable_cycle)) - slashed_cycles - then (account_map, amount) - else - let unstaked_frozen = - List.sort - (fun (Unstaked_frozen.{cycle = cycle1; _} : Unstaked_frozen.r) - {cycle = cycle2; _} -> Cycle.compare cycle2 cycle1) - unstaked_frozen - in - let rec aux acc_unstakes rem_amount rem_unstakes = - match rem_unstakes with - | [] -> (acc_unstakes, rem_amount) - | (Unstaked_frozen.{requests; slash_pct; _} as h) :: t -> - (* Stake from unstake cannot be called when slashing happened *) - assert (Compare.Int.(slash_pct = 0)) ; - (* This ensures initial = current for each requester. - However, the "initial" field is for the sum of all unstakes, - so cannot be used here *) - let initial = - String.Map.find_opt delegate_name requests - |> Option.value ~default:Tez.zero - in - if Tez.(rem_amount = zero) then - (acc_unstakes @ rem_unstakes, Tez.zero) - else if Tez.(rem_amount >= initial) then - let h = Unstaked_frozen.sub_unstake initial delegate_name h in - let rem_amount = Tez.(rem_amount -! initial) in - aux (acc_unstakes @ [h]) rem_amount t - else - let h = - Unstaked_frozen.sub_unstake rem_amount delegate_name h - in - (acc_unstakes @ [h] @ t, Tez.zero) - in - let unstaked_frozen, rem_amount = aux [] amount unstaked_frozen in - let frozen_deposits = - Frozen_tez.add_current - Tez.(amount -! rem_amount) - delegate_name - frozen_deposits - in - let account = {account with unstaked_frozen; frozen_deposits} in - let account_map = - update_account ~f:(fun _ -> account) delegate_name account_map - in - (account_map, rem_amount) - -let apply_stake amount current_cycle consensus_rights_delay staker_name - account_map = - match String.Map.find staker_name account_map with - | None -> fail_account_not_found "apply_stake" staker_name - | Some staker -> ( - match staker.delegate with - | None -> - (* Invalid operation: no delegate *) - account_map - | Some delegate_name -> - let old_account_map = account_map in - (* If self stake, then try to stake from unstake. - Returns the amount that remains to be staked from liquid *) - let account_map, amount = - if delegate_name = staker_name then - stake_from_unstake - amount - current_cycle - consensus_rights_delay - staker_name - account_map - else (account_map, amount) - in - if Tez.(staker.liquid < amount) then - (* Not enough liquid balance: operation will fail *) - old_account_map - else if delegate_name = staker_name then - (* If self stake: increase frozen deposits and decrease liquid balance. - "add_current" is easy to resolve since there is no pseudotokens *) - let f delegate = - let frozen_deposits = - Frozen_tez.add_current - amount - staker_name - delegate.frozen_deposits - in - let liquid = Tez.(delegate.liquid -! amount) in - {delegate with frozen_deposits; liquid} - in - update_account ~f delegate_name account_map - else - (* If external stake: *) - let delegate_account = - String.Map.find delegate_name account_map - |> Option.value_f ~default:(fun _ -> assert false) - in - (* Call stake_values_real to know the actual amount staked and the pseudotokens minted *) - (* amount_q would be the effective stake on the delegate's side, while - amount is the amount removed from the liquid balance *) - let pseudo, amount_q = - stake_values_real - amount - delegate_account.staking_delegate_denominator - delegate_account.frozen_deposits - in - let f_staker staker = - let liquid = Tez.(staker.liquid -! amount) in - let staking_delegator_numerator = - Z.add staker.staking_delegator_numerator pseudo - in - {staker with liquid; staking_delegator_numerator} - in - let f_delegate delegate = - (* The difference between the actual amount and the effective amount is - "distributed" amongst current stake holders. - Indeed, when trading in "amount", the staker receives "pseudo" pseudotokens - valued at "amount_q". So the total amount of value is increased by "amount_q". - Then, "portion" is added to the total, so it must be distributed. - This means that the order is important: first you add_current_q, then - you add the portion to all *) - let portion = Partial_tez.(of_tez amount - amount_q) in - let frozen_deposits = - Frozen_tez.add_current_q - amount_q - staker_name - delegate.frozen_deposits - in - let co_current = - Frozen_tez.add_q_to_all_co_current - portion - frozen_deposits.co_current - in - let frozen_deposits = {frozen_deposits with co_current} in - let staking_delegate_denominator = - Z.add delegate.staking_delegate_denominator pseudo - in - {delegate with frozen_deposits; staking_delegate_denominator} - in - let account_map = - update_account ~f:f_staker staker_name account_map - in - update_account ~f:f_delegate delegate_name account_map) - -let apply_unstake cycle amount staker_name account_map = - match String.Map.find staker_name account_map with - | None -> fail_account_not_found "apply_unstake.staker" staker_name - | Some staker -> ( - match staker.delegate with - | None -> (* Invalid operation: no delegate *) account_map - | Some delegate_name -> ( - match String.Map.find delegate_name account_map with - | None -> - fail_account_not_found "apply_unstake.delegate" delegate_name - | Some delegate -> - if delegate_name = staker_name then - (* Case self stake *) - (* No pseudotokens : no problem *) - let frozen_deposits, amount_unstaked = - Frozen_tez.sub_current - amount - staker_name - delegate.frozen_deposits - in - let unstaked_frozen = - Unstaked_frozen.add_unstake - cycle - amount_unstaked - staker_name - delegate.unstaked_frozen - in - let delegate = - {delegate with frozen_deposits; unstaked_frozen} - in - update_account ~f:(fun _ -> delegate) delegate_name account_map - else - (* Case external stake *) - let staked_amount = - Frozen_tez.get staker_name delegate.frozen_deposits - in - let pseudotokens, amount_q = - if Partial_tez.(staked_amount <= of_tez amount) then - (* Unstake all case *) - (staker.staking_delegator_numerator, staked_amount) - else - (* The staker requests "amount". - It translates to some "pseudotokens", valued at "amount_q". - If those pseudotokens would give strictly more than the requested amount, - then give one less pseudotoken. The actual amount unstaked is always lower than - the requested amount (except in the unstake all case) *) - unstake_values_real - amount - delegate.staking_delegate_denominator - delegate.frozen_deposits - in - (* Actual unstaked amount (that will be finalized) *) - let amount = Partial_tez.to_tez ~round:`Down amount_q in - (* Delta from pseudotokens' value, to be redistributed amongst all remaining stakers - (including current if still staking) *) - let portion = Partial_tez.(amount_q - of_tez amount) in - let f_staker staker = - (* The staker's account representation doesn't change much, - the unstake request is stored on the delegate's side *) - let staking_delegator_numerator = - Z.sub staker.staking_delegator_numerator pseudotokens - in - {staker with staking_delegator_numerator} - in - let account_map = - update_account ~f:f_staker staker_name account_map - in - let f_delegate delegate = - let staking_delegate_denominator = - Z.sub delegate.staking_delegate_denominator pseudotokens - in - (* Just like in stake *) - (* Do the effective unstake *) - let frozen_deposits = - Frozen_tez.sub_current_q - amount_q - staker_name - delegate.frozen_deposits - in - (* Apply the delta *) - let co_current = - Frozen_tez.add_q_to_all_co_current - portion - frozen_deposits.co_current - in - let frozen_deposits = {frozen_deposits with co_current} in - (* Add unstake request - Note that "amount" might not be the initial requested amount *) - let unstaked_frozen = - Unstaked_frozen.add_unstake - cycle - amount - staker_name - delegate.unstaked_frozen - in - { - delegate with - staking_delegate_denominator; - frozen_deposits; - unstaked_frozen; - } - in - update_account ~f:f_delegate delegate_name account_map)) - -let apply_unslashable_f cycle delegate = - let amount_unslashable, unstaked_frozen = - Unstaked_frozen.pop_cycle cycle delegate.unstaked_frozen - in - let unstaked_finalizable = - Unstaked_finalizable.add_from_poped_ufd - amount_unslashable - delegate.unstaked_finalizable - in - {delegate with unstaked_frozen; unstaked_finalizable} - -(* Updates unstaked unslashable values for given account *) -let apply_unslashable cycle account_name account_map = - update_account ~f:(apply_unslashable_f cycle) account_name account_map - -(* Updates unstaked unslashable values in all accounts *) -let apply_unslashable_for_all cycle account_map = - String.Map.map (apply_unslashable_f cycle) account_map - -let apply_finalize staker_name account_map = - match String.Map.find staker_name account_map with - | None -> fail_account_not_found "apply_finalize" staker_name - | Some _staker -> - (* Because an account can still have finalizable funds from a delegate - that is not its own, we iterate over all of them *) - String.Map.fold - (fun delegate_name delegate account_map_acc -> - match - String.Map.find staker_name delegate.unstaked_finalizable.map - with - | None -> account_map_acc - | Some amount -> - let f_staker staker = - let liquid = Tez.(staker.liquid +! amount) in - {staker with liquid} - in - let f_delegate delegate = - let map = - String.Map.remove - staker_name - delegate.unstaked_finalizable.map - in - { - delegate with - unstaked_finalizable = - {delegate.unstaked_finalizable with map}; - } - in - let account_map_acc = - update_account ~f:f_staker staker_name account_map_acc - in - update_account ~f:f_delegate delegate_name account_map_acc) - account_map - account_map - -(** Compute the staking rights for [current_cycle + - consensus_rights_delay + 1] and save them into - [account.frozen_rights] for each delegate. *) -let compute_future_frozen_rights block account_map = - let open Lwt_result_syntax in - String.Map.fold_es - (fun key acc acc_map -> - match acc.delegate with - | None -> return acc_map - | Some delegate_name -> - let delegate_pkh = - match String.Map.find delegate_name account_map with - | None -> - fail_account_not_found - "update_frozen_rights_cycle" - delegate_name - | Some delegate -> delegate.pkh - in - if delegate_pkh = acc.pkh then - (* Account is a delegate *) - let current_cycle = Block.current_cycle block in - (* Check the rights of current cycle. *) - let current_rights_state = - CycleMap.find (Block.current_cycle block) acc.frozen_rights - |> Option.value ~default:Tez.zero - in - let* current_rights_rpc = - Context.Delegate.initial_frozen_deposits (B block) acc.pkh - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - current_rights_state - current_rights_rpc - in - (* Fill in the rights for future cycle. *) - let* deactivated = Context.Delegate.deactivated (B block) acc.pkh in - if deactivated then return acc_map - else - let future_cycle = - Cycle.add - current_cycle - (block.constants.consensus_rights_delay + 1) - in - let frozen_rights = - CycleMap.add - future_cycle - (current_total_frozen_deposits_with_limits acc) - acc.frozen_rights - in - return (String.Map.add key {acc with frozen_rights} acc_map) - else return acc_map) - account_map - account_map diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/state_ai_flags.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/state_ai_flags.ml deleted file mode 100644 index 40fce015234a35bce17d687b5027c2ca412d6bcc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/state_ai_flags.ml +++ /dev/null @@ -1,289 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** This module handles the logic of flags for AI/AS in the [State] *) - -open State -open State_account - -module AI_Activation = struct - (** This module is responsible for the field [state.ai_activation_cycle], - which depends on three protocol parameters: - [adaptive_issuance.force_activation], [adaptive_issuance.activation_vote_enable], and - [adaptive_issuance.launch_ema_threshold]. *) - - (** AI can be activated with both flags set to false if the threshold is set to 0. - If the vote is enabled, but the threshold is above the maximum EMA, then the vote - cannot trigger the activation. *) - let enabled state = - state.constants.adaptive_issuance.force_activation - || (state.constants.adaptive_issuance.activation_vote_enable - && Compare.Int32.( - state.constants.adaptive_issuance.launch_ema_threshold - <= Protocol.Per_block_votes_repr.Internal_for_tests.ema_max)) - || Compare.Int32.( - state.constants.adaptive_issuance.launch_ema_threshold = 0l) - - let set_activation_cycle block state block_launch_cycle = - let current_cycle = Block.current_cycle block in - let offset = - if state.constants.adaptive_issuance.force_activation then 0 - else - 1 + state.constants.consensus_rights_delay - + Protocol.Constants_repr.max_slashing_period - in - assert ( - Protocol.Alpha_context.Cycle.( - add current_cycle offset = block_launch_cycle)) ; - {state with ai_activation_cycle = Some block_launch_cycle} - - (** Check the activation_cycle is only ever set once. - Run every block *) - let check_activation_cycle block state = - let open Lwt_result_syntax in - let open Protocol.Alpha_context in - let* block_launch_cycle = - Context.get_adaptive_issuance_launch_cycle (B block) - in - match (enabled state, state.ai_activation_cycle, block_launch_cycle) with - | _, None, None -> return state - | true, Some x, Some y -> - (* Activation cycle cannot be changed *) - if Cycle.(x = y) then return state else assert false - | _, Some _, None -> (* Activation cycle cannot be unset *) assert false - | false, _, Some _ -> - (* AI cannot be activated if [enabled] is false *) - assert false - | true, None, Some block_launch_cycle -> - return @@ set_activation_cycle block state block_launch_cycle -end - -module AI = struct - let enabled (block : Block.t) (state : State.t) = - match state.ai_activation_cycle with - | None -> false - | Some activation_cycle -> - let current_cycle = Block.current_cycle block in - Protocol.Alpha_context.Cycle.(current_cycle >= activation_cycle) -end - -module Autostake = struct - let enabled (block : Block.t) (state : State.t) = - (not (AI.enabled block state)) - && state.constants.adaptive_issuance.autostaking_enable - - let log_model_autostake name pkh old_cycle op ~optimal amount = - let open Protocol.Alpha_context in - Log.debug - "Model Autostaking: at end of cycle %a, %s(%a) to reach optimal stake %a \ - %s %a" - Cycle.pp - old_cycle - name - Signature.Public_key_hash.pp - pkh - Tez.pp - optimal - op - Tez.pp - (Tez_helpers.of_mutez amount) - - let apply_autostake (block : Block.t) ~name ~old_cycle - ({ - pkh; - contract = _; - delegate; - parameters = _; - liquid; - bonds = _; - frozen_deposits; - unstaked_frozen; - unstaked_finalizable; - staking_delegator_numerator = _; - staking_delegate_denominator = _; - frozen_rights = _; - slashed_cycles = _; - last_active_cycle; - } : - account_state) state = - let open Lwt_result_syntax in - (* TODO: use Protocol.Constants_storage.tolerated_inactivity_period *) - let tolerated_inactivity_period = - (2 * state.constants.consensus_rights_delay) + 1 - in - if Some name <> delegate then ( - Log.debug - "Model Autostaking: %s <> %s, noop@." - name - (Option.value ~default:"None" delegate) ; - return state) - else - let* ({grace_period; _} : Context.Delegate.info) = - Context.Delegate.info (B block) pkh - in - let model_grace_period = - Cycle.add last_active_cycle tolerated_inactivity_period - in - Log.debug - "Model Autostaking for %s: current cycle is %a, grace cycle is %a, \ - last_active_cycle is %a (grace %a)@." - name - Cycle.pp - old_cycle - Cycle.pp - grace_period - Cycle.pp - last_active_cycle - Cycle.pp - model_grace_period ; - - if Cycle.(old_cycle = model_grace_period) then ( - Log.debug "Model Autostaking: %s, deactivation -> unstaking all@." name ; - return - @@ update_map - ~f:(apply_unstake (Cycle.succ old_cycle) Tez.max_tez name) - state) - else if Cycle.(old_cycle > model_grace_period) then ( - Log.debug "Model Autostaking: %s, ignored (inactive)@." name ; - return state) - else - let*? current_liquid_delegated = liquid_delegated ~name state in - let current_frozen = Frozen_tez.total_current frozen_deposits in - let current_unstaked_frozen_delegated = - Unstaked_frozen.sum_current unstaked_frozen - in - let current_unstaked_final_delegated = - Unstaked_finalizable.total unstaked_finalizable - in - let power = - Tez.( - current_liquid_delegated +! current_frozen - +! current_unstaked_frozen_delegated - +! current_unstaked_final_delegated - |> to_mutez |> Z.of_int64) - in - let optimal = - Tez.of_z - (Z.cdiv - power - (Z.of_int (state.constants.limit_of_delegation_over_baking + 1))) - in - let autostaked = - Int64.(sub (Tez.to_mutez optimal) (Tez.to_mutez current_frozen)) - in - let state = State.apply_unslashable (Cycle.succ old_cycle) name state in - let state = State.apply_finalize name state in - (* stake or unstake *) - let new_state = - if autostaked > 0L then ( - log_model_autostake ~optimal name pkh old_cycle "stake" autostaked ; - State.apply_stake - Tez.(min liquid (of_mutez autostaked)) - (Cycle.succ old_cycle) - name - state) - else if autostaked < 0L then ( - log_model_autostake - ~optimal - name - pkh - old_cycle - "unstake" - (Int64.neg autostaked) ; - State.apply_unstake - (Cycle.succ old_cycle) - (Tez_helpers.of_mutez Int64.(neg autostaked)) - name - state) - else ( - log_model_autostake - ~optimal - name - pkh - old_cycle - "only finalize" - autostaked ; - state) - in - return new_state - - let run_at_cycle_end block state = - let open Lwt_result_syntax in - if enabled block state then - let current_cycle = Block.current_cycle block in - String.Map.fold_es - (fun name account state -> - apply_autostake block ~name ~old_cycle:current_cycle account state) - state.account_map - state - else return state -end - -module Delayed_slashing = struct - let enabled (state : State.t) = state.constants.adaptive_issuance.ns_enable - - (* Returns a pair, fst is the delayed slashes, snd is the slashes to apply now *) - let partition_slashes state current_cycle = - if not (enabled state) then ([], state.pending_slashes) - else - List.partition - (fun (_, Protocol.Denunciations_repr.{misbehaviour; _}) -> - let cycle = - Block.current_cycle_of_level - ~blocks_per_cycle: - state.constants - .Protocol.Alpha_context.Constants.Parametric.blocks_per_cycle - ~current_level: - (Protocol.Raw_level_repr.to_int32 misbehaviour.level) - in - Protocol.Alpha_context.Cycle.(cycle = current_cycle)) - state.pending_slashes -end - -module NS = struct - let enabled (block : Block.t) (state : State.t) = - AI.enabled block state && state.constants.adaptive_issuance.ns_enable - - let get_double_attestation_slashing_percentage all_denunciations_to_apply - block_before_slash state (misbehaviour : Protocol.Misbehaviour_repr.t) = - let open Lwt_result_wrap_syntax in - (* We need to get the block before the slash, because after the slash, - the context gets rid of the required Seed to recompute the rights - for the misbehaving delegates. *) - if not (enabled block_before_slash state) then - return - state.constants - .percentage_of_frozen_deposits_slashed_per_double_attestation - else - let* alpha_ctxt = Context.(get_alpha_ctxt (B block_before_slash)) in - let raw_ctxt = - Protocol.Alpha_context.Internal_for_tests.to_raw alpha_ctxt - in - let level = - Protocol.Level_repr.level_from_raw - ~cycle_eras:(Protocol.Raw_context.cycle_eras raw_ctxt) - misbehaviour.level - in - let delegates = - List.filter - (fun (_, (den : Protocol.Denunciations_repr.item)) -> - Compare.Int.( - Protocol.Misbehaviour_repr.compare misbehaviour den.misbehaviour - = 0)) - all_denunciations_to_apply - |> List.map fst - |> List.sort_uniq Signature.Public_key_hash.compare - in - let*@ _, pct = - Protocol.Slash_percentage.get - raw_ctxt - ~kind:misbehaviour.kind - ~level - delegates - in - return pct -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/state_ai_flags.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/state_ai_flags.mli deleted file mode 100644 index af1808d26400fb612610a55caf4d1abff002a666..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/state_ai_flags.mli +++ /dev/null @@ -1,80 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** This module handles the logic of flags for AI/AS in the [State] *) - -module AI_Activation : sig - (** This module takes care of the flags [force_activation] and - [activation_vote_enable], and updates and check the record field - [ai_activation_cycle] in the state. *) - - (** [AI_Activation] is enabled iff either of the above flags are set to true, - or the vote threshold is set to 0 (regardless of votes). - "Enabled" here means that AI *can* be activated (either by vote - or by force), but does not mean that AI is activated *) - val enabled : State.t -> bool - - (** Checks the [ai_activation_cycle] is set as expected. - Run at the beginning, and after every block to check the activation - cycle is set only once ever. *) - val check_activation_cycle : Block.t -> State.t -> State.t tzresult Lwt.t -end - -module AI : sig - (** This module only checks (for now) if AI is activated or not *) - - (** AI is enabled iff the activation cycle is set and passed *) - val enabled : Block.t -> State.t -> bool -end - -module Autostake : sig - (** This module takes care of autostaking when it is enabled *) - - (** Autostaking is enabled iff the flag [autostaking_enable] is true and - AI is not activated ([AI.enabled = false]). *) - val enabled : Block.t -> State.t -> bool - - (** Runs the autostake operations at cycle end. Does nothing if - [enabled = false]. *) - val run_at_cycle_end : Block.t -> State.t -> State.t tzresult Lwt.t -end - -module Delayed_slashing : sig - (** This module takes care of choosing the denunciations that need to be - applied at the end of a cycle. It depends on the flag [ns_enable]. *) - - (** [Delayed_slashing] is enabled iff [ns_enable = true]. *) - val enabled : State.t -> bool - - (** [partition_slashes s cycle] returns a pair [(l1,l2)] of lists of slashes, - partitioned from the [state.pending_slashes]. [l2] is the list of slashes to - apply at the end of the given [cycle], and [l1] is the rest (which should - usually replace [state.pending_slashes]) - *) - val partition_slashes : - State.t -> - Protocol.Alpha_context.Cycle.t -> - (Signature.Public_key_hash.t * Protocol.Denunciations_repr.item) list - * (Signature.Public_key_hash.t * Protocol.Denunciations_repr.item) list -end - -module NS : sig - (** This module takes care of the new adaptive slashing mechanism.*) - - (** It is enabled iff the flag [ns_enable] is set to true, and AI is - also enabled. *) - val enabled : Block.t -> State.t -> bool - - (** Whatever the value of the flag is, this function returns the - slashing value for a given double attestation *) - val get_double_attestation_slashing_percentage : - (Signature.public_key_hash * Protocol.Denunciations_repr.item) list -> - Block.t -> - State.t -> - Protocol.Misbehaviour_repr.t -> - Protocol.Percentage.t tzresult Lwt.t -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/test_global_constants.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/test_global_constants.ml deleted file mode 100644 index c05ae1b804b216f103a2b1433c5ae704ae2cf675..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/test_global_constants.ml +++ /dev/null @@ -1,325 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2024 Marigold, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Micheline -open Michelson_v1_primitives - -let create_context () = - let open Lwt_result_syntax in - let*? accounts = Account.generate_accounts 2 in - Block.alpha_context (Account.make_bootstrap_accounts accounts) - -let expr_to_hash expr = - let open Result_syntax in - let lexpr = Script_repr.lazy_expr expr in - let+ b = Script_repr.force_bytes lexpr in - Script_expr_hash.hash_bytes [b] - -let assert_expr_equal loc = - Assert.equal - ~loc - ( = ) - "Michelson Expressions Not Equal" - Michelson_v1_printer.print_expr - -let assert_proto_error_id loc id result = - let test err = - (Error_monad.find_info_of_error err).id - = "proto." ^ Protocol.name ^ "." ^ id - in - Assert.error ~loc result test - -let assert_ok_lwt x = - match Lwt_main.run x with - | Ok x -> x - | Error _ -> raise @@ Failure "Called assert_ok_lwt on Error" - -let assert_ok = function - | Ok x -> x - | Error _ -> raise @@ Failure "Called assert_ok on Error" - -(** Filters out values that would cause [register] *) -let assume_expr_not_too_large expr = - let node = root expr in - QCheck2.assume @@ not - @@ Global_constants_storage.Internal_for_tests.node_too_large node - -module Generators = struct - let context_gen () = QCheck2.Gen.return (create_context () |> assert_ok_lwt) - - let prims = - [ - K_parameter; - K_storage; - K_code; - D_False; - D_Elt; - D_Left; - D_None; - D_Pair; - D_Right; - D_Some; - D_True; - D_Unit; - D_Ticket; - I_PACK; - I_UNPACK; - I_BLAKE2B; - I_SHA256; - I_SHA512; - I_ABS; - I_ADD; - I_AMOUNT; - I_AND; - I_BALANCE; - I_CAR; - I_CDR; - I_CHAIN_ID; - I_CHECK_SIGNATURE; - I_COMPARE; - I_CONCAT; - I_CONS; - I_CREATE_ACCOUNT; - I_CREATE_CONTRACT; - I_IMPLICIT_ACCOUNT; - I_DIP; - I_DROP; - I_DUP; - I_EDIV; - I_EMPTY_BIG_MAP; - I_EMPTY_MAP; - I_EMPTY_SET; - I_EQ; - I_EXEC; - I_APPLY; - I_FAILWITH; - I_GE; - I_GET; - I_GET_AND_UPDATE; - I_GT; - I_HASH_KEY; - I_IF; - I_IF_CONS; - I_IF_LEFT; - I_IF_NONE; - I_INT; - I_LAMBDA; - I_LE; - I_LEFT; - I_LEVEL; - I_LOOP; - I_LSL; - I_LSR; - I_LT; - I_MAP; - I_MEM; - I_MUL; - I_NEG; - I_NEQ; - I_NIL; - I_NONE; - I_NOT; - I_NOW; - I_OR; - I_PAIR; - I_UNPAIR; - I_PUSH; - I_RIGHT; - I_SIZE; - I_SOME; - I_SOURCE; - I_SENDER; - I_SELF; - I_SELF_ADDRESS; - I_SLICE; - I_STEPS_TO_QUOTA; - I_SUB; - I_SWAP; - I_TRANSFER_TOKENS; - I_SET_DELEGATE; - I_UNIT; - I_UPDATE; - I_XOR; - I_ITER; - I_LOOP_LEFT; - I_ADDRESS; - I_CONTRACT; - I_ISNAT; - I_CAST; - I_RENAME; - I_SAPLING_EMPTY_STATE; - I_SAPLING_VERIFY_UPDATE; - I_DIG; - I_DUG; - I_NEVER; - I_VOTING_POWER; - I_TOTAL_VOTING_POWER; - I_KECCAK; - I_SHA3; - I_PAIRING_CHECK; - I_TICKET; - I_READ_TICKET; - I_SPLIT_TICKET; - I_JOIN_TICKETS; - T_bool; - T_contract; - T_int; - T_key; - T_key_hash; - T_lambda; - T_list; - T_map; - T_big_map; - T_nat; - T_option; - T_or; - T_pair; - T_set; - T_signature; - T_string; - T_bytes; - T_mutez; - T_timestamp; - T_unit; - T_operation; - T_address; - T_sapling_transaction_deprecated; - T_sapling_state; - T_chain_id; - T_never; - T_bls12_381_g1; - T_bls12_381_g2; - T_bls12_381_fr; - T_ticket; - H_constant; - ] - - let prim_gen = QCheck2.Gen.oneofl prims - - let prims_without_constants_gen = - QCheck2.Gen.oneofl (List.filter (fun x -> x != H_constant) prims) - - let z_gen = QCheck2.Gen.map Z.of_int QCheck2.Gen.int - - let micheline_node_gen l_gen p_gen annot_gen : - ('l, 'p) Micheline.node QCheck2.Gen.t = - let open Micheline in - let open QCheck2.Gen in - fix - (fun self () -> - frequency - [ - (3, map (fun (l, x) -> Int (l, x)) (pair l_gen z_gen)); - (3, map (fun (l, x) -> String (l, x)) (pair l_gen string)); - ( 3, - map - (fun (l, x) -> Bytes (l, Bytes.of_string x)) - (pair l_gen string) ); - ( 1, - map - (fun (l, p, args, annot) -> Prim (l, p, args, annot)) - (quad - l_gen - p_gen - (list_size (int_bound 10) (self ())) - annot_gen) ); - ( 1, - map - (fun (l, args) -> Seq (l, args)) - (pair l_gen (list_size (int_bound 10) (self ()))) ); - ]) - () - - let rec replace_with_constant : - Script.node -> Script.location -> Script.node * Script.node option = - fun node loc -> - let open Michelson_v1_primitives in - let open Micheline in - let rec loop : Script.node list -> Script.node list * Script.node option = - function - | [] -> ([], None) - | hd :: tl -> ( - match replace_with_constant hd loc with - | node, Some x -> (node :: tl, Some x) - | _, None -> - let l, x = loop tl in - (hd :: l, x)) - in - match node with - | (Int (l, _) | String (l, _) | Bytes (l, _)) as node -> - if l = loc then - let hash = - node |> strip_locations |> expr_to_hash |> assert_ok - |> Script_expr_hash.to_b58check - in - (Prim (-1, H_constant, [String (-1, hash)], []), Some node) - else (node, None) - | Prim (l, prim, args, annot) as node -> - if l = loc then - let hash = - node |> strip_locations |> expr_to_hash |> assert_ok - |> Script_expr_hash.to_b58check - in - (Prim (-1, H_constant, [String (-1, hash)], []), Some node) - else - let result, x = loop args in - (Prim (l, prim, result, annot), x) - | Seq (l, args) as node -> - if l = loc then - let hash = - node |> strip_locations |> expr_to_hash |> assert_ok - |> Script_expr_hash.to_b58check - in - (Prim (-1, H_constant, [String (-1, hash)], []), Some node) - else - let result, x = loop args in - (Seq (l, result), x) - - let micheline_gen p_gen annot_gen = - QCheck2.Gen.map - Micheline.strip_locations - (micheline_node_gen (QCheck2.Gen.return (-1)) p_gen annot_gen) - - let canonical_without_constant_gen () = - QCheck2.Gen.map - strip_locations - (micheline_node_gen - (QCheck2.Gen.return (-1)) - prims_without_constants_gen - (QCheck2.Gen.return [])) - - let canonical_with_constant_gen () = - let open QCheck2.Gen in - canonical_without_constant_gen () >>= fun expr -> - let size = Script_repr.micheline_nodes (root expr) in - 0 -- (size - 1) >|= fun loc -> - match replace_with_constant (root expr) loc with - | _, None -> assert false - | node, Some replaced_node -> - (expr, strip_locations node, strip_locations replaced_node) -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/testable.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/testable.ml deleted file mode 100644 index 80702598e1a53e98a98a5b80f7cf8eb59af046c3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/testable.ml +++ /dev/null @@ -1,37 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -let contract : Protocol.Alpha_context.Contract.t Alcotest.testable = - let open Protocol in - let open Alpha_context in - Alcotest.testable Contract.pp Contract.( = ) - -let script_expr : Protocol.Alpha_context.Script.expr Alcotest.testable = - Alcotest.testable Michelson_v1_printer.print_expr ( = ) - -let trace : tztrace Alcotest.testable = Alcotest.testable pp_print_trace ( = ) - -let protocol_error : Environment.Error_monad.error Alcotest.testable = - Alcotest.testable Environment.Error_monad.pp ( = ) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_helpers.ml deleted file mode 100644 index 1be51c6b3a1e50c6d008a107ab59987d4f04db30..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_helpers.ml +++ /dev/null @@ -1,118 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Environment -include Tez - -let ( +? ) t1 t2 = t1 +? t2 |> wrap_tzresult - -let ( -? ) t1 t2 = t1 -? t2 |> wrap_tzresult - -let ( *? ) t1 t2 = t1 *? t2 |> wrap_tzresult - -let ( /? ) t1 t2 = t1 /? t2 |> wrap_tzresult - -let ( +! ) t1 t2 = - match t1 +? t2 with Ok r -> r | Error _ -> Pervasives.failwith "adding tez" - -let ( -! ) t1 t2 = - match t1 -? t2 with - | Ok r -> r - | Error _ -> Pervasives.failwith "subtracting tez" - -let ( *! ) t1 t2 = - match t1 *? t2 with - | Ok r -> r - | Error _ -> Pervasives.failwith "multiplying tez" - -let ( /! ) t1 t2 = - match t1 /? t2 with - | Ok r -> r - | Error _ -> Pervasives.failwith "dividing tez" - -let of_int x = - match Tez.of_mutez (Int64.mul (Int64.of_int x) 1_000_000L) with - | None -> invalid_arg "tez_of_int" - | Some x -> x - -let of_mutez x = - match Tez.of_mutez x with None -> invalid_arg "tez_of_mutez" | Some x -> x - -let to_mutez = Tez.to_mutez - -(* Should be the same as Tez.max_mutez *) -let max_tez = - match Tez.of_mutez Int64.max_int with None -> assert false | Some p -> p - -let of_z a = Z.to_int64 a |> Tez.of_mutez_exn - -let of_q ~round Q.{num; den} = - (match round with `Up -> Z.cdiv num den | `Down -> Z.div num den) |> of_z - -let to_z a = to_mutez a |> Z.of_int64 - -let ratio num den = - Q.make (Z.of_int64 (to_mutez num)) (Z.of_int64 (to_mutez den)) - -let mul_q tez portion = - let tez_z = to_mutez tez |> Z.of_int64 in - Q.(mul portion ~$$tez_z) - -module Compare = Tez - -module Ez_tez = struct - (** Aliases for tez values *) - type tez_quantity = - | Half - | All - | All_but_one - | Nothing - | Max_tez - | Amount of t - - let tez_quantity_pp fmt value = - let s = - match value with - | Nothing -> "Zero" - | All -> "All" - | All_but_one -> "All but 1µꜩ" - | Half -> "Half" - | Max_tez -> "Maximum" - | Amount a -> Format.asprintf "%aꜩ" pp a - in - Format.fprintf fmt "%s" s - - (* [all] is the amount returned when [qty = All]. If [qty = Half], returns half of that. *) - let quantity_to_tez all qty = - match qty with - | Nothing -> zero - | All -> all - | All_but_one -> if equal all zero then zero else all -! one_mutez - | Half -> all /! 2L - | Max_tez -> max_tez - | Amount a -> a -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_helpers.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_helpers.mli deleted file mode 100644 index 57d5501364efaa1d9ebc0395918b8184860dca29..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_helpers.mli +++ /dev/null @@ -1,89 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** This module wraps the errors from the protocol and provides some helpful - functions manipulating Tez. *) -type t = Protocol.Alpha_context.Tez.t - -val zero : t - -val one_mutez : t - -val one_cent : t - -val fifty_cents : t - -val one : t - -(* Same as max_mutez *) -val max_tez : t - -val equal : t -> t -> bool - -val ( -? ) : t -> t -> t tzresult - -val sub_opt : t -> t -> t option - -val ( +? ) : t -> t -> t tzresult - -val ( *? ) : t -> int64 -> t tzresult - -val ( /? ) : t -> int64 -> t tzresult - -(* These operators can raise exceptions *) -val ( -! ) : t -> t -> t - -val ( +! ) : t -> t -> t - -val ( *! ) : t -> int64 -> t - -val ( /! ) : t -> int64 -> t - -val to_mutez : t -> int64 - -(* Is actually of_mutez_exn *) -val of_mutez : int64 -> t - -val min : t -> t -> t - -module Compare : Compare.S with type t := t - -val pp : Format.formatter -> t -> unit - -val to_string : t -> string - -(* Helper functions, not exported from the protocol *) -val ratio : t -> t -> Q.t - -val mul_q : t -> Q.t -> Q.t - -val of_int : int -> t - -val of_q : round:[`Down | `Up] -> Q.t -> t - -val of_z : Z.t -> t - -val to_z : t -> Z.t - -(** Functions to manipulate Tez in a high level way *) -module Ez_tez : sig - (** Aliases for tez values *) - type tez_quantity = - | Half - | All - | All_but_one - | Nothing - | Max_tez - | Amount of t - - val tez_quantity_pp : Format.formatter -> tez_quantity -> unit - - (** [quantity_to_tez max qty] returns a tez value corresponding to the given - [qty]. If [qty] is [All], then returns [max]. If [qty] is [All_but_one], - returns [max - one_mutez]. *) - val quantity_to_tez : t -> tez_quantity -> t -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_staking_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_staking_helpers.ml deleted file mode 100644 index 141a2c17c80add10240af227ef495067b4ba73bf..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/tez_staking_helpers.ml +++ /dev/null @@ -1,567 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** [Tez_staking_helpers] defines different kinds of tez Modules that - manipulate them in different ways. They involve more complicated operations, - as they are related to staking, thus are represented as partial amounts, - and are related to pseudotokens. *) - -module Cycle = Protocol.Alpha_context.Cycle - -module Tez = struct - include Tez_helpers - include Tez_helpers.Compare -end - -(** Representation of Tez with non integer values *) -module Partial_tez = struct - include Q - - let of_tez a = Tez.to_mutez a |> of_int64 - - let to_tez_rem {num; den} = - let tez, rem = Z.div_rem num den in - (Tez.of_z tez, rem /// den) - - let to_tez ~round = Tez.of_q ~round - - let get_rem a = snd (to_tez_rem a) - - let pp fmt a = - let tez, rem = to_tez_rem a in - (* If rem = 0, we keep the (+ 0), to indicate that it's a partial tez *) - Format.fprintf fmt "%a ( +%aµꜩ )" Tez.pp tez Q.pp_print rem -end - -(** [Frozen_tez] represents frozen stake and frozen unstaked funds. - Properties: - - sum of all current partial tez is an integer - - Can only add integer amounts - - Can always subtract integer amount (if lower than frozen amount) - - If subtracting partial amount, must be the whole frozen amount (for given contract). - The remainder is then distributed equally amongst remaining accounts, to keep property 1. - - All entries of current are positive, non zero. -*) -module Frozen_tez = struct - (* The map in current maps the stakers' name with their staked value. - It contains only delegators of the delegate which owns the frozen tez *) - type t = { - delegate : string; - initial : Tez.t; - self_current : Tez.t; - co_current : Partial_tez.t String.Map.t; - } - - let pp fmt {delegate; initial; self_current; co_current} = - Format.fprintf - fmt - "Delegate: %s, Initial: %a, Self_current: %a, Co_current: %a" - delegate - Tez.pp - initial - Tez.pp - self_current - (fun fmt -> - String.Map.iter (fun k v -> - Format.fprintf fmt "%s: %a, " k Partial_tez.pp v)) - co_current - - let zero = - { - delegate = ""; - initial = Tez.zero; - self_current = Tez.zero; - co_current = String.Map.empty; - } - - let init amount account delegate = - if account = delegate then - { - delegate; - initial = amount; - self_current = amount; - co_current = String.Map.empty; - } - else - { - delegate; - initial = amount; - self_current = Tez.zero; - co_current = String.Map.singleton account (Partial_tez.of_tez amount); - } - - let union a b = - assert (a.delegate = b.delegate) ; - { - delegate = a.delegate; - initial = Tez.(a.initial +! b.initial); - self_current = Tez.(a.self_current +! b.self_current); - co_current = - String.Map.union - (fun _ x y -> Some Partial_tez.(x + y)) - a.co_current - b.co_current; - } - - let get account frozen_tez = - if account = frozen_tez.delegate then - Partial_tez.of_tez frozen_tez.self_current - else - match String.Map.find account frozen_tez.co_current with - | None -> Partial_tez.zero - | Some p -> p - - let total_co_current_q co_current = - String.Map.fold - (fun _ x acc -> Partial_tez.(x + acc)) - co_current - Partial_tez.zero - - let total_co_current t = - let r = total_co_current_q t.co_current in - let tez, rem = Partial_tez.to_tez_rem r in - assert (Q.(equal rem zero)) ; - tez - - let total_current t = Tez.(t.self_current +! total_co_current t) - - let total_current_with_limits ~limit_of_staking_over_baking t = - let max_co_current = - Tez.mul_q t.self_current limit_of_staking_over_baking - |> Tez.of_q ~round:`Down - in - let co_current = Tez.min (total_co_current t) max_co_current in - Tez.(t.self_current +! co_current) - - (* Precondition: 0 <= quantity < 1 && co_current + quantity is int *) - let add_q_to_all_co_current quantity co_current = - let s = total_co_current_q co_current in - if Q.(equal quantity zero) then co_current - else - let f p_amount = - let q = Q.div p_amount s in - Partial_tez.add p_amount (Q.mul quantity q) - in - String.Map.map f co_current - - (* For rewards, distribute equally *) - let add_tez_to_all_current ~edge ~limit tez a = - let total_current = total_current a in - let total_current_with_limit = - Tez.( - mul_q a.self_current Q.(add one limit) - |> of_q ~round:`Up |> min total_current) - in - let self_portion = Tez.ratio a.self_current total_current_with_limit in - (* Baker's advantage for the mutez *) - let self_quantity = Tez.mul_q tez self_portion |> Tez.of_q ~round:`Up in - let remains = Tez.(tez -! self_quantity) in - (* Baker's edge. Round up for the baker's advantage again *) - let bakers_edge = Tez.mul_q remains edge |> Tez.of_q ~round:`Up in - let self_quantity = Tez.(self_quantity +! bakers_edge) in - (* The remains are distributed equally *) - let co_quantity = Partial_tez.of_tez Tez.(tez -! self_quantity) in - let co_current = add_q_to_all_co_current co_quantity a.co_current in - {a with co_current; self_current = Tez.(a.self_current +! self_quantity)} - - (* For slashing, slash equally *) - let sub_tez_from_all_current ~limit tez a = - let total_current = total_current a in - let total_current_with_limit = - Tez.( - mul_q a.self_current Q.(add one limit) - |> of_q ~round:`Up |> min total_current) - in - let self_portion = Tez.ratio a.self_current total_current_with_limit in - let self_quantity = Tez.mul_q tez self_portion |> Tez.of_q ~round:`Up in - let self_current = - if Tez.(self_quantity >= a.self_current) then Tez.zero - else Tez.(a.self_current -! self_quantity) - in - let co_quantity = Tez.(tez -! self_quantity) in - let s = total_co_current_q a.co_current in - if Partial_tez.(geq (of_tez co_quantity) s) then - ( {a with self_current; co_current = String.Map.empty}, - self_quantity, - co_quantity ) - else - let f p_amount = - let q = Q.div p_amount s in - Partial_tez.sub p_amount (Tez.mul_q co_quantity q) - (* > 0 *) - in - ( {a with self_current; co_current = String.Map.map f a.co_current}, - self_quantity, - co_quantity ) - - (* Adds frozen to account. Happens each stake in frozen deposits *) - let add_current_q amount account a = - if account = a.delegate then ( - let amount, rem = Partial_tez.to_tez_rem amount in - assert (Q.(equal rem zero)) ; - {a with self_current = Tez.(a.self_current +! amount)}) - else - { - a with - co_current = - String.Map.update - account - (function - | None -> Some amount | Some q -> Some Partial_tez.(add q amount)) - a.co_current; - } - - let add_current amount account a = - add_current_q (Partial_tez.of_tez amount) account a - - let add_self_current amount a = - let self_current = Tez.(a.self_current +! amount) in - {a with self_current} - - (* Adds frozen to account. Happens each unstake to unstaked frozen deposits *) - let add_init amount account a = union a (init amount account a.delegate) - - (* Allows amount greater than current frozen amount. - Happens each unstake in frozen deposits *) - let sub_current amount account a = - if account = a.delegate then - let amount = Tez.min amount a.self_current in - ({a with self_current = Tez.(a.self_current -! amount)}, amount) - else - match String.Map.find account a.co_current with - | None -> (a, Tez.zero) - | Some frozen -> - let amount_q = Partial_tez.of_tez amount in - if Q.(geq amount_q frozen) then - let removed, remainder = Partial_tez.to_tez_rem frozen in - let co_current = String.Map.remove account a.co_current in - let co_current = add_q_to_all_co_current remainder co_current in - ({a with co_current}, removed) - else - let co_current = - String.Map.add account Q.(frozen - amount_q) a.co_current - in - ({a with co_current}, amount) - - (* Remove a partial amount from the co frozen tez table. *) - let sub_current_q amount_q account a = - if account = a.delegate then assert false - else - match String.Map.find account a.co_current with - | None -> assert false - | Some frozen -> - if Q.(geq amount_q frozen) then - let co_current = String.Map.remove account a.co_current in - {a with co_current} - else - let co_current = - String.Map.add account Q.(frozen - amount_q) a.co_current - in - {a with co_current} - - let sub_current_and_init amount account a = - let a, amount = sub_current amount account a in - ({a with initial = Tez.(a.initial -! amount)}, amount) - - let slash ~limit cst base_amount (pct : Protocol.Percentage.t) a = - Log.info - "Slashing frozen tez for delegate %s with percentage %a" - a.delegate - Q.pp_print - @@ Protocol.Percentage.to_q pct ; - let pct_q = Protocol.Percentage.to_q pct in - let total_current = total_current a in - let slashed_amount = - Tez.mul_q base_amount pct_q - |> Tez.of_q ~round:`Down |> Tez.min total_current - in - let a, burnt_amount, rewarded_amount = - if total_current > Tez.zero then - let a, slashed_baker, slashed_staker = - sub_tez_from_all_current slashed_amount ~limit a - in - let rat = - cst.Protocol.Alpha_context.Constants.Parametric.adaptive_issuance - .global_limit_of_staking_over_baking + 2 - in - let rewarded_baker = - Tez.mul_q slashed_baker Q.(1 // rat) |> Tez.of_q ~round:`Down - in - - let rewarded_staker = - Tez.mul_q slashed_staker Q.(1 // rat) |> Tez.of_q ~round:`Down - in - let rewarded_amount = Tez.(rewarded_baker +! rewarded_staker) in - - let burnt_amount = Tez.(slashed_amount -! rewarded_amount) in - (a, burnt_amount, rewarded_amount) - else (a, Tez.zero, Tez.zero) - in - Log.info - "Total current: %a, slashed amount: %a, rewarded amount: %a, burnt \ - amount: %a" - Tez.pp - total_current - Tez.pp - slashed_amount - Tez.pp - rewarded_amount - Tez.pp - burnt_amount ; - (a, burnt_amount, rewarded_amount) -end - -(** Representation of Unstaked frozen deposits *) -module Unstaked_frozen = struct - type r = { - cycle : Cycle.t; - (* initial total requested amount (slash ∝ initial) *) - initial : Tez.t; - (* current amount, slashes applied here *) - current : Tez.t; - (* initial requests, don't apply slash unless finalize or balance query *) - requests : Tez.t String.Map.t; - (* slash pct memory for requests *) - slash_pct : int; - } - - type t = r list - - type get_info = {cycle : Cycle.t; request : Tez.t; current : Tez.t} - - type get_info_list = get_info list - - type finalizable_info = { - amount : Tez.t; - slashed_requests : Tez.t String.Map.t; - } - - let zero = [] - - let init_r cycle request account = - { - cycle; - initial = request; - current = request; - requests = String.Map.singleton account request; - slash_pct = 0; - } - - let apply_slash_to_request slash_pct amount = - let slashed_amount = - Tez.mul_q amount Q.(slash_pct // 100) |> Tez.of_q ~round:`Up - in - Tez.(amount -! slashed_amount) - - let apply_slash_to_current cst slash_pct initial current = - let slashed_amount = - Tez.mul_q initial Q.(slash_pct // 100) - |> Tez.of_q ~round:`Down |> Tez.min current - in - let rat = - cst.Protocol.Alpha_context.Constants.Parametric.adaptive_issuance - .global_limit_of_staking_over_baking + 2 - in - let rewarded_amount = - Tez.mul_q slashed_amount Q.(1 // rat) |> Tez.of_q ~round:`Down - in - let burnt_amount = Tez.(slashed_amount -! rewarded_amount) in - let actual_slashed_amount = Tez.(rewarded_amount +! burnt_amount) in - let remaining = - Tez.sub_opt current actual_slashed_amount - |> Option.value ~default:Tez.zero - in - (remaining, burnt_amount, rewarded_amount) - - let remove_zeros (a : t) : t = - List.filter (fun ({current; _} : r) -> Tez.(current > zero)) a - - let get account unstaked : get_info_list = - List.filter_map - (fun {cycle; requests; slash_pct; _} -> - String.Map.find account requests - |> Option.map (fun request -> - { - cycle; - request; - current = apply_slash_to_request slash_pct request; - })) - unstaked - - let get_total account unstaked = - get account unstaked - |> List.fold_left - (fun acc ({current; _} : get_info) -> Tez.(acc +! current)) - Tez.zero - - let sum_current unstaked = - List.fold_left - (fun acc ({current; _} : r) -> Tez.(acc +! current)) - Tez.zero - unstaked - - (* Happens each unstake operation *) - let rec add_unstake cycle amount account : t -> t = function - | [] -> [init_r cycle amount account] - | ({cycle = c; requests; initial; current; slash_pct} as h) :: t -> - let open Tez in - if Cycle.equal c cycle then ( - assert (Int.equal slash_pct 0) ; - { - cycle; - initial = initial +! amount; - current = current +! amount; - slash_pct; - requests = - String.Map.update - account - (function - | None -> Some amount | Some x -> Some Tez.(x +! amount)) - requests; - } - :: t) - else h :: add_unstake cycle amount account t - - (* Happens in stake from unstake *) - let sub_unstake amount account : r -> r = - fun {cycle; requests; initial; current; slash_pct} -> - assert (slash_pct = 0) ; - let open Tez in - { - cycle; - initial = initial -! amount; - current = current -! amount; - slash_pct; - requests = - String.Map.update - account - (function - | None -> - assert (Tez.(amount = zero)) ; - None - | Some x -> - if Tez.(x = amount) then None else Some Tez.(x -! amount)) - requests; - } - - (* Makes given cycle finalizable (and unslashable) *) - let rec pop_cycle cycle : t -> finalizable_info * t = function - | [] -> ({amount = Tez.zero; slashed_requests = String.Map.empty}, []) - | ({cycle = c; requests; initial = _; current; slash_pct} as h) :: t -> - if Cycle.(c = cycle) then - let amount = current in - let slashed_requests = - String.Map.map (apply_slash_to_request slash_pct) requests - in - ({amount; slashed_requests}, t) - else if Cycle.(c < cycle) then - Stdlib.failwith - "Unstaked_frozen: found unfinalized cycle before given [cycle]. \ - Make sure to call [apply_unslashable] every cycle" - else - let info, rest = pop_cycle cycle t in - (info, h :: rest) - - let slash cst ~slashable_deposits_period slashed_cycle pct_times_100 a = - remove_zeros a - |> List.map - (fun - ({cycle; requests = _; initial; current; slash_pct = old_slash_pct} - as r) - -> - if - Cycle.( - cycle > slashed_cycle - || add cycle slashable_deposits_period < slashed_cycle) - then (r, (Tez.zero, Tez.zero)) - else - let new_current, burnt, rewarded = - apply_slash_to_current cst pct_times_100 initial current - in - let slash_pct = min 100 (pct_times_100 + old_slash_pct) in - ({r with slash_pct; current = new_current}, (burnt, rewarded))) - |> List.split -end - -(** Representation of unstaked finalizable tez *) -module Unstaked_finalizable = struct - (* Slashing might put inaccessible tez in this container: they are represented in the remainder. - They still count towards the total supply, but are currently owned by noone. - At most one mutez per unstaking account per slashed cycle *) - type t = {map : Tez.t String.Map.t; remainder : Tez.t} - - let zero = {map = String.Map.empty; remainder = Tez.zero} - - (* Called when unstaked frozen for some cycle becomes finalizable *) - let add_from_poped_ufd - ({amount; slashed_requests} : Unstaked_frozen.finalizable_info) - {map; remainder} = - let total_requested = - String.Map.fold (fun _ x acc -> Tez.(x +! acc)) slashed_requests Tez.zero - in - let remainder = Tez.(remainder +! amount -! total_requested) in - let map = - String.Map.union (fun _ a b -> Some Tez.(a +! b)) map slashed_requests - in - {map; remainder} - - let total {map; remainder} = - String.Map.fold (fun _ x acc -> Tez.(x +! acc)) map remainder - - let get account {map; _} = - match String.Map.find account map with None -> Tez.zero | Some x -> x -end - -(** Pseudotoken helpers *) -let tez_to_pseudo ~round amount staking_delegate_denominator frozen_deposits = - let total_q = Frozen_tez.(total_co_current_q frozen_deposits.co_current) in - let total, rem = Partial_tez.to_tez_rem total_q in - assert (Q.(equal rem zero)) ; - if Tez.(equal total zero) then Tez.to_z amount - else - let r = Tez.ratio amount total in - let p = Q.(r * of_bigint staking_delegate_denominator) in - Tez.(of_q ~round p |> to_z) - -let pseudo_to_partial_tez amount_pseudo staking_delegate_denominator - frozen_deposits = - let total_q = Frozen_tez.(total_co_current_q frozen_deposits.co_current) in - let total, rem = Partial_tez.to_tez_rem total_q in - assert (Q.(equal rem zero)) ; - if Z.(equal staking_delegate_denominator zero) then Q.of_bigint amount_pseudo - else - let q = Q.(amount_pseudo /// staking_delegate_denominator) in - Tez.mul_q total q - -(* tez_q <= amount *) -let stake_values_real amount staking_delegate_denominator frozen_deposits = - let pseudo = - tez_to_pseudo - ~round:`Down - amount - staking_delegate_denominator - frozen_deposits - in - let tez_q = - pseudo_to_partial_tez pseudo staking_delegate_denominator frozen_deposits - in - (pseudo, tez_q) - -(* returned_amount <= amount *) -let unstake_values_real amount staking_delegate_denominator frozen_deposits = - let pseudo = - tez_to_pseudo ~round:`Up amount staking_delegate_denominator frozen_deposits - in - let tez_q = - pseudo_to_partial_tez pseudo staking_delegate_denominator frozen_deposits - in - if Tez.equal (Tez.of_q ~round:`Down tez_q) amount then (pseudo, tez_q) - else - let pseudo = Z.(pseudo - one) in - ( pseudo, - pseudo_to_partial_tez pseudo staking_delegate_denominator frozen_deposits - ) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/tezt_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/tezt_helpers.ml deleted file mode 100644 index bf1e300f4a59b9bfd58d28356a178a547a309dd9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/tezt_helpers.ml +++ /dev/null @@ -1,38 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Test registration *) - -(** Registers a test. The protocol's name is added to the title and - tags. File-specific title prefix and tags can also be specified. *) -let register_test ~__FILE__ ?(file_tags = []) ~title ?(additional_tags = []) - ?(slow = false) f = - let tags = - let tags = file_tags @ additional_tags in - if slow then Tezos_test_helpers.Tag.slow :: tags else tags - in - Tezt_tezos.Protocol.register_test - ~__FILE__ - ~title - ~tags - ~uses:(fun _ -> []) - ~uses_node:false - ~uses_client:false - ~uses_admin_client:false - (fun _protocol -> f ()) - [ParisB] - -(** Same as [register_test], but for a test function returning [unit - tzresult Lwt.t]. If the result is an error, the test fails. *) -let register_test_es ~__FILE__ ?file_tags ~title ?additional_tags ?slow f = - register_test ~__FILE__ ?file_tags ~title ?additional_tags ?slow @@ fun () -> - let* r = f () in - match r with - | Ok () -> Lwt.return_unit - | Error err -> - let* () = Tezos_base_unix.Internal_event_unix.close () in - Test.fail "@\n%a@." pp_print_trace err diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/ticket_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/ticket_helpers.ml deleted file mode 100644 index f3fe9ad5805ed923a6fea3e4524b68e3cc77ecf7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/ticket_helpers.ml +++ /dev/null @@ -1,39 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -let assert_balance ctxt ~loc key expected = - let open Lwt_result_wrap_syntax in - let*@ balance, _ = Ticket_balance.get_balance ctxt key in - match (balance, expected) with - | Some b, Some eb -> Assert.equal_int ~loc (Z.to_int b) eb - | None, Some eb -> failwith "Expected balance %d" eb - | Some eb, None -> failwith "Expected None but got %d" (Z.to_int eb) - | None, None -> return_unit - -let string_ticket_token ticketer content = - let open Lwt_result_wrap_syntax in - let contents = - Result.value_f ~default:(fun _ -> assert false) - @@ Script_string.of_string content - in - let*?@ ticketer = Contract.of_b58check ticketer in - return - (Ticket_token.Ex_token - {ticketer; contents_type = Script_typed_ir.string_t; contents}) - -let adjust_ticket_token_balance alpha_ctxt owner ticket_token ~delta = - let open Lwt_result_wrap_syntax in - let*@ ticket_token_hash, ctxt = - Ticket_balance_key.of_ex_token alpha_ctxt ~owner ticket_token - in - let*@ (_ : Z.t), alpha_ctxt = - Ticket_balance.adjust_balance ctxt ticket_token_hash ~delta - in - return (ticket_token_hash, alpha_ctxt) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/transfers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/transfers.ml deleted file mode 100644 index 864b70be878abc1b9953e6cb57d038f51eb9fbe9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/transfers.ml +++ /dev/null @@ -1,71 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Tez_helpers - -let transfer_and_check_balances ?(with_burn = false) ~loc b ?(fee = Tez.zero) - ?expect_apply_failure src dst amount = - let open Lwt_result_syntax in - let*? amount_fee = fee +? amount in - let* bal_src = Context.Contract.balance (I b) src in - let* bal_dst = Context.Contract.balance (I b) dst in - let* op = - Op.transaction - ~force_reveal:true - ~gas_limit:(Custom_gas (Alpha_context.Gas.Arith.integral_of_int_exn 3000)) - (I b) - ~fee - src - dst - amount - in - let* b = Incremental.add_operation ?expect_apply_failure b op in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (I b) - in - let*? origination_burn = cost_per_byte *? Int64.of_int origination_size in - let*? amount_fee_burn = amount_fee +? origination_burn in - let amount_fee_maybe_burn = - if with_burn then amount_fee_burn else amount_fee - in - let* () = - Assert.balance_was_debited ~loc (I b) src bal_src amount_fee_maybe_burn - in - let+ () = Assert.balance_was_credited ~loc (I b) dst bal_dst amount in - (b, op) - -let n_transactions n b ?fee source dest amount = - let open Lwt_result_syntax in - List.fold_left_es - (fun b _ -> - let* i, _ = - transfer_and_check_balances ~loc:__LOC__ b ?fee source dest amount - in - let* b = Incremental.finalize_block i in - Incremental.begin_construction b) - b - (1 -- n) diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/transfers.mli b/src/proto_019_PtParisB/lib_protocol/test/helpers/transfers.mli deleted file mode 100644 index 86e17da6e2e475e233e6361c33757a9bba33b964..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/transfers.mli +++ /dev/null @@ -1,68 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** [transfer_and_check_balances b fee src dst amount] - this function takes a block, an optional parameter fee if fee does not - given it will be set to zero tez, a source contract, a destination contract - and the amount that one wants to transfer. - - 1- Transfer the amount of tez (w/wo fee) from a source contract to a - destination contract. - - 2- Check the equivalent of the balance of the source/destination - contract before and after transfer is validated. - - This function returns a pair: - - A block that added a valid operation - - a valid operation *) -val transfer_and_check_balances : - ?with_burn:bool -> - loc:string -> - Incremental.t -> - ?fee:Tez.t -> - ?expect_apply_failure:(error trace -> unit tzresult Lwt.t) -> - Contract.t -> - Contract.t -> - Tez.t -> - (Incremental.t * packed_operation) tzresult Lwt.t - -(** [n_transactions n b fee source dest amount] - this function takes a number of "n" that one wish to transfer, - a block, an optional parameter fee, a source contract, - a destination contract and an amount one wants to transfer. - - This function will do a transaction from a source contract to - a destination contract with the amount "n" times. *) -val n_transactions : - int -> - Incremental.t -> - ?fee:Tez.t -> - Contract.t -> - Contract.t -> - Tez.t -> - Incremental.t tzresult Lwt.t diff --git a/src/proto_019_PtParisB/lib_protocol/test/helpers/zk_rollup_l2_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/helpers/zk_rollup_l2_helpers.ml deleted file mode 100644 index eb710552b7cc8a4d493180c80f1b3c9db9df6221..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/helpers/zk_rollup_l2_helpers.ml +++ /dev/null @@ -1,26 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Dummy_zk_rollup = Dummy_zk_rollup diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/dune b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/dune deleted file mode 100644 index 3fd5f415c23866a9eb0cc7f33b9168e9a1193d77..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/dune +++ /dev/null @@ -1,64 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name - src_proto_019_PtParisB_lib_protocol_test_integration_consensus_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-alcotezt - octez-libs.base - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.base-test-helpers - tezos-protocol-019-PtParisB.parameters - octez-protocol-019-PtParisB-libs.plugin) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Octez_alcotezt - -open Tezos_base.TzPervasives - -open Tezos_protocol_019_PtParisB - -open Tezos_019_PtParisB_test_helpers - -open Tezos_base_test_helpers - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_protocol_plugin_019_PtParisB) - (modules - test_baking - test_consensus_key - test_deactivation - test_delegation - test_double_baking - test_double_attestation - test_double_preattestation - test_attestation - test_frozen_deposits - test_helpers_rpcs - test_participation - test_preattestation_functor - test_preattestation - test_seed)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_integration_consensus_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_attestation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_attestation.ml deleted file mode 100644 index feec3babdf27f1b9f3af0b93926928e9daa4f82e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_attestation.ml +++ /dev/null @@ -1,894 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (attestation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_attestation.ml - Subject: Attesting a block adds an extra layer of confidence - to the Tezos' PoS algorithm. The block attesting - operation must be included in the following block. -*) - -open Protocol -open Alpha_context - -let init_genesis ?policy ?dal_enable () = - let open Lwt_result_syntax in - let* genesis, _contracts = - Context.init_n ?dal_enable ~consensus_threshold:0 5 () - in - let* b = Block.bake ?policy genesis in - return (genesis, b) - -(** {1 Positive tests} *) - -(** Correct attestation from the slot 0 attester. *) -let test_simple_attestation () = - let open Lwt_result_syntax in - let* _genesis, attested_block = init_genesis () in - Consensus_helpers.test_consensus_operation_all_modes - ~loc:__LOC__ - ~attested_block - Attestation - -(** Test that the attestation's branch does not affect its - validity. *) -let test_arbitrary_branch () = - let open Lwt_result_syntax in - let* _genesis, attested_block = init_genesis () in - Consensus_helpers.test_consensus_operation_all_modes - ~loc:__LOC__ - ~attested_block - ~branch:Block_hash.zero - Attestation - -(** Correct attestation with a level and a round that are both - different from {!test_simple_attestation}. *) -let test_non_zero_round () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* attested_block = Block.bake ~policy:(By_round 10) b in - Consensus_helpers.test_consensus_operation_all_modes - ~loc:__LOC__ - ~attested_block - Attestation - -(** Fitness gap: this is a straightforward update from Emmy to Tenderbake, - that is, check that the level is incremented in a child block. *) -let test_fitness_gap () = - let open Lwt_result_syntax in - let* _genesis, pred_b = init_genesis () in - let* operation = Op.attestation pred_b in - let* b = Block.bake ~operation pred_b in - let fitness = - match Fitness.from_raw b.header.shell.fitness with - | Ok fitness -> fitness - | _ -> assert false - in - let pred_fitness = - match Fitness.from_raw pred_b.header.shell.fitness with - | Ok fitness -> fitness - | _ -> assert false - in - let level = Fitness.level fitness in - let pred_level = Fitness.level pred_fitness in - let level_diff = - Int32.sub (Raw_level.to_int32 level) (Raw_level.to_int32 pred_level) - in - Assert.equal_int32 ~loc:__LOC__ level_diff 1l - -(** Return a delegate and its second smallest slot for the level of [block]. *) -let delegate_and_second_slot block = - let open Lwt_result_syntax in - let* attesters = Context.get_attesters (B block) in - let delegate, slots = - (* Find an attester with more than 1 slot. *) - WithExceptions.Option.get - ~loc:__LOC__ - (List.find_map - (fun {RPC.Validators.delegate; slots; _} -> - if Compare.List_length_with.(slots > 1) then Some (delegate, slots) - else None) - attesters) - in - (* Check that the slots are sorted and have no duplicates. *) - let rec check_sorted = function - | [] | [_] -> true - | x :: (y :: _ as t) -> Slot.compare x y < 0 && check_sorted t - in - assert (check_sorted slots) ; - let slot = - match slots with [] | [_] -> assert false | _ :: slot :: _ -> slot - in - return (delegate, slot) - -(** Test that the mempool accepts attestations with a non-normalized - slot (that is, a slot that belongs to the delegate but is not the - delegate's smallest slot) at all three allowed levels for - attestations (and various rounds). *) -let test_mempool_second_slot () = - let open Lwt_result_syntax in - let* _genesis, grandparent = init_genesis () in - let* predecessor = Block.bake grandparent ~policy:(By_round 3) in - let* future_block = Block.bake predecessor ~policy:(By_round 5) in - let check_non_smallest_slot_ok loc attested_block = - let* delegate, slot = delegate_and_second_slot attested_block in - Consensus_helpers.test_consensus_operation - ~loc - ~attested_block - ~predecessor - ~delegate - ~slot - Attestation - Mempool - in - let* () = check_non_smallest_slot_ok __LOC__ grandparent in - let* () = check_non_smallest_slot_ok __LOC__ predecessor in - check_non_smallest_slot_ok __LOC__ future_block - -(** {1 Negative tests} - - The following test scenarios are supposed to raise errors. *) - -(** {2 Wrong slot} *) - -(** Apply an attestation with a negative slot. *) -let test_negative_slot () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init_n 5 () in - let* b = Block.bake genesis in - let* delegate, _slots = Context.get_attester (B b) in - Lwt.catch - (fun () -> - let* (_ : packed_operation) = - Op.attestation - ~delegate - ~slot:(Slot.of_int_do_not_use_except_for_parameters (-1)) - b - in - failwith "negative slot should not be accepted by the binary format") - (function - | Data_encoding.Binary.Write_error _ -> return_unit | e -> Lwt.reraise e) - -(** Attestation with a non-normalized slot (that is, a slot that - belongs to the delegate but is not the delegate's smallest slot). - It should fail in application and construction modes, but be - accepted in mempool mode. *) -let test_not_smallest_slot () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* delegate, slot = delegate_and_second_slot b in - let error_wrong_slot = function - | Validate_errors.Consensus.Wrong_slot_used_for_consensus_operation - {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false - in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:b - ~delegate - ~slot - ~application_error:error_wrong_slot - ~construction_error:error_wrong_slot - ?mempool_error:None - Attestation - -let delegate_and_someone_elses_slot block = - let open Lwt_result_syntax in - let* attesters = Context.get_attesters (B block) in - let delegate, other_delegate_slot = - match attesters with - | [] | [_] -> assert false (* at least two delegates with rights *) - | {delegate; _} :: {slots; _} :: _ -> - (delegate, WithExceptions.Option.get ~loc:__LOC__ (List.hd slots)) - in - return (delegate, other_delegate_slot) - -(** Attestation with a slot that does not belong to the delegate. *) -let test_not_own_slot () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* delegate, other_delegate_slot = delegate_and_someone_elses_slot b in - Consensus_helpers.test_consensus_operation_all_modes - ~loc:__LOC__ - ~attested_block:b - ~delegate - ~slot:other_delegate_slot - ~error:(function - | Alpha_context.Operation.Invalid_signature -> true | _ -> false) - Attestation - -(** In mempool mode, also test attestations with a slot that does not - belong to the delegate for various allowed levels and rounds. *) -let test_mempool_not_own_slot () = - let open Lwt_result_syntax in - let* _genesis, grandparent = init_genesis ~policy:(By_round 2) () in - let* predecessor = Block.bake grandparent ~policy:(By_round 1) in - let* future_block = Block.bake predecessor in - let check_not_own_slot_fails loc b = - let* delegate, other_delegate_slot = delegate_and_someone_elses_slot b in - Consensus_helpers.test_consensus_operation - ~loc - ~attested_block:b - ~delegate - ~slot:other_delegate_slot - ~error:(function - | Alpha_context.Operation.Invalid_signature -> true | _ -> false) - Attestation - Mempool - in - let* () = check_not_own_slot_fails __LOC__ grandparent in - let* () = check_not_own_slot_fails __LOC__ predecessor in - check_not_own_slot_fails __LOC__ future_block - -(** {2 Wrong level} *) - -let error_old_level = function - | Validate_errors.Consensus.Consensus_operation_for_old_level {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false - -(** Attestation that is one level too old, aka grandparent attestation - (the attestation is expected to point to the level of the - predecessor of the block/mempool containing the attestation, but - instead it points to the grandparent's level). - - This attestation should fail in a block (application or - construction), but be accepted in mempool mode. *) -let test_one_level_too_old () = - let open Lwt_result_syntax in - let* _genesis, grandparent = init_genesis () in - let* predecessor = Block.bake grandparent in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:grandparent - ~predecessor - ~application_error:error_old_level - ~construction_error:error_old_level - ?mempool_error:None - Attestation - -(** Attestation that is two levels too old (pointing to the - great-grandparent instead of the predecessor). It should fail in - all modes. *) -let test_two_levels_too_old () = - let open Lwt_result_syntax in - let* _genesis, greatgrandparent = init_genesis () in - let* grandparent = Block.bake greatgrandparent in - let* predecessor = Block.bake grandparent in - Consensus_helpers.test_consensus_operation_all_modes - ~loc:__LOC__ - ~attested_block:greatgrandparent - ~predecessor - ~error:error_old_level - Attestation - -let error_future_level = function - | Validate_errors.Consensus.Consensus_operation_for_future_level {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false - -(** Attestation that is one level in the future (pointing to the same - level as the block/mempool containing the attestation instead of - its predecessor/head). It should fail in a block (application or - construction) but succeed in a mempool. *) -let test_one_level_in_the_future () = - let open Lwt_result_syntax in - let* _genesis, predecessor = init_genesis () in - let* next_level_block = Block.bake predecessor in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:next_level_block - ~predecessor - ~application_error:error_future_level - ~construction_error:error_future_level - ?mempool_error:None - Attestation - -(** Attestation that is two levels in the future. It should fail in - all modes. *) -let test_two_levels_future () = - let open Lwt_result_syntax in - let* _genesis, predecessor = init_genesis () in - let* next_level_block = Block.bake predecessor in - let* after_next_level_block = Block.bake next_level_block in - Consensus_helpers.test_consensus_operation_all_modes - ~loc:__LOC__ - ~attested_block:after_next_level_block - ~predecessor - ~error:error_future_level - Attestation - -(** {2 Wrong round} *) - -let error_old_round = function - | Validate_errors.Consensus.Consensus_operation_for_old_round {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false - -(** Attestation that is one round too old. It should fail in a block - (application or construction) but succeed in a mempool. *) -let test_one_round_too_old () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* round0_block = Block.bake b in - let* predecessor = Block.bake ~policy:(By_round 1) b in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:round0_block - ~predecessor - ~application_error:error_old_round - ~construction_error:error_old_round - ?mempool_error:None - Attestation - -(** Attestation that is many rounds too old. It should fail in a block - (application or construction) but succeed in a mempool. *) -let test_many_rounds_too_old () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* round5_block = Block.bake ~policy:(By_round 5) b in - let* predecessor = Block.bake ~policy:(By_round 15) b in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:round5_block - ~predecessor - ~application_error:error_old_round - ~construction_error:error_old_round - ?mempool_error:None - Attestation - -let error_future_round = function - | Validate_errors.Consensus.Consensus_operation_for_future_round {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false - -(** Attestation that is one round in the future. It should fail in a - block (application or construction) but succeed in a mempool. *) -let test_one_round_in_the_future () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* predecessor = Block.bake b in - let* round1_block = Block.bake ~policy:(By_round 1) b in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:round1_block - ~predecessor - ~application_error:error_future_round - ~construction_error:error_future_round - ?mempool_error:None - Attestation - -(** Attestation that is many rounds in the future. It should fail in a - block (application or construction) but succeed in a mempool. *) -let test_many_rounds_future () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* predecessor = Block.bake ~policy:(By_round 5) b in - let* round15_block = Block.bake ~policy:(By_round 15) b in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block:round15_block - ~predecessor - ~application_error:error_future_round - ~construction_error:error_future_round - ?mempool_error:None - Attestation - -(** {2 Wrong payload hash} *) - -(** Attestation with an incorrect payload hash. It should fail in a - block (application or construction) but succeed in a mempool. *) -let test_wrong_payload_hash () = - let open Lwt_result_syntax in - let* _genesis, attested_block = init_genesis () in - let error_wrong_payload_hash = function - | Validate_errors.Consensus.Wrong_payload_hash_for_consensus_operation - {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false - in - Consensus_helpers.test_consensus_operation_all_modes_different_outcomes - ~loc:__LOC__ - ~attested_block - ~block_payload_hash:Block_payload_hash.zero - ~application_error:error_wrong_payload_hash - ~construction_error:error_wrong_payload_hash - ?mempool_error:None - Attestation - -(** {1 Conflict tests} - - Some positive and some negative tests. *) - -let assert_conflict_error ~loc res = - Assert.proto_error ~loc res (function - | Validate_errors.Consensus.Conflicting_consensus_operation {kind; _} - when kind = Validate_errors.Consensus.Attestation -> - true - | _ -> false) - -(** Test that attestations conflict with: - - an identical attestation, and - - an attestation on the same block with a different branch. - - In mempool mode, also test that they conflict with an attestation - on the same level and round but with a different payload hash - (such an attestation is invalid in application and construction modes). *) -let test_conflict () = - let open Lwt_result_syntax in - let* _genesis, b = init_genesis () in - let* op = Op.attestation b in - let* op_different_branch = Op.attestation ~branch:Block_hash.zero b in - (* Test in application and construction (aka baking) modes *) - let assert_conflict loc baking_mode tested_op = - let*! block = Block.bake ~baking_mode ~operations:[op; tested_op] b in - assert_conflict_error ~loc block - in - let* () = assert_conflict __LOC__ Application op in - let* () = assert_conflict __LOC__ Application op_different_branch in - let* () = assert_conflict __LOC__ Baking op in - let* () = assert_conflict __LOC__ Baking op_different_branch in - (* Test in mempool mode. *) - let* inc = Incremental.begin_construction ~mempool_mode:true b in - let* inc = Incremental.validate_operation inc op in - let assert_mempool_conflict loc tested_op = - let*! result = Incremental.validate_operation inc tested_op in - assert_conflict_error ~loc result - in - let* () = assert_mempool_conflict __LOC__ op in - let* () = assert_mempool_conflict __LOC__ op_different_branch in - let* op_different_payload_hash = - Op.attestation ~block_payload_hash:Block_payload_hash.zero b - in - let* () = assert_mempool_conflict __LOC__ op_different_payload_hash in - return_unit - -(** In mempool mode, test that grandparent attestations conflict with: - - an identical attestation, - - an attestation on the same block with a different branch, and - - an attestation on the same block with a different payload hash. - - This test would make no sense in application or construction modes, - since grandparent attestations fail anyway (as can be observed in - {!test_one_level_too_old}). *) -let test_grandparent_conflict () = - let open Lwt_result_syntax in - let* _genesis, grandparent = init_genesis () in - let* predecessor = Block.bake grandparent in - let* op = Op.attestation grandparent in - let* op_different_branch = - Op.attestation ~branch:Block_hash.zero grandparent - in - let* op_different_payload_hash = - Op.attestation ~block_payload_hash:Block_payload_hash.zero grandparent - in - let* inc = Incremental.begin_construction ~mempool_mode:true predecessor in - let* inc = Incremental.validate_operation inc op in - let assert_conflict loc tested_op = - let*! result = Incremental.validate_operation inc tested_op in - assert_conflict_error ~loc result - in - let* () = assert_conflict __LOC__ op in - let* () = assert_conflict __LOC__ op_different_branch in - let* () = assert_conflict __LOC__ op_different_payload_hash in - return_unit - -(** In mempool mode, test that attestations with the same future level - and same non-zero round conflict. This is not tested in application - and construction modes since such attestations would be invalid. *) -let test_future_level_conflict () = - let open Lwt_result_syntax in - let* _genesis, predecessor = init_genesis () in - let* future_block = Block.bake ~policy:(By_round 10) predecessor in - let* op = Op.attestation future_block in - let* op_different_branch = - Op.attestation ~branch:Block_hash.zero future_block - in - let* op_different_payload_hash = - Op.attestation ~block_payload_hash:Block_payload_hash.zero future_block - in - let* inc = Incremental.begin_construction ~mempool_mode:true predecessor in - let* inc = Incremental.validate_operation inc op in - let assert_conflict loc tested_op = - let*! result = Incremental.validate_operation inc tested_op in - assert_conflict_error ~loc result - in - let* () = assert_conflict __LOC__ op in - let* () = assert_conflict __LOC__ op_different_branch in - let* () = assert_conflict __LOC__ op_different_payload_hash in - return_unit - -(** In mempool mode, test that there is no conflict between an - attestation and a preattestation for the same slot (here the first - slot), same level, and same round. *) -let test_no_conflict_with_preattestation_mempool () = - let open Lwt_result_syntax in - let* _genesis, attested_block = init_genesis () in - let* op_attestation = Op.attestation attested_block in - let* op_preattestation = Op.preattestation attested_block in - let* inc = Incremental.begin_construction ~mempool_mode:true attested_block in - let* inc = Incremental.add_operation inc op_attestation in - let* inc = Incremental.add_operation inc op_preattestation in - let* _inc = Incremental.finalize_block inc in - return_unit - -(** In application and construction (aka baking) modes, test that - there is no conflict between an attestation and a preattestation - for the same slot (here the first slot). Note that the operations - don't have the same level because the required levels for them to - be valid are different. *) -let test_no_conflict_with_preattestation_block () = - let open Lwt_result_syntax in - let* _genesis, predecessor = init_genesis () in - let* round0_block = Block.bake predecessor in - let* op_attestation = Op.attestation predecessor in - let* op_preattestation = Op.preattestation round0_block in - let bake_both_ops baking_mode = - Block.bake - ~baking_mode - ~payload_round:(Some Round.zero) - ~locked_round:(Some Round.zero) - ~policy:(By_round 1) - ~operations:[op_attestation; op_preattestation] - predecessor - in - let* (_ : Block.t) = bake_both_ops Application in - let* (_ : Block.t) = bake_both_ops Baking in - return_unit - -(** In mempool mode, test that there is no conflict between - attestations for the same slot (here the first slot) with various - allowed levels and rounds. - - There are no similar tests in application and construction modes - because valid attestations always have the same level and round. *) -let test_no_conflict_various_levels_and_rounds () = - let open Lwt_result_syntax in - let* genesis, grandparent = init_genesis () in - let* predecessor = Block.bake grandparent in - let* future_block = Block.bake predecessor in - let* alt_grandparent = Block.bake ~policy:(By_round 1) genesis in - let* alt_predecessor = Block.bake ~policy:(By_round 1) grandparent in - let* alt_future = Block.bake ~policy:(By_round 10) alt_predecessor in - let* inc = Incremental.begin_construction ~mempool_mode:true predecessor in - let add_attestation inc attested_block = - let* (op : packed_operation) = Op.attestation attested_block in - let (Operation_data protocol_data) = op.protocol_data in - let content = - match protocol_data.contents with - | Single (Attestation {consensus_content = content; _}) -> content - | _ -> assert false - in - Format.eprintf - "level: %ld, round: %ld@." - (Raw_level.to_int32 content.level) - (Round.to_int32 content.round) ; - Incremental.add_operation inc op - in - let* inc = add_attestation inc grandparent in - let* inc = add_attestation inc predecessor in - let* inc = add_attestation inc future_block in - let* inc = add_attestation inc alt_grandparent in - let* inc = add_attestation inc alt_predecessor in - let* inc = add_attestation inc alt_future in - let* _inc = Incremental.finalize_block inc in - return_unit - -(** {1 Consensus threshold tests} - - Both positive and negative tests. *) - -(** Check that: - - a block with not enough attestation cannot be baked; - - a block with enough attestation is baked. *) -let test_attestation_threshold ~sufficient_threshold () = - let open Lwt_result_wrap_syntax in - (* We choose a relative large number of accounts so that the probability that - any delegate has [consensus_threshold] slots is low and most delegates have - about 1 slot so we can get closer to the limit of [consensus_threshold]: we - check that a block with attesting power [consensus_threshold - 1] won't be - baked. *) - let* genesis, _contracts = Context.init_n 10 () in - let* b = Block.bake genesis in - let* {parametric = {consensus_threshold; _}; _} = - Context.get_constants (B b) - in - let* attesters_list = Context.get_attesters (B b) in - let*?@ round = Block.get_round b in - let* _, attestations = - List.fold_left_es - (fun (counter, attestations) {Plugin.RPC.Validators.delegate; slots; _} -> - let new_counter = counter + List.length slots in - if - (sufficient_threshold && counter < consensus_threshold) - || ((not sufficient_threshold) && new_counter < consensus_threshold) - then - let* attestation = Op.attestation ~round ~delegate b in - return (new_counter, attestation :: attestations) - else return (counter, attestations)) - (0, []) - attesters_list - in - let*! b = Block.bake ~operations:attestations b in - if sufficient_threshold then return_unit - else - Assert.proto_error ~loc:__LOC__ b (function - | Validate_errors.Block.Not_enough_attestations _ -> true - | _ -> false) - -let test_two_attestations_with_same_attester () = - let open Lwt_result_syntax in - let* _genesis, attested_block = init_genesis ~dal_enable:true () in - let* op1 = Op.raw_attestation attested_block in - let dal_content = - let attestation = - Dal.Attestation.commit Dal.Attestation.empty Dal.Slot_index.zero - in - {attestation} - in - let* op2 = Op.raw_attestation ~dal_content attested_block in - let*! res = - Block.bake - ~baking_mode:Application - ~operations:[Operation.pack op1; Operation.pack op2] - attested_block - in - let error = function - | Validate_errors.( - Consensus.Conflicting_consensus_operation - { - kind = Attestation; - conflict = Operation_conflict {existing; new_operation}; - }) -> - Operation_hash.equal existing (Operation.hash op1) - && Operation_hash.equal new_operation (Operation.hash op2) - | _ -> false - in - Assert.proto_error ~loc:__LOC__ res error - -(* Check that if an attester includes some DAL content but is not in the DAL - committee, then an error is returned at block validation. - - Note that we change the value of [consensus_committee_size] because with the - default test parameters, [consensus_committee_size = 25 < 64 = - number_of_shards], so that test would not work! *) -let test_attester_not_in_dal_committee () = - let open Lwt_result_syntax in - let bal_high = 80_000_000_000L in - let bal_low = 08_000_000_000L in - (* Create many accounts with balance [bal_high] and one with [bal_low]. *) - let n = 10 in - let bootstrap_balances = bal_low :: Stdlib.List.init n (fun _ -> bal_high) in - let dal = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_sandbox - .dal - in - let dal = - (* We need to take a small number of shards to be sure there is a - really high probability an attester is not part of the DAL - committee in the first hundred blocks. *) - { - dal with - cryptobox_parameters = - {dal.cryptobox_parameters with number_of_shards = 64}; - } - in - let* genesis, contracts = - Context.init_gen - ~dal_enable:true - ~dal - ~consensus_committee_size:100 - ~consensus_threshold:0 - ~bootstrap_balances - (Context.TList (n + 1)) - () - in - let pkh = Stdlib.List.hd contracts |> Context.Contract.pkh in - let rec iter b i = - let* committee = Context.get_attesters (B b) in - let* dal_committee = Context.Dal.shards (B b) () in - let in_committee = - List.exists - (fun del -> - Signature.Public_key_hash.equal pkh del.RPC.Validators.delegate) - committee - in - let in_dal_committee = - List.exists - (fun ({delegate; _} : Plugin.RPC.Dal.S.shards_assignment) -> - Signature.Public_key_hash.equal pkh delegate) - dal_committee - in - if in_committee && not in_dal_committee then - let dal_content = {attestation = Dal.Attestation.empty} in - let* op = Op.attestation ~delegate:pkh ~dal_content b in - let* ctxt = Incremental.begin_construction b in - let expect_apply_failure = function - | [ - Environment.Ecoproto_error - (Alpha_context.Dal_errors - .Dal_data_availibility_attester_not_in_committee - {attester; level; slot = _}); - ] - when Signature.Public_key_hash.equal attester pkh - && Raw_level.to_int32 level = b.header.shell.level -> - return_unit - | errs -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - errs - in - Incremental.add_operation ctxt op ~expect_failure:expect_apply_failure - else - let* b = Block.bake b in - if i = 100 then - failwith - "The account is in all DAL committees for 100 levels! The test needs \ - to be adapted." - else iter b (i + 1) - in - let* b = Block.bake genesis in - let* _ = iter b 0 in - return_unit - -let test_dal_attestation_threshold () = - let open Lwt_result_wrap_syntax in - let n = 100 in - let* genesis, contracts = Context.init_n n ~consensus_threshold:0 () in - let contract = Stdlib.List.hd contracts in - let* { - parametric = - { - dal = - { - attestation_lag; - attestation_threshold; - cryptobox_parameters = {number_of_shards; _}; - _; - }; - _; - }; - _; - } = - Context.get_constants (B genesis) - in - let slot_index = Dal.Slot_index.zero in - let commitment = Alpha_context.Dal.Slot.Commitment.zero in - let commitment_proof = Alpha_context.Dal.Slot.Commitment_proof.zero in - let slot_header = - Dal.Operations.Publish_commitment.{slot_index; commitment; commitment_proof} - in - let* op = Op.dal_publish_commitment (B genesis) contract slot_header in - let* b = Block.bake genesis ~operation:op in - let* b = Block.bake_n (attestation_lag - 1) b in - let* dal_committee = Context.Dal.shards (B b) () in - let attestation = Dal.Attestation.commit Dal.Attestation.empty slot_index in - let dal_content = {attestation} in - let min_power = attestation_threshold * number_of_shards / 100 in - Log.info "Number of minimum required attested shards: %d" min_power ; - let* _ = - List.fold_left_es - (fun (acc_ops, acc_power) - ({delegate; indexes} : RPC.Dal.S.shards_assignment) -> - let* op = Op.attestation ~delegate ~dal_content b in - let ops = op :: acc_ops in - let power = acc_power + List.length indexes in - let* _b, (metadata, _ops) = - Block.bake_with_metadata ~operations:ops b - in - let attested_expected = power >= min_power in - let attested = - Dal.Attestation.is_attested metadata.dal_attestation slot_index - in - Log.info "With %d power, the slot is attested: %b " power attested ; - Check.(attested = attested_expected) - Check.bool - ~error_msg: - "Unexpected attestation status for slot 0: got %L, expected %R " ; - return (ops, power)) - ([], 0) - dal_committee - in - return_unit - -let tests = - [ - (* Positive tests *) - Tztest.tztest "Simple attestation" `Quick test_simple_attestation; - Tztest.tztest "Arbitrary branch" `Quick test_arbitrary_branch; - Tztest.tztest "Non-zero round" `Quick test_non_zero_round; - Tztest.tztest "Fitness gap" `Quick test_fitness_gap; - Tztest.tztest "Mempool: non-smallest slot" `Quick test_mempool_second_slot; - (* Negative tests *) - (* Wrong slot *) - Tztest.tztest "Attestation with slot -1" `Quick test_negative_slot; - Tztest.tztest "Non-normalized slot" `Quick test_not_smallest_slot; - Tztest.tztest "Not own slot" `Quick test_not_own_slot; - Tztest.tztest "Mempool: not own slot" `Quick test_mempool_not_own_slot; - (* Wrong level *) - Tztest.tztest "One level too old" `Quick test_one_level_too_old; - Tztest.tztest "Two levels too old" `Quick test_two_levels_too_old; - Tztest.tztest "One level in the future" `Quick test_one_level_in_the_future; - Tztest.tztest "Two levels in the future" `Quick test_two_levels_future; - (* Wrong round *) - Tztest.tztest "One round too old" `Quick test_one_round_too_old; - Tztest.tztest "Many rounds too old" `Quick test_many_rounds_too_old; - Tztest.tztest "One round in the future" `Quick test_one_round_in_the_future; - Tztest.tztest "Many rounds in the future" `Quick test_many_rounds_future; - (* Wrong payload hash *) - Tztest.tztest "Wrong payload hash" `Quick test_wrong_payload_hash; - (* Conflict tests (some negative, some positive) *) - Tztest.tztest "Conflict" `Quick test_conflict; - Tztest.tztest "Grandparent conflict" `Quick test_grandparent_conflict; - Tztest.tztest "Future level conflict" `Quick test_future_level_conflict; - Tztest.tztest - "No conflict with preattestation (mempool)" - `Quick - test_no_conflict_with_preattestation_mempool; - Tztest.tztest - "No conflict with preattestation (block)" - `Quick - test_no_conflict_with_preattestation_block; - Tztest.tztest - "No conflict with various levels and rounds" - `Quick - test_no_conflict_various_levels_and_rounds; - (* Consensus threshold tests (one positive and one negative) *) - Tztest.tztest - "sufficient attestation threshold" - `Quick - (test_attestation_threshold ~sufficient_threshold:true); - Tztest.tztest - "insufficient attestation threshold" - `Quick - (test_attestation_threshold ~sufficient_threshold:false); - Tztest.tztest - "two attestations with same attester in a block" - `Quick - test_two_attestations_with_same_attester; - Tztest.tztest - "attester not in DAL committee" - `Quick - test_attester_not_in_dal_committee; - Tztest.tztest - "DAL attestation_threshold" - `Quick - test_dal_attestation_threshold; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("attestation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_baking.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_baking.ml deleted file mode 100644 index d562dea935c9bda718f46072cb89d1accd9a310d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_baking.ml +++ /dev/null @@ -1,488 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2020 Metastate AG *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (baking) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_baking.ml - Subject: Rewards and bakers. Tests based on RPCs. -*) - -open Protocol -open Alpha_context - -(** Verify the level is correctly computed when the first cycle is - passed and after baking a certain fixed number of blocks (10 for - the moment). The result should be [blocks_per_cycle + 10] where - [blocks_per_cycle] comes from the constants of the selected - protocol. - - IMPROVEMENTS: - - Randomize the number of cycle. - - Randomize the number of accounts created at the beginning - - Randomize the blocks per cycle. - - Randomize the number of blocks baked after the n cycles baked - previously. *) -let test_cycle () = - let open Lwt_result_syntax in - let* b, _contracts = Context.init_n ~consensus_threshold:0 5 () in - let* csts = Context.get_constants (B b) in - let blocks_per_cycle = csts.parametric.blocks_per_cycle in - let pp fmt x = Format.fprintf fmt "%ld" x in - let* b = Block.bake b in - let* b = Block.bake_until_cycle_end b in - let*? curr_level = Context.get_level (B b) in - let* () = - Assert.equal - ~loc:__LOC__ - Int32.equal - "not the right level" - pp - (Alpha_context.Raw_level.to_int32 curr_level) - blocks_per_cycle - in - let*? l = Context.get_level (B b) in - let* b = Block.bake_n 10 b in - let*? curr_level = Context.get_level (B b) in - Assert.equal - ~loc:__LOC__ - Int32.equal - "not the right level" - pp - (Alpha_context.Raw_level.to_int32 curr_level) - (Int32.add (Alpha_context.Raw_level.to_int32 l) 10l) - -(** Test baking [n] cycles in a raw works smoothly. *) -let test_bake_n_cycles n () = - let open Lwt_result_syntax in - let open Block in - let policy = By_round 0 in - let* block, _contract = Context.init1 ~consensus_threshold:0 () in - let* (_block : block) = Block.bake_until_n_cycle_end ~policy n block in - return_unit - -(** Check that, after one or two voting periods, the voting power of a baker is - updated according to the rewards it receives for baking the blocks in the - voting periods. Note we consider only one baker. *) -let test_voting_power_cache () = - let open Lwt_result_syntax in - let open Block in - let policy = By_round 0 in - let* genesis, _contract = Context.init1 ~consensus_threshold:0 () in - let* csts = Context.get_constants (B genesis) in - let blocks_per_voting_period = - Int32.( - mul - csts.parametric.blocks_per_cycle - csts.parametric.cycles_per_voting_period) - in - let blocks_per_voting_periods n = - Int64.of_int (n * Int32.to_int blocks_per_voting_period) - in - let* baking_reward = Context.get_baking_reward_fixed_portion (B genesis) in - let* bakers = Context.get_bakers (B genesis) in - let baker = WithExceptions.Option.get ~loc:__LOC__ @@ List.hd bakers in - let* full_balance = Context.Delegate.full_balance (B genesis) baker in - let assert_voting_power ~loc n block = - let* voting_power = Context.get_voting_power (B block) baker in - Assert.equal_int64 ~loc n voting_power - in - (* the voting power is the full staking balance *) - let initial_voting_power_at_genesis = Tez.to_mutez full_balance in - let* () = - assert_voting_power ~loc:__LOC__ initial_voting_power_at_genesis genesis - in - let rewards_after_one_voting_period = - Tez_helpers.(baking_reward *! Int64.pred (blocks_per_voting_periods 1)) - in - let expected_delta_voting_power_after_one_voting_period = - Tez.to_mutez rewards_after_one_voting_period - in - let* block = - Block.bake_n ~policy (Int32.to_int blocks_per_voting_period - 1) genesis - in - let expected_voting_power_after_one_voting_period = - Int64.add - initial_voting_power_at_genesis - expected_delta_voting_power_after_one_voting_period - in - let* () = - assert_voting_power - ~loc:__LOC__ - expected_voting_power_after_one_voting_period - block - in - let rewards_after_two_voting_periods = - Tez_helpers.(baking_reward *! Int64.pred (blocks_per_voting_periods 2)) - in - let expected_delta_voting_power_after_two_voting_periods = - Tez.to_mutez rewards_after_two_voting_periods - in - let* block = - Block.bake_n ~policy (Int32.to_int blocks_per_voting_period) block - in - let expected_voting_power_after_two_voting_periods = - Int64.add - initial_voting_power_at_genesis - expected_delta_voting_power_after_two_voting_periods - in - assert_voting_power - ~loc:__LOC__ - expected_voting_power_after_two_voting_periods - block - -(** test that after baking, one gets the baking reward fixed portion. *) -let test_basic_baking_reward () = - let open Lwt_result_syntax in - let* genesis, baker = Context.init1 ~consensus_threshold:0 () in - let* b = Block.bake genesis in - let baker_pkh = Context.Contract.pkh baker in - let* bal = Context.Contract.balance (B b) baker in - let* frozen_deposit = - Context.Delegate.current_frozen_deposits (B b) baker_pkh - in - let* br = Context.get_baking_reward_fixed_portion (B b) in - let open Tez_helpers in - let expected_initial_balance = bal +! frozen_deposit -! br in - Assert.equal_tez - ~loc:__LOC__ - expected_initial_balance - Account.default_initial_balance - -let get_contract_for_pkh contracts pkh = - let open Lwt_result_syntax in - let rec find_contract = function - | [] -> assert false - | c :: t -> - let c_pkh = Context.Contract.pkh c in - if Signature.Public_key_hash.equal c_pkh pkh then return c - else find_contract t - in - find_contract contracts - -(** Test that - - the block producer gets the bonus for including the attestations; - - the payload producer gets the baking reward. - - The test checks this in two scenarios, in the first one the payload producer - and the block producer are the same delegate, in the second one they are - different. The first scenario is checked by first baking block [b1] and then - block [b2] at round 0 containing a number of attestations for [b1] and the - checking the balance of [b2]'s baker. For the second scenario another block - [b2'] is build on top of [b1] by a different baker, using the same payload as - [b2]. *) -let test_rewards_block_and_payload_producer () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_n ~consensus_threshold:1 10 () in - let* baker_b1 = Context.get_baker (B genesis) ~round:Round.zero in - let* baker_b1_contract = get_contract_for_pkh contracts baker_b1 in - let* b1 = Block.bake ~policy:(By_round 0) genesis in - let* attesters = Context.get_attesters (B b1) in - let* attesters = - List.map_es - (function - | {Plugin.RPC.Validators.delegate; slots; _} -> return (delegate, slots)) - attesters - in - (* We let just a part of the attesters vote; we assume here that 5 of 10 - attesters will have together at least one slot (to pass the threshold), but - not all slots (to make the test more interesting, otherwise we know the - total attesting power). *) - let attesters = List.take_n 5 attesters in - let* attestations = - List.map_ep - (fun (attester, _slots) -> Op.attestation ~delegate:attester b1) - attesters - in - let attesting_power = - List.fold_left - (fun acc (_pkh, slots) -> acc + List.length slots) - 0 - attesters - in - let fee = Tez.one in - let* tx = - Op.transaction (B b1) ~fee baker_b1_contract baker_b1_contract Tez.one - in - let* b2 = - Block.bake ~policy:(By_round 0) ~operations:(attestations @ [tx]) b1 - in - let* baker_b2 = Context.get_baker (B b1) ~round:Round.zero in - let* baker_b2_contract = get_contract_for_pkh contracts baker_b2 in - let* bal = Context.Contract.balance (B b2) baker_b2_contract in - let* frozen_deposit = - Context.Delegate.current_frozen_deposits (B b2) baker_b2 - in - let* baking_reward = Context.get_baking_reward_fixed_portion (B b2) in - let* bonus_reward = Context.get_bonus_reward (B b2) ~attesting_power in - let* reward_for_b1 = - if Signature.Public_key_hash.equal baker_b2 baker_b1 then - Context.get_baking_reward_fixed_portion (B b1) - else return Tez.zero - in - (* we are in the first scenario where the payload producer is the same as the - block producer, in our case, [baker_b2]. [baker_b2] gets the baking reward - plus the fee for the transaction [tx]. *) - let expected_balance = - let open Tez_helpers in - Account.default_initial_balance -! frozen_deposit +! baking_reward - +! bonus_reward +! reward_for_b1 +! fee - in - let* () = Assert.equal_tez ~loc:__LOC__ bal expected_balance in - (* Some new baker [baker_b2'] bakes b2' at the first round which does not - correspond to a slot of [baker_b2] and it includes the PQC for [b2]. We - check that the fixed baking reward goes to the payload producer [baker_b2], - while the bonus goes to the the block producer (aka baker) [baker_b2']. *) - let* attesters = Context.get_attesters (B b2) in - let* preattesters = - List.map_es - (function - | {Plugin.RPC.Validators.delegate; slots; _} -> return (delegate, slots)) - attesters - in - let* preattestations = - List.map_ep - (fun (attester, _slots) -> Op.preattestation ~delegate:attester b2) - preattesters - in - let* baker_b2 = Context.get_baker (B b1) ~round:Round.zero in - let* bakers = Context.get_bakers (B b1) in - let baker_b2' = Context.get_first_different_baker baker_b2 bakers in - let* b2' = - Block.bake - ~payload_round:(Some Round.zero) - ~locked_round:(Some Round.zero) - ~policy:(By_account baker_b2') - ~operations:(preattestations @ attestations @ [tx]) - b1 - in - (* [baker_b2], as payload producer, gets the block reward and the fees *) - let* bal = Context.Contract.balance (B b2') baker_b2_contract in - let* frozen_deposit = - Context.Delegate.current_frozen_deposits (B b2') baker_b2 - in - let reward_for_b1 = - if Signature.Public_key_hash.equal baker_b2 baker_b1 then baking_reward - else Tez.zero - in - let expected_balance = - let open Tez_helpers in - Account.default_initial_balance +! baking_reward -! frozen_deposit - +! reward_for_b1 +! fee - in - let* () = Assert.equal_tez ~loc:__LOC__ bal expected_balance in - (* [baker_b2'] gets the bonus because he is the one who included the - attestations *) - let* baker_b2'_contract = get_contract_for_pkh contracts baker_b2' in - let* bal' = Context.Contract.balance (B b2') baker_b2'_contract in - let* frozen_deposits' = - Context.Delegate.current_frozen_deposits (B b2') baker_b2' - in - let* baker_b1 = Context.get_baker (B genesis) ~round:Round.zero in - let reward_for_b1' = - if Signature.Public_key_hash.equal baker_b2' baker_b1 then baking_reward - else Tez.zero - in - let expected_balance' = - let open Tez_helpers in - Account.default_initial_balance +! bonus_reward +! reward_for_b1' - -! frozen_deposits' - in - Assert.equal_tez ~loc:__LOC__ bal' expected_balance' - -(** We test that: - - a delegate that has active stake can bake; - - a delegate that has no active stake cannot bake. -*) -let test_enough_active_stake_to_bake ~has_active_stake () = - let open Lwt_result_syntax in - let* b_for_constants, _contract = Context.init1 () in - let* Constants.{parametric = {minimal_stake; _}; _} = - Context.get_constants (B b_for_constants) - in - let tpr = Tez.to_mutez minimal_stake in - (* N.B. setting the balance has an impact on the active stake; without - delegation, the full balance is the same as the staking balance and the - active balance is less or equal the staking balance (see - [Delegate_sampler.select_distribution_for_cycle]). *) - let initial_bal1 = if has_active_stake then tpr else Int64.sub tpr 1L in - let* b0, (account1, _account2) = - Context.init2 - ~bootstrap_balances:[initial_bal1; tpr] - ~consensus_threshold:0 - () - in - let pkh1 = Context.Contract.pkh account1 in - let* baking_reward_fixed_portion = - Context.get_baking_reward_fixed_portion (B b0) - in - let*! b1 = Block.bake ~policy:(By_account pkh1) b0 in - if has_active_stake then - let*? b1 in - let* bal = Context.Contract.balance (B b1) account1 in - let* frozen_deposit = - Context.Delegate.current_frozen_deposits (B b1) pkh1 - in - let expected_bal = - Tez_helpers.( - Tez.of_mutez_exn initial_bal1 - +! baking_reward_fixed_portion -! frozen_deposit) - in - Assert.equal_tez ~loc:__LOC__ bal expected_bal - else - (* pkh1 has less than minimal_stake so it will have no slots, thus it - cannot be a proposer, thus it cannot bake. Precisely, bake fails because - get_next_baker_by_account fails with "No slots found for pkh1" *) - Assert.error ~loc:__LOC__ b1 (fun _ -> true) - -let test_committee_sampling () = - let open Lwt_result_syntax in - let test_distribution max_round distribution = - let bootstrap_balances, bounds = List.split distribution in - let*? accounts = - Account.generate_accounts (List.length bootstrap_balances) - in - let bootstrap_accounts = - Account.make_bootstrap_accounts ~bootstrap_balances accounts - in - let consensus_committee_size = max_round in - assert ( - (* Enforce that we are not mistakenly testing a value for committee_size - that violates invariants of module Slot_repr. *) - Result.is_ok - (Slot_repr.of_int consensus_committee_size)) ; - let constants = - { - Default_parameters.constants_test with - consensus_committee_size; - consensus_threshold = 0; - } - in - let parameters = - Default_parameters.parameters_of_constants ~bootstrap_accounts constants - in - let* genesis = Block.genesis_with_parameters parameters in - let+ bakers = - Plugin.RPC.Baking_rights.get Block.rpc_ctxt ~all:true ~max_round genesis - in - let stats = Stdlib.Hashtbl.create 10 in - Stdlib.List.iter2 - (fun acc bounds -> Stdlib.Hashtbl.add stats acc.Account.pkh (bounds, 0)) - accounts - bounds ; - List.iter - (fun {Plugin.RPC.Baking_rights.delegate = pkh; _} -> - let bounds, n = Stdlib.Hashtbl.find stats pkh in - Stdlib.Hashtbl.replace stats pkh (bounds, n + 1)) - bakers ; - let one_failed = ref false in - - Format.eprintf - "@[Testing with baker distribution [%a],@ committee size %d.@]@." - (Format.pp_print_list - ~pp_sep:(fun ppf () -> Format.fprintf ppf ",@ ") - (fun ppf (tez, _) -> Format.fprintf ppf "%Ld" tez)) - distribution - max_round ; - - Format.eprintf - "@[@,%a@]@." - (fun ppf stats -> - Stdlib.Hashtbl.iter - (fun pkh ((min_p, max_p), n) -> - let failed = not (n >= min_p && n <= max_p) in - Format.fprintf - ppf - "@[- %a %d%a@]@," - Signature.Public_key_hash.pp - pkh - n - (fun ppf failed -> - if failed then - Format.fprintf ppf " [FAIL] should be in [%d, %d]" min_p max_p - else Format.fprintf ppf "") - failed ; - one_failed := failed || !one_failed) - stats) - stats ; - - if !one_failed then - Stdlib.failwith - "The proportion of bakers marked as [FAILED] in the log output appear \ - in the wrong proportion in the committee." - else Format.eprintf "Test succesful.@." - in - (* The tests below are not deterministic, but the probability that - they fail is infinitesimal. *) - let accounts = - let expected_lower_bound = 6_100 and expected_upper_bound = 6_900 in - let balance = 8_000_000_000L in - let account = (balance, (expected_lower_bound, expected_upper_bound)) in - Array.(make 10 account |> to_list) - in - let* () = test_distribution 65535 accounts in - let* () = - test_distribution - 10_000 - [ - (16_000_000_000L, (4_600, 5_400)); - (8_000_000_000L, (2_200, 2_800)); - (8_000_000_000L, (2_200, 2_800)); - ] - in - test_distribution - 10_000 - [(792_000_000_000L, (9_830, 9_970)); (8_000_000_000L, (40, 160))] - -let tests = - [ - Tztest.tztest "cycle" `Quick test_cycle; - Tztest.tztest "bake_n_cycles for 12 cycles" `Quick (test_bake_n_cycles 12); - Tztest.tztest "voting_power" `Quick test_voting_power_cache; - Tztest.tztest - "the fixed baking reward is given after a bake" - `Quick - test_basic_baking_reward; - Tztest.tztest - "the block producer gets the bonus while the payload producer gets the \ - baking reward " - `Quick - test_rewards_block_and_payload_producer; - Tztest.tztest - "a delegate with 8000 tez can bake" - `Quick - (test_enough_active_stake_to_bake ~has_active_stake:true); - Tztest.tztest - "a delegate with 7999 tez cannot bake" - `Quick - (test_enough_active_stake_to_bake ~has_active_stake:false); - Tztest.tztest "committee sampling" `Quick test_committee_sampling; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("baking", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_consensus_key.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_consensus_key.ml deleted file mode 100644 index a3705ebaa03ffcaed697118706821779f9053730..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_consensus_key.ml +++ /dev/null @@ -1,345 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (delegate_storage) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_consensus_key.ml - Subject: consistency of the [Drain_delegate] operation - *) - -open Protocol -open Alpha_context - -let constants = - { - Default_parameters.constants_test with - issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez.zero; - }; - consensus_threshold = 0; - origination_size = 0; - } - -(** Checks that staking balance is sum of delegators' stake. *) -let check_delegate_staking_invariant blk delegate_pkh = - let open Lwt_result_wrap_syntax in - let* delegate_staking_balance = - Context.Delegate.staking_balance (B blk) delegate_pkh - in - let* self_staking_balance = - Context.Delegate.full_balance (B blk) delegate_pkh - in - let* delegate_info = Context.Delegate.info (B blk) delegate_pkh in - let delegate_contract = Contract.Implicit delegate_pkh in - let delegated_contracts = - List.filter - (fun c -> Contract.(c <> delegate_contract)) - delegate_info.delegated_contracts - in - let* delegators_stake = - List.fold_left_es - (fun total pkh -> - let* staking_balance = - Context.Contract.balance_and_frozen_bonds (B blk) pkh - in - let*?@ t = Tez.(total +? staking_balance) in - return t) - self_staking_balance - delegated_contracts - in - Assert.equal_tez ~loc:__LOC__ delegate_staking_balance delegators_stake - -let update_consensus_key blk delegate public_key = - let open Lwt_result_syntax in - let nb_delay_cycles = constants.consensus_rights_delay + 1 in - let* update_ck = - Op.update_consensus_key (B blk) (Contract.Implicit delegate) public_key - in - let* blk' = Block.bake ~operation:update_ck blk in - Block.bake_until_n_cycle_end nb_delay_cycles blk' - -let delegate_stake blk source delegate = - let open Lwt_result_syntax in - let* delegation = - Op.delegation (B blk) (Contract.Implicit source) (Some delegate) - in - Block.bake ~operation:delegation blk - -let transfer_tokens blk source destination amount = - let open Lwt_result_syntax in - let* transfer_op = - Op.transaction - (B blk) - (Contract.Implicit source) - (Contract.Implicit destination) - amount - in - Block.bake ~operation:transfer_op blk - -let may_reveal_manager_key blk (pkh, pk) = - let open Lwt_result_syntax in - let* is_revealed = - Context.Contract.is_manager_key_revealed (B blk) (Contract.Implicit pkh) - in - if is_revealed then return blk - else - let* reveal_op = Op.revelation (B blk) pk in - Block.bake ~operation:reveal_op blk - -let drain_delegate ~policy blk consensus_key delegate destination - expected_final_balance = - let open Lwt_result_syntax in - let* drain_del = - Op.drain_delegate (B blk) ~consensus_key ~delegate ~destination - in - let* blk' = Block.bake ~policy ~operation:drain_del blk in - let* () = check_delegate_staking_invariant blk' delegate in - let* final_balance = - Context.Contract.balance (B blk') (Contract.Implicit delegate) - in - Assert.equal_tez ~loc:__LOC__ final_balance expected_final_balance - -let get_first_2_accounts_contracts (a1, a2) = - ((a1, Context.Contract.pkh a1), (a2, Context.Contract.pkh a2)) - -let test_drain_delegate_scenario f = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (_contract1, account1_pkh), (_contract2, account2_pkh) = - get_first_2_accounts_contracts contracts - in - let consensus_account = Account.new_account () in - let delegate = account1_pkh in - let consensus_pk = consensus_account.pk in - let consensus_pkh = consensus_account.pkh in - let* blk' = - transfer_tokens genesis account2_pkh consensus_pkh Tez.one_mutez - in - let* blk' = update_consensus_key blk' delegate consensus_pk in - f blk' consensus_pkh consensus_pk delegate - -let test_drain_delegate ~low_balance ~exclude_ck ~ck_delegates () = - let open Lwt_result_syntax in - test_drain_delegate_scenario (fun blk consensus_pkh consensus_pk delegate -> - let policy = - if exclude_ck then Block.Excluding [consensus_pkh] - else Block.By_account delegate - in - let* blk = - if ck_delegates then - let* blk = may_reveal_manager_key blk (consensus_pkh, consensus_pk) in - delegate_stake blk consensus_pkh delegate - else return blk - in - let* delegate_balance = - Context.Contract.balance (B blk) (Contract.Implicit delegate) - in - let* blk = - if low_balance then - let* blk = - transfer_tokens blk delegate consensus_pkh delegate_balance - in - let* blk = may_reveal_manager_key blk (consensus_pkh, consensus_pk) in - transfer_tokens - blk - consensus_pkh - delegate - Tez.(of_mutez_exn 1_000_000L) - else return blk - in - let* delegate_balance = - Context.Contract.balance (B blk) (Contract.Implicit delegate) - in - let expected_final_balance = - if exclude_ck then Tez.zero - else Tez.(max one) Tez_helpers.(delegate_balance /! 100L) - in - drain_delegate - ~policy - blk - consensus_pkh - delegate - consensus_pkh - expected_final_balance) - -let test_drain_empty_delegate ~exclude_ck () = - let open Lwt_result_syntax in - test_drain_delegate_scenario (fun blk consensus_pkh _consensus_pk delegate -> - let policy = - if exclude_ck then Block.Excluding [consensus_pkh] - else Block.By_account delegate - in - let* delegate_balance = - Context.Contract.balance (B blk) (Contract.Implicit delegate) - in - let* blk = transfer_tokens blk delegate consensus_pkh delegate_balance in - let*! res = - drain_delegate ~policy blk consensus_pkh delegate consensus_pkh Tez.zero - in - Assert.proto_error_with_info - ~loc:__LOC__ - res - "Drain delegate without enough balance for allocation burn or drain \ - fees") - -let test_tz4_consensus_key () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants1 constants in - let account1_pkh = Context.Contract.pkh contracts in - let consensus_account = Account.new_account ~algo:Bls () in - let delegate = account1_pkh in - let consensus_pk = consensus_account.pk in - let consensus_pkh = consensus_account.pkh in - let* blk' = - transfer_tokens genesis account1_pkh consensus_pkh Tez.one_mutez - in - let* operation = - Op.update_consensus_key (B blk') (Contract.Implicit delegate) consensus_pk - in - let tz4_pk = match consensus_pk with Bls pk -> pk | _ -> assert false in - let expect_failure = function - | [ - Environment.Ecoproto_error - (Delegate_consensus_key.Invalid_consensus_key_update_tz4 pk); - ] - when Signature.Bls.Public_key.(pk = tz4_pk) -> - return_unit - | err -> - failwith - "Error trace:@,\ - \ %a does not match the \ - [Delegate_consensus_key.Invalid_consensus_key_update_tz4] error" - Error_monad.pp_print_trace - err - in - let* inc = Incremental.begin_construction blk' in - let* (_i : Incremental.t) = - Incremental.validate_operation ~expect_failure inc operation - in - return_unit - -let test_attestation_with_consensus_key () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants1 constants in - let account1_pkh = Context.Contract.pkh contracts in - let consensus_account = Account.new_account () in - let delegate = account1_pkh in - let consensus_pk = consensus_account.pk in - let consensus_pkh = consensus_account.pkh in - let* blk' = - transfer_tokens genesis account1_pkh consensus_pkh Tez.one_mutez - in - let* b_pre = update_consensus_key blk' delegate consensus_pk in - let* b = Block.bake b_pre in - let slot = Slot.of_int_do_not_use_except_for_parameters 0 in - let* attestation = Op.attestation ~delegate:account1_pkh ~slot b in - let*! res = Block.bake ~operation:attestation b in - let* () = - Assert.proto_error ~loc:__LOC__ res (function - | Operation.Invalid_signature -> true - | _ -> false) - in - let* attestation = Op.attestation ~delegate:consensus_pkh ~slot b in - let* (_good_block : Block.t) = Block.bake ~operation:attestation b in - return_unit - -let tests = - Tztest. - [ - tztest - "drain delegate high balance, excluding ck, ck delegates" - `Quick - (test_drain_delegate - ~low_balance:false - ~exclude_ck:true - ~ck_delegates:true); - tztest - "drain delegate high balance, excluding ck, ck does not delegate" - `Quick - (test_drain_delegate - ~low_balance:false - ~exclude_ck:true - ~ck_delegates:false); - tztest - "drain delegate high balance, with ck, ck delegates" - `Quick - (test_drain_delegate - ~low_balance:false - ~exclude_ck:false - ~ck_delegates:true); - tztest - "drain delegate high balance, with ck, ck does not delegate" - `Quick - (test_drain_delegate - ~low_balance:false - ~exclude_ck:false - ~ck_delegates:false); - tztest - "drain delegate low balance, excluding ck, ck delegates" - `Quick - (test_drain_delegate - ~low_balance:true - ~exclude_ck:true - ~ck_delegates:true); - tztest - "drain delegate low balance, excluding ck, ck does not delegate" - `Quick - (test_drain_delegate - ~low_balance:true - ~exclude_ck:true - ~ck_delegates:false); - tztest - "drain delegate low balance, with ck, ck delegates" - `Quick - (test_drain_delegate - ~low_balance:true - ~exclude_ck:false - ~ck_delegates:true); - tztest - "drain delegate low balance, with ck, ck does not delegate" - `Quick - (test_drain_delegate - ~low_balance:true - ~exclude_ck:false - ~ck_delegates:false); - tztest - "empty drain delegate excluding ck" - `Quick - (test_drain_empty_delegate ~exclude_ck:true); - tztest - "empty drain delegate with ck" - `Quick - (test_drain_empty_delegate ~exclude_ck:false); - tztest "tz4 consensus key" `Quick test_tz4_consensus_key; - tztest "attestation with ck" `Quick test_attestation_with_consensus_key; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("consensus key", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_deactivation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_deactivation.ml deleted file mode 100644 index f24faa3c7088df4ba1e36f350f15989a191607fe..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_deactivation.ml +++ /dev/null @@ -1,402 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_deactivation.ml - Subject: After a given number of cycles during which a delegate has not - made use of its baking and attesting rights, its account will - be deactivated for validator selection. To bake/attest - again, it will have to re-activate its account. -*) - -open Protocol -open Alpha_context -open Tez_helpers - -(** Check that [Delegate.staking_balance] is the same as [Delegate.full_balance] - (this is not true in general, but in these tests it is because they only deal - with self-delegation. Also, check that [Delegate.staking_balance] coincides - with [Stake_storage.Internal_for_tests.get] when the account is active and it - has the minimal required stake. *) -let check_stake ~loc (b : Block.t) (account : Account.t) = - let open Lwt_result_wrap_syntax in - let* staking_balance = Context.Delegate.staking_balance (B b) account.pkh in - let* full_balance = Context.Delegate.full_balance (B b) account.pkh in - let* () = Assert.equal_tez ~loc full_balance staking_balance in - let*@ ctxt = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ stake = Stake_storage.Internal_for_tests.get ctxt account.pkh in - Assert.equal_int64 - ~loc - (Tez_repr.to_mutez stake) - (Tez.to_mutez staking_balance) - -(** Check that [Stake_storage.Internal_for_tests.get] returns 0 (following a - deactivation). Note that in case of deactivation [Delegate.staking_balance] - does not necessarily coincide with [Stake_storage.Internal_for_tests.get] in - that [Delegate.staking_balance] may be positive - (while [Stake_storage.Internal_for_tests.get] returns 0 because the account - is no longer in [Active_delegate_with_minimal_stake] because of deactivation, - see [Stake_storage].) *) -let check_no_stake ~loc (b : Block.t) (account : Account.t) = - let open Lwt_result_wrap_syntax in - let*@ ctxt = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ stake = Stake_storage.Internal_for_tests.get ctxt account.pkh in - Assert.equal_int64 ~loc (Tez_repr.to_mutez stake) 0L - -(** Create a block with two initialized contracts/accounts. Assert - that the first account has a staking balance that is equal to its - own balance, and that its staking rights are consistent - (check_stake). *) -let test_simple_staking_rights () = - let open Lwt_result_syntax in - let* b, (a1, _a2) = Context.init2 () in - let* balance = Context.Contract.balance (B b) a1 in - let delegate1 = Context.Contract.pkh a1 in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) delegate1 - in - let expected_initial_balance = - Account.default_initial_balance -! frozen_deposits - in - let* () = Assert.equal_tez ~loc:__LOC__ balance expected_initial_balance in - let* m1 = Context.Contract.manager (B b) a1 in - let* info = Context.Delegate.info (B b) m1.pkh in - let* () = - Assert.equal_tez - ~loc:__LOC__ - Account.default_initial_balance - info.staking_balance - in - check_stake ~loc:__LOC__ b m1 - -(** Create a block with two initialized contracts/accounts. Bake - five blocks. Assert that the staking balance of the first account - equals to its balance. Then both accounts have consistent staking - rights. *) -let test_simple_staking_rights_after_baking () = - let open Lwt_result_syntax in - let* b, (a1, a2) = Context.init2 ~consensus_threshold:0 () in - let* m1 = Context.Contract.manager (B b) a1 in - let* m2 = Context.Contract.manager (B b) a2 in - let* b = Block.bake_n ~policy:(By_account m2.pkh) 5 b in - let* balance = Context.Contract.balance (B b) a1 in - let delegate1 = Context.Contract.pkh a1 in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) delegate1 - in - let*? full_balance = balance +? frozen_deposits in - let* info = Context.Delegate.info (B b) m1.pkh in - let* () = Assert.equal_tez ~loc:__LOC__ full_balance info.staking_balance in - let* () = check_stake ~loc:__LOC__ b m1 in - check_stake ~loc:__LOC__ b m2 - -let check_active_staking_balance ~loc ~deactivated b (m : Account.t) = - let open Lwt_result_syntax in - let* info = Context.Delegate.info (B b) m.pkh in - let* () = Assert.equal_bool ~loc info.deactivated deactivated in - if deactivated then check_no_stake ~loc b m else check_stake ~loc b m - -let run_until_deactivation () = - let open Lwt_result_syntax in - let* b, (a1, a2) = Context.init2 ~consensus_threshold:0 () in - let* balance_start = Context.Contract.balance (B b) a1 in - let* m1 = Context.Contract.manager (B b) a1 in - let* m2 = Context.Contract.manager (B b) a2 in - let* () = check_active_staking_balance ~loc:__LOC__ ~deactivated:false b m1 in - let* info = Context.Delegate.info (B b) m1.pkh in - let* b = - Block.bake_until_cycle ~policy:(By_account m2.pkh) info.grace_period b - in - let* () = check_active_staking_balance ~loc:__LOC__ ~deactivated:false b m1 in - let* b = Block.bake_until_cycle_end ~policy:(By_account m2.pkh) b in - let+ () = check_active_staking_balance ~loc:__LOC__ ~deactivated:true b m1 in - (b, ((a1, m1), balance_start), (a2, m2)) - -(** From an initialized block with two contracts/accounts, the first - one is active then deactivated. After baking, check that the - account is active again. Baking rights are ensured. *) -let test_deactivation_then_bake () = - let open Lwt_result_syntax in - let* ( b, - ((_deactivated_contract, deactivated_account), _start_balance), - (_a2, _m2) ) = - run_until_deactivation () - in - let* b = Block.bake ~policy:(By_account deactivated_account.pkh) b in - check_active_staking_balance - ~loc:__LOC__ - ~deactivated:false - b - deactivated_account - -(** check that an account which is deactivated for [consensus_rights_delay] cannot be - part of a committee *) -let test_a_really_deactivated_account_is_not_in_the_committee () = - let open Lwt_result_syntax in - let* ( b, - ((_deactivated_contract, deactivated_account), _start_balance), - (_a2, m2) ) = - run_until_deactivation () - in - (* at this point, the deactivated account can either bake (because it still - has rights) and become active again, or, in case it is inactive for another - [consensus_rights_delay], it has no more rights, thus cannot be part of the - committee. *) - let constants = Default_parameters.constants_test in - let* b = - Block.bake_until_n_cycle_end - (constants.consensus_rights_delay + 1) - ~policy:(By_account m2.pkh) - b - in - let* bakers = - Plugin.RPC.Baking_rights.get - Block.rpc_ctxt - ~delegates:[deactivated_account.pkh] - b - in - match List.hd bakers with Some _ -> assert false | None -> return_unit - -(** A deactivated account, after baking with self-delegation, is - active again. Preservation of its balance is tested. Baking rights - are ensured. *) -let test_deactivation_then_self_delegation () = - let open Lwt_result_syntax in - let* ( b, - ((deactivated_contract, deactivated_account), _start_balance), - (_a2, m2) ) = - run_until_deactivation () - in - let* self_delegation = - Op.delegation (B b) deactivated_contract (Some deactivated_account.pkh) - in - let* b = - Block.bake ~policy:(By_account m2.pkh) b ~operation:self_delegation - in - let* () = - check_active_staking_balance - ~loc:__LOC__ - ~deactivated:false - b - deactivated_account - in - check_stake ~loc:__LOC__ b deactivated_account - -(** A deactivated account, which is emptied (into a newly created sink - account), then self-delegated, becomes activated. Its balance is - zero. Baking rights are ensured. *) -let test_deactivation_then_empty_then_self_delegation () = - let open Lwt_result_syntax in - let* ( b, - ((deactivated_contract, deactivated_account), _start_balance), - (_a2, m2) ) = - run_until_deactivation () - in - (* empty the contract *) - let* balance = Context.Contract.balance (B b) deactivated_contract in - let sink_account = Account.new_account () in - let sink_contract = Contract.Implicit sink_account.pkh in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (B b) - in - let*? origination_burn = cost_per_byte *? Int64.of_int origination_size in - let amount = - match balance -? origination_burn with Ok r -> r | Error _ -> assert false - in - let* empty_contract = - Op.transaction (B b) deactivated_contract sink_contract amount - in - let* b1 = - Block.bake ~policy:(By_account m2.pkh) ~operation:empty_contract b - in - (* the account is deactivated, the stake is 0. *) - let* () = check_no_stake ~loc:__LOC__ b deactivated_account in - (* self delegation *) - let* self_delegation = - Op.delegation (B b1) deactivated_contract (Some deactivated_account.pkh) - in - let* b2 = - Block.bake ~policy:(By_account m2.pkh) ~operation:self_delegation b1 - in - let* () = - check_active_staking_balance - ~loc:__LOC__ - ~deactivated:false - b2 - deactivated_account - in - (* the account is activated, the stake is still 0. *) - let* balance = Context.Contract.balance (B b2) deactivated_contract in - Assert.equal_tez ~loc:__LOC__ Tez.zero balance - -(** A deactivated account, which is emptied, then self-delegated, then - re-credited of the sunk amount, becomes active again. Staking - rights remain consistent. *) -let test_deactivation_then_empty_then_self_delegation_then_recredit () = - let open Lwt_result_syntax in - let* ( b, - ((deactivated_contract, deactivated_account), _start_balance), - (_a2, m2) ) = - run_until_deactivation () - in - (* empty the contract *) - let* balance = Context.Contract.balance (B b) deactivated_contract in - let sink_account = Account.new_account () in - let sink_contract = Contract.Implicit sink_account.pkh in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (B b) - in - let*? origination_burn = cost_per_byte *? Int64.of_int origination_size in - let amount = - match balance -? origination_burn with Ok r -> r | Error _ -> assert false - in - let* empty_contract = - Op.transaction - ~force_reveal:true - (B b) - deactivated_contract - sink_contract - amount - in - let* b0 = - Block.bake ~policy:(By_account m2.pkh) ~operation:empty_contract b - in - (* the account is deactivated, the stake is 0. *) - let* () = check_no_stake ~loc:__LOC__ b deactivated_account in - (**** self delegation *) - let* self_delegation = - Op.delegation (B b0) deactivated_contract (Some deactivated_account.pkh) - in - let* b1 = - Block.bake ~policy:(By_account m2.pkh) ~operation:self_delegation b0 - in - (* the account is still deactivated *) - let* () = check_no_stake ~loc:__LOC__ b deactivated_account in - (**** recredit *) - let* recredit_contract = - Op.transaction - ~force_reveal:true - (B b1) - sink_contract - deactivated_contract - amount - in - let* b2 = - Block.bake ~policy:(By_account m2.pkh) ~operation:recredit_contract b1 - in - let* () = - check_active_staking_balance - ~loc:__LOC__ - ~deactivated:false - b2 - deactivated_account - in - let* balance2 = Context.Contract.balance (B b2) deactivated_contract in - let* () = Assert.equal_tez ~loc:__LOC__ amount balance2 in - check_stake ~loc:__LOC__ b2 deactivated_account - -(** Initialize a block with two contracts/accounts. A third new account is also - created. The first account is self-delegated. First account sends to third - one minimal_stake tez (so that, once it is active, it can appear in - [Active_delegate_with_minimal_stake]. The third account has no delegate and is - consistent for baking rights. Then, it is self-delegated and is supposed to - be activated. Again, consistency for baking rights are preserved for the - first and third accounts. *) -let test_delegation () = - let open Lwt_result_syntax in - let* b, (a1, a2) = Context.init2 ~consensus_threshold:0 () in - let m3 = Account.new_account () in - Account.add_account m3 ; - let* m1 = Context.Contract.manager (B b) a1 in - let* m2 = Context.Contract.manager (B b) a2 in - let a3 = Contract.Implicit m3.pkh in - let* delegate = Context.Contract.delegate_opt (B b) a1 in - (match delegate with - | None -> assert false - | Some pkh -> assert (Signature.Public_key_hash.equal pkh m1.pkh)) ; - let constants = Default_parameters.constants_test in - let minimal_stake = constants.minimal_stake in - let* transact = Op.transaction ~force_reveal:true (B b) a1 a3 minimal_stake in - let* b = Block.bake ~policy:(By_account m2.pkh) b ~operation:transact in - let* delegate = Context.Contract.delegate_opt (B b) a3 in - (match delegate with None -> () | Some _ -> assert false) ; - let* () = check_no_stake ~loc:__LOC__ b m3 in - let* delegation = Op.delegation ~force_reveal:true (B b) a3 (Some m3.pkh) in - let* b = Block.bake ~policy:(By_account m2.pkh) b ~operation:delegation in - let* delegate = Context.Contract.delegate_opt (B b) a3 in - (match delegate with - | None -> assert false - | Some pkh -> assert (Signature.Public_key_hash.equal pkh m3.pkh)) ; - let* () = check_active_staking_balance ~loc:__LOC__ ~deactivated:false b m3 in - let* () = check_stake ~loc:__LOC__ b m3 in - check_stake ~loc:__LOC__ b m1 - -let tests = - [ - Tztest.tztest "simple staking rights" `Quick test_simple_staking_rights; - Tztest.tztest - "simple staking rights after baking" - `Quick - test_simple_staking_rights_after_baking; - Tztest.tztest "deactivation then bake" `Quick test_deactivation_then_bake; - Tztest.tztest - "deactivation then self delegation" - `Quick - test_deactivation_then_self_delegation; - Tztest.tztest - "deactivation then empty then self delegation" - `Quick - test_deactivation_then_empty_then_self_delegation; - Tztest.tztest - "deactivation then empty then self delegation then recredit" - `Quick - test_deactivation_then_empty_then_self_delegation_then_recredit; - Tztest.tztest "delegate" `Quick test_delegation; - Tztest.tztest - "a really deactivated account is not part of the committee" - `Quick - test_a_really_deactivated_account_is_not_in_the_committee; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("deactivation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_delegation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_delegation.ml deleted file mode 100644 index 3df190603e0606dc24e7c31a7e6f998e68631c42..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_delegation.ml +++ /dev/null @@ -1,1805 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (delegation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_delegation.ml - Subject: - Properties on bootstrap contracts (self-delegation, - cannot delete/change their delegate (as opposed to contracts - not-being-delegate which can do these), bootstrap manager - as delegate during origination). - - Properties on delegation depending on whether delegate - keys registration, through origination and delegation. -*) - -open Protocol -open Alpha_context -open Tez_helpers - -(*****************************************************************************) -(* Bootstrap contracts - ------------------- - Bootstrap contracts are heavily used in other tests. It is helpful to test - some properties of these contracts, so we can correctly interpret the other - tests that use them. *) -(*****************************************************************************) - -let expect_error err = - let open Lwt_result_syntax in - function - | err0 :: _ when err = err0 -> return_unit - | _ -> failwith "Unexpected successful result" - -let expect_alpha_error err = expect_error (Environment.Ecoproto_error err) - -let expect_no_change_registered_delegate_pkh pkh = - let open Lwt_result_syntax in - function - | Environment.Ecoproto_error (Delegate_storage.Contract.No_deletion pkh0) :: _ - when pkh0 = pkh -> - return_unit - | _ -> failwith "Delegate can not be deleted and operation should fail." - -let expect_too_low_balance_error i op = - let open Lwt_result_syntax in - let*! err = Incremental.add_operation i op in - Assert.proto_error_with_info ~loc:__LOC__ err "Balance too low" - -let expect_delegate_already_active_error i op = - let open Lwt_result_syntax in - let*! err = Incremental.add_operation i op in - Assert.proto_error_with_info ~loc:__LOC__ err "Delegate already active" - -(** Bootstrap contracts delegate to themselves. *) -let bootstrap_manager_is_bootstrap_delegate () = - let open Lwt_result_syntax in - let* b, bootstrap0 = Context.init1 () in - let* delegate0 = Context.Contract.delegate (B b) bootstrap0 in - let* manager0 = Context.Contract.manager (B b) bootstrap0 in - Assert.equal_pkh ~loc:__LOC__ delegate0 manager0.pkh - -(** Bootstrap contracts cannot change their delegate. *) -let bootstrap_delegate_cannot_change ~fee () = - let open Lwt_result_syntax in - let* b, (bootstrap0, bootstrap1) = Context.init2 () in - let pkh1 = Context.Contract.pkh bootstrap0 in - let* i = Incremental.begin_construction b ~policy:(Block.Excluding [pkh1]) in - let* manager1 = Context.Contract.manager (I i) bootstrap1 in - let* balance0 = Context.Contract.balance (I i) bootstrap0 in - let* delegate0 = Context.Contract.delegate (I i) bootstrap0 in - (* change delegation to bootstrap1 *) - let* set_delegate = Op.delegation ~fee (I i) bootstrap0 (Some manager1.pkh) in - if fee > balance0 then expect_too_low_balance_error i set_delegate - else - let* i = - Incremental.add_operation - ~expect_apply_failure: - (expect_no_change_registered_delegate_pkh delegate0) - i - set_delegate - in - let* b = Incremental.finalize_block i in - (* bootstrap0 still has same delegate *) - let* delegate0_after = Context.Contract.delegate (B b) bootstrap0 in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate0_after delegate0 in - (* fee has been debited *) - Assert.balance_was_debited ~loc:__LOC__ (B b) bootstrap0 balance0 fee - -(** Bootstrap contracts cannot delete their delegation. *) -let bootstrap_delegate_cannot_be_removed ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 () in - let* i = Incremental.begin_construction b in - let* balance = Context.Contract.balance (I i) bootstrap in - let* delegate = Context.Contract.delegate (I i) bootstrap in - let* manager = Context.Contract.manager (I i) bootstrap in - (* remove delegation *) - let* set_delegate = Op.delegation ~fee (I i) bootstrap None in - if fee > balance then expect_too_low_balance_error i set_delegate - else - let* i = - Incremental.add_operation - ~expect_apply_failure: - (expect_no_change_registered_delegate_pkh manager.pkh) - i - set_delegate - in - (* delegate has not changed *) - let* delegate_after = Context.Contract.delegate (I i) bootstrap in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate delegate_after in - (* fee has been debited *) - Assert.balance_was_debited ~loc:__LOC__ (I i) bootstrap balance fee - -(** Contracts not registered as delegate can change their - delegation. *) -let delegate_can_be_changed_from_unregistered_contract ~fee () = - let open Lwt_result_syntax in - let* b, (bootstrap0, bootstrap1) = Context.init2 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let unregistered = Contract.Implicit unregistered_pkh in - let* manager0 = Context.Contract.manager (B b) bootstrap0 in - let* manager1 = Context.Contract.manager (B b) bootstrap1 in - let credit = of_int 10 in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap0 unregistered credit - in - let* balance = Context.Contract.balance (B b) bootstrap0 in - let* b = Block.bake b ~operation:credit_contract in - (* delegate to bootstrap0 *) - let* set_delegate = - Op.delegation - ~force_reveal:true - ~fee:Tez.zero - (B b) - unregistered - (Some manager0.pkh) - in - let* b = Block.bake b ~operation:set_delegate in - let* delegate = Context.Contract.delegate (B b) unregistered in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate manager0.pkh in - (* change delegation to bootstrap1 *) - let* change_delegate = - Op.delegation ~force_reveal:true ~fee (B b) unregistered (Some manager1.pkh) - in - let* i = Incremental.begin_construction b in - if fee > balance then expect_too_low_balance_error i change_delegate - else - let* i = Incremental.add_operation i change_delegate in - (* delegate has changed *) - let* delegate_after = Context.Contract.delegate (I i) unregistered in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate_after manager1.pkh in - (* fee has been debited *) - Assert.balance_was_debited ~loc:__LOC__ (I i) unregistered credit fee - -(** Contracts not registered as delegate can delete their - delegation. *) -let delegate_can_be_removed_from_unregistered_contract ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let unregistered = Contract.Implicit unregistered_pkh in - let* manager = Context.Contract.manager (B b) bootstrap in - let credit = of_int 10 in - let* credit_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - unregistered - credit - in - let* balance = Context.Contract.balance (B b) bootstrap in - let* b = Block.bake b ~operation:credit_contract in - (* delegate to bootstrap *) - let* set_delegate = - Op.delegation - ~force_reveal:true - ~fee:Tez.zero - (B b) - unregistered - (Some manager.pkh) - in - let* b = Block.bake b ~operation:set_delegate in - let* delegate = Context.Contract.delegate (B b) unregistered in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate manager.pkh in - (* remove delegation *) - let* delete_delegate = Op.delegation ~fee (B b) unregistered None in - let* i = Incremental.begin_construction b in - if fee > balance then expect_too_low_balance_error i delete_delegate - else - let* i = Incremental.add_operation i delete_delegate in - (* the delegate has been removed *) - let* () = - let* pkh = Context.Contract.delegate_opt (I i) unregistered in - match pkh with - | None -> return_unit - | Some _ -> failwith "Expected delegate to be removed" - in - (* fee has been debited *) - Assert.balance_was_debited ~loc:__LOC__ (I i) unregistered credit fee - -(** Bootstrap keys are already registered as delegate keys. *) -let bootstrap_manager_already_registered_delegate ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 () in - let* i = Incremental.begin_construction b in - let* manager = Context.Contract.manager (I i) bootstrap in - let pkh = manager.pkh in - let impl_contract = Contract.Implicit pkh in - let* balance = Context.Contract.balance (I i) impl_contract in - let* sec_reg = Op.delegation ~fee (I i) impl_contract (Some pkh) in - if fee > balance then expect_too_low_balance_error i sec_reg - else - let* i = - Incremental.add_operation - ~expect_apply_failure:(function - | Environment.Ecoproto_error Delegate_storage.Contract.Active_delegate - :: _ -> - return_unit - | _ -> - failwith "Delegate is already active and operation should fail.") - i - sec_reg - in - (* fee has been debited *) - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract balance fee - -(** Bootstrap manager can be set as delegate of an originated contract - (through origination operation). *) -let delegate_to_bootstrap_by_origination ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 () in - let* i = Incremental.begin_construction b in - let* manager = Context.Contract.manager (I i) bootstrap in - let* balance = Context.Contract.balance (I i) bootstrap in - (* originate a contract with bootstrap's manager as delegate *) - let* op, orig_contract = - Op.contract_origination - ~fee - ~credit:Tez.zero - ~delegate:manager.pkh - (I i) - bootstrap - ~script:Op.dummy_script - in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (I i) - in - (* 0.257tz *) - let*? origination_burn = cost_per_byte *? Int64.of_int origination_size in - let*? t = fee +? origination_burn in - let*? total_fee = Op.dummy_script_cost +? t in - if fee > balance then expect_too_low_balance_error i op - else if total_fee > balance && balance >= fee then - (* origination did not proceed; fee has been debited *) - let expect_apply_failure = function - | Environment.Ecoproto_error err :: _ -> - Assert.test_error_encodings err ; - let error_info = - Error_monad.find_info_of_error (Environment.wrap_tzerror err) - in - if String.equal error_info.title "Balance too low" then return_unit - else failwith "unexpected failure" - | _ -> - failwith - "Test_delegation.delegate_to_bootstrap_by_origination was expected \ - to fail but has not" - in - let* i = Incremental.add_operation i ~expect_apply_failure op in - (* fee was taken *) - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) bootstrap balance fee - in - (* originated contract has not been created *) - let*! err = Context.Contract.balance (I i) orig_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - else - (* bootstrap is delegate, fee + origination burn have been debited *) - let* i = Incremental.add_operation i op in - let* delegate = Context.Contract.delegate (I i) orig_contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate manager.pkh in - Assert.balance_was_debited ~loc:__LOC__ (I i) bootstrap balance total_fee - -let undelegated_originated_bootstrap_contract () = - let open Lwt_result_wrap_syntax in - let* b, _contract = - Context.init1 - ~bootstrap_contracts: - [ - Parameters. - { - delegate = None; - amount = Tez.zero; - script = Op.dummy_script; - hash = None; - }; - ] - () - in - let* b = Block.bake b in - (* We know the address of the first originated bootstrap contract because we know the bootstrap origination nonce. This address corresponds to the first TF vesting contract on mainnnet. *) - let*?@ originated_bootstrap0 = - Alpha_context.Contract.of_b58check "KT1WPEis2WhAc2FciM2tZVn8qe6pCBe9HkDp" - in - let* delegate0 = Context.Contract.delegate_opt (B b) originated_bootstrap0 in - match delegate0 with - | None -> return_unit - | Some _ -> failwith "Bootstrap contract should be undelegated (%s)" __LOC__ - -let delegated_implicit_bootstrap_contract () = - let open Lwt_result_wrap_syntax in - let*? accounts = Account.generate_accounts 2 in - let to_pkh, from_pkh = - match accounts with - | [account1; account2] -> (account1.pkh, account2.pkh) - | _ -> assert false - in - let bootstrap_delegations = [None; Some to_pkh] in - let bootstrap_accounts = - Account.make_bootstrap_accounts ~bootstrap_delegations accounts - in - let* b = Block.genesis bootstrap_accounts in - let* () = - let* pkh = Context.Contract.delegate_opt (B b) (Implicit from_pkh) in - match pkh with - | Some pkh when pkh = to_pkh -> return_unit - | Some _ | None -> - failwith "Bootstrap contract should be delegated (%s)." __LOC__ - in - (* Test delegation amount *) - let* i = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt i in - let*@ amount = Delegate.For_RPC.delegated_balance ctxt to_pkh in - Assert.equal_tez ~loc:__LOC__ amount (Tez.of_mutez_exn 4_000_000_000_000L) - -let tests_bootstrap_contracts = - [ - Tztest.tztest - "bootstrap contracts delegate to themselves" - `Quick - bootstrap_manager_is_bootstrap_delegate; - Tztest.tztest - "bootstrap contracts can change their delegate (small fee)" - `Quick - (bootstrap_delegate_cannot_change ~fee:Tez.one_mutez); - Tztest.tztest - "bootstrap contracts can change their delegate (max fee)" - `Quick - (bootstrap_delegate_cannot_change ~fee:max_tez); - Tztest.tztest - "bootstrap contracts cannot remove their delegation (small fee)" - `Quick - (bootstrap_delegate_cannot_be_removed ~fee:Tez.one_mutez); - Tztest.tztest - "bootstrap contracts cannot remove their delegation (max fee)" - `Quick - (bootstrap_delegate_cannot_be_removed ~fee:max_tez); - Tztest.tztest - "contracts not registered as delegate can change their delegation (small \ - fee)" - `Quick - (delegate_can_be_changed_from_unregistered_contract ~fee:Tez.one_mutez); - Tztest.tztest - "contracts not registered as delegate can change their delegation (max \ - fee)" - `Quick - (delegate_can_be_changed_from_unregistered_contract ~fee:max_tez); - Tztest.tztest - "contracts not registered as delegate can remove their delegation (small \ - fee)" - `Quick - (delegate_can_be_removed_from_unregistered_contract ~fee:Tez.one_mutez); - Tztest.tztest - "contracts not registered as delegate can remove their delegation (max \ - fee)" - `Quick - (delegate_can_be_removed_from_unregistered_contract ~fee:max_tez); - Tztest.tztest - "bootstrap keys are already registered as delegate keys (small fee)" - `Quick - (bootstrap_manager_already_registered_delegate ~fee:Tez.one_mutez); - Tztest.tztest - "bootstrap keys are already registered as delegate keys (max fee)" - `Quick - (bootstrap_manager_already_registered_delegate ~fee:max_tez); - Tztest.tztest - "bootstrap manager can be delegate (init origination, small fee)" - `Quick - (delegate_to_bootstrap_by_origination ~fee:Tez.one_mutez); - (* balance enough for fee but not for fee + origination burn + dummy script storage cost *) - Tztest.tztest - "bootstrap manager can be delegate (init origination, edge case)" - `Quick - (delegate_to_bootstrap_by_origination - ~fee:(Tez.of_mutez_exn 3_999_999_705_000L)); - (* fee bigger than bootstrap's initial balance*) - Tztest.tztest - "bootstrap manager can be delegate (init origination, large fee)" - `Quick - (delegate_to_bootstrap_by_origination - ~fee:(Tez_helpers.of_int 10_000_000)); - Tztest.tztest - "originated bootstrap contract can be undelegated" - `Quick - undelegated_originated_bootstrap_contract; - Tztest.tztest - "originated bootstrap contract can be delegated" - `Quick - delegated_implicit_bootstrap_contract; - ] - -(*****************************************************************************) -(* Delegate registration - --------------------- - A delegate is a pkh. Delegates must be registered. Registration is - done via the self-delegation of the implicit contract corresponding - to the pkh. The implicit contract must be credited when the - self-delegation is done. Furthermore, trying to register an already - registered key raises an error. - - In this series of tests, we verify that - 1- unregistered delegate keys cannot be delegated to, - 2- registered keys can be delegated to, - 3- registering an already registered key raises an error. - - We consider three scenarios for setting a delegate: - - through origination, - - through delegation when the implicit contract has no delegate yet, - - through delegation when the implicit contract already has a delegate. - - We also test that emptying the implicit contract linked to a - registered delegate key does not unregister the delegate key. - - Valid registration - ------------------ - Unregistered key: - - contract not credited and no self-delegation, - - contract credited but no self-delegation, - - contract not credited and self-delegation. - - Not credited: - - no credit operation - - credit operation of 1μꜩ and then debit operation of 1μꜩ *) -(*****************************************************************************) - -(* Part A. - Unregistered delegate keys cannot be used for delegation - - Two main series of tests: without self-delegation and with a failed attempt at self-delegation: - - 1/ no self-delegation - a/ no credit - - no token transfer - - credit of 1μꜩ and then debit of 1μꜩ - b/ with credit of 1μꜩ. - For every scenario, we try three different ways of delegating: - - through origination (init origination) - - through delegation when no delegate was assigned (init delegation) - - through delegation when a delegate was assigned (switch delegation). - - 2/ Self-delegation fails if the contract has no credit. We try the - two possibilities of 1a for non-credited contracts. *) - -let expect_unregistered_key pkh = - let open Lwt_result_syntax in - function - | Environment.Ecoproto_error (Delegate_storage.Unregistered_delegate pkh0) - :: _ - when pkh = pkh0 -> - return_unit - | _ -> failwith "Delegate key is not registered: operation should fail." - -(* Part A. Section 1. - No self-delegation. *) - -(** No token transfer, no self-delegation. Originated account. If - fees are higher than balance, [Balance_too_low] is - raised. Otherwise, it checks the correct exception is raised - (unregistered key), and the fees are still debited. Using RPCs, we - verify the contract has not been originated. *) -let test_unregistered_delegate_key_init_origination ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 () in - let* i = Incremental.begin_construction b in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - (* origination with delegate argument *) - let* op, orig_contract = - Op.contract_origination - ~fee - ~delegate:unregistered_pkh - (I i) - bootstrap - ~script:Op.dummy_script - in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (I i) - in - let*? origination_burn = cost_per_byte *? Int64.of_int origination_size in - let*? (_total_fee : Tez.t) = fee +? origination_burn in - (* FIXME unused variable *) - let* balance = Context.Contract.balance (I i) bootstrap in - if fee > balance then expect_too_low_balance_error i op - else - (* origination did not proceed; fee has been debited *) - let* i = - Incremental.add_operation - ~expect_apply_failure:(expect_unregistered_key unregistered_pkh) - i - op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) bootstrap balance fee - in - (* originated contract has not been created *) - let*! err = Context.Contract.balance (I i) orig_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - -(** Delegation when delegate key is not assigned. Delegate account is - initialized. If fees are higher than initial credit (10 tez), - [Balance_too_low] is raised. Otherwise, fees are still debited. The - implicit contract has no delegate. *) -let test_unregistered_delegate_key_init_delegation ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - let unregistered_delegate_account = Account.new_account () in - let unregistered_delegate_pkh = Account.(unregistered_delegate_account.pkh) in - (* initial credit for the delegated contract *) - let credit = of_int 10 in - let* credit_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - impl_contract - credit - in - let* b = Block.bake b ~operation:credit_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract credit in - (* try to delegate *) - let* delegate_op = - Op.delegation - ~force_reveal:true - ~fee - (B b) - impl_contract - (Some unregistered_delegate_pkh) - in - let* i = Incremental.begin_construction b in - if fee > credit then expect_too_low_balance_error i delegate_op - else - (* fee has been debited; no delegate *) - let* i = - Incremental.add_operation - i - ~expect_apply_failure: - (expect_unregistered_key unregistered_delegate_pkh) - delegate_op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract credit fee - in - (* implicit contract has no delegate *) - let*! err = Context.Contract.delegate (I i) impl_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - -(** Re-delegation when a delegate key was already assigned. If fees - are higher than initial credit (10 tez), [Balance_too_low] is - raised. Otherwise, fees are not debited and the implicit contract - delegate remains unchanged. *) -let test_unregistered_delegate_key_switch_delegation ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let bootstrap_pkh = Context.Contract.pkh bootstrap in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - let unregistered_delegate_account = Account.new_account () in - let unregistered_delegate_pkh = Account.(unregistered_delegate_account.pkh) in - (* initial credit for the delegated contract *) - let credit = of_int 10 in - let* init_credit = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - impl_contract - credit - in - let* b = Block.bake b ~operation:init_credit in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract credit in - (* set and check the initial delegate *) - let* delegate_op = - Op.delegation - ~force_reveal:true - ~fee:Tez.zero - (B b) - impl_contract - (Some bootstrap_pkh) - in - let* b = Block.bake b ~operation:delegate_op in - let* delegate_pkh = Context.Contract.delegate (B b) bootstrap in - let* () = Assert.equal_pkh ~loc:__LOC__ bootstrap_pkh delegate_pkh in - (* try to delegate *) - let* delegate_op = - Op.delegation ~fee (B b) impl_contract (Some unregistered_delegate_pkh) - in - let* i = Incremental.begin_construction b in - if fee > credit then expect_too_low_balance_error i delegate_op - else - (* fee has been debited; no delegate *) - let* i = - Incremental.add_operation - i - ~expect_apply_failure: - (expect_unregistered_key unregistered_delegate_pkh) - delegate_op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract credit fee - in - (* implicit contract delegate has not changed *) - let* delegate_pkh_after = Context.Contract.delegate (I i) bootstrap in - Assert.equal_pkh ~loc:__LOC__ delegate_pkh delegate_pkh_after - -(** Same as [unregistered_delegate_key_init_origination] and credits - [amount], no self-delegation. *) -let test_unregistered_delegate_key_init_origination_credit ~fee ~amount () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - (* credit + check balance *) - let* create_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap impl_contract amount - in - let* b = Block.bake b ~operation:create_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* origination with delegate argument *) - let* balance = Context.Contract.balance (B b) bootstrap in - let* op, orig_contract = - Op.contract_origination - ~fee - ~delegate:unregistered_pkh - (B b) - bootstrap - ~script:Op.dummy_script - in - let* i = Incremental.begin_construction b in - if fee > balance then expect_too_low_balance_error i op - else - (* origination not done, fee taken *) - let* i = - Incremental.add_operation - ~expect_apply_failure:(expect_unregistered_key unregistered_pkh) - i - op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) bootstrap balance fee - in - let*! err = Context.Contract.balance (I i) orig_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - -(** Same as [unregistered_delegate_key_init_delegation] and credits - the amount [amount] of the implicit contract. *) -let test_unregistered_delegate_key_init_delegation_credit ~fee ~amount () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - let unregistered_delegate_account = Account.new_account () in - let unregistered_delegate_pkh = Account.(unregistered_delegate_account.pkh) in - (* credit + check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - impl_contract - amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* initial credit for the delegated contract *) - let credit = of_int 10 in - let*? balance = credit +? amount in - let* init_credit = - Op.transaction ~fee:Tez.zero (B b) bootstrap impl_contract credit - in - let* b = Block.bake ~operation:init_credit b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract balance in - (* try to delegate *) - let* delegate_op = - Op.delegation - ~force_reveal:true - ~fee - (B b) - impl_contract - (Some unregistered_delegate_pkh) - in - let* i = Incremental.begin_construction b in - if fee > credit then expect_too_low_balance_error i delegate_op - else - (* fee has been taken, no delegate for contract *) - let* i = - Incremental.add_operation - ~expect_apply_failure: - (expect_unregistered_key unregistered_delegate_pkh) - i - delegate_op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract balance fee - in - let*! err = Context.Contract.delegate (I i) impl_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - -(** Same as in [unregistered_delegate_key_switch_delegation] and - credits the amount [amount] to the implicit contract. *) -let test_unregistered_delegate_key_switch_delegation_credit ~fee ~amount () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let bootstrap_pkh = Context.Contract.pkh bootstrap in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - let unregistered_delegate_account = Account.new_account () in - let unregistered_delegate_pkh = Account.(unregistered_delegate_account.pkh) in - (* credit + check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - impl_contract - amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* initial credit for the delegated contract *) - let credit = of_int 10 in - let*? balance = credit +? amount in - let* init_credit = - Op.transaction ~fee:Tez.zero (B b) bootstrap impl_contract credit - in - let* b = Block.bake ~operation:init_credit b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract balance in - (* set and check the initial delegate *) - let* delegate_op = - Op.delegation - ~force_reveal:true - ~fee:Tez.zero - (B b) - impl_contract - (Some bootstrap_pkh) - in - let* b = Block.bake ~operation:delegate_op b in - let* delegate_pkh = Context.Contract.delegate (B b) bootstrap in - let* () = Assert.equal_pkh ~loc:__LOC__ bootstrap_pkh delegate_pkh in - (* switch delegate through delegation *) - let* delegate_op = - Op.delegation ~fee (B b) impl_contract (Some unregistered_delegate_pkh) - in - let* i = Incremental.begin_construction b in - if fee > credit then expect_too_low_balance_error i delegate_op - else - (* fee has been taken, delegate for contract has not changed *) - let* i = - Incremental.add_operation - ~expect_apply_failure: - (expect_unregistered_key unregistered_delegate_pkh) - i - delegate_op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract balance fee - in - let* delegate = Context.Contract.delegate (I i) impl_contract in - let* () = - Assert.not_equal_pkh ~loc:__LOC__ delegate unregistered_delegate_pkh - in - Assert.equal_pkh ~loc:__LOC__ delegate bootstrap_pkh - -(** A credit of some amount followed by a debit of the same amount, - no self-delegation. *) -let test_unregistered_delegate_key_init_origination_credit_debit ~fee ~amount () - = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - (* credit + check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake b ~operation:create_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* debit + check balance *) - let* debit_contract = - Op.transaction ~force_reveal:true (B b) impl_contract bootstrap amount - in - let* b = Block.bake b ~operation:debit_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* origination with delegate argument *) - let* balance = Context.Contract.balance (B b) bootstrap in - let* op, orig_contract = - Op.contract_origination - ~fee - ~delegate:unregistered_pkh - (B b) - bootstrap - ~script:Op.dummy_script - in - let* i = Incremental.begin_construction b in - if fee > balance then expect_too_low_balance_error i op - else - (* fee taken, origination not processed *) - let* i = - Incremental.add_operation - ~expect_apply_failure:(expect_unregistered_key unregistered_pkh) - i - op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) bootstrap balance fee - in - let*! err = Context.Contract.balance (I i) orig_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - -(** Same as in [unregistered_delegate_key_init_delegation] but credits - then debits the amount [amount] to the implicit contract. *) -let test_unregistered_delegate_key_init_delegation_credit_debit ~amount ~fee () - = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - let unregistered_delegate_account = Account.new_account () in - let unregistered_delegate_pkh = Account.(unregistered_delegate_account.pkh) in - (* credit + check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - impl_contract - amount - in - let* b = Block.bake b ~operation:create_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* debit + check balance *) - let* debit_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - impl_contract - bootstrap - amount - in - let* b = Block.bake b ~operation:debit_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* initial credit for the delegated contract *) - let credit = of_int 10 in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap impl_contract credit - in - let* b = Block.bake b ~operation:credit_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract credit in - (* try to delegate *) - let* delegate_op = - Op.delegation - ~force_reveal:true - ~fee - (B b) - impl_contract - (Some unregistered_delegate_pkh) - in - let* i = Incremental.begin_construction b in - if fee > credit then expect_too_low_balance_error i delegate_op - else - (* fee has been taken, no delegate for contract *) - let* i = - Incremental.add_operation - ~expect_apply_failure: - (expect_unregistered_key unregistered_delegate_pkh) - i - delegate_op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract credit fee - in - let*! err = Context.Contract.delegate (I i) impl_contract in - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - -(** Same as in [unregistered_delegate_key_switch_delegation] but - credits then debits the amount [amount] to the implicit contract. *) -let test_unregistered_delegate_key_switch_delegation_credit_debit ~fee ~amount - () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let bootstrap_pkh = Context.Contract.pkh bootstrap in - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - let unregistered_delegate_account = Account.new_account () in - let unregistered_delegate_pkh = Account.(unregistered_delegate_account.pkh) in - (* credit + check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - ~fee:Tez.zero - (B b) - bootstrap - impl_contract - amount - in - let* b = Block.bake b ~operation:create_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* debit + check balance *) - let* debit_contract = - Op.transaction ~force_reveal:true (B b) impl_contract bootstrap amount - in - let* b = Block.bake b ~operation:debit_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* delegation - initial credit for the delegated contract *) - let credit = of_int 10 in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap impl_contract credit - in - let* b = Block.bake b ~operation:credit_contract in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract credit in - (* set and check the initial delegate *) - let* delegate_op = - Op.delegation - ~force_reveal:true - ~fee:Tez.zero - (B b) - impl_contract - (Some bootstrap_pkh) - in - let* b = Block.bake b ~operation:delegate_op in - let* delegate_pkh = Context.Contract.delegate (B b) bootstrap in - let* () = Assert.equal_pkh ~loc:__LOC__ bootstrap_pkh delegate_pkh in - (* switch delegate through delegation *) - let* delegate_op = - Op.delegation (B b) ~fee impl_contract (Some unregistered_delegate_pkh) - in - let* i = Incremental.begin_construction b in - if fee > credit then expect_too_low_balance_error i delegate_op - else - (* fee has been taken, delegate for contract has not changed *) - let* i = - Incremental.add_operation - ~expect_apply_failure: - (expect_unregistered_key unregistered_delegate_pkh) - i - delegate_op - in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) impl_contract credit fee - in - let* delegate = Context.Contract.delegate (I i) impl_contract in - Assert.not_equal_pkh ~loc:__LOC__ delegate unregistered_delegate_pkh - -(* Part A. Section 2. - Self-delegation to an empty contract fails. *) - -(** Self-delegation with zero-balance contract should fail. *) -let test_failed_self_delegation_no_transaction () = - let open Lwt_result_syntax in - let* b, _contract = Context.init1 () in - let* i = Incremental.begin_construction b in - let account = Account.new_account () in - let unregistered_pkh = Account.(account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - (* check balance *) - let* balance = Context.Contract.balance (I i) impl_contract in - let* () = Assert.equal_tez ~loc:__LOC__ Tez.zero balance in - (* self delegation fails *) - let* self_delegation = - Op.delegation (I i) impl_contract (Some unregistered_pkh) - in - let*! err = Incremental.add_operation i self_delegation in - Assert.proto_error_with_info ~loc:__LOC__ err "Empty implicit contract" - -(** Implicit contract is credited then debited of same amount (i.e., - is emptied). Self-delegation fails. *) -let test_failed_self_delegation_emptied_implicit_contract amount () = - let open Lwt_result_syntax in - (* create an implicit contract *) - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let unregistered_pkh = Account.(account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - (* credit implicit contract and check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* empty implicit contract and check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) impl_contract bootstrap amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* self delegation fails *) - let* self_delegation = - Op.delegation (B b) impl_contract (Some unregistered_pkh) - in - let* i = Incremental.begin_construction b in - let*! err = Incremental.add_operation i self_delegation in - Assert.proto_error_with_info ~loc:__LOC__ err "Empty implicit contract" - -(** Implicit contract is credited with a non-zero quantity [amount] - tz, then it is delegated. The operation of debit of [amount] tz - should fail as the contract is already delegated. *) -let test_emptying_delegated_implicit_contract_fails amount () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let* bootstrap_manager = Context.Contract.manager (B b) bootstrap in - let account = Account.new_account () in - let unregistered_pkh = Account.(account.pkh) in - let impl_contract = Contract.Implicit unregistered_pkh in - (* credit unregistered implicit contract and check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* delegate the contract to the bootstrap *) - let* delegation = - Op.delegation - ~force_reveal:true - (B b) - impl_contract - (Some bootstrap_manager.pkh) - in - let* b = Block.bake ~operation:delegation b in - (* empty implicit contract and expect error since the contract is delegated *) - let* create_contract = Op.transaction (B b) impl_contract bootstrap amount in - let* i = Incremental.begin_construction b in - let*! err = Incremental.add_operation i create_contract in - Assert.proto_error_with_info - ~loc:__LOC__ - err - "Empty implicit delegated contract" - -(* Part B. - - Valid registration: - - Credit implicit contract with some ꜩ + verification of balance - - Self delegation + verification - - Empty contract + verification of balance + verification of not being erased / self-delegation - - Create delegator implicit contract w first implicit contract as delegate + verification of delegation. *) - -(** Initialized account is credited of [amount] tz, then - self-delegated. *) -let test_valid_delegate_registration_init_delegation_credit amount () = - let open Lwt_result_syntax in - (* create an implicit contract *) - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let delegate_account = Account.new_account () in - let delegate_pkh = Account.(delegate_account.pkh) in - let impl_contract = Contract.Implicit delegate_pkh in - (* credit > 0ꜩ + check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* self delegation + verification *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some delegate_pkh) - in - let* b = Block.bake ~operation:self_delegation b in - let* delegate = Context.Contract.delegate (B b) impl_contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate delegate_pkh in - (* create an implicit contract with no delegate *) - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let delegator = Contract.Implicit unregistered_pkh in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap delegator Tez.one - in - let* b = Block.bake ~operation:credit_contract b in - (* check no delegate for delegator contract *) - let*! err = Context.Contract.delegate (B b) delegator in - let* () = - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - in - (* delegation to the newly registered key *) - let* delegation = - Op.delegation ~force_reveal:true (B b) delegator (Some delegate_account.pkh) - in - let* b = Block.bake ~operation:delegation b in - (* check delegation *) - let* delegator_delegate = Context.Contract.delegate (B b) delegator in - Assert.equal_pkh ~loc:__LOC__ delegator_delegate delegate_pkh - -(** Create an implicit contract, credits with [amount] - tz. Self-delegates. Create another implicit contract with - bootstrap as delegate. Re-delegate it to the first implicit - contract. *) -let test_valid_delegate_registration_switch_delegation_credit amount () = - let open Lwt_result_syntax in - (* create an implicit contract *) - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let delegate_account = Account.new_account () in - let delegate_pkh = Account.(delegate_account.pkh) in - let impl_contract = Contract.Implicit delegate_pkh in - (* credit > 0ꜩ + check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* self delegation + verification *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some delegate_pkh) - in - let* b = Block.bake ~operation:self_delegation b in - let* delegate = Context.Contract.delegate (B b) impl_contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate delegate_pkh in - (* create an implicit contract with bootstrap's account as delegate *) - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let delegator = Contract.Implicit unregistered_pkh in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap delegator Tez.one - in - let* b = Block.bake ~operation:credit_contract b in - let* bootstrap_manager = Context.Contract.manager (B b) bootstrap in - let* delegation = - Op.delegation - ~force_reveal:true - (B b) - delegator - (Some bootstrap_manager.pkh) - in - let* b = Block.bake ~operation:delegation b in - (* test delegate of new contract is bootstrap *) - let* delegator_delegate = Context.Contract.delegate (B b) delegator in - let* () = - Assert.equal_pkh ~loc:__LOC__ delegator_delegate bootstrap_manager.pkh - in - (* delegation with newly registered key *) - let* delegation = Op.delegation (B b) delegator (Some delegate_account.pkh) in - let* b = Block.bake ~operation:delegation b in - let* delegator_delegate = Context.Contract.delegate (B b) delegator in - Assert.equal_pkh ~loc:__LOC__ delegator_delegate delegate_pkh - -(** Create an implicit contract. *) -let test_valid_delegate_registration_init_delegation_credit_debit amount () = - let open Lwt_result_syntax in - (* create an implicit contract *) - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let delegate_account = Account.new_account () in - let delegate_pkh = Account.(delegate_account.pkh) in - let impl_contract = Contract.Implicit delegate_pkh in - (* credit > 0ꜩ+ check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* self delegation + verification *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some delegate_pkh) - in - let* b = Block.bake ~operation:self_delegation b in - let* delegate = Context.Contract.delegate (B b) impl_contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate_pkh delegate in - (* empty implicit contracts are usually deleted but they are kept if - they were registered as delegates. we empty the contract in - order to verify this. *) - let* empty_contract = Op.transaction (B b) impl_contract bootstrap amount in - let* b = Block.bake ~operation:empty_contract b in - (* impl_contract is empty *) - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* verify self-delegation after contract is emptied *) - let* delegate = Context.Contract.delegate (B b) impl_contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate_pkh delegate in - (* create an implicit contract with no delegate *) - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let delegator = Contract.Implicit unregistered_pkh in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap delegator Tez.one - in - let* b = Block.bake ~operation:credit_contract b in - (* check no delegate for delegator contract *) - let*! err = Context.Contract.delegate (B b) delegator in - let* () = - Assert.error ~loc:__LOC__ err (function - | Tezos_rpc.Context.Not_found _ -> true - | _ -> false) - in - (* delegation to the newly registered key *) - let* delegation = - Op.delegation ~force_reveal:true (B b) delegator (Some delegate_account.pkh) - in - let* b = Block.bake ~operation:delegation b in - (* check delegation *) - let* delegator_delegate = Context.Contract.delegate (B b) delegator in - Assert.equal_pkh ~loc:__LOC__ delegator_delegate delegate_pkh - -(** A created implicit contract is credited with [amount] tz, then is - self-delegated. It is emptied (fund back into bootstrap), and - should remain existing (as registered as delegate). Another created - implicit contract is delegated to bootstrap, then should be able to - be re-delegated to the latter contract. *) -let test_valid_delegate_registration_switch_delegation_credit_debit amount () = - let open Lwt_result_syntax in - (* create an implicit contract *) - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let delegate_account = Account.new_account () in - let delegate_pkh = Account.(delegate_account.pkh) in - let impl_contract = Contract.Implicit delegate_pkh in - (* credit > 0ꜩ + check balance *) - let* create_contract = - Op.transaction ~force_reveal:true (B b) bootstrap impl_contract amount - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract amount in - (* self delegation + verification *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some delegate_pkh) - in - let* b = Block.bake ~operation:self_delegation b in - let* delegate = Context.Contract.delegate (B b) impl_contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate_pkh delegate in - (* empty implicit contracts are usually deleted but they are kept if - they were registered as delegates. we empty the contract in - order to verify this. *) - let* empty_contract = Op.transaction (B b) impl_contract bootstrap amount in - let* b = Block.bake ~operation:empty_contract b in - (* impl_contract is empty *) - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* create an implicit contract with bootstrap's account as delegate *) - let unregistered_account = Account.new_account () in - let unregistered_pkh = Account.(unregistered_account.pkh) in - let delegator = Contract.Implicit unregistered_pkh in - let* credit_contract = - Op.transaction ~fee:Tez.zero (B b) bootstrap delegator Tez.one - in - let* b = Block.bake ~operation:credit_contract b in - let* bootstrap_manager = Context.Contract.manager (B b) bootstrap in - let* delegation = - Op.delegation - ~force_reveal:true - (B b) - delegator - (Some bootstrap_manager.pkh) - in - let* b = Block.bake ~operation:delegation b in - (* test delegate of new contract is bootstrap *) - let* delegator_delegate = Context.Contract.delegate (B b) delegator in - let* () = - Assert.equal_pkh ~loc:__LOC__ delegator_delegate bootstrap_manager.pkh - in - (* delegation with newly registered key *) - let* delegation = - Op.delegation ~force_reveal:true (B b) delegator (Some delegate_account.pkh) - in - let* b = Block.bake ~operation:delegation b in - let* delegator_delegate = Context.Contract.delegate (B b) delegator in - Assert.equal_pkh ~loc:__LOC__ delegator_delegate delegate_pkh - -(* Part C. - A second self-delegation should raise an [Active_delegate] error. *) - -(** Second self-delegation should fail with implicit contract with - some credit. *) -let test_double_registration () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let pkh = Account.(account.pkh) in - let impl_contract = Contract.Implicit pkh in - (* credit 1μꜩ+ check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - (B b) - bootstrap - impl_contract - Tez.one_mutez - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.one_mutez in - (* self-delegation *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some pkh) - in - let* b = Block.bake ~operation:self_delegation b in - (* second self-delegation *) - let* second_registration = Op.delegation (B b) impl_contract (Some pkh) in - let* i = Incremental.begin_construction b in - expect_delegate_already_active_error i second_registration - -(** Second self-delegation should fail with implicit contract emptied - after first self-delegation. *) -let test_double_registration_when_empty () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let pkh = Account.(account.pkh) in - let impl_contract = Contract.Implicit pkh in - (* credit 1μꜩ+ check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - (B b) - bootstrap - impl_contract - Tez.one_mutez - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.one_mutez in - (* self delegation *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some pkh) - in - let* b = Block.bake ~operation:self_delegation b in - (* empty the delegate account *) - let* empty_contract = - Op.transaction (B b) impl_contract bootstrap Tez.one_mutez - in - let* b = Block.bake ~operation:empty_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* second self-delegation *) - let* second_registration = Op.delegation (B b) impl_contract (Some pkh) in - let* i = Incremental.begin_construction b in - expect_delegate_already_active_error i second_registration - -(** Second self-delegation should fail with implicit contract emptied - then credited back after first self-delegation. *) -let test_double_registration_when_recredited () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let pkh = Account.(account.pkh) in - let impl_contract = Contract.Implicit pkh in - (* credit 1μꜩ+ check balance *) - let* create_contract = - Op.transaction - ~force_reveal:true - (B b) - bootstrap - impl_contract - Tez.one_mutez - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.one_mutez in - (* self delegation *) - let* self_delegation = - Op.delegation ~force_reveal:true (B b) impl_contract (Some pkh) - in - let* b = Block.bake ~operation:self_delegation b in - (* empty the delegate account *) - let* empty_contract = - Op.transaction - ~force_reveal:true - (B b) - impl_contract - bootstrap - Tez.one_mutez - in - let* b = Block.bake ~operation:empty_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.zero in - (* credit 1μꜩ+ check balance *) - let* create_contract = - Op.transaction (B b) bootstrap impl_contract Tez.one_mutez - in - let* b = Block.bake ~operation:create_contract b in - let* () = Assert.balance_is ~loc:__LOC__ (B b) impl_contract Tez.one_mutez in - (* second self-delegation *) - let* second_registration = Op.delegation (B b) impl_contract (Some pkh) in - let* i = Incremental.begin_construction b in - expect_delegate_already_active_error i second_registration - -(** Self-delegation on unrevealed contract. *) -let test_unregistered_and_unrevealed_self_delegate_key_init_delegation ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let {Account.pkh; _} = Account.new_account () in - let {Account.pkh = delegate_pkh; _} = Account.new_account () in - let contract = Alpha_context.Contract.Implicit pkh in - let* operation = - Op.transaction ~force_reveal:true (B b) bootstrap contract (of_int 10) - in - let* b = Block.bake ~operation b in - let* op = - Op.delegation ~fee ~force_reveal:true (B b) contract (Some delegate_pkh) - in - let* balance = Context.Contract.balance (B b) contract in - let* i = Incremental.begin_construction b in - if fee > balance then expect_too_low_balance_error i op - else - (* origination did not proceed; fee has been debited *) - let* i = - Incremental.add_operation - ~expect_apply_failure:(expect_unregistered_key delegate_pkh) - i - op - in - Assert.balance_was_debited ~loc:__LOC__ (I i) contract balance fee - -(** Self-delegation on revealed but not registered contract. *) -let test_unregistered_and_revealed_self_delegate_key_init_delegation ~fee () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let {Account.pkh; pk; _} = Account.new_account () in - let {Account.pkh = delegate_pkh; _} = Account.new_account () in - let contract = Alpha_context.Contract.Implicit pkh in - let* operation = Op.transaction (B b) bootstrap contract (of_int 10) in - let* b = Block.bake ~operation b in - let* operation = Op.revelation (B b) pk in - let* b = Block.bake ~operation b in - let* op = Op.delegation ~fee (B b) contract (Some delegate_pkh) in - let* balance = Context.Contract.balance (B b) contract in - let* i = Incremental.begin_construction b in - if fee > balance then expect_too_low_balance_error i op - else - (* origination did not proceed; fee has been debited *) - let* i = - Incremental.add_operation - ~expect_apply_failure:(expect_unregistered_key delegate_pkh) - i - op - in - Assert.balance_was_debited ~loc:__LOC__ (I i) contract balance fee - -(** Self-delegation emptying a fresh contract. *) -let test_self_delegation_emptying_contract () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let {Account.pkh; pk; _} = Account.new_account () in - let {Account.pkh = delegate_pkh; _} = Account.new_account () in - let contract = Alpha_context.Contract.Implicit pkh in - let amount = of_int 10 in - let* operation = Op.transaction (B b) bootstrap contract amount in - let* b = Block.bake ~operation b in - let* operation = Op.revelation ~fee:Tez.zero (B b) pk in - let* b = Block.bake ~operation b in - let* op = Op.delegation ~fee:amount (B b) contract (Some delegate_pkh) in - let* () = - let* is_revealed = - Context.Contract.is_manager_key_revealed (B b) contract - in - match is_revealed with - | false -> failwith "contract should exist" - | true -> return_unit - in - let* i = Incremental.begin_construction b in - (* The delegation operation should be applied and the fees - debited but it is expected to fail in the apply-part. *) - let* i = - Incremental.add_operation ~expect_apply_failure:(fun _ -> return_unit) i op - in - let* is_revealed = Context.Contract.is_manager_key_revealed (I i) contract in - match is_revealed with - | false -> return_unit - | true -> failwith "contract should have been removed" - -(** Self-delegation on revealed and registered contract. *) -let test_registered_self_delegate_key_init_delegation () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let {Account.pkh; _} = Account.new_account () in - let {Account.pkh = delegate_pkh; pk = delegate_pk; _} = - Account.new_account () - in - let contract = Alpha_context.Contract.Implicit pkh in - let delegate_contract = Alpha_context.Contract.Implicit delegate_pkh in - let* operation = - Op.transaction ~force_reveal:true (B b) bootstrap contract (of_int 10) - in - let* b = Block.bake ~operation b in - let* operation = - Op.transaction (B b) bootstrap delegate_contract (of_int 1) - in - let* b = Block.bake ~operation b in - let* operation = Op.revelation (B b) delegate_pk in - let* b = Block.bake ~operation b in - let* operation = Op.delegation (B b) delegate_contract (Some delegate_pkh) in - let* b = Block.bake ~operation b in - let* operation = - Op.delegation ~force_reveal:true (B b) contract (Some delegate_pkh) - in - let* b = Block.bake ~operation b in - let* delegate = Context.Contract.delegate (B b) contract in - let* () = Assert.equal_pkh ~loc:__LOC__ delegate delegate_pkh in - return_unit - -let test_bls_account_cannot_self_delegate () = - let open Lwt_result_syntax in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let {Account.pkh = tz4_pkh; pk = tz4_pk; _} = - Account.new_account ~algo:Bls () - in - let tz4_contract = Alpha_context.Contract.Implicit tz4_pkh in - let* operation = - Op.transaction - ~force_reveal:true - (B b) - bootstrap - tz4_contract - (of_int 200_000) - in - let* b = Block.bake ~operation b in - let* operation = Op.revelation (B b) tz4_pk in - let* b = Block.bake ~operation b in - let* operation = Op.delegation (B b) tz4_contract (Some tz4_pkh) in - let* inc = Incremental.begin_construction b in - let tz4_pkh = match tz4_pkh with Bls pkh -> pkh | _ -> assert false in - let expect_failure = function - | [ - Environment.Ecoproto_error - (Contract_delegate_storage.Forbidden_tz4_delegate pkh); - ] - when Signature.Bls.Public_key_hash.(pkh = tz4_pkh) -> - return_unit - | err -> - failwith - "Error trace:@,\ - %a does not match the \ - [Contract_delegate_storage.Forbidden_tz4_delegate] error" - Error_monad.pp_print_trace - err - in - let* (_i : Incremental.t) = - Incremental.validate_operation ~expect_failure inc operation - in - return_unit - -let tests_delegate_registration = - [ - Tztest.tztest "TEST" `Quick test_bls_account_cannot_self_delegate; - (*** unregistered delegate key: no self-delegation ***) - (* no token transfer, no self-delegation *) - Tztest.tztest - "unregistered delegate key (origination, small fee)" - `Quick - (test_unregistered_delegate_key_init_origination ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key (origination, edge case fee)" - `Quick - (test_unregistered_delegate_key_init_origination ~fee:(of_int 3_999_488)); - Tztest.tztest - "unregistered delegate key (origination, large fee)" - `Quick - (test_unregistered_delegate_key_init_origination ~fee:(of_int 10_000_000)); - Tztest.tztest - "unregistered delegate key (init with delegation, small fee)" - `Quick - (test_unregistered_delegate_key_init_delegation ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key (init with delegation, max fee)" - `Quick - (test_unregistered_delegate_key_init_delegation ~fee:max_tez); - Tztest.tztest - "unregistered delegate key (switch with delegation, small fee)" - `Quick - (test_unregistered_delegate_key_switch_delegation ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key (switch with delegation, max fee)" - `Quick - (test_unregistered_delegate_key_switch_delegation ~fee:max_tez); - (* credit/debit 1μꜩ, no self-delegation *) - Tztest.tztest - "unregistered delegate key - credit/debit 1μꜩ (origination, small fee)" - `Quick - (test_unregistered_delegate_key_init_origination_credit_debit - ~fee:Tez.one_mutez - ~amount:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit/debit 1μꜩ (origination, large fee)" - `Quick - (test_unregistered_delegate_key_init_origination_credit_debit - ~fee:max_tez - ~amount:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit/debit 1μꜩ (init with delegation, \ - small fee)" - `Quick - (test_unregistered_delegate_key_init_delegation_credit_debit - ~amount:Tez.one_mutez - ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit/debit 1μꜩ (init with delegation, \ - large fee)" - `Quick - (test_unregistered_delegate_key_init_delegation_credit_debit - ~amount:Tez.one_mutez - ~fee:max_tez); - Tztest.tztest - "unregistered delegate key - credit/debit 1μꜩ (switch with delegation, \ - small fee)" - `Quick - (test_unregistered_delegate_key_switch_delegation_credit_debit - ~amount:Tez.one_mutez - ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit/debit 1μꜩ (switch with delegation, \ - large fee)" - `Quick - (test_unregistered_delegate_key_switch_delegation_credit_debit - ~amount:Tez.one_mutez - ~fee:max_tez); - (* credit 1μꜩ, no self-delegation *) - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (origination, small fee)" - `Quick - (test_unregistered_delegate_key_init_origination_credit - ~fee:Tez.one_mutez - ~amount:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (origination, edge case fee)" - `Quick - (test_unregistered_delegate_key_init_origination_credit - ~fee:(of_int 3_999_488) - ~amount:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (origination, large fee)" - `Quick - (test_unregistered_delegate_key_init_origination_credit - ~fee:(of_int 10_000_000) - ~amount:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (init with delegation, small fee)" - `Quick - (test_unregistered_delegate_key_init_delegation_credit - ~amount:Tez.one_mutez - ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (init with delegation, large fee)" - `Quick - (test_unregistered_delegate_key_init_delegation_credit - ~amount:Tez.one_mutez - ~fee:max_tez); - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (switch with delegation, small \ - fee)" - `Quick - (test_unregistered_delegate_key_switch_delegation_credit - ~amount:Tez.one_mutez - ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered delegate key - credit 1μꜩ (switch with delegation, large \ - fee)" - `Quick - (test_unregistered_delegate_key_switch_delegation_credit - ~amount:Tez.one_mutez - ~fee:max_tez); - (* self delegation on unrevealed and unregistered contract *) - Tztest.tztest - "unregistered and unrevealed self-delegation (small fee)" - `Quick - (test_unregistered_and_unrevealed_self_delegate_key_init_delegation - ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered and unrevealed self-delegation (large fee)" - `Quick - (test_unregistered_and_unrevealed_self_delegate_key_init_delegation - ~fee:max_tez); - (* self delegation on unregistered contract *) - Tztest.tztest - "unregistered and revealed self-delegation (small fee)" - `Quick - (test_unregistered_and_revealed_self_delegate_key_init_delegation - ~fee:Tez.one_mutez); - Tztest.tztest - "unregistered and revealed self-delegation large fee)" - `Quick - (test_unregistered_and_revealed_self_delegate_key_init_delegation - ~fee:max_tez); - Tztest.tztest - "unregistered and revealed self-delegation (fee = balance)" - `Quick - test_self_delegation_emptying_contract; - (* self delegation on registered contract *) - Tztest.tztest - "registered and revealed self-delegation" - `Quick - test_registered_self_delegate_key_init_delegation; - (*** unregistered delegate key: failed self-delegation ***) - (* no token transfer, self-delegation *) - Tztest.tztest - "failed self-delegation: no transaction" - `Quick - test_failed_self_delegation_no_transaction; - (* credit 1μtz, debit 1μtz, self-delegation *) - Tztest.tztest - "failed self-delegation: credit & debit 1μꜩ" - `Quick - (test_failed_self_delegation_emptied_implicit_contract Tez.one_mutez); - (* credit 1μtz, delegate, debit 1μtz *) - Tztest.tztest - "empty delegated contract is not deleted: credit 1μꜩ, delegate & debit \ - 1μꜩ" - `Quick - (test_emptying_delegated_implicit_contract_fails Tez.one_mutez); - (*** valid registration ***) - (* valid registration: credit 1 μꜩ, self delegation *) - Tztest.tztest - "valid delegate registration: credit 1μꜩ, self delegation (init with \ - delegation)" - `Quick - (test_valid_delegate_registration_init_delegation_credit Tez.one_mutez); - Tztest.tztest - "valid delegate registration: credit 1μꜩ, self delegation (switch with \ - delegation)" - `Quick - (test_valid_delegate_registration_switch_delegation_credit Tez.one_mutez); - (* valid registration: credit 1 μꜩ, self delegation, debit 1μꜩ *) - Tztest.tztest - "valid delegate registration: credit 1μꜩ, self delegation, debit 1μꜩ \ - (init with delegation)" - `Quick - (test_valid_delegate_registration_init_delegation_credit_debit - Tez.one_mutez); - Tztest.tztest - "valid delegate registration: credit 1μꜩ, self delegation, debit 1μꜩ \ - (switch with delegation)" - `Quick - (test_valid_delegate_registration_switch_delegation_credit_debit - Tez.one_mutez); - (*** double registration ***) - Tztest.tztest "double registration" `Quick test_double_registration; - Tztest.tztest - "double registration when delegate account is emptied" - `Quick - test_double_registration_when_empty; - Tztest.tztest - "double registration when delegate account is emptied and then recredited" - `Quick - test_double_registration_when_recredited; - ] - -(******************************************************************************) -(* Main *) -(******************************************************************************) - -let tests = tests_bootstrap_contracts @ tests_delegate_registration - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("delegation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_attestation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_attestation.ml deleted file mode 100644 index 67edd5683eaebbe598d24355669b20695cc29679..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_attestation.ml +++ /dev/null @@ -1,957 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (double attestation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_double_attestation.ml - Subject: Double attestation evidence operation may happen when an - attester attested two different blocks on the same level. -*) - -open Protocol -open Alpha_context - -(****************************************************************) -(* Utility functions *) -(****************************************************************) -let autostaking_disabled = - { - Default_parameters.constants_test.adaptive_issuance with - autostaking_enable = false; - } - -let block_fork ?excluding b = - let open Lwt_result_syntax in - let* baker_1, baker_2 = Context.get_first_different_bakers ?excluding (B b) in - let* blk_a = Block.bake ~policy:(By_account baker_1) b in - let+ blk_b = Block.bake ~policy:(By_account baker_2) b in - (blk_a, blk_b) - -(* Checks that there is exactly one denunciation for the given delegate *) -let check_denunciations ~loc b delegate duplicate_op = - let open Lwt_result_syntax in - let* denunciations = Context.get_denunciations (B b) in - match denunciations with - | [(d, item)] -> - let* () = Assert.equal_pkh ~loc d delegate in - Slashing_helpers.Misbehaviour_repr.check_from_duplicate_operation - ~loc - item.misbehaviour - duplicate_op - | _ -> Test.fail ~__LOC__:loc "expected exactly one denunciation" - -let check_empty_denunciations b = - let open Lwt_result_syntax in - let* denunciations = Context.get_denunciations (B b) in - match denunciations with [] -> return_unit | _ -> assert false - -(****************************************************************) -(* Tests *) -(****************************************************************) - -let order_attestations ~correct_order op1 op2 = - let oph1 = Operation.hash op1 in - let oph2 = Operation.hash op2 in - let c = Operation_hash.compare oph1 oph2 in - if correct_order then if c < 0 then (op1, op2) else (op2, op1) - else if c < 0 then (op2, op1) - else (op1, op2) - -let double_attestation ctxt ?(correct_order = true) op1 op2 = - let e1, e2 = order_attestations ~correct_order op1 op2 in - Op.double_attestation ctxt e1 e2 - -let double_preattestation ctxt ?(correct_order = true) op1 op2 = - let e1, e2 = order_attestations ~correct_order op1 op2 in - Op.double_preattestation ctxt e1 e2 - -(** This test verifies that when a "cheater" double attests and - doesn't have enough tokens to re-freeze of full deposit, we only - freeze what we can (i.e. the remaining balance) but we check that - another denunciation will slash 50% of the initial (expected) amount - of the deposit. *) - -(** Simple scenario where two attestations are made from the same - delegate and exposed by a double_attestation operation. Also verify - that punishment is operated. *) -let test_valid_double_attestation_evidence () = - let open Lwt_result_wrap_syntax in - let constants = - { - Default_parameters.constants_test with - issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez.zero; - }; - consensus_threshold = 0; - } - in - let* genesis, _contracts = Context.init_with_constants2 constants in - let* blk_1, blk_2 = block_fork genesis in - (* from blk_1 we bake blk_a and from blk_2 we bake blk_b so that - the same delegate attests blk_a and blk_b and these 2 form - a valid double attestation evidence; - - note that we cannot have double attestation evidence - at the level of blk_1, blk_2 because both have as parent genesis - and so the attestations are identical because the blocks blk_1, blk_2 - are identical. *) - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* delegate, _ = Context.get_attester (B blk_a) in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let* bakers = Context.get_bakers (B blk_a) in - let baker = Context.get_first_different_baker delegate bakers in - let* full_balance = Context.Delegate.full_balance (B blk_a) baker in - let* () = check_empty_denunciations blk_a in - let* blk_final = Block.bake ~policy:(By_account baker) ~operation blk_a in - let* () = check_denunciations ~loc:__LOC__ blk_final delegate attestation_a in - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_a) delegate - in - let* initial_frozen_deposits = - Context.Delegate.initial_frozen_deposits (B blk_final) delegate - in - let* frozen_deposits_right_after = - Context.Delegate.current_frozen_deposits (B blk_final) delegate - in - (* Check that the initial frozen deposits have not changed *) - let* () = - Assert.equal_tez ~loc:__LOC__ initial_frozen_deposits frozen_deposits_before - in - (* Similarly for current frozen deposits because slashing is deferred to the - end of the cycle. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_right_after - frozen_deposits_before - in - (* Check that the right portion of the frozen deposits is slashed at - the end of the cycle. *) - let* blk_eoc, metadata, _ = - Block.bake_until_n_cycle_end_with_metadata - ~policy:(By_account baker) - 2 - blk_final - in - let metadata = Option.value_f ~default:(fun () -> assert false) metadata in - let autostaked = Block.autostaked delegate metadata in - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B blk_eoc) delegate - in - let frozen_deposits_after = - Tez_helpers.(frozen_deposits_after -! autostaked) - in - let one_minus_p = - Percentage.neg - constants.percentage_of_frozen_deposits_slashed_per_double_attestation - in - let {Q.num; den} = Percentage.to_q one_minus_p in - let expected_frozen_deposits_after = - Tez_helpers.(frozen_deposits_before *! Z.to_int64 num /! Z.to_int64 den) - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - expected_frozen_deposits_after - frozen_deposits_after - in - (* Check that [baker] is rewarded with: - - baking_reward_fixed_portion for baking and, - - half of the frozen_deposits for including the evidence *) - let*?@ baking_reward = - Delegate.Rewards.For_RPC.reward_from_constants - constants - ~reward_kind:Baking_reward_fixed_portion - in - let divider = - Int64.add - 2L - (Int64.of_int - constants.adaptive_issuance.global_limit_of_staking_over_baking) - in - let evidence_reward = Tez_helpers.(frozen_deposits_after /! divider) in - let expected_reward = Tez_helpers.(baking_reward +! evidence_reward) in - let* full_balance_with_rewards = - Context.Delegate.full_balance (B blk_eoc) baker - in - let real_reward = Tez_helpers.(full_balance_with_rewards -! full_balance) in - Assert.equal_tez ~loc:__LOC__ expected_reward real_reward - -(** Check that a double (pre)attestation evidence with equivalent - attestations but on different branches succeeds. *) -let test_different_branch () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* blk = Block.bake genesis in - let* attester, _slots = Context.get_attester (B blk) in - let* attestation_a = Op.raw_attestation ~delegate:attester blk in - let* attestation_b = - Op.raw_attestation ~branch:Block_hash.zero ~delegate:attester blk - in - let operation = double_attestation (B blk) attestation_a attestation_b in - let* _blk = Block.bake ~operation blk in - let* preattestation_a = Op.raw_preattestation ~delegate:attester blk in - let* preattestation_b = - Op.raw_preattestation ~branch:Block_hash.zero ~delegate:attester blk - in - let operation = - double_preattestation (B blk) preattestation_a preattestation_b - in - let* _blk = Block.bake ~operation blk in - return_unit - -(** Check that a double (pre)attestation evidence succeeds when the - operations have distinct slots (that both belong to the delegate) - and are otherwise identical. *) -let test_different_slots () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* blk = Block.bake genesis in - let* attesters = Context.get_attesters (B blk) in - let delegate, slot1, slot2 = - (* Find an attester with more than 1 slot. *) - WithExceptions.Option.get - ~loc:__LOC__ - (List.find_map - (fun (attester : RPC.Validators.t) -> - match attester.slots with - | slot1 :: slot2 :: _ -> Some (attester.delegate, slot1, slot2) - | _ -> None) - attesters) - in - let* attestation1 = Op.raw_attestation ~delegate ~slot:slot1 blk in - let* attestation2 = Op.raw_attestation ~delegate ~slot:slot2 blk in - let doubleA = double_attestation (B blk) attestation1 attestation2 in - let* (_ : Block.t) = Block.bake ~operation:doubleA blk in - let* preattestation1 = Op.raw_preattestation ~delegate ~slot:slot1 blk in - let* preattestation2 = Op.raw_preattestation ~delegate ~slot:slot2 blk in - let doubleB = double_preattestation (B blk) preattestation1 preattestation2 in - let* (_ : Block.t) = Block.bake ~operation:doubleB blk in - return_unit - -(** Say a delegate double-attests twice and say the 2 evidences are timely - included. Then the delegate can no longer bake. *) -let test_two_double_attestation_evidences_leadsto_no_bake () = - let open Lwt_result_syntax in - let issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez.zero; - } - in - let* genesis, _contracts = - Context.init3 ~consensus_threshold:0 ~issuance_weights () - in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* delegate, _ = Context.get_attester (B blk_a) in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let* bakers = Context.get_bakers (B blk_a) in - let baker = Context.get_first_different_baker delegate bakers in - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_a) delegate - in - let* blk_with_evidence1 = - Block.bake ~policy:(By_account baker) ~operation blk_a - in - let* blk_30, blk_40 = block_fork ~excluding:[delegate] blk_with_evidence1 in - let* blk_3 = Block.bake ~policy:(Excluding [delegate]) blk_30 in - let* blk_4 = Block.bake ~policy:(Excluding [delegate]) blk_40 in - let* attestation_3 = Op.raw_attestation blk_3 in - let* attestation_4 = Op.raw_attestation blk_4 in - let operation = - double_attestation (B blk_with_evidence1) attestation_3 attestation_4 - in - let* blk_with_evidence2, (_blk_metadata, operations_recpts) = - Block.bake_with_metadata ~policy:(By_account baker) ~operation blk_3 - in - Log.info "Baked block with double attestation evidence" ; - let rcpt = - List.find - (fun (rcpt : operation_receipt) -> - match rcpt with - | Operation_metadata - { - contents = - Apply_results.Single_result - (Apply_results.Double_attestation_evidence_result rslt); - } -> - rslt.forbidden_delegate = Some delegate - | _ -> false) - operations_recpts - in - let* _ = Assert.get_some ~loc:__LOC__ rcpt in - (* Check that the frozen deposits haven't changed yet. *) - let* frozen_deposits_right_after = - Context.Delegate.current_frozen_deposits (B blk_with_evidence2) delegate - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_before - frozen_deposits_right_after - in - let* is_forbidden = - Context.Delegate.is_forbidden (B blk_with_evidence2) delegate - in - let* () = Assert.is_true ~loc:__LOC__ is_forbidden in - let*! b = Block.bake ~policy:(By_account delegate) blk_with_evidence2 in - (* a delegate with 0 frozen deposits cannot bake *) - let* () = - Assert.proto_error ~loc:__LOC__ b (function - | Validate_errors.Consensus.Forbidden_delegate _ -> true - | _ -> false) - in - (* Check that all frozen deposits have been slashed at the end of the cycle. *) - let* b, metadata, _ = - Block.bake_until_n_cycle_end_with_metadata - ~policy:(By_account baker) - 2 - blk_with_evidence2 - in - let metadata = Option.value_f ~default:(fun () -> assert false) metadata in - let autostaked = Block.autostaked delegate metadata in - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B b) delegate - in - let frozen_deposits_after = - Tez_helpers.(frozen_deposits_after -! autostaked) - in - let* base_reward = Context.get_baking_reward_fixed_portion (B genesis) in - let* to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - (Block.current_cycle b) - delegate - base_reward - in - (* [delegate] baked one block. The block rewards for that block should be all - that's left *) - Assert.equal_tez - ~loc:__LOC__ - Tez_helpers.(base_reward -! to_liquid) - frozen_deposits_after - -(** Say a delegate double-attests twice in a cycle, - and say the 2 evidences are included in different (valid) cycles. - Then the delegate is forbidden and can no longer bake. *) -let test_two_double_attestation_evidences_staggered () = - let open Lwt_result_syntax in - let* genesis, _contracts = - Context.init3 - ~consensus_threshold:0 - ~adaptive_issuance:autostaking_disabled - () - in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* delegate, _ = Context.get_attester (B blk_a) in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let* bakers = Context.get_bakers (B blk_a) in - let baker = Context.get_first_different_baker delegate bakers in - let* (_full_balance : Tez.t) = - Context.Delegate.full_balance (B blk_a) baker - in - let* blk_with_evidence1 = - Block.bake ~policy:(By_account baker) ~operation blk_a - in - - let* blk_30, blk_40 = block_fork ~excluding:[delegate] blk_with_evidence1 in - let* blk_3 = Block.bake ~policy:(Excluding [delegate]) blk_30 in - let* blk_4 = Block.bake ~policy:(Excluding [delegate]) blk_40 in - let* attestation_3 = Op.raw_attestation ~delegate blk_3 in - let* attestation_4 = Op.raw_attestation ~delegate blk_4 in - let operation_evidence2 = - double_attestation (B blk_with_evidence1) attestation_3 attestation_4 - in - - let* operation = - Adaptive_issuance_helpers.stake - (B blk_with_evidence1) - (Protocol.Alpha_context.Contract.Implicit delegate) - (Tez.of_mutez_exn 1_000_000_000L) - in - let* blk_with_stake = - Block.bake ~policy:(By_account baker) ~operation blk_with_evidence1 - in - let* blk_new_cycle, _metadata, _ = - Block.bake_until_cycle_end_with_metadata - ~policy:(By_account baker) - blk_with_stake - in - let* blk_with_evidence2 = - Block.bake - ~policy:(By_account baker) - ~operation:operation_evidence2 - blk_new_cycle - in - (* Check that NOT all the frozen deposits are slashed *) - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B blk_with_evidence2) delegate - in - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_new_cycle) delegate - in - Log.info - "Tez before slashing: %a @.After slashing %a @." - Tez.pp - frozen_deposits_before - Tez.pp - frozen_deposits_after ; - let* () = Assert.not_equal_tez ~loc:__LOC__ Tez.zero frozen_deposits_after in - let* is_forbidden = - Context.Delegate.is_forbidden (B blk_with_evidence2) delegate - in - let* () = Assert.is_true ~loc:__LOC__ is_forbidden in - let*! b = Block.bake ~policy:(By_account delegate) blk_with_evidence2 in - (* A forbidden delegate cannot bake *) - Assert.proto_error ~loc:__LOC__ b (function - | Validate_errors.Consensus.Forbidden_delegate _ -> true - | _ -> false) - -(** Say a delegate double-attests twice in two consecutive cycles, - and say the 2 evidences are timely included. Then the delegate - is forbidden and can no longer bake. *) -let test_two_double_attestation_evidences_consecutive_cycles () = - let open Lwt_result_syntax in - let* genesis, _contracts = - Context.init3 - ~consensus_threshold:0 - ~adaptive_issuance:autostaking_disabled - () - in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* delegate, _ = Context.get_attester (B blk_a) in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let* bakers = Context.get_bakers (B blk_a) in - let baker = Context.get_first_different_baker delegate bakers in - let* (_full_balance : Tez.t) = - Context.Delegate.full_balance (B blk_a) baker - in - let* blk_with_evidence1 = - Block.bake ~policy:(By_account baker) ~operation blk_a - in - let* operation = - Adaptive_issuance_helpers.stake - (B blk_with_evidence1) - (Protocol.Alpha_context.Contract.Implicit delegate) - (Tez.of_mutez_exn 1_000_000_000L) - in - let* blk_with_stake = - Block.bake ~policy:(By_account baker) ~operation blk_with_evidence1 - in - let* blk_new_cycle = - Block.bake_until_cycle_end ~policy:(Excluding [delegate]) blk_with_stake - in - let* blk_30, blk_40 = block_fork ~excluding:[delegate] blk_new_cycle in - let* blk_3 = Block.bake ~policy:(Excluding [delegate]) blk_30 in - let* blk_4 = Block.bake ~policy:(Excluding [delegate]) blk_40 in - let* attestation_3 = Op.raw_attestation ~delegate blk_3 in - let* attestation_4 = Op.raw_attestation ~delegate blk_4 in - let operation = - double_attestation (B blk_new_cycle) attestation_3 attestation_4 - in - let* blk_with_evidence2 = - Block.bake ~policy:(By_account baker) ~operation blk_3 - in - (* Check that NOT all the frozen deposits are slashed *) - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B blk_with_evidence2) delegate - in - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_3) delegate - in - Log.info - "Tez before slashing: %a @.After slashing %a @." - Tez.pp - frozen_deposits_before - Tez.pp - frozen_deposits_after ; - let* () = Assert.not_equal_tez ~loc:__LOC__ Tez.zero frozen_deposits_after in - let* is_forbidden = - Context.Delegate.is_forbidden (B blk_with_evidence2) delegate - in - let* () = Assert.is_true ~loc:__LOC__ is_forbidden in - let*! b = Block.bake ~policy:(By_account delegate) blk_with_evidence2 in - (* A forbidden delegate cannot bake *) - Assert.proto_error ~loc:__LOC__ b (function - | Validate_errors.Consensus.Forbidden_delegate _ -> true - | _ -> false) - -(****************************************************************) -(* The following test scenarios are supposed to raise errors. *) -(****************************************************************) - -(** Check that an invalid double attestation operation that exposes a - valid attestation fails. *) -let test_invalid_double_attestation () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init_n ~consensus_threshold:0 10 () in - let* b = Block.bake genesis in - let* attestation = Op.raw_attestation b in - let* b = Block.bake ~operation:(Operation.pack attestation) b in - Op.double_attestation (B b) attestation attestation |> fun operation -> - let*! res = Block.bake ~operation b in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_denunciation - Misbehaviour.Double_attesting -> - true - | _ -> false) - -(** Check that an double attestation operation that is invalid due to - incorrect ordering of the attestations fails. *) -let test_invalid_double_attestation_variant () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* b = Block.bake_until_cycle_end genesis in - let* blk_1, blk_2 = block_fork b in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - double_attestation - (B genesis) - ~correct_order:false - attestation_a - attestation_b - |> fun operation -> - let*! res = Block.bake ~operation genesis in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_denunciation - Misbehaviour.Double_attesting -> - true - | _ -> false) - -(** Check that a future-cycle double attestation fails. *) -let test_too_early_double_attestation_evidence () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* b = Block.bake_until_cycle_end genesis in - let* blk_1, blk_2 = block_fork b in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - double_attestation (B genesis) attestation_a attestation_b |> fun operation -> - let*! res = Block.bake ~operation genesis in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Too_early_denunciation - {kind = Misbehaviour.Double_attesting; _} -> - true - | _ -> false) - -(** Check that after [max_slashing_period * blocks_per_cycle + 1], it is not possible - to create a double_attestation anymore. *) -let test_too_late_double_attestation_evidence () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let max_slashing_period = Constants.max_slashing_period in - let* Constants.{parametric = {blocks_per_cycle; _}; _} = - Context.get_constants (B genesis) - in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - let* blk = - Block.bake_n - ((max_slashing_period * Int32.to_int blocks_per_cycle) + 1) - blk_a - in - double_attestation (B blk) attestation_a attestation_b |> fun operation -> - let*! res = Block.bake ~operation blk in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Outdated_denunciation - {kind = Misbehaviour.Double_attesting; _} -> - true - | _ -> false) - -(** Check that an invalid double attestation evidence that exposes two - attestations made by two different attesters fails. *) -let test_different_delegates () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* genesis = Block.bake genesis in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* attester_a, attester_b = - Context.get_first_different_attesters (B blk_b) - in - let* e_a = Op.raw_attestation ~delegate:attester_a.delegate blk_a in - let* e_b = Op.raw_attestation ~delegate:attester_b.delegate blk_b in - let* (_ : Block.t) = Block.bake ~operation:(Operation.pack e_b) blk_b in - double_attestation (B blk_b) e_a e_b |> fun operation -> - let*! res = Block.bake ~operation blk_b in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Inconsistent_denunciation - {kind = Misbehaviour.Double_attesting; _} -> - true - | _ -> false) - -(** Check that a double attestation evidence that exposes a ill-formed - attestation fails. *) -let test_wrong_delegate () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* attester_a, _a_slots = Context.get_attester (B blk_a) in - let* attestation_a = Op.raw_attestation ~delegate:attester_a blk_a in - let* attester0, _slots0 = Context.get_attester_n (B blk_b) 0 in - let* attester1, _slots1 = Context.get_attester_n (B blk_b) 1 in - let attester_b = - if Signature.Public_key_hash.equal attester_a attester0 then attester1 - else attester0 - in - let* attestation_b = Op.raw_attestation ~delegate:attester_b blk_b in - double_attestation (B blk_b) attestation_a attestation_b |> fun operation -> - let*! res = Block.bake ~operation blk_b in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Inconsistent_denunciation - {kind = Misbehaviour.Double_attesting; _} -> - true - | _ -> false) - -let test_freeze_more_with_low_balance = - let open Lwt_result_syntax in - let get_attesting_slots_for_account ctxt account = - (* Get the slots of the given account in the given context. *) - let* attesters_list = Context.get_attesters ctxt in - match attesters_list with - | [d1; d2] -> - return - (if Signature.Public_key_hash.equal account d1.delegate then d1 - else if Signature.Public_key_hash.equal account d2.delegate then d2 - else assert false) - .slots - | _ -> assert false - (* there are exactly two attesters for this test. *) - in - let double_attest_and_punish b2 account1 = - let open Lwt_result_syntax in - (* Bake a block on top of [b2] that includes a double-attestation - denunciation of [account1]. *) - let* blk_d1, blk_d2 = block_fork b2 in - let* blk_a = Block.bake ~policy:(Block.By_account account1) blk_d1 in - let* blk_b = Block.bake ~policy:(Block.By_account account1) blk_d2 in - let* slots_a = get_attesting_slots_for_account (B blk_a) account1 in - let slot = - match List.hd slots_a with None -> assert false | Some s -> s - in - let* attestation_a = Op.raw_attestation ~delegate:account1 ~slot blk_a in - let* slots_b = get_attesting_slots_for_account (B blk_b) account1 in - let slot = - match List.hd slots_b with None -> assert false | Some s -> s - in - let* attestation_b = Op.raw_attestation ~delegate:account1 ~slot blk_b in - let denunciation = double_attestation (B b2) attestation_a attestation_b in - Block.bake ~policy:(Excluding [account1]) b2 ~operations:[denunciation] - in - let check_unique_attester b account2 = - let* attesters_list = Context.get_attesters (B b) in - match attesters_list with - | [{delegate; _}] when Signature.Public_key_hash.equal account2 delegate -> - return_unit - | _ -> failwith "We are supposed to only have account2 as attester." - in - fun () -> - let constants = - { - Default_parameters.constants_test with - issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez.zero; - }; - consensus_threshold = 0; - origination_size = 0; - consensus_rights_delay = 5; - percentage_of_frozen_deposits_slashed_per_double_attestation = - (* enforce that percentage is 50% in the test's params. *) - Percentage.p50; - adaptive_issuance = - { - Default_parameters.constants_test.adaptive_issuance with - autostaking_enable = false; - }; - } - in - let* genesis, (c1, c2) = Context.init_with_constants2 constants in - let account1 = Context.Contract.pkh c1 in - let account2 = Context.Contract.pkh c2 in - (* we empty the available balance of [account1]. *) - let* info1 = Context.Delegate.info (B genesis) account1 in - let* op = - Op.transaction - (B genesis) - (Contract.Implicit account1) - (Contract.Implicit account2) - Tez_helpers.(info1.full_balance -! info1.frozen_deposits) - in - let* b2 = - Block.bake ~policy:(Block.By_account account2) genesis ~operations:[op] - in - let* info2 = Context.Delegate.info (B b2) account1 in - (* after block [b2], the spendable balance of [account1] is 0tz. So, given - that we have the invariant full_balance = spendable balance + - frozen_deposits, in this particular case, full_balance = frozen_deposits - for [account1], and the frozen_deposits didn't change since genesis. *) - let* () = - Assert.equal_tez ~loc:__LOC__ info2.full_balance info2.frozen_deposits - in - let* () = - Assert.equal_tez ~loc:__LOC__ info1.frozen_deposits info2.frozen_deposits - in - let* b3 = double_attest_and_punish b2 account1 in - (* Denunciation has happened but slashing hasn't yet. - We check that frozen deposits haven't changed and still correspond to the - full balance and itself hasn't changed. *) - let* info3 = Context.Delegate.info (B b3) account1 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - info3.frozen_deposits - info3.current_frozen_deposits - in - let* () = - Assert.equal_tez ~loc:__LOC__ info3.full_balance info3.frozen_deposits - in - let* () = - Assert.equal_tez ~loc:__LOC__ info3.full_balance info2.full_balance - in - (* We now bake until end of cycle only with [account2]: - block of the new cycle are called cX below. *) - let* c1 = Block.bake_until_cycle_end ~policy:(By_account account2) b3 in - (* Denunciation has happened: we check that the full balance of [account1] - is (still) equal to its deposit. *) - let* info4 = Context.Delegate.info (B c1) account1 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - info4.full_balance - info4.current_frozen_deposits - in - (* We also check that compared to deposits at block [b2], [account1] lost - 50% of its deposits. *) - let one_minus_slash_percentage = - Percentage.neg - constants.percentage_of_frozen_deposits_slashed_per_double_attestation - in - let {Q.num; den} = Percentage.to_q one_minus_slash_percentage in - let expected_frozen_deposits_after = - Tez_helpers.(info2.frozen_deposits *! Z.to_int64 num /! Z.to_int64 den) - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - expected_frozen_deposits_after - info4.current_frozen_deposits - in - let* c2 = double_attest_and_punish c1 account1 in - (* Second denunciation has happened but slashing not yet, again. - Current frozen deposits reflect the slashing of 50% of the original - deposits. *) - let* info5 = Context.Delegate.info (B c2) account1 in - let* () = - Assert.not_equal_tez - ~loc:__LOC__ - info5.current_frozen_deposits - info5.frozen_deposits - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - info5.current_frozen_deposits - info4.current_frozen_deposits - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - info5.full_balance - info5.current_frozen_deposits - in - let*! c3 = Block.bake c2 ~policy:(By_account account1) in - (* Once the denunciations has summed up to 100%, the baker cannot bake anymore *) - let* () = - Assert.proto_error ~loc:__LOC__ c3 (function - | Validate_errors.Consensus.Forbidden_delegate _ -> true - | _ -> false) - in - let* c3 = Block.bake_until_cycle_end c2 ~policy:(By_account account2) in - (* Second slashing has happened: we check that the full balance of - [account1] reflects the slashing of 50% of the original deposit. Its - current deposits are thus 0tz. *) - let* info6 = Context.Delegate.info (B c3) account1 in - let* () = Assert.equal_tez ~loc:__LOC__ info6.full_balance Tez.zero in - let* () = - Assert.equal_tez ~loc:__LOC__ info6.current_frozen_deposits Tez.zero - in - (* We bake [2 * consensus_rights_delay - 1] additional cycles only with [account2]. - Because [account1] does not bake during this period, it loses its rights. - *) - let* d1 = - Block.bake_until_n_cycle_end - ~policy:(By_account account2) - ((2 * constants.consensus_rights_delay) - 1) - c3 - in - let* info7 = Context.Delegate.info (B d1) account1 in - (* [account1] is only deactivated after 1 + [2 * consensus_rights_delay] (see - [Delegate_activation_storage.set_active] since the last time it was - active, that is, since the first cycle. Thus the cycle at which - [account1] is deactivated is 2 + [2 * consensus_rights_delay] from genesis. *) - let* () = Assert.equal_bool ~loc:__LOC__ info7.deactivated false in - (* account1 is still active, but has no rights. *) - let* () = check_unique_attester d1 account2 in - let* e1 = Block.bake_until_cycle_end ~policy:(By_account account2) d1 in - (* account1 has no rights and furthermore is no longer active. *) - let* () = check_unique_attester e1 account2 in - let* info8 = Context.Delegate.info (B e1) account1 in - Assert.equal_bool ~loc:__LOC__ info8.deactivated true - -(** Injecting a valid double attestation multiple times raises an error. *) -let test_two_double_attestation_evidences_leads_to_duplicate_denunciation () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init2 ~consensus_threshold:0 () in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* delegate, _ = Context.get_attester (B blk_a) in - let* attestation_a = Op.raw_attestation blk_a in - let* attestation_b = Op.raw_attestation blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let operation2 = double_attestation (B genesis) attestation_b attestation_a in - let* bakers = Context.get_bakers (B blk_a) in - let baker = Context.get_first_different_baker delegate bakers in - let* (_full_balance : Tez.t) = - Context.Delegate.full_balance (B blk_a) baker - in - let*! e = - Block.bake - ~policy:(By_account baker) - ~operations:[operation; operation2] - blk_a - in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Conflicting_denunciation - {kind = Misbehaviour.Double_attesting; _} -> - true - | _ -> false) - in - let* blk_with_evidence1 = - Block.bake ~policy:(By_account baker) ~operation blk_a - in - let*! e = - Block.bake ~policy:(By_account baker) ~operation blk_with_evidence1 - in - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Already_denounced - {kind = Misbehaviour.Double_attesting; _} -> - true - | _ -> false) - -let tests = - [ - Tztest.tztest - "valid double attestation evidence" - `Quick - test_valid_double_attestation_evidence; - Tztest.tztest - "valid evidence with same (pre)attestations on different branches" - `Quick - test_different_branch; - Tztest.tztest - "valid evidence with same (pre)attestations on different slots" - `Quick - test_different_slots; - Tztest.tztest - "2 valid double attestation evidences lead to not being able to bake" - `Quick - test_two_double_attestation_evidences_leadsto_no_bake; - Tztest.tztest - "2 valid double attestation evidences for double signings in consecutive \ - cycles lead to forbidding" - `Quick - test_two_double_attestation_evidences_consecutive_cycles; - Tztest.tztest - "2 valid double attestation evidences in consecutive cycles for double \ - signing in same cycle lead to forbidding" - `Quick - test_two_double_attestation_evidences_staggered; - Tztest.tztest - "valid double attestation injected multiple time" - `Quick - test_two_double_attestation_evidences_leads_to_duplicate_denunciation; - Tztest.tztest - "invalid double attestation evidence" - `Quick - test_invalid_double_attestation; - Tztest.tztest - "another invalid double attestation evidence" - `Quick - test_invalid_double_attestation_variant; - Tztest.tztest - "too early double attestation evidence" - `Quick - test_too_early_double_attestation_evidence; - Tztest.tztest - "too late double attestation evidence" - `Quick - test_too_late_double_attestation_evidence; - Tztest.tztest "different delegates" `Quick test_different_delegates; - Tztest.tztest "wrong delegate" `Quick test_wrong_delegate; - (* This test has been deactivated following the changes of the - forbidding mechanism that now forbids delegates right after the - first denunciation, it should be fixed and reactivated - https://gitlab.com/tezos/tezos/-/issues/6904 *) - (* Tztest.tztest *) - (* "freeze available balance after slashing" *) - (* `Quick *) - (* test_freeze_more_with_low_balance; *) - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("double attestation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_baking.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_baking.ml deleted file mode 100644 index 45fb1656202faffe375449a4c95ca25faca7783e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_baking.ml +++ /dev/null @@ -1,649 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (double baking) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_double_baking.ml - Subject: A double baking evidence operation may be injected when it has - been observed that a baker baked two different blocks at the - same level and same round. -*) - -open Protocol -open Alpha_context - -(****************************************************************) -(* Utility functions *) -(****************************************************************) - -(** Bake two blocks at the same level using the same policy (i.e. same - baker). *) -let block_fork ?policy (contract_a, contract_b) b = - let open Lwt_result_syntax in - let* operation = - Op.transaction (B b) contract_a contract_b Alpha_context.Tez.one_cent - in - let* blk_a = Block.bake ?policy ~operation b in - let+ blk_b = Block.bake ?policy b in - (blk_a, blk_b) - -let order_block_hashes ~correct_order bh1 bh2 = - let hash1 = Block_header.hash bh1 in - let hash2 = Block_header.hash bh2 in - let c = Block_hash.compare hash1 hash2 in - if correct_order then if c < 0 then (bh1, bh2) else (bh2, bh1) - else if c < 0 then (bh2, bh1) - else (bh1, bh2) - -let double_baking ctxt ?(correct_order = true) bh1 bh2 = - let bh1, bh2 = order_block_hashes ~correct_order bh1 bh2 in - Op.double_baking ctxt bh1 bh2 - -(****************************************************************) -(* Tests *) -(****************************************************************) - -(** Simple scenario where two blocks are baked by a same baker and - exposed by a double baking evidence operation. *) -let test_valid_double_baking_evidence () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init2 ~consensus_threshold:0 () in - let* c = Context.get_constants (B genesis) in - let p = - c.parametric.percentage_of_frozen_deposits_slashed_per_double_baking - in - let* baker1, baker2 = Context.get_first_different_bakers (B genesis) in - let* blk_fst_cycle, _, _ = - Block.bake_until_cycle_end_with_metadata ~policy:(By_account baker2) genesis - in - let* blk_a, blk_b = - block_fork ~policy:(By_account baker1) contracts blk_fst_cycle - in - let operation = double_baking (B blk_a) blk_a.header blk_b.header in - let* blk_final = Block.bake ~policy:(By_account baker2) ~operation blk_a in - (* Check that the frozen deposits haven't been slashed, yet. *) - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_a) baker1 - in - let* frozen_deposits_right_after = - Context.Delegate.current_frozen_deposits (B blk_final) baker1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_before - frozen_deposits_right_after - in - (* Check that the initial frozen deposits has not changed *) - let* initial_frozen_deposits_before = - Context.Delegate.initial_frozen_deposits (B blk_a) baker1 - in - let* initial_frozen_deposits_after = - Context.Delegate.initial_frozen_deposits (B blk_final) baker1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - initial_frozen_deposits_before - initial_frozen_deposits_after - in - (* Check that the frozen deposits have been slashed at the end of the cycle. *) - let* blk_eoc, end_cycle_metadata, _next_cycle = - Block.bake_until_n_cycle_end_with_metadata - ~policy:(By_account baker2) - 2 - blk_final - in - let end_cycle_metadata = - Option.value_f ~default:(fun () -> assert false) end_cycle_metadata - in - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B blk_eoc) baker1 - in - let autostaked = Block.autostaked baker1 end_cycle_metadata in - let Q.{num; den} = Percentage.to_q p in - let expected_frozen_deposits_after = - Tez_helpers.( - frozen_deposits_before - -! (initial_frozen_deposits_before *! Z.to_int64 num /! Z.to_int64 den) - +! autostaked) - in - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_after - expected_frozen_deposits_after - -(* auxiliary function used in [double_attestation] *) -let order_attestations ~correct_order op1 op2 = - let oph1 = Operation.hash op1 in - let oph2 = Operation.hash op2 in - let c = Operation_hash.compare oph1 oph2 in - if correct_order then if c < 0 then (op1, op2) else (op2, op1) - else if c < 0 then (op2, op1) - else (op1, op2) - -(* auxiliary function used in - [test_valid_double_baking_followed_by_double_attesting] and - [test_valid_double_attesting_followed_by_double_baking] *) -let double_attestation ctxt ?(correct_order = true) op1 op2 = - let e1, e2 = order_attestations ~correct_order op1 op2 in - Op.double_attestation ctxt e1 e2 - -let test_valid_double_baking_followed_by_double_attesting () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init2 ~consensus_threshold:0 () in - let* baker1, baker2 = Context.get_first_different_bakers (B genesis) in - let* b = Block.bake genesis in - let* blk_a, blk_b = block_fork ~policy:(By_account baker1) contracts b in - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_a) baker1 - in - let* initial_frozen_deposits_before = - Context.Delegate.initial_frozen_deposits (B blk_a) baker1 - in - double_baking (B blk_a) blk_a.header blk_b.header |> fun operation -> - let* blk_with_db_evidence = - Block.bake ~policy:(By_account baker2) ~operation blk_a - in - let* e1, e2 = Context.get_first_different_attesters (B blk_a) in - let delegate = - if Signature.Public_key_hash.( = ) e1.delegate baker1 then e1.delegate - else e2.delegate - in - let* attestation_a = Op.raw_attestation ~delegate blk_a in - let* attestation_b = Op.raw_attestation ~delegate blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let* blk_final = - Block.bake ~policy:(By_account baker2) ~operation blk_with_db_evidence - in - let* frozen_deposits_right_after = - Context.Delegate.current_frozen_deposits (B blk_final) baker1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_before - frozen_deposits_right_after - in - let* blk_eoc, metadata, _ = - Block.bake_until_n_cycle_end_with_metadata - ~policy:(By_account baker2) - 2 - blk_final - in - let metadata = Option.value_f ~default:(fun () -> assert false) metadata in - let autostaked = Block.autostaked baker1 metadata in - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B blk_eoc) baker1 - in - let* csts = Context.get_constants (B genesis) in - let p_de = - csts.parametric.percentage_of_frozen_deposits_slashed_per_double_attestation - in - let p_db = - csts.parametric.percentage_of_frozen_deposits_slashed_per_double_baking - in - let p = Percentage.add_bounded p_de p_db in - let Q.{num; den} = Percentage.to_q p in - let expected_frozen_deposits_after = - Tez_helpers.( - frozen_deposits_before - -! (initial_frozen_deposits_before *! Z.to_int64 num /! Z.to_int64 den) - +! autostaked) - in - (* Both slashings are computed on the initial amount of frozen deposits so - the percentages are additive, not multiplicative. *) - Assert.equal_tez - ~loc:__LOC__ - expected_frozen_deposits_after - frozen_deposits_after - -(* auxiliary function used in [test_valid_double_attesting_followed_by_double_baking] *) -let block_fork_diff b = - let open Lwt_result_syntax in - let* baker_1, baker_2 = Context.get_first_different_bakers (B b) in - let* blk_a = Block.bake ~policy:(By_account baker_1) b in - let* blk_b = Block.bake ~policy:(By_account baker_2) b in - return (blk_a, blk_b) - -let test_valid_double_attesting_followed_by_double_baking () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init2 ~consensus_threshold:0 () in - let* baker1, baker2 = Context.get_first_different_bakers (B genesis) in - let* blk_1, blk_2 = block_fork_diff genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B blk_a) baker1 - in - let* initial_frozen_deposits_before = - Context.Delegate.initial_frozen_deposits (B blk_a) baker1 - in - let* e1, e2 = Context.get_first_different_attesters (B blk_a) in - let delegate = - if Signature.Public_key_hash.( = ) e1.delegate baker1 then e1.delegate - else e2.delegate - in - let* attestation_a = Op.raw_attestation ~delegate blk_a in - let* attestation_b = Op.raw_attestation ~delegate blk_b in - let operation = double_attestation (B genesis) attestation_a attestation_b in - let* blk_with_de_evidence = - Block.bake ~policy:(By_account baker2) ~operation blk_a - in - let* blk_a, blk_b = block_fork ~policy:(By_account baker1) contracts blk_1 in - double_baking (B blk_a) blk_a.header blk_b.header |> fun operation -> - let* blk_with_db_evidence = - Block.bake ~policy:(By_account baker2) ~operation blk_with_de_evidence - in - let* frozen_deposits_right_after = - Context.Delegate.current_frozen_deposits (B blk_with_db_evidence) baker1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_before - frozen_deposits_right_after - in - let* blk_eoc, end_cycle_metadata, _ = - Block.bake_until_n_cycle_end_with_metadata - ~policy:(By_account baker2) - 2 - blk_with_db_evidence - in - let end_cycle_metadata = - Option.value_f ~default:(fun () -> assert false) end_cycle_metadata - in - let autostaked = Block.autostaked baker1 end_cycle_metadata in - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B blk_eoc) baker1 - in - let* csts = Context.get_constants (B genesis) in - let p_de = - csts.parametric.percentage_of_frozen_deposits_slashed_per_double_attestation - in - let p_db = - csts.parametric.percentage_of_frozen_deposits_slashed_per_double_baking - in - let p = Percentage.add_bounded p_de p_db in - let Q.{num; den} = Percentage.to_q p in - let expected_frozen_deposits_after = - Tez_helpers.( - frozen_deposits_before - -! (initial_frozen_deposits_before *! Z.to_int64 num /! Z.to_int64 den) - +! autostaked) - in - (* Both slashings are computed on the initial amount of frozen deposits so - the percentages are additive, not multiplicative. *) - Assert.equal_tez - ~loc:__LOC__ - expected_frozen_deposits_after - frozen_deposits_after - -(** Test that the payload producer of the block containing a double - baking evidence (and not the block producer, if different) receives - the reward. *) -let test_payload_producer_gets_evidence_rewards () = - let open Lwt_result_syntax in - let* genesis, contracts = - Context.init_n ~consensus_threshold:0 ~consensus_committee_size:64 10 () - in - let* c = Context.get_constants (B genesis) in - let p = - c.parametric.percentage_of_frozen_deposits_slashed_per_double_baking - in - let* baking_reward_fixed_portion = - Context.get_baking_reward_fixed_portion (B genesis) - in - let* baker1, baker2 = Context.get_first_different_bakers (B genesis) in - let c1_c2 = - match contracts with c1 :: c2 :: _ -> (c1, c2) | _ -> assert false - in - let* b1, b2 = block_fork ~policy:(By_account baker1) c1_c2 genesis in - double_baking (B b1) b1.header b2.header |> fun db_evidence -> - let* b_with_evidence = - Block.bake ~policy:(By_account baker2) ~operation:db_evidence b1 - in - let* attesters = Context.get_attesters (B b_with_evidence) in - let* preattesters = - List.map_es - (function - | {Plugin.RPC.Validators.delegate; slots; _} -> return (delegate, slots)) - attesters - in - let* preattestations = - List.map_ep - (fun (attester, _slots) -> - Op.preattestation ~delegate:attester b_with_evidence) - preattesters - in - let* b' = - Block.bake - ~payload_round:(Some Round.zero) - ~locked_round:(Some Round.zero) - ~policy:(By_account baker1) - ~operations:(preattestations @ [db_evidence]) - b1 - in - (* The denunciation happened but no slashing nor reward happened yet. *) - let* frozen_deposits_before = - Context.Delegate.current_frozen_deposits (B b1) baker1 - in - let* initial_frozen_deposits_before = - Context.Delegate.initial_frozen_deposits (B b1) baker1 - in - let* frozen_deposits_right_after = - Context.Delegate.current_frozen_deposits (B b') baker1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_right_after - frozen_deposits_before - in - let* full_balance = Context.Delegate.full_balance (B b1) baker2 in - let expected_reward_right_after = baking_reward_fixed_portion in - let* full_balance_with_rewards_right_after = - Context.Delegate.full_balance (B b') baker2 - in - let real_reward_right_after = - Tez_helpers.(full_balance_with_rewards_right_after -! full_balance) - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - expected_reward_right_after - real_reward_right_after - in - (* Slashing and rewarding happen at the end of the cycle. *) - let* b', end_cycle_metadata, _ = - Block.bake_until_n_cycle_end_with_metadata ~policy:(By_account baker2) 2 b' - in - let end_cycle_metadata = - Option.value_f ~default:(fun () -> assert false) end_cycle_metadata - in - let autostaked = Block.autostaked baker1 end_cycle_metadata in - let* frozen_deposits_after = - Context.Delegate.current_frozen_deposits (B b') baker1 - in - let Q.{num; den} = Percentage.to_q p in - let expected_frozen_deposits_after = - Tez_helpers.( - frozen_deposits_before - -! (initial_frozen_deposits_before *! Z.to_int64 num /! Z.to_int64 den) - +! autostaked) - in - (* the frozen deposits of the double-signer [baker1] are slashed *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_after - expected_frozen_deposits_after - in - let slashed_amount = - Tez_helpers.( - frozen_deposits_before -! (frozen_deposits_after -! autostaked)) - in - (* [baker2] included the double baking evidence in [b_with_evidence] - and so it receives the reward for the evidence included in [b'] - (besides the reward for proposing the payload). *) - let divider = - Int64.add - 2L - (Int64.of_int - c.parametric.adaptive_issuance.global_limit_of_staking_over_baking) - in - let evidence_reward = Tez_helpers.(slashed_amount /! divider) in - let baked_blocks = - Int64.of_int - (Int32.to_int b'.header.shell.level - Int32.to_int b1.header.shell.level) - in - let expected_reward = - Tez_helpers.( - (baking_reward_fixed_portion *! baked_blocks) +! evidence_reward) - in - let* full_balance_with_rewards = - Context.Delegate.full_balance (B b') baker2 - in - let real_reward = Tez_helpers.(full_balance_with_rewards -! full_balance) in - let* () = Assert.equal_tez ~loc:__LOC__ expected_reward real_reward in - (* [baker1] did not produce the payload, it does not receive the reward for the - evidence *) - let* full_balance_at_b1 = Context.Delegate.full_balance (B b1) baker1 in - let* full_balance_at_b' = Context.Delegate.full_balance (B b') baker1 in - Assert.equal_tez - ~loc:__LOC__ - full_balance_at_b' - Tez_helpers.(full_balance_at_b1 -! slashed_amount) - -(****************************************************************) -(* The following test scenarios are supposed to raise errors. *) -(****************************************************************) - -(** Check that a double baking operation fails if it exposes the same two - blocks. *) -let test_same_blocks () = - let open Lwt_result_syntax in - let* b, _contracts = Context.init2 () in - let* ba = Block.bake b in - double_baking (B ba) ba.header ba.header |> fun operation -> - let*! res = Block.bake ~operation ba in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_double_baking_evidence _ -> true - | _ -> false) - -(** Check that an double baking operation that is invalid due to - incorrect ordering of the block headers fails. *) -let test_incorrect_order () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init2 ~consensus_threshold:0 () in - let* blk_a, blk_b = block_fork ~policy:(By_round 0) contracts genesis in - double_baking (B genesis) ~correct_order:false blk_a.header blk_b.header - |> fun operation -> - let*! res = Block.bake ~operation genesis in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_double_baking_evidence _ -> true - | _ -> false) - -(** Check that a double baking operation exposing two blocks with - different levels fails. *) -let test_different_levels () = - let open Lwt_result_syntax in - let* b, contracts = Context.init2 ~consensus_threshold:0 () in - let* blk_a, blk_b = block_fork ~policy:(By_round 0) contracts b in - let* blk_b_2 = Block.bake blk_b in - double_baking (B blk_a) blk_a.header blk_b_2.header |> fun operation -> - let*! res = Block.bake ~operation blk_a in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_double_baking_evidence _ -> true - | _ -> false) - -(** Check that a double baking operation exposing two yet-to-be-baked - blocks fails. *) -let test_too_early_double_baking_evidence () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init2 ~consensus_threshold:0 () in - let* b = Block.bake_until_cycle_end genesis in - let* blk_a, blk_b = block_fork ~policy:(By_round 0) contracts b in - double_baking (B b) blk_a.header blk_b.header |> fun operation -> - let*! res = Block.bake ~operation genesis in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Too_early_denunciation - {kind = Misbehaviour.Double_baking; _} -> - true - | _ -> false) - -(** Check that after [max_slashing_period * blocks_per_cycle + 1] blocks -- corresponding to 2 cycles - --, it is not possible to create a double baking operation anymore. *) -let test_too_late_double_baking_evidence () = - let open Lwt_result_syntax in - let max_slashing_period = Constants.max_slashing_period in - let* b, contracts = Context.init2 ~consensus_threshold:0 () in - let* blk_a, blk_b = block_fork ~policy:(By_round 0) contracts b in - let* blk = Block.bake_until_n_cycle_end max_slashing_period blk_a in - double_baking (B blk) blk_a.header blk_b.header |> fun operation -> - let*! res = Block.bake ~operation blk in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Outdated_denunciation - {kind = Misbehaviour.Double_baking; _} -> - true - | _ -> false) - -(** Check that before [blocks_per_cycle] blocks - -- corresponding to 2 cycles --, it is still possible to create a - double baking operation. *) -let test_just_in_time_double_baking_evidence () = - let open Lwt_result_syntax in - let* b, contracts = Context.init2 ~consensus_threshold:0 () in - let* Constants.{parametric = {blocks_per_cycle; _}; _} = - Context.get_constants (B b) - in - let* blk_a, blk_b = block_fork ~policy:(By_round 0) contracts b in - let* blk = Block.bake_until_cycle_end blk_a in - let* blk = Block.bake_n Int32.(sub blocks_per_cycle 2l |> to_int) blk in - let operation = double_baking (B blk) blk_a.header blk_b.header in - (* We include the denunciation in the previous to last block of the - cycle. *) - let* (_ : Block.t) = Block.bake ~operation blk in - return_unit - -(** Check that an invalid double baking evidence that exposes two - block baking with same level made by different bakers fails. *) -let test_different_delegates () = - let open Lwt_result_syntax in - let* b, _contracts = Context.init2 () in - let* baker_1, baker_2 = Context.get_first_different_bakers (B b) in - let* blk_a = Block.bake ~policy:(By_account baker_1) b in - let* blk_b = Block.bake ~policy:(By_account baker_2) b in - double_baking (B blk_a) blk_a.header blk_b.header |> fun operation -> - let*! e = Block.bake ~operation blk_a in - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Invalid_double_baking_evidence _ -> true - | _ -> false) - -(** This test is supposed to mimic that a block cannot be baked by one baker and - signed by another. The way it tries to show this is by using a - Double_baking_evidence operation: - - say [baker_1] bakes block blk_a so blk_a has a header with baker_1's - signature - - say we create an artificial [header_b] for a block b' with timestamp [ts] - at the same level as [blk_a], and the header is created such that it says that - b' is baked by the same [baker_1] and signed by [baker_2] - - because [header_b] says that b' is baked by [baker_0], b' has the same - round as [blk_a], which together with the fact that b' and [blk_a] have the - same level, means that double_baking is valid: we have [blk_a] and b' at the - same level and round, but with different timestamps and signed by different - bakers. - This test fails with an error stating that block is signed by the wrong - baker. *) -let test_wrong_signer () = - let open Lwt_result_syntax in - let header_custom_signer baker baker_2 timestamp b = - let* header = - Block.Forge.forge_header ~policy:(By_account baker) ~timestamp b - in - Block.Forge.set_baker baker_2 header |> Block.Forge.sign_header - in - let* b, _contracts = Context.init2 () in - let* baker_1, baker_2 = Context.get_first_different_bakers (B b) in - let* blk_a = Block.bake ~policy:(By_account baker_1) b in - let ts = Timestamp.of_seconds_string (Int64.to_string 10L) in - match ts with - | None -> assert false - | Some ts -> - let* header_b = header_custom_signer baker_1 baker_2 ts b in - double_baking (B blk_a) blk_a.header header_b |> fun operation -> - let*! e = Block.bake ~operation blk_a in - Assert.proto_error_with_info ~loc:__LOC__ e "Invalid block signature" - -(** an evidence can only be accepted once (this also means that the - same evidence doesn't lead to slashing the offender twice) *) -let test_double_evidence () = - let open Lwt_result_syntax in - let* blk, (c1, c2, _c3) = Context.init3 ~consensus_threshold:0 () in - let* blk_a, blk_b = block_fork (c1, c2) blk in - let* blk = Block.bake_until_cycle_end blk_a in - double_baking (B blk) blk_a.header blk_b.header |> fun evidence -> - let*! e = Block.bake ~operations:[evidence; evidence] blk in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Conflicting_denunciation - {kind = Misbehaviour.Double_baking; _} -> - true - | _ -> false) - in - let* blk = Block.bake ~operation:evidence blk in - double_baking (B blk) blk_b.header blk_a.header |> fun evidence -> - let*! e = Block.bake ~operation:evidence blk in - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Already_denounced _ -> true - | _ -> false) - -let tests = - [ - Tztest.tztest - "valid double baking evidence" - `Quick - test_valid_double_baking_evidence; - Tztest.tztest - "payload producer receives the rewards for double baking evidence" - `Quick - test_payload_producer_gets_evidence_rewards; - (* Should fail*) - Tztest.tztest "same blocks" `Quick test_same_blocks; - Tztest.tztest "incorrect order" `Quick test_incorrect_order; - Tztest.tztest "different levels" `Quick test_different_levels; - Tztest.tztest - "too early double baking evidence" - `Quick - test_too_early_double_baking_evidence; - Tztest.tztest - "too late double baking evidence" - `Quick - test_too_late_double_baking_evidence; - Tztest.tztest - "just in time double baking evidence" - `Quick - test_just_in_time_double_baking_evidence; - Tztest.tztest "different delegates" `Quick test_different_delegates; - Tztest.tztest "wrong delegate" `Quick test_wrong_signer; - Tztest.tztest - "reject double injection of an evidence" - `Quick - test_double_evidence; - Tztest.tztest - "double baking followed by double attesting" - `Quick - test_valid_double_baking_followed_by_double_attesting; - Tztest.tztest - "double attesting followed by double baking" - `Quick - test_valid_double_attesting_followed_by_double_baking; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("double baking", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_preattestation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_preattestation.ml deleted file mode 100644 index 75b1c947f717adb86aee6959ee2726f106aa643e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_double_preattestation.ml +++ /dev/null @@ -1,472 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (double preattestation) in Full_construction & Application modes - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_double_preattestation.ml - Subject: These tests target different cases for double preattestation *) - -open Protocol -open Alpha_context - -module type MODE = sig - val name : string - - val baking_mode : Block.baking_mode -end - -module BakeWithMode (Mode : MODE) : sig - val tests : unit Alcotest_lwt.test_case trace -end = struct - let name = Mode.name - - let bake = Block.bake ~baking_mode:Mode.baking_mode - - let bake_n = Block.bake_n ~baking_mode:Mode.baking_mode - - let bake_until_n_cycle_end = - Block.bake_until_n_cycle_end ~baking_mode:Mode.baking_mode - - (****************************************************************) - (* Utility functions *) - (****************************************************************) - - (** Helper function for illformed denunciations construction *) - - let pick_attesters ctxt = - let open Lwt_result_syntax in - let module V = Plugin.RPC.Validators in - let* validators_list = Context.get_attesters ctxt in - match validators_list with - | a :: b :: _ -> - return ((a.V.delegate, a.V.slots), (b.V.delegate, b.V.slots)) - | _ -> assert false - - let invalid_denunciation loc res = - Assert.proto_error ~loc res (function - | Validate_errors.Anonymous.Invalid_denunciation - Misbehaviour.Double_preattesting -> - true - | _ -> false) - - let malformed_double_preattestation_denunciation - ?(include_attestation = false) ?(block_round = 0) - ?(mk_evidence = fun ctxt p1 p2 -> Op.double_preattestation ctxt p1 p2) - ~loc () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init_n ~consensus_threshold:0 10 () in - let* b1 = bake genesis in - let* b2_A = bake ~policy:(By_round 0) b1 in - let* e = Op.attestation b1 in - let operations = if include_attestation then [e] else [] in - let* b2_B = bake ~policy:(By_round block_round) ~operations b1 in - let* op1 = Op.raw_preattestation b2_A in - let* op2 = Op.raw_preattestation b2_B in - let op = mk_evidence (B genesis) op1 op2 in - let*! res = bake b1 ~operations:[op] in - invalid_denunciation loc res - - let max_slashing_period () = - let open Lwt_result_syntax in - let* genesis, _contract = Context.init1 ~consensus_threshold:0 () in - let max_slashing_period = Constants.max_slashing_period in - let* {parametric = {blocks_per_cycle; _}; _} = - Context.get_constants (B genesis) - in - return (max_slashing_period * Int32.to_int blocks_per_cycle) - - let already_denounced loc res = - Assert.proto_error ~loc res (function - | Validate_errors.Anonymous.Already_denounced - {kind = Misbehaviour.Double_preattesting; _} -> - true - | _ -> false) - - let inconsistent_denunciation loc res = - Assert.proto_error ~loc res (function - | Validate_errors.Anonymous.Inconsistent_denunciation - {kind = Misbehaviour.Double_preattesting; _} -> - true - | _ -> false) - - let outdated_denunciation loc res = - Assert.proto_error ~loc res (function - | Validate_errors.Anonymous.Outdated_denunciation - {kind = Misbehaviour.Double_preattesting; _} -> - true - | _ -> false) - - let unexpected_failure loc res = - (* no error is expected *) - Assert.proto_error ~loc res (function _ -> false) - - let unexpected_success loc _ _ _ _ _ = - Alcotest.fail (loc ^ ": Test should not succeed") - - let expected_success _loc baker pred bbad d1 d2 = - let open Lwt_result_syntax in - (* same preattesters in case denunciation succeeds*) - let* () = Assert.equal_pkh ~loc:__LOC__ d1 d2 in - let* constants = Context.get_constants (B pred) in - let p = - constants.parametric - .percentage_of_frozen_deposits_slashed_per_double_attestation - in - (* let's bake the block on top of pred without denunciating d1 *) - let* bgood = bake ~policy:(By_account baker) pred in - (* Slashing hasn't happened yet. *) - let* bal_good = Context.Delegate.full_balance (B bgood) d1 in - let* bal_bad = Context.Delegate.full_balance (B bbad) d1 in - let* () = Assert.equal_tez ~loc:__LOC__ bal_good bal_bad in - (* Slashing happens at the end of the cycle. *) - let* bgood = bake_until_n_cycle_end ~policy:(By_account baker) 2 bgood in - let* bbad = bake_until_n_cycle_end ~policy:(By_account baker) 2 bbad in - (* Checking what the attester lost *) - let* frozen_deposit = - Context.Delegate.current_frozen_deposits (B pred) d1 - in - let* bal_good = Context.Delegate.full_balance (B bgood) d1 in - let* bal_bad = Context.Delegate.full_balance (B bbad) d1 in - (* the diff of the two balances in normal and in denunciation cases *) - let diff_end_bal = Tez_helpers.(bal_good -! bal_bad) in - (* amount lost due to denunciation *) - let Q.{num; den} = Percentage.to_q p in - let lost_deposit = - Tez_helpers.(frozen_deposit *! Z.to_int64 num /! Z.to_int64 den) - in - (* some of the lost deposits (depending on staking constants) will be earned by the baker *) - let divider = - Int64.add - 2L - (Int64.of_int - constants.parametric.adaptive_issuance - .global_limit_of_staking_over_baking) - in - let denun_reward = Tez_helpers.(lost_deposit /! divider) in - (* if the baker is the attester, he'll only loose half of the deposits *) - let expected_attester_loss = - if Signature.Public_key_hash.equal baker d1 then - Tez_helpers.(lost_deposit -! denun_reward) - else lost_deposit - in - let* () = - Assert.equal_tez ~loc:__LOC__ expected_attester_loss diff_end_bal - in - (* Checking what the baker earned (or lost) *) - let* bal_good = Context.Delegate.full_balance (B bgood) baker in - let* bal_bad = Context.Delegate.full_balance (B bbad) baker in - (* if baker = attester, the baker's balance in the good case is better, - because half of his deposits are burnt in the bad (double-preattestation) - situation. In case baker <> attester, bal_bad of the baker gets half of - burnt deposit of d1, so it's higher - *) - let high, low = - if Signature.Public_key_hash.equal baker d1 then (bal_good, bal_bad) - else (bal_bad, bal_good) - in - let diff_baker = Tez_helpers.(high -! low) in - (* the baker has either earnt or lost (in case baker = d1) half of burnt - attestation deposits *) - let* () = Assert.equal_tez ~loc:__LOC__ denun_reward diff_baker in - return_unit - - let order_preattestations ~correct_order op1 op2 = - let oph1 = Operation.hash op1 in - let oph2 = Operation.hash op2 in - let c = Operation_hash.compare oph1 oph2 in - if correct_order then if c < 0 then (op1, op2) else (op2, op1) - else if c < 0 then (op2, op1) - else (op1, op2) - - let adaptive_issuance = - { - Default_parameters.constants_test.adaptive_issuance with - autostaking_enable = false; - } - - let issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez.zero; - } - - (** Helper function for denunciations inclusion *) - let generic_double_preattestation_denunciation ~nb_blocks_before_double - ~nb_blocks_before_denunciation - ?(test_expected_ok = - fun _loc _baker _pred _bbad _d1 _d2 -> Lwt_result_syntax.return_unit) - ?(test_expected_ko = fun _loc _res -> Lwt_result_syntax.return_unit) - ?(pick_attesters = - let open Lwt_result_syntax in - fun ctxt -> - let* a, _b = pick_attesters ctxt in - return (a, a)) ~loc () = - let open Lwt_result_syntax in - let* genesis, contracts = - Context.init_n - ~issuance_weights - ~adaptive_issuance - ~consensus_threshold:0 - ~consensus_committee_size:64 - 10 - () - in - let addr = - match List.hd contracts with None -> assert false | Some e -> e - in - (* bake `nb_blocks_before_double blocks` before double preattesting *) - let* blk = bake_n nb_blocks_before_double genesis in - (* producing two differents blocks and two preattestations op1 and op2 *) - let* trans = Op.transaction (B genesis) addr addr Tez.one_mutez in - let* head_A = bake ~policy:(By_round 0) blk in - let* head_B = bake ~policy:(By_round 0) blk ~operations:[trans] in - let* (d1, _slots1), (d2, _slots2) = pick_attesters (B head_A) in - (* default: d1 = d2 *) - let* op1 = Op.raw_preattestation ~delegate:d1 head_A in - let* op2 = Op.raw_preattestation ~delegate:d2 head_B in - let op1, op2 = order_preattestations ~correct_order:true op1 op2 in - (* bake `nb_blocks_before_denunciation` before double preattestation denunciation *) - let* blk = bake_n nb_blocks_before_denunciation blk in - let op : Operation.packed = Op.double_preattestation (B blk) op1 op2 in - let* baker = Context.get_baker (B blk) ~round:Round.zero in - let*! head_opt = bake ~policy:(By_account baker) blk ~operations:[op] in - match head_opt with - | Ok new_head -> - let* () = test_expected_ok loc baker blk new_head d1 d2 in - let op : Operation.packed = - Op.double_preattestation (B new_head) op2 op1 - in - let* () = - let*! block = - bake ~policy:(Excluding [d1; d2]) new_head ~operations:[op] - in - invalid_denunciation loc block - in - let op : Operation.packed = - Op.double_preattestation (B new_head) op1 op2 - in - let*! block = - bake ~policy:(Excluding [d1; d2]) new_head ~operations:[op] - in - already_denounced loc block - | Error _ as res -> test_expected_ko loc res - - (****************************************************************) - (* Tests *) - (****************************************************************) - - (** Preattesting two blocks that are structurally equal is not punished *) - let malformed_double_preattestation_denunciation_same_payload_hash_1 () = - malformed_double_preattestation_denunciation ~loc:__LOC__ () - - (** Preattesting two blocks that are structurally equal up to the attestations - they include is not punished *) - let malformed_double_preattestation_denunciation_same_payload_hash_2 () = - malformed_double_preattestation_denunciation - (* including an attestation in one of the blocks doesn't change its - payload hash *) - ~include_attestation:true - ~loc:__LOC__ - () - - (** Denunciation evidence cannot have the same operations *) - let malformed_double_preattestation_denunciation_same_preattestation () = - malformed_double_preattestation_denunciation - (* exactly the same preattestation operation => illformed *) - ~mk_evidence:(fun ctxt p1 _p2 -> Op.double_preattestation ctxt p1 p1) - ~loc:__LOC__ - () - - (** Preattesting two blocks with different rounds is not punished *) - let malformed_double_preattestation_denunciation_different_rounds () = - malformed_double_preattestation_denunciation ~loc:__LOC__ ~block_round:1 () - - (** Preattesting two blocks by two different validators is not punished *) - let malformed_double_preattestation_denunciation_different_validators () = - generic_double_preattestation_denunciation - ~nb_blocks_before_double:0 - ~nb_blocks_before_denunciation:2 - ~test_expected_ok:unexpected_success - ~test_expected_ko:inconsistent_denunciation - ~pick_attesters (* pick different attesters *) - ~loc:__LOC__ - () - - (** Attempt a denunciation of a double-pre in the first block after genesis *) - let double_preattestation_just_after_upgrade () = - generic_double_preattestation_denunciation - ~nb_blocks_before_double:0 - ~nb_blocks_before_denunciation:1 - ~test_expected_ok:expected_success - ~test_expected_ko:unexpected_failure - ~loc:__LOC__ - () - - (** Denunciation of double-pre at level L is injected at level L' = max_slashing_period. - The denunciation is outdated. *) - let double_preattestation_denunciation_during_slashing_period () = - let open Lwt_result_syntax in - let* max_slashing_period = max_slashing_period () in - generic_double_preattestation_denunciation - ~nb_blocks_before_double:0 - ~nb_blocks_before_denunciation:(max_slashing_period / 2) - ~test_expected_ok:expected_success - ~test_expected_ko:unexpected_failure - ~loc:__LOC__ - () - - (** Denunciation of double-pre at level L is injected 1 block after unfreeze - delay. Too late: denunciation is outdated. *) - let double_preattestation_denunciation_after_slashing_period () = - let open Lwt_result_syntax in - let* max_slashing_period = max_slashing_period () in - generic_double_preattestation_denunciation - ~nb_blocks_before_double:0 - ~nb_blocks_before_denunciation:(max_slashing_period + 1) - ~test_expected_ok:unexpected_success - ~test_expected_ko:outdated_denunciation - ~loc:__LOC__ - () - - let double_preattestation ctxt ?(correct_order = true) op1 op2 = - let e1, e2 = order_preattestations ~correct_order op1 op2 in - Op.double_preattestation ctxt e1 e2 - - let block_fork b = - let open Lwt_result_syntax in - let* baker_1, baker_2 = Context.get_first_different_bakers (B b) in - let* blk_a = Block.bake ~policy:(By_account baker_1) b in - let+ blk_b = Block.bake ~policy:(By_account baker_2) b in - (blk_a, blk_b) - - (** Injecting a valid double preattestation multiple time raises an error. *) - let test_two_double_preattestation_evidences_leads_to_duplicate_denunciation - () = - let open Lwt_result_syntax in - let* genesis, _contracts = - Context.init2 ~adaptive_issuance ~consensus_threshold:0 () - in - let* blk_1, blk_2 = block_fork genesis in - let* blk_a = Block.bake blk_1 in - let* blk_b = Block.bake blk_2 in - let* delegate, _ = Context.get_attester (B blk_a) in - let* preattestation_a = Op.raw_preattestation blk_a in - let* preattestation_b = Op.raw_preattestation blk_b in - let operation = - double_preattestation (B genesis) preattestation_a preattestation_b - in - let operation2 = - double_preattestation (B genesis) preattestation_b preattestation_a - in - let* bakers = Context.get_bakers (B blk_a) in - let baker = Context.get_first_different_baker delegate bakers in - let* (_full_balance : Tez.t) = - Context.Delegate.full_balance (B blk_a) baker - in - let*! e = - Block.bake - ~policy:(By_account baker) - ~operations:[operation; operation2] - blk_a - in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Conflicting_denunciation - {kind = Misbehaviour.Double_preattesting; _} -> - true - | _ -> false) - in - let* blk_with_evidence1 = - Block.bake ~policy:(By_account baker) ~operation blk_a - in - let*! e = - Block.bake ~policy:(By_account baker) ~operation blk_with_evidence1 - in - already_denounced __LOC__ e - - let my_tztest title test = - Tztest.tztest (Format.sprintf "%s: %s" name title) test - - let tests = - [ - (* illformed denunciations *) - my_tztest - "ko: malformed_double_preattestation_denunciation_same_payload_hash_1" - `Quick - malformed_double_preattestation_denunciation_same_payload_hash_1; - my_tztest - "ko: malformed_double_preattestation_denunciation_same_payload_hash_2" - `Quick - malformed_double_preattestation_denunciation_same_payload_hash_2; - my_tztest - "ko: malformed_double_preattestation_denunciation_different_rounds" - `Quick - malformed_double_preattestation_denunciation_different_rounds; - my_tztest - "ko: malformed_double_preattestation_denunciation_same_preattestation" - `Quick - malformed_double_preattestation_denunciation_same_preattestation; - my_tztest - "ko: malformed_double_preattestation_denunciation_different_validators" - `Quick - malformed_double_preattestation_denunciation_different_validators; - my_tztest - "double_preattestation_just_after_upgrade" - `Quick - double_preattestation_just_after_upgrade; - (* tests for unfreeze *) - my_tztest - "double_preattestation_denunciation_during_slashing_period" - `Quick - double_preattestation_denunciation_during_slashing_period; - my_tztest - "double_preattestation_denunciation_after_slashing_period" - `Quick - double_preattestation_denunciation_after_slashing_period; - my_tztest - "valid double preattestation injected multiple times" - `Quick - test_two_double_preattestation_evidences_leads_to_duplicate_denunciation; - ] -end - -let tests = - let module AppMode = BakeWithMode (struct - let name = "AppMode" - - let baking_mode = Block.Application - end) in - let module ConstrMode = BakeWithMode (struct - let name = "ConstrMode" - - let baking_mode = Block.Baking - end) in - AppMode.tests @ ConstrMode.tests - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("double preattestation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_frozen_deposits.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_frozen_deposits.ml deleted file mode 100644 index 5c576ea38f5905407ddd57c276d7d19d46472b68..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_frozen_deposits.ml +++ /dev/null @@ -1,1075 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (frozen_deposits) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_frozen_deposits.ml - Subject: consistency of frozen deposits and the [set_deposits_limit] operation - *) - -open Protocol -open Alpha_context -open Tez_helpers - -let constants = - { - Default_parameters.constants_test with - issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez.zero; - }; - consensus_threshold = 0; - origination_size = 0; - } - -let get_first_2_accounts_contracts (a1, a2) = - ((a1, Context.Contract.pkh a1), (a2, Context.Contract.pkh a2)) - -(* Terminology: - - - staking balance = full balance + delegated stake; obtained with - Delegate.staking_balance - - - active stake = the amount of tez with which a delegate participates in - consensus; it must be greater than [minimal_stake] and less or equal the staking - balance; it is computed in [Delegate_sampler.select_distribution_for_cycle] - - - frozen deposits = represents frozen_deposits_percentage of the maximum stake during - consensus_rights_delay + max_slashing_period cycles; obtained with - Delegate.current_frozen_deposits - - - spendable balance = full balance - frozen deposits; obtained with Contract.balance - - - full balance = spendable balance + frozen deposits; obtained with Delegate.full_balance -*) -let test_invariants () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (contract2, _account2) = - get_first_2_accounts_contracts contracts - in - let* staking_balance = - Context.Delegate.staking_balance (B genesis) account1 - in - let* full_balance = Context.Delegate.full_balance (B genesis) account1 in - let* spendable_balance = Context.Contract.balance (B genesis) contract1 in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - (* before delegation *) - let* () = Assert.equal_tez ~loc:__LOC__ full_balance staking_balance in - let* () = - Assert.equal_tez - ~loc:__LOC__ - full_balance - Tez_helpers.(spendable_balance +! frozen_deposits) - in - (* to see how delegation plays a role, let's delegate to account1; - N.B. account2 represents a delegate so it cannot delegate to account1; this is - why we go through new_account as an intermediate *) - let* spendable_balance2 = Context.Contract.balance (B genesis) contract2 in - let new_account = (Account.new_account ()).pkh in - let new_contract = Contract.Implicit new_account in - (* we first put some money in new_account *) - let* transfer = - Op.transaction - ~force_reveal:true - (B genesis) - contract2 - new_contract - spendable_balance2 - in - let* b = Block.bake ~operation:transfer genesis in - let* new_account_balance = Context.Contract.balance (B b) new_contract in - let* () = - Assert.equal_tez ~loc:__LOC__ new_account_balance spendable_balance2 - in - let* delegation = - Op.delegation ~force_reveal:true (B b) new_contract (Some account1) - in - let* b1 = Block.bake ~operation:delegation b in - let* b2 = Block.bake_until_cycle_end b1 in - let* new_staking_balance = Context.Delegate.staking_balance (B b2) account1 in - let* new_full_balance = Context.Delegate.full_balance (B b2) account1 in - let* new_spendable_balance = Context.Contract.balance (B b2) contract1 in - let* new_frozen_deposits = - Context.Delegate.current_frozen_deposits (B b2) account1 - in - (* after delegation, we see the delegated stake reflected in the new staking - balance of account1 *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - Tez_helpers.(new_full_balance +! new_account_balance) - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_full_balance - Tez_helpers.(new_spendable_balance +! new_frozen_deposits) - in - let expected_new_frozen_deposits = - Tez_helpers.( - (* in this particular example, if we follow the calculation of the active - stake, it is precisely the new_staking_balance *) - new_staking_balance - /! Int64.of_int (constants.limit_of_delegation_over_baking + 1)) - in - Assert.equal_tez ~loc:__LOC__ new_frozen_deposits expected_new_frozen_deposits - -let adjust_staking_towards_limit ~limit ~block ~account ~contract = - let open Lwt_result_syntax in - (* Since we do not have the set_deposit_limit operation anymore (nor - do we have automatic staking) this function adjusts the amount of - staking towards the given [limit] for the given [account], - [contract]. It takes a block and returns a new block if a stake - or unstake operation is necessary, or the same block if the limit - was already reached. *) - let* fd = Context.Delegate.current_frozen_deposits (B block) account in - if limit = fd then return block - else - match Tez.sub_opt limit fd with - | Some diff -> - let* adjustment_operation = - Adaptive_issuance_helpers.stake (B block) contract diff - in - Block.bake ~operation:adjustment_operation block - | None -> ( - match Tez.sub_opt fd limit with - | None -> return block - | Some diff -> - let* adjustment_operation = - Adaptive_issuance_helpers.unstake (B block) contract diff - in - Block.bake ~operation:adjustment_operation block) - -let test_limit_with_overdelegation () = - let open Lwt_result_syntax in - let constants = - { - constants with - adaptive_issuance = - { - Default_parameters.constants_test.adaptive_issuance with - autostaking_enable = false; - }; - limit_of_delegation_over_baking = 9; - } - in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (contract2, account2) = - get_first_2_accounts_contracts contracts - in - (* - [account1] and [account2] will give 80% of their balance to - [new_account] - - [new_account] will overdelegate to [account1] but [account1] will apply - a frozen deposits target and limit to 15% of its stake *) - let* initial_staking_balance = - Context.Delegate.staking_balance (B genesis) account1 - in - let* initial_staking_balance' = - Context.Delegate.staking_balance (B genesis) account2 - in - let amount = Tez_helpers.(initial_staking_balance *! 8L /! 10L) in - let amount' = Tez_helpers.(initial_staking_balance' *! 8L /! 10L) in - let limit = Tez_helpers.(initial_staking_balance *! 15L /! 100L) in - let new_account = (Account.new_account ()).pkh in - let new_contract = Contract.Implicit new_account in - let* transfer1 = - Op.transaction ~force_reveal:true (B genesis) contract1 new_contract amount - in - let* transfer2 = - Op.transaction ~force_reveal:true (B genesis) contract2 new_contract amount' - in - let* b = Block.bake ~operations:[transfer1; transfer2] genesis in - let expected_new_staking_balance = - Tez_helpers.(initial_staking_balance -! amount) - in - let* new_staking_balance = Context.Delegate.staking_balance (B b) account1 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - expected_new_staking_balance - in - let expected_new_staking_balance' = - Tez_helpers.(initial_staking_balance' -! amount') - in - let* new_staking_balance' = Context.Delegate.staking_balance (B b) account2 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance' - expected_new_staking_balance' - in - let* delegation = - Op.delegation ~force_reveal:true (B b) new_contract (Some account1) - in - let* b = Block.bake ~operation:delegation b in - (* Overdelegation means that now there isn't enough staking, and the - baker who wants to have its stake close to its defined limit - should adjust it. *) - let* b = - adjust_staking_towards_limit - ~block:b - ~account:account1 - ~contract:contract1 - ~limit - in - let expected_new_frozen_deposits = limit in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez ~loc:__LOC__ frozen_deposits expected_new_frozen_deposits - in - let cycles_to_bake = - 2 * (constants.consensus_rights_delay + Constants.max_slashing_period) - in - let rec loop b n = - if n = 0 then return b - else - let* b = Block.bake_until_cycle_end ~policy:(By_account account1) b in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits - expected_new_frozen_deposits - in - loop b (pred n) - in - (* Check that frozen deposits do not change for a sufficient period of - time *) - let* (_ : Block.t) = loop b cycles_to_bake in - return_unit - -let test_may_not_bake_again_after_full_deposit_slash () = - let open Lwt_result_syntax in - let order_ops op1 op2 = - let oph1 = Operation.hash op1 in - let oph2 = Operation.hash op2 in - let c = Operation_hash.compare oph1 oph2 in - if c < 0 then (op1, op2) else (op2, op1) - in - let* genesis, contracts = Context.init_with_constants2 constants in - let (good_contract, good_account), (slashed_contract, slashed_account) = - get_first_2_accounts_contracts contracts - in - let* operation = - Op.transaction - (B genesis) - good_contract - slashed_contract - Alpha_context.Tez.one_cent - in - let* blk_a = - Block.bake ~policy:(By_account slashed_account) ~operation genesis - in - let* blk_b = Block.bake ~policy:(By_account slashed_account) genesis in - let* preattestation1 = - Op.raw_preattestation ~delegate:slashed_account blk_a - in - let* preattestation2 = - Op.raw_preattestation ~delegate:slashed_account blk_b - in - let preattestation1, preattestation2 = - order_ops preattestation1 preattestation2 - in - let double_preattestation_op = - Op.double_preattestation (B blk_a) preattestation1 preattestation2 - in - let* b = - Block.bake - ~policy:(By_account good_account) - ~operation:double_preattestation_op - blk_a - in - let* fd_before = - Context.Delegate.current_frozen_deposits (B b) slashed_account - in - let* operation = - Op.transaction - (B b) - good_contract - slashed_contract - Alpha_context.Tez.one_cent - in - let* blk_a = Block.bake ~policy:(By_account slashed_account) ~operation b in - let* blk_b = Block.bake ~policy:(By_account slashed_account) b in - let* attestation1 = Op.raw_attestation ~delegate:slashed_account blk_a in - let* attestation2 = Op.raw_attestation ~delegate:slashed_account blk_b in - let attestation1, attestation2 = order_ops attestation1 attestation2 in - let double_attestation_op = - Op.double_attestation (B blk_a) attestation1 attestation2 - in - let* b = - Block.bake - ~policy:(By_account good_account) - ~operation:double_attestation_op - b - in - (* The [slashed_account]'s deposits haven't changed yet... *) - let* fd = Context.Delegate.current_frozen_deposits (B b) slashed_account in - let* () = Assert.equal_tez ~loc:__LOC__ fd fd_before in - (* ...though we are immediately not allowed to bake with [slashed_account] *) - let*! res = Block.bake ~policy:(By_account slashed_account) b in - let* () = - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Consensus.Forbidden_delegate _ -> true - | _ -> false) - in - let* b, metadata, _ = - Block.bake_until_cycle_end_with_metadata ~policy:(By_account good_account) b - in - (* Assert that the [slashed_account]'s deposits are increased by autostaking. *) - let metadata = Option.value_f ~default:(fun () -> assert false) metadata in - let autostaked = Block.autostaked slashed_account metadata in - let* fd = Context.Delegate.current_frozen_deposits (B b) slashed_account in - let* () = Assert.equal_tez ~loc:__LOC__ fd autostaked in - (* Though [slashed_account] is still forbidden for two more cycles. *) - let*! res = Block.bake ~policy:(By_account slashed_account) b in - let* () = - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Consensus.Forbidden_delegate _ -> true - | _ -> false) - in - let* b = Block.bake_until_n_cycle_end 2 ~policy:(By_account good_account) b in - (* Check that [slashed_account] can bake since it's a new cycle and - autostake increased the frozen deposits enough to bake. *) - let* (_ : Block.t) = Block.bake ~policy:(By_account slashed_account) b in - return_unit - -let test_set_limit balance_percentage () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (_contract2, account2) = - get_first_2_accounts_contracts contracts - in - let* () = - let* res = Context.Delegate.frozen_deposits_limit (B genesis) account1 in - match res with - | Some _ -> Alcotest.fail "unexpected deposits limit" - | None -> return_unit - in - (* Test deposit consistency before and after first cycle *) - let* full_balance = Context.Delegate.full_balance (B genesis) account1 in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - let expected_deposits = - full_balance /! Int64.of_int (constants.limit_of_delegation_over_baking + 1) - in - let* () = Assert.equal_tez ~loc:__LOC__ frozen_deposits expected_deposits in - (* Bake until end of first cycle *) - let* b = Block.bake_until_cycle_end genesis in - let* full_balance = Context.Delegate.full_balance (B genesis) account1 in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - let expected_deposits = - full_balance /! Int64.of_int (constants.limit_of_delegation_over_baking + 1) - in - let* () = Assert.equal_tez ~loc:__LOC__ frozen_deposits expected_deposits in - (* set deposits limit to balance_percentage out of the balance *) - let limit = - Tez_helpers.(full_balance *! Int64.of_int balance_percentage /! 100L) - in - let* operation = Op.set_deposits_limit (B genesis) contract1 (Some limit) in - let* b = Block.bake ~policy:(By_account account2) ~operation b in - let* () = - let* frozen_deposits_limit = - Context.Delegate.frozen_deposits_limit (B b) account1 - in - match frozen_deposits_limit with - | Some set_limit -> Assert.equal_tez ~loc:__LOC__ set_limit limit - | None -> Alcotest.fail "unexpected absence of deposits limit" - in - (* the frozen deposits limit affects the active stake at cycle end. *) - let* b = Block.bake_until_cycle_end ~policy:(By_account account2) b in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - Assert.equal_tez ~loc:__LOC__ frozen_deposits limit - -let test_unset_limit () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (_contract2, account2) = - get_first_2_accounts_contracts contracts - in - (* set the limit to 0 *) - let* operation = - Op.set_deposits_limit (B genesis) contract1 (Some Tez.zero) - in - let* b = Block.bake ~policy:(By_account account2) ~operation genesis in - let* () = - let* frozen_deposits_limit = - Context.Delegate.frozen_deposits_limit (B b) account1 - in - match frozen_deposits_limit with - | Some set_limit -> Assert.equal_tez ~loc:__LOC__ set_limit Tez.zero - | None -> Alcotest.fail "unexpected absence of deposits limit" - in - let* b = Block.bake_until_cycle_end ~policy:(By_account account2) b in - let* frozen_deposits_at_b = - Context.Delegate.current_frozen_deposits (B b) account1 - in - (* after cycle end, the 0 limit is reflected in the deposit which becomes 0 - itself *) - let* () = Assert.equal_tez ~loc:__LOC__ frozen_deposits_at_b Tez.zero in - (* unset the 0 limit *) - let* operation = Op.set_deposits_limit (B b) contract1 None in - let* b = Block.bake ~policy:(By_account account2) ~operation b in - let* () = - let* frozen_deposits_limit = - Context.Delegate.frozen_deposits_limit (B b) account1 - in - match frozen_deposits_limit with - | Some _ -> Alcotest.fail "unexpected deposits limit" - | None -> return_unit - in - (* removing the 0 limit is visible once the cycle ends *) - let* bfin = Block.bake_until_cycle_end ~policy:(By_account account2) b in - let* frozen_deposits_at_bfin = - Context.Delegate.current_frozen_deposits (B bfin) account1 - in - (* without a limit and with autostaking staking, the new deposit is no more - zero; note that account1 hasn't baked any block. *) - let* () = - Assert.not_equal_tez ~loc:__LOC__ frozen_deposits_at_bfin Tez.zero - in - return_unit - -let test_cannot_bake_with_zero_deposits_limit () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (_contract2, account2) = - get_first_2_accounts_contracts contracts - in - (* N.B. there is no non-zero frozen deposits value for which one cannot bake: - even with a small deposit one can still bake, though with a smaller probability - (because the frozen deposits value impacts the active stake and the active - stake is the one used to determine baking/endorsing rights. *) - let* operation = - Op.set_deposits_limit (B genesis) contract1 (Some Tez.zero) - in - let* b = Block.bake ~policy:(By_account account2) ~operation genesis in - (* autostaking happens before staking right computations, - so the limit will apply in constants.consensus_rights_delay+1 *) - let expected_number_of_cycles_with_rights_from_previous_deposit = - constants.consensus_rights_delay - in - let* b = - Block.bake_until_n_cycle_end - ~policy:(By_account account2) - expected_number_of_cycles_with_rights_from_previous_deposit - b - in - (* by now, the frozen deposits of account1 are 0 but it still has slashable - unstaked frozen deposits so it can still bake. *) - let* fd = Context.Delegate.current_frozen_deposits (B b) account1 in - let* () = Assert.equal_tez ~loc:__LOC__ fd Tez.zero in - let* ufd = - Context.Contract.unstaked_frozen_balance (B b) (Implicit account1) - in - let ufd = Option.value_f ufd ~default:(fun () -> assert false) in - let* () = Assert.not_equal_tez ~loc:__LOC__ ufd Tez.zero in - let* (_ : Block.t) = Block.bake ~policy:(By_account account1) b in - let* b = Block.bake_until_cycle_end ~policy:(By_account account2) b in - (* after one cycle is passed, the frozen deposit window has passed - and the baker should now effectively have no baking rights. *) - let* fd = Context.Delegate.current_frozen_deposits (B b) account1 in - let* () = Assert.equal_tez ~loc:__LOC__ fd Tez.zero in - let*! b1 = Block.bake ~policy:(By_account account1) b in - let* () = - Assert.error ~loc:__LOC__ b1 (function - | Block.No_slots_found_for _ -> true - | _ -> false) - in - (* Unstaked frozen deposits are released two cycles later. *) - let* b = Block.bake_until_n_cycle_end 2 b in - let* ufd = - Context.Contract.unstaked_frozen_balance (B b) (Implicit account1) - in - let ufd = Option.value_f ufd ~default:(fun () -> assert false) in - Assert.equal_tez ~loc:__LOC__ ufd Tez.zero - -let test_deposits_after_stake_removal () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (contract2, account2) = - get_first_2_accounts_contracts contracts - in - let* initial_frozen_deposits_1 = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - let* initial_frozen_deposits_2 = - Context.Delegate.current_frozen_deposits (B genesis) account2 - in - (* Move half the account1's balance to account2 *) - let* full_balance = Context.Delegate.full_balance (B genesis) account1 in - let half_balance = Tez_helpers.(full_balance /! 2L) in - let* operation = - Op.transaction (B genesis) contract1 contract2 half_balance - in - let* b = Block.bake ~operation genesis in - let* frozen_deposits_1 = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez ~loc:__LOC__ frozen_deposits_1 initial_frozen_deposits_1 - in - let* frozen_deposits_2 = - Context.Delegate.current_frozen_deposits (B b) account2 - in - let* () = - Assert.equal_tez ~loc:__LOC__ frozen_deposits_2 initial_frozen_deposits_2 - in - (* Bake a cycle. *) - let expected_new_frozen_deposits_2 = - Tez_helpers.(initial_frozen_deposits_2 *! 3L /! 2L) - in - let* b = Block.bake_until_cycle_end b in - let* frozen_deposits_2 = - Context.Delegate.current_frozen_deposits (B b) account2 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_2 - expected_new_frozen_deposits_2 - in - (* Updating initial_frozen_deposits_x of accountx after autostaking *) - let* initial_frozen_deposits_1 = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* initial_frozen_deposits_2 = - Context.Delegate.current_frozen_deposits (B b) account2 - in - (* Frozen deposits aren't affected by balance change... *) - let rec loop b n = - if n = 0 then return b - else - let* frozen_deposits_1 = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_1 - initial_frozen_deposits_1 - in - let* frozen_deposits_2 = - Context.Delegate.current_frozen_deposits (B b) account2 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits_2 - initial_frozen_deposits_2 - in - let* b, _, _ = Block.bake_until_cycle_end_with_metadata b in - loop b (pred n) - in - (* the frozen deposits for account1 do not change until [preserved cycles + - max_slashing_period] are baked (-1 because we already baked a cycle) *) - let* b = - loop b (constants.consensus_rights_delay + Constants.max_slashing_period - 1) - in - (* and still after preserved cycles + max_slashing_period, the frozen_deposits - for account1 won't reflect the decrease in account1's active stake - without manual staking. *) - let* frozen_deposits_1 = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez ~loc:__LOC__ frozen_deposits_1 initial_frozen_deposits_1 - in - (* similarly account2's frozen deposits aren't increased automatically *) - let* frozen_deposits_2 = - Context.Delegate.current_frozen_deposits (B b) account2 - in - Assert.equal_tez ~loc:__LOC__ frozen_deposits_2 initial_frozen_deposits_2 - -let test_deposits_unfrozen_after_deactivation () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (_contract1, account1), (_contract2, account2) = - get_first_2_accounts_contracts contracts - in - let* initial_frozen_deposits = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - (* [account1] will not participate (ie bake/attest); we set the - expected last cycles at which it is considered active and at - which it has non-zero deposits *) - let last_active_cycle = - 1 + (2 * constants.consensus_rights_delay) - (* according to [Delegate_storage.set_active] *) - in - let last_cycle_with_deposits = - last_active_cycle + constants.consensus_rights_delay - + Constants.max_slashing_period - (* according to [Delegate_storage.freeze_deposits] *) - in - let cycles_to_bake = - last_cycle_with_deposits + constants.consensus_rights_delay - in - let rec loop b n = - if n = 0 then return b - else - let* ai_activation_cycle = - Context.get_adaptive_issuance_launch_cycle (B b) - in - let frozen_deposits_when_deactivated = - match ai_activation_cycle with - | None -> Tez.zero - | Some cycle -> - if Cycle.(cycle > add root last_active_cycle) then Tez.zero - else initial_frozen_deposits - in - let* b = Block.bake_until_cycle_end ~policy:(By_account account2) b in - let* is_deactivated = Context.Delegate.deactivated (B b) account1 in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let new_cycle = cycles_to_bake - n + 1 in - let* () = - Assert.equal_bool - ~loc:__LOC__ - is_deactivated - (new_cycle > last_active_cycle) - in - (* deposits are automatically unfrozen for deactivated delegates only *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits - (if is_deactivated then frozen_deposits_when_deactivated - else initial_frozen_deposits) - in - loop b (pred n) - in - let* (_ : Block.t) = loop genesis cycles_to_bake in - return_unit - -let test_frozen_deposits_with_delegation () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (_contract1, account1), (contract2, account2) = - get_first_2_accounts_contracts contracts - in - let* initial_staking_balance = - Context.Delegate.staking_balance (B genesis) account1 - in - let* initial_frozen_deposits = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - let* delegated_amount = Context.Contract.balance (B genesis) contract2 in - let new_account = Account.new_account () in - let new_contract = Contract.Implicit new_account.pkh in - let* transfer = - Op.transaction - ~force_reveal:true - (B genesis) - contract2 - new_contract - delegated_amount - in - let* b = Block.bake ~operation:transfer genesis in - let* new_staking_balance = Context.Delegate.staking_balance (B b) account2 in - let expected_new_staking_balance = - Tez_helpers.(initial_staking_balance -! delegated_amount) - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - expected_new_staking_balance - in - let* delegation = - Op.delegation ~force_reveal:true (B b) new_contract (Some account1) - in - let* b = Block.bake ~operation:delegation b in - let expected_new_staking_balance = - Tez_helpers.(initial_staking_balance +! delegated_amount) - in - let* new_staking_balance = Context.Delegate.staking_balance (B b) account1 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - expected_new_staking_balance - in - (* Bake one cycle. *) - let* b = Block.bake_until_cycle_end b in - let expected_new_frozen_deposits = - Tez_helpers.( - initial_frozen_deposits - +! delegated_amount - /! Int64.of_int (constants.limit_of_delegation_over_baking + 1)) - in - let* new_frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_frozen_deposits - expected_new_frozen_deposits - in - let cycles_to_bake = - 2 * (constants.consensus_rights_delay + Constants.max_slashing_period) - in - let rec loop b n = - if n = 0 then return b - else - let* b = Block.bake_until_cycle_end ~policy:(By_account account1) b in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits - expected_new_frozen_deposits - in - loop b (pred n) - in - (* Check that frozen deposits do not change for a sufficient period of - time *) - let* (_ : Block.t) = loop b cycles_to_bake in - return_unit - -let test_frozen_deposits_with_overdelegation () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (contract2, account2) = - get_first_2_accounts_contracts contracts - in - (* - [account1] and [account2] give their spendable balance to [new_account] - - [new_account] overdelegates to [account1] *) - let* initial_staking_balance = - Context.Delegate.staking_balance (B genesis) account1 - in - let* initial_staking_balance' = - Context.Delegate.staking_balance (B genesis) account2 - in - let* initial_frozen_deposits = - Context.Delegate.current_frozen_deposits (B genesis) account1 - in - let* amount = Context.Contract.balance (B genesis) contract1 in - let* amount' = Context.Contract.balance (B genesis) contract2 in - let new_account = (Account.new_account ()).pkh in - let new_contract = Contract.Implicit new_account in - let* transfer1 = - Op.transaction ~force_reveal:true (B genesis) contract1 new_contract amount - in - let* transfer2 = - Op.transaction ~force_reveal:true (B genesis) contract2 new_contract amount' - in - let* b = Block.bake ~operations:[transfer1; transfer2] genesis in - let expected_new_staking_balance = - Tez_helpers.(initial_staking_balance -! amount) - in - let* new_staking_balance = Context.Delegate.staking_balance (B b) account1 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - expected_new_staking_balance - in - let expected_new_staking_balance' = - Tez_helpers.(initial_staking_balance' -! amount') - in - let* new_staking_balance' = Context.Delegate.staking_balance (B b) account2 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance' - expected_new_staking_balance' - in - let* delegation = - Op.delegation ~force_reveal:true (B b) new_contract (Some account1) - in - let* b = Block.bake ~operation:delegation b in - let* new_staking_balance = Context.Delegate.staking_balance (B b) account1 in - let expected_new_staking_balance = - Tez_helpers.(initial_frozen_deposits +! amount +! amount') - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - expected_new_staking_balance - in - (* Finish the cycle to update the frozen deposits *) - let* b = Block.bake_until_cycle_end b in - let* expected_new_frozen_deposits = - Context.Delegate.full_balance (B b) account1 - in - (* the equality follows from the definition of active stake in - [Delegate_sampler.select_distribution_for_cycle]. *) - assert (initial_frozen_deposits = expected_new_frozen_deposits) ; - let* new_frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_frozen_deposits - expected_new_frozen_deposits - in - let cycles_to_bake = - 2 * (constants.consensus_rights_delay + Constants.max_slashing_period) - in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez ~loc:__LOC__ frozen_deposits expected_new_frozen_deposits - in - let rec loop b n = - if n = 0 then return b - else - let* b = Block.bake_until_cycle_end ~policy:(By_account account1) b in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits - expected_new_frozen_deposits - in - loop b (pred n) - in - (* Check that frozen deposits do not change for a sufficient period of - time *) - let* (_ : Block.t) = loop b cycles_to_bake in - return_unit - -let test_set_limit_with_overdelegation () = - let open Lwt_result_syntax in - let constants = {constants with limit_of_delegation_over_baking = 9} in - let* genesis, contracts = Context.init_with_constants2 constants in - let (contract1, account1), (contract2, account2) = - get_first_2_accounts_contracts contracts - in - (* - [account1] and [account2] will give 80% of their balance to - [new_account] - - [new_account] will overdelegate to [account1] and [account1] will set - its frozen deposits limit to 15% of its stake *) - let* initial_staking_balance = - Context.Delegate.staking_balance (B genesis) account1 - in - let* initial_staking_balance' = - Context.Delegate.staking_balance (B genesis) account2 - in - let amount = Tez_helpers.(initial_staking_balance *! 8L /! 10L) in - let amount' = Tez_helpers.(initial_staking_balance' *! 8L /! 10L) in - let limit = Tez_helpers.(initial_staking_balance *! 15L /! 100L) in - let new_account = (Account.new_account ()).pkh in - let new_contract = Contract.Implicit new_account in - let* transfer1 = - Op.transaction ~force_reveal:true (B genesis) contract1 new_contract amount - in - let* transfer2 = - Op.transaction ~force_reveal:true (B genesis) contract2 new_contract amount' - in - let* b = Block.bake ~operations:[transfer1; transfer2] genesis in - let* set_deposits = Op.set_deposits_limit (B b) contract1 (Some limit) in - let* b = Block.bake ~operation:set_deposits b in - let expected_new_staking_balance = - Tez_helpers.(initial_staking_balance -! amount) - in - let* new_staking_balance = Context.Delegate.staking_balance (B b) account1 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance - expected_new_staking_balance - in - let expected_new_staking_balance' = - Tez_helpers.(initial_staking_balance' -! amount') - in - let* new_staking_balance' = Context.Delegate.staking_balance (B b) account2 in - let* () = - Assert.equal_tez - ~loc:__LOC__ - new_staking_balance' - expected_new_staking_balance' - in - let* delegation = - Op.delegation ~force_reveal:true (B b) new_contract (Some account1) - in - let* b = Block.bake ~operation:delegation b in - (* Finish the cycle. account1's frozen deposits are increased - automatically. *) - let* b = Block.bake_until_cycle_end b in - let expected_new_frozen_deposits = limit in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez ~loc:__LOC__ frozen_deposits expected_new_frozen_deposits - in - let cycles_to_bake = - 2 * (constants.consensus_rights_delay + Constants.max_slashing_period) - in - let rec loop b n = - if n = 0 then return b - else - let* b = Block.bake_until_cycle_end ~policy:(By_account account1) b in - let* frozen_deposits = - Context.Delegate.current_frozen_deposits (B b) account1 - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits - expected_new_frozen_deposits - in - loop b (pred n) - in - (* Check that frozen deposits do not change for a sufficient period of - time *) - let* (_b : Block.t) = loop b cycles_to_bake in - return_unit - -(** This test fails when [to_cycle] in [Delegate.freeze_deposits] is smaller than - [new_cycle + consensus_rights_delay]. *) -let test_error_is_thrown_when_smaller_upper_bound_for_frozen_window () = - let open Lwt_result_syntax in - let* genesis, contracts = Context.init_with_constants2 constants in - let contract1, contract2 = contracts in - let account1 = Context.Contract.pkh contract1 in - (* [account2] delegates (through [new_account]) to [account1] its spendable - balance. The point is to make [account1] have a lot of staking balance so - that, after [consensus_rights_delay] when the active stake reflects this increase - in staking balance, its [maximum_stake_to_be_deposited] is bigger than the frozen - deposit which is computed on a smaller window because [to_cycle] is smaller - than [new_cycle + consensus_rights_delay]. *) - let* delegated_amount = Context.Contract.balance (B genesis) contract2 in - let new_account = Account.new_account () in - let new_contract = Contract.Implicit new_account.pkh in - let* transfer = - Op.transaction - ~force_reveal:true - (B genesis) - contract2 - new_contract - delegated_amount - in - let* b = Block.bake ~operation:transfer genesis in - let* delegation = - Op.delegation ~force_reveal:true (B b) new_contract (Some account1) - in - let* b = Block.bake ~operation:delegation b in - let* b = Block.bake_until_cycle_end b in - (* After 1 cycle, namely, at cycle 2, [account1] transfers all its spendable - balance. *) - let* balance1 = Context.Contract.balance (B b) contract1 in - let* operation = - Op.transaction ~force_reveal:true (B b) contract1 contract2 balance1 - in - let* b = Block.bake ~operation b in - let* (_ : Block.t) = - Block.bake_until_n_cycle_end constants.consensus_rights_delay b - in - (* By this time, after [consensus_rights_delay] passed after [account1] has emptied - its spendable balance, because [account1] had a big staking balance at - cycle 0, at this cycle it has a big active stake, and so its - [maximum_stake_to_be_deposited] too is bigger than [frozen_deposits.current_amount], - so the variable [to_freeze] in [freeze_deposits] is positive. - Because the spendable balance of [account1] is 0, an error "Underflowing - subtraction" is raised at the end of the cycle when updating the balance by - subtracting [to_freeze] in [freeze_deposits]. - Note that by taking [to_cycle] is [new_cycle + consensus_rights_delay], - [frozen_deposits.current_amount] can no longer be smaller - than [maximum_stake_to_be_deposited], that is, the invariant - maximum_stake_to_be_deposited <= frozen_deposits + balance is preserved. - *) - return_unit - -let tests = - Tztest. - [ - tztest "invariants" `Quick test_invariants; - tztest "set deposits limit to 0%" `Quick (test_set_limit 0); - tztest "set deposits limit to 5%" `Quick (test_set_limit 5); - tztest "unset deposits limit" `Quick test_unset_limit; - tztest - "cannot bake with zero deposits limit" - `Quick - test_cannot_bake_with_zero_deposits_limit; - tztest - "deposits after stake removal" - `Quick - test_deposits_after_stake_removal; - tztest - "deposits are unfrozen after deactivation" - `Quick - test_deposits_unfrozen_after_deactivation; - tztest - "frozen deposits with delegation" - `Quick - test_frozen_deposits_with_delegation; - tztest - "test simulation of limited staking with overdelegation" - `Quick - test_limit_with_overdelegation; - (* This test has been deactivated following the changes of the - forbidding mechanism that now forbids delegates right after - the first denunciation, it should be fixed and reactivated - https://gitlab.com/tezos/tezos/-/issues/6904 *) - (* tztest *) - (* "test cannot bake again after full deposit slash" *) - (* `Quick *) - (* test_may_not_bake_again_after_full_deposit_slash; *) - tztest - "frozen deposits with overdelegation" - `Quick - test_frozen_deposits_with_overdelegation; - tztest - "set limit with overdelegation" - `Quick - test_set_limit_with_overdelegation; - tztest - "error is thrown when the frozen window is smaller" - `Quick - test_error_is_thrown_when_smaller_upper_bound_for_frozen_window; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("frozen deposits", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_helpers_rpcs.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_helpers_rpcs.ml deleted file mode 100644 index 5caaa61014fd05640efa1fc049715d446f79ccf9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_helpers_rpcs.ml +++ /dev/null @@ -1,69 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Helpers RPCs) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_helpers_rpcs.ml - Subject: On RPCs. -*) - -(* Test the baking_rights RPC. - Future levels or cycles are not tested because it's hard in this framework, - using only RPCs, to fabricate them. *) -let test_baking_rights () = - let open Lwt_result_syntax in - let* b, (c1, _c2) = Context.init2 () in - let open Plugin.RPC.Baking_rights in - (* default max_round returns 65 results *) - let* rights = get Block.rpc_ctxt b ~all:true in - assert (Compare.List_length_with.(rights = 65)) ; - (* arbitrary max_round *) - let max_round = 15 in - let* rights = get Block.rpc_ctxt b ~all:true ~max_round in - assert (Compare.List_length_with.(rights = max_round + 1)) ; - (* filtering by delegate *) - let d = Context.Contract.pkh c1 in - let* rights = get Block.rpc_ctxt b ~all:true ~delegates:[d] in - assert (List.for_all (fun {delegate; _} -> delegate = d) rights) ; - (* filtering by cycle *) - let* {cycle; _} = Plugin.RPC.current_level Block.rpc_ctxt b in - let* rights = get Block.rpc_ctxt b ~all:true ~cycle in - let* first, last = Plugin.RPC.levels_in_current_cycle Block.rpc_ctxt b in - assert ( - List.for_all (fun {level; _} -> level >= first && level <= last) rights) ; - (* filtering by level *) - let* {level; _} = Plugin.RPC.current_level Block.rpc_ctxt b in - let* rights = get Block.rpc_ctxt b ~all:true ~levels:[level] in - let expected_level = level in - assert (List.for_all (fun {level; _} -> level = expected_level) rights) ; - return_unit - -let tests = [Tztest.tztest "baking_rights" `Quick test_baking_rights] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("helpers rpcs", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_participation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_participation.ml deleted file mode 100644 index a5e31c42c1f6e04743174e71d6c083ccffae4282..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_participation.ml +++ /dev/null @@ -1,251 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (participation monitoring) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_participation.ml - Subject: Participation monitoring in Tenderbake -*) - -open Protocol -open Alpha_context - -(** [baker] bakes and [attester] attests *) -let bake_and_attest_once (_b_pred, b_cur) baker attester = - let open Lwt_result_wrap_syntax in - let open Context in - let* attesters_list = Context.get_attesters (B b_cur) in - List.find_map - (function - | {Plugin.RPC.Validators.delegate; slots; _} -> - if Signature.Public_key_hash.equal delegate attester then - Some (delegate, slots) - else None) - attesters_list - |> function - | None -> assert false - | Some (delegate, _slots) -> - let*?@ round = Block.get_round b_cur in - let* attestation = Op.attestation ~round ~delegate b_cur in - Block.bake_with_metadata - ~policy:(By_account baker) - ~operation:attestation - b_cur - -(** We test that: - - a delegate that participates enough, gets its attesting rewards at the end of the cycle, - - a delegate that does not participating enough during a cycle, doesn't get rewarded. - - The case distinction is made by the boolean argument [sufficient_participation]. - If [sufficient_participation] is true, - then a validator attests for as long as the minimal required activity is not reached, - otherwise it does not attest. - Finally, we check the validator's balance at the end of the cycle. -*) -let test_participation ~sufficient_participation () = - let open Lwt_result_wrap_syntax in - let n_accounts = 2 in - let* b0, accounts = Context.init_n ~consensus_threshold:1 n_accounts () in - let* csts = Context.get_constants (B b0) in - let blocks_per_cycle = Int32.to_int csts.parametric.blocks_per_cycle in - let mpr = csts.parametric.minimal_participation_ratio in - assert (blocks_per_cycle mod mpr.denominator = 0) ; - (* if this assertion does not hold, then the test might be incorrect *) - let committee_size = csts.parametric.consensus_committee_size in - let expected_nb_slots = blocks_per_cycle * committee_size / n_accounts in - let minimal_nb_active_slots = - mpr.numerator * expected_nb_slots / mpr.denominator - in - let account1, account2 = - match accounts with a1 :: a2 :: _ -> (a1, a2) | _ -> assert false - in - let del1 = Context.Contract.pkh account1 in - let del2 = Context.Contract.pkh account2 in - let* b1 = Block.bake ~policy:(By_account del1) b0 in - (* To separate concerns, only [del1] bakes: this way, we don't need to - consider baking rewards for [del2]. Delegate [del2] attests only - if the target [minimal_nb_active_slots] is not reached; for the - rest, it is [del1] that attests. *) - let* pred_b, b, _, last_del2_autostaked = - List.fold_left_es - (fun (b_pred, b_crt, attesting_power, _last_del2_autostaked) level -> - let int_level = Int32.of_int level in - let*?@ level = Raw_level.of_int32 int_level in - let* attesting_power_for_level = - Context.get_attesting_power_for_delegate (B b_crt) ~level del1 - in - let attester, new_attesting_power = - if - sufficient_participation - && attesting_power < minimal_nb_active_slots - then (del2, attesting_power + attesting_power_for_level) - else (del1, attesting_power) - in - let* b, (metadata, _) = - bake_and_attest_once (b_pred, b_crt) del1 attester - in - let autostaked = Block.autostaked_opt del2 metadata in - return (b_crt, b, new_attesting_power, autostaked)) - (b0, b1, 0, None) - (2 -- (blocks_per_cycle - 1)) - in - let* bal2_at_pred_b = - let+ t = Context.Contract.balance (B pred_b) account2 in - Tez.to_mutez t - in - let* bal2_at_b = - let+ t = Context.Contract.balance (B b) account2 in - Tez.to_mutez t - in - (* - If not sufficient_participation, we check that the balance of del2 at b is the - balance of del2 at pred_b; consequently, no rewards could have been given - to del2. - - If sufficient participation, we check that the balance of del2 at b is the - balance of del2 at pred_b plus the attesting rewards. *) - let* er = - Context.get_attesting_reward - (B b) - ~expected_attesting_power:expected_nb_slots - in - let autostaked = - Tez.to_mutez @@ Option.value ~default:Tez.zero last_del2_autostaked - in - let attesting_rewards = if sufficient_participation then er else Tez.zero in - let* attesting_rewards = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - (Block.current_cycle b) - del2 - attesting_rewards - in - let attesting_rewards = Tez_helpers.to_mutez attesting_rewards in - let expected_bal2_at_b = - Int64.(sub (add bal2_at_pred_b attesting_rewards) autostaked) - in - Assert.equal_int64 ~loc:__LOC__ bal2_at_b expected_bal2_at_b - -(* We bake and attest with 1 out of 2 accounts; we monitor the result - returned by the '../delegates//participation' RPC for the - non-participating account. *) -let test_participation_rpc () = - let open Lwt_result_wrap_syntax in - let n_accounts = 2 in - let* b0, (account1, account2) = Context.init2 ~consensus_threshold:1 () in - let del1 = Context.Contract.pkh account1 in - let del2 = Context.Contract.pkh account2 in - let* csts = Context.get_constants (B b0) in - let blocks_per_cycle = Int32.to_int csts.parametric.blocks_per_cycle in - let Ratio.{numerator; denominator} = - csts.parametric.minimal_participation_ratio - in - let expected_cycle_activity = - blocks_per_cycle * csts.parametric.consensus_committee_size / n_accounts - in - let minimal_cycle_activity = - expected_cycle_activity * numerator / denominator - in - let allowed_missed_slots = expected_cycle_activity - minimal_cycle_activity in - let*?@ attesting_reward_per_slot = - Alpha_context.Delegate.Rewards.For_RPC.reward_from_constants - csts.parametric - ~reward_kind:Attesting_reward_per_slot - in - let expected_attesting_rewards = - Tez_helpers.( - attesting_reward_per_slot *! Int64.of_int expected_cycle_activity) - in - let* b1 = Block.bake ~policy:(By_account del1) b0 in - let* _, _, _ = - List.fold_left_es - (fun (b_pred, b_crt, total_attesting_power) level_int -> - let* info = Context.Delegate.participation (B b_crt) del2 in - let* () = - Assert.equal_int - ~loc:__LOC__ - info.expected_cycle_activity - expected_cycle_activity - in - let* () = - Assert.equal_int - ~loc:__LOC__ - info.minimal_cycle_activity - minimal_cycle_activity - in - let* () = - Assert.equal_int ~loc:__LOC__ info.missed_levels (level_int - 1) - in - let missed_slots = total_attesting_power in - let* () = - Assert.equal_int ~loc:__LOC__ info.missed_slots missed_slots - in - let remaining_allowed_missed_slots = - allowed_missed_slots - missed_slots - in - let* () = - Assert.equal_int - ~loc:__LOC__ - info.remaining_allowed_missed_slots - (max 0 remaining_allowed_missed_slots) - in - let attesting_rewards = - if remaining_allowed_missed_slots >= 0 then expected_attesting_rewards - else Tez.zero - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - info.expected_attesting_rewards - attesting_rewards - in - let* b, _ = bake_and_attest_once (b_pred, b_crt) del1 del1 in - (* [level_int] is the level of [b_crt] *) - let*?@ level = level_int |> Int32.of_int |> Raw_level.of_int32 in - let* attesting_power = - Context.get_attesting_power_for_delegate (B b_crt) ~level del2 - in - return (b_crt, b, total_attesting_power + attesting_power)) - (b0, b1, 0) - (1 -- (blocks_per_cycle - 2)) - in - return_unit - -let tests = - [ - Tztest.tztest - "insufficient participation" - `Quick - (test_participation ~sufficient_participation:false); - Tztest.tztest - "minimal participation" - `Quick - (test_participation ~sufficient_participation:true); - Tztest.tztest "participation RPC" `Quick test_participation_rpc; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("participation monitoring", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_preattestation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_preattestation.ml deleted file mode 100644 index 07e3f38f44fa4020acb69a20f66dd2deae13c376..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_preattestation.ml +++ /dev/null @@ -1,255 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (preattestation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_preattestation.ml -*) - -open Protocol -open Alpha_context - -(****************************************************************) -(* Utility functions *) -(****************************************************************) - -let init_genesis ?policy () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init_n ~consensus_threshold:0 5 () in - let* b = Block.bake ?policy genesis in - return (genesis, b) - -(****************************************************************) -(* Tests *) -(****************************************************************) - -(** Test that the preattestation's branch does not affect its - validity. *) -let test_preattestation_with_arbitrary_branch () = - let open Lwt_result_syntax in - let* genesis, _contract = Context.init1 () in - let* blk = Block.bake genesis in - let* operation = Op.preattestation ~branch:Block_hash.zero blk in - let* inc = Incremental.begin_construction ~mempool_mode:true blk in - let* _inc = Incremental.validate_operation inc operation in - return_unit - -(** Consensus operation for future level : apply a preattestation with a level in the future *) -let test_consensus_operation_preattestation_for_future_level () = - let open Lwt_result_syntax in - let* _genesis, pred = init_genesis () in - let raw_level = Raw_level.of_int32 (Int32.of_int 10) in - let level = match raw_level with Ok l -> l | Error _ -> assert false in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~level - ~error:(function - | Validate_errors.Consensus.Consensus_operation_for_future_level {kind; _} - when kind = Validate_errors.Consensus.Preattestation -> - true - | _ -> false) - Preattestation - Mempool - -(** Consensus operation for old level : apply a preattestation with a level in the past *) -let test_consensus_operation_preattestation_for_old_level () = - let open Lwt_result_syntax in - let* _genesis, grandparent = init_genesis () in - let* pred = Block.bake grandparent in - let raw_level = Raw_level.of_int32 (Int32.of_int 0) in - let level = match raw_level with Ok l -> l | Error _ -> assert false in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~level - ~error:(function - | Validate_errors.Consensus.Consensus_operation_for_old_level {kind; _} - when kind = Validate_errors.Consensus.Preattestation -> - true - | _ -> false) - Preattestation - Mempool - -(** Consensus operation for future round : apply a preattestation with a round in the future *) -let test_consensus_operation_preattestation_for_future_round () = - let open Lwt_result_wrap_syntax in - let* _genesis, pred = init_genesis () in - let*?@ round = Round.of_int 21 in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~round - Preattestation - Mempool - -(** Consensus operation for old round : apply a preattestation with a round in the past *) -let test_consensus_operation_preattestation_for_old_round () = - let open Lwt_result_wrap_syntax in - let* _genesis, pred = init_genesis ~policy:(By_round 10) () in - let*?@ round = Round.of_int 0 in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~round - Preattestation - Mempool - -(** Consensus operation on competing proposal : apply a preattestation on a competing proposal *) -let test_consensus_operation_preattestation_on_competing_proposal () = - let open Lwt_result_syntax in - let* _genesis, pred = init_genesis () in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~block_payload_hash:Block_payload_hash.zero - Preattestation - Mempool - -(** Unexpected preattestations in block : apply a preattestation with an incorrect round *) -let test_unexpected_preattestations_in_blocks () = - let open Lwt_result_syntax in - let* _genesis, pred = init_genesis () in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~error:(function - | Validate_errors.Consensus.Unexpected_preattestation_in_block -> true - | _ -> false) - Preattestation - Application - -(** Round too high : apply a preattestation with a too high round *) -let test_too_high_round () = - let open Lwt_result_wrap_syntax in - let* _genesis, pred = init_genesis () in - let raw_level = Raw_level.of_int32 (Int32.of_int 2) in - let level = match raw_level with Ok l -> l | Error _ -> assert false in - let*?@ round = Round.of_int 1 in - Consensus_helpers.test_consensus_operation - ~loc:__LOC__ - ~attested_block:pred - ~round - ~level - ~error:(function - | Validate_errors.Consensus.Preattestation_round_too_high _ -> true - | _ -> false) - Preattestation - Construction - -(** Duplicate preattestation : apply a preattestation that has already been applied. *) -let test_duplicate_preattestation () = - let open Lwt_result_syntax in - let* genesis, _ = init_genesis () in - let* b = Block.bake genesis in - let* inc = Incremental.begin_construction ~mempool_mode:true b in - let* operation = Op.preattestation b in - let* inc = Incremental.add_operation inc operation in - let* operation = Op.preattestation b in - let*! res = Incremental.add_operation inc operation in - Assert.proto_error_with_info - ~loc:__LOC__ - res - "Double inclusion of consensus operation" - -(** Preattestation for next level *) -let test_preattestation_for_next_level () = - let open Lwt_result_syntax in - let* genesis, _ = init_genesis () in - Consensus_helpers.test_consensus_op_for_next - ~genesis - ~kind:`Preattestation - ~next:`Level - -(** Preattestation for next round *) -let test_preattestation_for_next_round () = - let open Lwt_result_syntax in - let* genesis, _ = init_genesis () in - Consensus_helpers.test_consensus_op_for_next - ~genesis - ~kind:`Preattestation - ~next:`Round - -let tests = - let module AppMode = Test_preattestation_functor.BakeWithMode (struct - let name = "AppMode" - - let baking_mode = Block.Application - end) in - let module ConstrMode = Test_preattestation_functor.BakeWithMode (struct - let name = "ConstrMode" - - let baking_mode = Block.Baking - end) in - AppMode.tests @ ConstrMode.tests - @ [ - Tztest.tztest - "Preattestation with arbitrary branch" - `Quick - test_preattestation_with_arbitrary_branch; - Tztest.tztest - "Preattestation for future level" - `Quick - test_consensus_operation_preattestation_for_future_level; - Tztest.tztest - "Preattestation for old level" - `Quick - test_consensus_operation_preattestation_for_old_level; - Tztest.tztest - "Preattestation for future round" - `Quick - test_consensus_operation_preattestation_for_future_round; - Tztest.tztest - "Preattestation for old round" - `Quick - test_consensus_operation_preattestation_for_old_round; - Tztest.tztest - "Preattestation on competing proposal" - `Quick - test_consensus_operation_preattestation_on_competing_proposal; - Tztest.tztest - "Unexpected preattestations in blocks" - `Quick - test_unexpected_preattestations_in_blocks; - Tztest.tztest "Preattestations round too high" `Quick test_too_high_round; - Tztest.tztest - "Duplicate preattestation" - `Quick - test_duplicate_preattestation; - Tztest.tztest - "Preattestation for next level" - `Quick - test_preattestation_for_next_level; - Tztest.tztest - "Preattestation for next round" - `Quick - test_preattestation_for_next_round; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("preattestation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_preattestation_functor.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_preattestation_functor.ml deleted file mode 100644 index 3ff3c5351f74efd475ecb485d91bf037f3571706..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_preattestation_functor.ml +++ /dev/null @@ -1,285 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (preattestation) in Full_construction & Application modes - Subject: preattestation inclusion in a block -*) - -open Protocol -open Alpha_context - -(****************************************************************) -(* Utility functions *) -(****************************************************************) -module type MODE = sig - val name : string - - val baking_mode : Block.baking_mode -end - -module BakeWithMode (Mode : MODE) : sig - val tests : unit Alcotest_lwt.test_case trace -end = struct - let name = Mode.name - - let bake = Block.bake ~baking_mode:Mode.baking_mode - - let aux_simple_preattestation_inclusion ?(payload_round = Some Round.zero) - ?(locked_round = Some Round.zero) ?(block_round = 1) - ?(preattestation_round = Round.zero) - ?(preattested_block = fun _predpred _pred curr -> curr) - ?(mk_ops = fun op -> [op]) - ?(get_delegate_and_slot = - fun _predpred _pred _curr -> Lwt_result_syntax.return (None, None)) - ?(post_process = Ok (fun _ -> Lwt_result_syntax.return_unit)) ~loc () = - let open Lwt_result_syntax in - let* genesis, _contracts = Context.init_n ~consensus_threshold:1 5 () in - let* b1 = bake genesis in - let* attestation = Op.attestation b1 in - let* b2 = bake b1 ~operations:[attestation] in - let attested_block = preattested_block genesis b1 b2 in - let* delegate, slot = get_delegate_and_slot genesis b1 b2 in - let* p = - Op.preattestation - ?delegate - ?slot - ~round:preattestation_round - attested_block - in - let operations = attestation :: (mk_ops @@ p) in - let*! res = - bake - ~payload_round - ~locked_round - ~policy:(By_round block_round) - ~operations - b1 - in - match (res, post_process) with - | Ok ok, Ok success_fun -> success_fun ok - | Error _, Error error -> Assert.proto_error ~loc res error - | Ok _, Error _ -> Assert.error ~loc res (fun _ -> false) - | Error _, Ok _ -> Assert.error ~loc res (fun _ -> false) - - (****************************************************************) - (* Tests *) - (****************************************************************) - - (** OK: bake a block "_b2_1" at round 1, containing a PQC and a locked - round of round 0 *) - let include_preattestation_in_block_with_locked_round () = - aux_simple_preattestation_inclusion ~loc:__LOC__ () - - (** KO: The same preattestation injected twice in the PQC *) - let duplicate_preattestation_in_pqc () = - aux_simple_preattestation_inclusion (* inject the op twice *) - ~mk_ops:(fun op -> [op; op]) - ~loc:__LOC__ - ~post_process: - (Error - (function - | Validate_errors.Consensus.Conflicting_consensus_operation {kind; _} - when kind = Validate_errors.Consensus.Preattestation -> - true - | _ -> false)) - () - - (** KO: locked round declared in the block is not smaller than - that block's round *) - let locked_round_not_before_block_round () = - aux_simple_preattestation_inclusion - (* default locked_round = 0 < block_round = 1 for this aux function *) - ~block_round:0 - ~loc:__LOC__ - ~post_process: - (Error - (function - | Fitness_repr.Locked_round_not_less_than_round _ -> true - | _ -> false)) - () - - (** KO: because we announce a locked_round, but we don't provide the - preattestation quorum certificate in the operations *) - let with_locked_round_in_block_but_without_any_pqc () = - (* This test only fails in Application mode. If full_construction mode, the - given locked_round is not used / checked. Moreover, the test succeed in - this case. - *) - let open Lwt_result_syntax in - let post_process = - if Mode.baking_mode == Block.Application then - Error (function Fitness_repr.Wrong_fitness -> true | _ -> false) - else Ok (fun _ -> return_unit) - in - aux_simple_preattestation_inclusion - (* with declared locked_round but without a PQC in the ops *) - ~mk_ops:(fun _p -> []) - ~loc:__LOC__ - ~post_process - () - - (** KO: The preattested block is the pred one, not the current one *) - let preattestation_has_wrong_level () = - aux_simple_preattestation_inclusion - (* preattestation should be for _curr block to be valid *) - ~preattested_block:(fun _predpred pred _curr -> pred) - ~loc:__LOC__ - ~post_process: - (Error - (function - | Validate_errors.Consensus.Consensus_operation_for_old_level - {kind; _} - when kind = Validate_errors.Consensus.Preattestation -> - true - | _ -> false)) - () - - (** OK: explicit the correct attester and preattesting slot in the test *) - let preattestation_in_block_with_good_slot () = - let open Lwt_result_syntax in - aux_simple_preattestation_inclusion - ~get_delegate_and_slot:(fun _predpred _pred curr -> - let module V = Plugin.RPC.Validators in - let* validators = Context.get_attesters (B curr) in - match validators with - | {V.delegate; slots = s :: _; _} :: _ -> return (Some delegate, Some s) - | _ -> assert false - (* there is at least one attester with a slot *)) - ~loc:__LOC__ - () - - (** KO: the used slot for injecting the attestation is not the canonical one *) - let preattestation_in_block_with_wrong_slot () = - let open Lwt_result_syntax in - aux_simple_preattestation_inclusion - ~get_delegate_and_slot:(fun _predpred _pred curr -> - let module V = Plugin.RPC.Validators in - let* validators = Context.get_attesters (B curr) in - match validators with - | {V.delegate; V.slots = _ :: non_canonical_slot :: _; _} :: _ -> - return (Some delegate, Some non_canonical_slot) - | _ -> assert false - (* there is at least one attester with a slot *)) - ~loc:__LOC__ - ~post_process: - (Error - (function - | Validate_errors.Consensus.Wrong_slot_used_for_consensus_operation - {kind; _} - when kind = Validate_errors.Consensus.Preattestation -> - true - | _ -> false)) - () - - (** KO: the delegate tries to injects with a canonical slot of another delegate *) - let preattestation_in_block_with_wrong_signature () = - let open Lwt_result_syntax in - aux_simple_preattestation_inclusion - ~get_delegate_and_slot:(fun _predpred _pred curr -> - let module V = Plugin.RPC.Validators in - let* validators = Context.get_attesters (B curr) in - match validators with - | {V.delegate; _} :: {V.slots = s :: _; _} :: _ -> - (* the canonical slot s is not owned by the delegate "delegate" !*) - return (Some delegate, Some s) - | _ -> assert false - (* there is at least one attester with a slot *)) - ~loc:__LOC__ - ~post_process: - (Error - (function Operation_repr.Invalid_signature -> true | _ -> false)) - () - - (** KO: cannot have a locked_round higher than attached PQC's round *) - let locked_round_is_higher_than_pqc_round () = - (* This test only fails in Application mode. If full_construction mode, the - given locked_round is not used / checked. Moreover, the test succeed in - this case. - *) - let open Lwt_result_syntax in - let post_process = - if Mode.baking_mode == Application then - Error - (function - | Validate_errors.Consensus.Consensus_operation_for_old_round - {kind; _} - when kind = Validate_errors.Consensus.Preattestation -> - true - | _ -> false) - else Ok (fun _ -> return_unit) - in - aux_simple_preattestation_inclusion - ~preattestation_round:Round.zero - ~locked_round:(Some (Round.succ Round.zero)) - ~block_round:2 - ~loc:__LOC__ - ~post_process - () - - let my_tztest title test = - Tztest.tztest (Format.sprintf "%s: %s" name title) test - - let tests = - [ - my_tztest - "ok: include_preattestation_in_block_with_locked_round" - `Quick - include_preattestation_in_block_with_locked_round; - my_tztest - "ko: duplicate_preattestation_in_pqc" - `Quick - duplicate_preattestation_in_pqc; - my_tztest - "ko:locked_round_not_before_block_round" - `Quick - locked_round_not_before_block_round; - my_tztest - "ko: with_locked_round_in_block_but_without_any_pqc" - `Quick - with_locked_round_in_block_but_without_any_pqc; - my_tztest - "ko: preattestation_has_wrong_level" - `Quick - preattestation_has_wrong_level; - my_tztest - "ok: preattestation_in_block_with_good_slot" - `Quick - preattestation_in_block_with_good_slot; - my_tztest - "ko: preattestation_in_block_with_wrong_slot" - `Quick - preattestation_in_block_with_wrong_slot; - my_tztest - "ko: preattestation_in_block_with_wrong_signature" - `Quick - preattestation_in_block_with_wrong_signature; - my_tztest - "ko: locked_round_is_higher_than_pqc_round" - `Quick - locked_round_is_higher_than_pqc_round; - ] -end diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_seed.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_seed.ml deleted file mode 100644 index 8bfd3ad5fd29804b4dfff4e2de8ed2f59cf9229f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/consensus/test_seed.ml +++ /dev/null @@ -1,712 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (seed) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/consensus/main.exe \ - -- --file test_seed.ml - Subject: - seed_nonce_hash included in some blocks - - revelation operation of seed_nonce that should correspond - to each seed_nonce_hash -*) - -open Protocol - -(** Checking that, in the absence of nonce revelations and VDF computation, - the seed of each cycle is correctly computed based on the seed of - the previous cycle. *) -let test_seed_no_commitment () = - let open Lwt_result_syntax in - let n_cycles = 15 in - let (Hash initial_seed) = - let empty_bytes = Bytes.(copy empty) in - Tezos_crypto.Hacl.Blake2b.direct empty_bytes Nonce_hash.size - in - let seeds = - (* compute the first `n_cycles` expected seeds *) - let zero_bytes = Bytes.make Nonce_hash.size '\000' in - let rec make_seeds s = function - | 0 -> [] - | n -> - let (Hash h) = - Tezos_crypto.Hacl.Blake2b.direct - (Bytes.cat s zero_bytes) - Nonce_hash.size - in - h :: make_seeds h (n - 1) - in - make_seeds initial_seed n_cycles - in - let check_seed b expected_seed = - let open Alpha_context in - let* s = Context.get_seed (B b) in - let seed_bytes = Data_encoding.Binary.to_bytes_exn Seed.seed_encoding s in - (if expected_seed <> seed_bytes then - let seed_pp = - Hex.show - (Hex.of_string - (Data_encoding.Binary.to_string_exn Seed.seed_encoding s)) - in - let expected_seed_pp = Hex.show (Hex.of_bytes expected_seed) in - Stdlib.failwith - (Format.sprintf "Seed: %s\nExpected: %s\n\n" seed_pp expected_seed_pp)) ; - return b - in - let rec bake_and_check_seed b = function - | [] -> return b - | s :: seeds -> - let* b = Block.bake_until_cycle_end b in - let* b = check_seed b s in - let* b = Block.bake_n 2 b in - bake_and_check_seed b seeds - in - let* b, _delegates = - Context.init3 - ~blocks_per_cycle:8l - ~consensus_threshold:0 - ~nonce_revelation_threshold:2l - () - in - let* b = check_seed b initial_seed in - let* (_ : Block.t) = bake_and_check_seed b seeds in - return_unit - -(** Baking [blocks_per_commitment] blocks without a [seed_nonce_hash] - commitment fails with an "Invalid commitment in block header" error. *) -let test_no_commitment () = - let open Lwt_result_syntax in - let* b, _contracts = Context.init_n ~consensus_threshold:0 5 () in - let* {parametric = {blocks_per_commitment; _}; _} = - Context.get_constants (B b) - in - let blocks_per_commitment = Int32.to_int blocks_per_commitment in - (* Bake normally until before the commitment *) - let* b = Block.bake_n (blocks_per_commitment - 2) b in - (* Forge a block with empty commitment and apply it *) - let* header = Block.Forge.forge_header b in - let* header = Block.Forge.set_seed_nonce_hash None header in - let* header = Block.Forge.sign_header header in - let*! e = Block.apply header b in - Assert.proto_error_with_info - ~loc:__LOC__ - e - "Invalid commitment in block header" - -(** Choose a baker, denote it by id. In the first cycle, make id bake only once. - Check that: - - when id reveals the nonce too early, there's an error - - when id reveals at the right time but the wrong value, there's an error - - when another baker reveals correctly, it receives the tip - - revealing twice produces an error *) -let test_revelation_early_wrong_right_twice () = - let open Lwt_result_syntax in - let open Assert in - let* b, _contracts = Context.init_n ~consensus_threshold:0 5 () in - let* csts = Context.get_constants (B b) in - let* tip = Context.get_seed_nonce_revelation_tip (B b) in - let blocks_per_commitment = - Int32.to_int csts.parametric.blocks_per_commitment - in - let* baking_reward_fixed_portion = - Context.get_baking_reward_fixed_portion (B b) - in - (* get the pkh of a baker *) - let* pkh, _, _, _ = Block.get_next_baker b in - let id = Alpha_context.Contract.Implicit pkh in - let policy = Block.Excluding [pkh] in - (* bake until commitment - 2, excluding id *) - let* b = Block.bake_n ~policy (blocks_per_commitment - 2) b in - let* bal_main = Context.Contract.balance (B b) id in - let cycle_for_rewards = Block.current_cycle b in - (* the baker [id] will include a seed_nonce commitment *) - let* b = Block.bake ~policy:(Block.By_account pkh) b in - let*? level_commitment = Context.get_level (B b) in - let* committed_hash = Context.get_seed_nonce_hash (B b) in - (* test that the baking reward is received *) - let* reward_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - baking_reward_fixed_portion - in - let* () = - balance_was_credited ~loc:__LOC__ (B b) id bal_main reward_to_liquid - in - (* test that revealing too early produces an error *) - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get committed_hash) - in - let*! e = Block.bake ~policy ~operation b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Nonce_storage.Too_early_revelation -> true - | _ -> false) - in - (* finish the cycle excluding the committing baker, id *) - let* b = Block.bake_until_cycle_end ~policy b in - (* test that revealing at the right time but the wrong value - produces an error *) - let wrong_hash, _ = Nonce.generate () in - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get wrong_hash) - in - let*! e = Block.bake ~operation b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Nonce_storage.Inconsistent_nonce -> true - | _ -> false) - in - (* reveals correctly *) - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get committed_hash) - in - let* baker_pkh, _, _, _ = Block.get_next_baker ~policy b in - let baker = Alpha_context.Contract.Implicit baker_pkh in - let* baker_bal = Context.Contract.balance (B b) baker in - (* test that revealing twice in a block produces an error *) - let*! e = - Block.bake - ~policy:(Block.By_account baker_pkh) - ~operations:[operation; operation] - b - in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Conflicting_nonce_revelation _ -> true - | _ -> false) - in - let cycle_for_rewards = Block.current_cycle b in - let* b = Block.bake ~policy:(Block.By_account baker_pkh) ~operation b in - (* test that the baker gets the tip reward plus the baking reward*) - let* tip_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - tip - in - let* baking_reward_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - baking_reward_fixed_portion - in - let reward_to_liquid = - Tez_helpers.(baking_reward_to_liquid +! tip_to_liquid) - in - - let* () = - balance_was_credited ~loc:__LOC__ (B b) baker baker_bal reward_to_liquid - in - (* test that revealing twice produces an error *) - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get wrong_hash) - in - let*! e = Block.bake ~operation ~policy b in - Assert.proto_error ~loc:__LOC__ e (function - | Nonce_storage.Already_revealed_nonce -> true - | _ -> false) - -(** Test that revealing too late produces an error. Note that a - committer who doesn't reveal at cycle 1 is not punished.*) -let test_revelation_missing_and_late () = - let open Lwt_result_syntax in - let open Context in - let open Assert in - let* b, _contracts = Context.init_n ~consensus_threshold:0 5 () in - let* csts = get_constants (B b) in - let blocks_per_commitment = - Int32.to_int csts.parametric.blocks_per_commitment - in - let nonce_revelation_threshold = - Int32.to_int csts.parametric.nonce_revelation_threshold - in - (* bake until commitment *) - let* b = Block.bake_n (blocks_per_commitment - 2) b in - (* the next baker [id] will include a seed_nonce commitment *) - let* pkh, _, _, _ = Block.get_next_baker b in - let* b = Block.bake b in - let*? level_commitment = Context.get_level (B b) in - let* committed_hash = Context.get_seed_nonce_hash (B b) in - (* finish cycle 0 excluding the committing baker [id] *) - let policy = Block.Excluding [pkh] in - let* b = Block.bake_until_cycle_end ~policy b in - (* test that revealing after revelation period produces an error *) - let* b = Block.bake_n (nonce_revelation_threshold - 1) b in - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get committed_hash) - in - let*! e = Block.bake ~operation ~policy b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Nonce_storage.Too_late_revelation -> true - | _ -> false) - in - (* finish cycle 1 excluding the committing baker [id] *) - let* b = Block.bake_until_cycle_end ~policy b in - (* test that revealing too late after cycle 1 produces an error *) - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get committed_hash) - in - let*! e = Block.bake ~operation b in - Assert.proto_error ~loc:__LOC__ e (function - | Nonce_storage.Too_late_revelation -> true - | _ -> false) - -(** Test that we do not distribute attesting rewards if the nonce was - not revealed. *) -let test_unrevealed () = - let open Lwt_result_syntax in - let open Alpha_context in - let constants = - { - Default_parameters.constants_test with - issuance_weights = - { - base_total_issued_per_minute = Tez.one; - attesting_reward_weight = 1; - baking_reward_bonus_weight = 0; - baking_reward_fixed_portion_weight = 0; - seed_nonce_revelation_tip_weight = 0; - vdf_revelation_tip_weight = 0; - }; - consensus_threshold = 0; - minimal_participation_ratio = Ratio.{numerator = 0; denominator = 1}; - } - in - let* b, (_account1, account2) = Context.init_with_constants2 constants in - let delegate2 = Context.Contract.pkh account2 in - (* Delegate 2 will add a nonce but never reveals it *) - let* csts = Context.get_constants (B b) in - let blocks_per_commitment = - Int32.to_int csts.parametric.blocks_per_commitment - in - let bake_and_attest_block ?policy (_pred_b, b) = - let* slots = Context.get_attesters (B b) in - let* attestations = - List.map_es - (fun {Plugin.RPC.Validators.consensus_key; _} -> - Op.attestation ~delegate:consensus_key b) - slots - in - Block.bake ?policy ~operations:attestations b - in - (* Bake until commitment *) - let* b = Block.bake_n (blocks_per_commitment - 2) b in - (* Baker delegate 2 will include a seed_nonce commitment *) - let policy = Block.By_account delegate2 in - let* b = Block.bake_until_cycle_end ~policy b in - let* info_before = Context.Delegate.info (B b) delegate2 in - let* b' = Block.bake ~policy b in - let* b = bake_and_attest_block ~policy (b, b') in - (* Finish cycle 1 excluding the first baker *) - let* b = Block.bake_until_cycle_end ~policy b in - let* info_after = Context.Delegate.info (B b) delegate2 in - (* Assert that we did not received a reward because we didn't - reveal the nonce. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - info_before.full_balance - info_after.full_balance - in - return_unit - -let test_vdf_status () = - let open Lwt_result_syntax in - let* b, _ = Context.init3 ~consensus_threshold:0 () in - let* b = Block.bake b in - let* status = Context.get_seed_computation (B b) in - assert (status = Alpha_context.Seed.Nonce_revelation_stage) ; - let* constants = Context.get_constants (B b) in - let* b = - Block.bake_n - (Int32.to_int constants.parametric.nonce_revelation_threshold) - b - in - let* status = Context.get_seed_computation (B b) in - assert ( - match status with - | Alpha_context.Seed.Vdf_revelation_stage _ -> true - | _ -> false) ; - return_unit - -(** Choose a baker, denote it by id. In the first cycle, make id bake only once. - Check that: - - when the vdf is revealed too early, there's an error - - when the vdf is revealed at the right time but the wrong value, there's an error - - when the vdf is revealed at the right time and the correct value, - - the baker receives a reward - - the VDF status is updated to "Computation_finished" - - the seed is updated with the vdf solution - - another vdf revelation produces an error *) -let test_early_incorrect_unverified_correct_already_vdf () = - let open Lwt_result_syntax in - let open Assert in - let* b, _ = Context.init3 ~consensus_threshold:0 () in - let* csts = Context.get_constants (B b) in - let blocks_per_commitment = - Int32.to_int csts.parametric.blocks_per_commitment - in - let nonce_revelation_threshold = - Int32.to_int csts.parametric.nonce_revelation_threshold - in - let* baking_reward_fixed_portion = - Context.get_baking_reward_fixed_portion (B b) - in - let* seed_nonce_revelation_tip = - Context.get_seed_nonce_revelation_tip (B b) - in - let* vdf_nonce_revelation_tip = Context.get_vdf_revelation_tip (B b) in - (* get the pkh of a baker *) - let* pkh, _, _, _ = Block.get_next_baker b in - let id = Alpha_context.Contract.Implicit pkh in - let policy = Block.Excluding [pkh] in - (* bake until commitment - 2, excluding id *) - let* b = Block.bake_n ~policy (blocks_per_commitment - 2) b in - let* bal_main = Context.Contract.balance (B b) id in - (* the baker [id] will include a seed_nonce commitment *) - let cycle_for_rewards = Block.current_cycle b in - let* b = Block.bake ~policy:(Block.By_account pkh) b in - let*? level_commitment = Context.get_level (B b) in - let* committed_hash = Context.get_seed_nonce_hash (B b) in - (* test that the baking reward is received *) - let* reward_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - baking_reward_fixed_portion - in - let* () = - balance_was_credited ~loc:__LOC__ (B b) id bal_main reward_to_liquid - in - (* finish the cycle excluding the committing baker, id *) - let* b = Block.bake_until_cycle_end ~policy b in - (* reveals correctly *) - let operation = - Op.seed_nonce_revelation - (B b) - level_commitment - (WithExceptions.Option.to_exn ~none:Not_found @@ Nonce.get committed_hash) - in - let* baker_pkh, _, _, _ = Block.get_next_baker ~policy b in - let baker = Alpha_context.Contract.Implicit baker_pkh in - let* baker_bal = Context.Contract.balance (B b) baker in - let cycle_for_rewards = Block.current_cycle b in - let* b = Block.bake ~policy:(Block.By_account baker_pkh) ~operation b in - (* test that the baker gets the tip reward plus the baking reward*) - let* tip_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - seed_nonce_revelation_tip - in - let* baking_reward_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - baking_reward_fixed_portion - in - let reward_to_liquid = - Tez_helpers.(tip_to_liquid +! baking_reward_to_liquid) - in - let* () = - balance_was_credited ~loc:__LOC__ (B b) baker baker_bal reward_to_liquid - in - (* test that revealing the VDF early produces an error *) - let dummy_solution = - let open Environment.Vdf in - let dummy = Bytes.create Environment.Vdf.form_size_bytes in - let result = Stdlib.Option.get @@ result_of_bytes_opt dummy in - let proof = Stdlib.Option.get @@ proof_of_bytes_opt dummy in - (result, proof) - in - let operation = Op.vdf_revelation (B b) dummy_solution in - let*! e = Block.bake ~operation b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Seed_storage.Too_early_revelation -> true - | _ -> false) - in - (* bake until nonce reveal period finishes *) - let* b = Block.bake_n ~policy nonce_revelation_threshold b in - (* test that revealing non group elements produces an error *) - let operation = Op.vdf_revelation (B b) dummy_solution in - let*! e = Block.bake ~operation b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Seed_storage.Unverified_vdf -> true - | _ -> false) - in - let* seed_status = Context.get_seed_computation (B b) in - match seed_status with - | Nonce_revelation_stage -> assert false - | Computation_finished -> assert false - | Vdf_revelation_stage info -> ( - (* generate the VDF discriminant and challenge *) - let discriminant, challenge = - Alpha_context.Seed.generate_vdf_setup - ~seed_discriminant:info.seed_discriminant - ~seed_challenge:info.seed_challenge - in - (* test that revealing wrong VDF produces an error *) - let wrong_solution = - let open Environment.Vdf in - let f = challenge_to_bytes challenge in - let result = Stdlib.Option.get @@ result_of_bytes_opt f in - let proof = Stdlib.Option.get @@ proof_of_bytes_opt f in - (result, proof) - in - let operation = Op.vdf_revelation (B b) wrong_solution in - let*! e = Block.bake ~operation b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Seed_storage.Unverified_vdf -> true - | _ -> false) - in - (* test with correct input *) - (* compute the VDF solution (the result and the proof ) *) - let solution = - (* generate the result and proof *) - Environment.Vdf.prove - discriminant - challenge - csts.parametric.vdf_difficulty - in - let* baker_bal = Context.Contract.balance (B b) baker in - let operation = Op.vdf_revelation (B b) solution in - let*! e = - Block.bake - ~policy:(Block.By_account baker_pkh) - ~operations:[operation; operation] - b - in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Validate_errors.Anonymous.Conflicting_vdf_revelation _ -> true - | _ -> false) - in - (* verify the balance was credited following operation inclusion *) - let cycle_for_rewards = Block.current_cycle b in - let* b = Block.bake ~policy:(Block.By_account baker_pkh) ~operation b in - let* tip_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - vdf_nonce_revelation_tip - in - let* baking_reward_to_liquid = - Adaptive_issuance_helpers.portion_of_rewards_to_liquid_for_cycle - (B b) - cycle_for_rewards - pkh - baking_reward_fixed_portion - in - let reward_to_liquid = - Tez_helpers.(tip_to_liquid +! baking_reward_to_liquid) - in - let* () = - balance_was_credited ~loc:__LOC__ (B b) baker baker_bal reward_to_liquid - in - (* verify the seed status has changed *) - let* seed_status = Context.get_seed_computation (B b) in - match seed_status with - | Nonce_revelation_stage -> assert false - | Vdf_revelation_stage _ -> assert false - | Computation_finished -> - (* test than sending another VDF reveal produces an error *) - let operation = Op.vdf_revelation (B b) solution in - let*! e = Block.bake ~operation b in - let* () = - Assert.proto_error ~loc:__LOC__ e (function - | Seed_storage.Already_accepted -> true - | _ -> false) - in - (* verify the stored seed has the expected value *) - let open Data_encoding.Binary in - let open Alpha_context in - (* retrieving & converting seed stored in cycle n + preserved_cycle + 1 *) - let* b = - Block.bake_until_n_cycle_end - ~policy - (csts.parametric.consensus_rights_delay + 1) - b - in - let* stored_seed = Context.get_seed (B b) in - let vdf_stored_seed = to_bytes_exn Seed.seed_encoding stored_seed in - (* recomputing seed with randao output and vdf solution *) - let vdf_expected_seed = - let randao_seed = - to_bytes_exn Seed.seed_encoding info.seed_challenge - |> of_bytes_exn Seed_repr.seed_encoding - in - Seed_repr.vdf_to_seed randao_seed solution - |> to_bytes_exn Seed_repr.seed_encoding - in - assert (Bytes.(equal vdf_expected_seed vdf_stored_seed)) ; - return_unit) - -(* We check that bounds used in [Seed_storage.for_cycle] are as expected. *) -let test_cycle_bounds () = - let open Lwt_result_syntax in - let* b, _accounts = Context.init1 ~consensus_threshold:0 () in - let* csts = Context.get_constants (B b) in - let past_offset = Constants_repr.max_slashing_period - 1 in - let future_offset = csts.parametric.consensus_rights_delay in - let open Alpha_context.Cycle in - let expected_error_message direction current_cycle = - match direction with - | `Past -> - let oldest_cycle = Stdlib.Option.get (sub current_cycle past_offset) in - let older_cycle = Stdlib.Option.get (sub oldest_cycle 1) in - Format.asprintf - "The seed for cycle %a has been cleared from the context (oldest \ - known seed is for cycle %a)" - pp - older_cycle - pp - oldest_cycle - | `Future -> - let latest_cycle = add current_cycle future_offset in - let later_cycle = add latest_cycle 1 in - Format.asprintf - "The seed for cycle %a has not been computed yet (latest known seed \ - is for cycle %a)" - pp - later_cycle - pp - latest_cycle - | `Missing_sampler_state cycle -> - Format.asprintf - "Storage error:\n Missing key 'cycle/%a/delegate_sampler_state'." - pp - cycle - in - let cycle = root in - let* (_ : _ list) = - Context.get_bakers ~cycle:(add cycle future_offset) (B b) - in - let future_cycle = add cycle (future_offset + 1) in - let*! res = Context.get_bakers ~cycle:future_cycle (B b) in - (* the first cycle is special *) - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - ~error_info_field:`Message - res - (expected_error_message (`Missing_sampler_state future_cycle) cycle) - in - let* b = Block.bake_until_cycle_end b in - let cycle = add cycle 1 in - let* (_ : _ list) = Context.get_bakers ~cycle:root (B b) in - let* (_ : _ list) = - Context.get_bakers ~cycle:(add cycle future_offset) (B b) - in - let*! res = Context.get_bakers ~cycle:(add cycle (future_offset + 1)) (B b) in - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - res - ~error_info_field:`Message - (expected_error_message `Future cycle) - in - let* b = Block.bake_until_n_cycle_end past_offset b in - let cycle = add cycle past_offset in - let* (_ : _ list) = - Context.get_bakers ~cycle:(Stdlib.Option.get (sub cycle past_offset)) (B b) - in - let*! res = - Context.get_bakers - ~cycle:(Stdlib.Option.get (sub cycle (past_offset + 1))) - (B b) - in - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - res - ~error_info_field:`Message - (expected_error_message `Past cycle) - in - let* (_ : _ list) = - Context.get_bakers ~cycle:(add cycle future_offset) (B b) - in - let*! res = Context.get_bakers ~cycle:(add cycle (future_offset + 1)) (B b) in - Assert.proto_error_with_info - ~loc:__LOC__ - res - ~error_info_field:`Message - (expected_error_message `Future cycle) - -let tests = - [ - Tztest.tztest - "seed computation (no commitment)" - `Quick - test_seed_no_commitment; - Tztest.tztest "no commitment" `Quick test_no_commitment; - Tztest.tztest - "revelation_early_wrong_right_twice" - `Quick - test_revelation_early_wrong_right_twice; - Tztest.tztest - "revelation_missing_and_late" - `Quick - test_revelation_missing_and_late; - Tztest.tztest "unrevealed" `Quick test_unrevealed; - Tztest.tztest - "early_incorrect_unverified_correct_already_vdf" - `Quick - test_early_incorrect_unverified_correct_already_vdf; - Tztest.tztest "VDF status" `Quick test_vdf_status; - Tztest.tztest "for_cycle cycle bounds" `Quick test_cycle_bounds; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("seed", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/dune b/src/proto_019_PtParisB/lib_protocol/test/integration/dune deleted file mode 100644 index afbf2c09b9002867e55ca6a8ba0e1d922854f861..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/dune +++ /dev/null @@ -1,63 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_protocol_test_integration_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - tezt - octez-libs.base - octez-protocol-019-PtParisB-libs.client - tezos-protocol-019-PtParisB.protocol - tezos-protocol-019-PtParisB.parameters - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.base-test-helpers) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_019_PtParisB_test_helpers - -open Tezos_base_test_helpers) - (modules - test_constants - test_frozen_bonds - test_adaptive_issuance_launch - test_scenario_base - test_scenario_stake - test_scenario_rewards - test_scenario_autostaking - test_scenario_slashing - test_scenario_slashing_stakers - test_scenario_deactivation - test_liquidity_baking - test_storage_functions - test_storage - test_token)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_integration_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (deps (glob_files wasm_kernel/*.wasm)) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/gas/dune b/src/proto_019_PtParisB/lib_protocol/test/integration/gas/dune deleted file mode 100644 index 855ae27b1632fd9162596f1000cd4d0fd05c1681..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/gas/dune +++ /dev/null @@ -1,45 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_protocol_test_integration_gas_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-alcotezt - octez-libs.base - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.base-test-helpers) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Octez_alcotezt - -open Tezos_base.TzPervasives - -open Tezos_protocol_019_PtParisB - -open Tezos_019_PtParisB_test_helpers - -open Tezos_base_test_helpers) - (modules test_gas_costs test_gas_levels)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_integration_gas_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/gas/test_gas_costs.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/gas/test_gas_costs.ml deleted file mode 100644 index 344545deb5aa470a0a31c70b047d4b820a2bb51d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/gas/test_gas_costs.ml +++ /dev/null @@ -1,291 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (gas costs) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/gas/main.exe \ - -- --file test_gas_costs.ml - Subject: Gas costs - Current limitations: for maps, sets & compare, we only test - integer comparable keys. -*) - -open Protocol -module S = Saturation_repr - -let dummy_list = Script_list.(cons 42 empty) - -let forty_two = Script_int.of_int 42 - -let forty_two_n = Script_int.abs forty_two - -let dummy_set = - let open Script_set in - update forty_two true (empty Script_typed_ir.int_t) - -let dummy_map = - let open Script_map in - update forty_two (Some forty_two) (empty Script_typed_ir.int_t) - -let dummy_timestamp = Script_timestamp.of_zint (Z.of_int 42) - -let dummy_pk = - Signature.Public_key.of_b58check_exn - "edpkuFrRoDSEbJYgxRtLx2ps82UdaYc1WwfS9sE11yhauZt5DgCHbU" - -let dummy_bytes = Bytes.of_string "dummy" - -let dummy_string = - match Script_string.of_string "dummy" with - | Ok s -> s - | Error _ -> assert false - -let dummy_ty = Script_typed_ir.never_t - -let free = ["balance"; "bool"; "parsing_unit"; "unparsing_unit"] - -(* /!\ The compiler will only complain if costs are _removed_ /!\*) -let all_interpreter_costs = - let open Michelson_v1_gas.Cost_of.Interpreter in - [ - ("drop", drop); - ("dup", dup); - ("swap", swap); - ("cons_some", cons_some); - ("cons_none", cons_none); - ("if_none", if_none); - ("cons_pair", cons_pair); - ("car", car); - ("cdr", cdr); - ("cons_left", cons_left); - ("cons_right", cons_right); - ("if_left", if_left); - ("cons_list", cons_list); - ("nil", nil); - ("if_cons", if_cons); - ("list_map", list_map dummy_list); - ("list_size", list_size); - ("list_iter", list_iter dummy_list); - ("empty_set", empty_set); - ("set_iter", set_iter dummy_set); - ("set_mem", set_mem forty_two dummy_set); - ("set_update", set_update forty_two dummy_set); - ("set_size", set_size); - ("empty_map", empty_map); - ("map_map", map_map dummy_map); - ("map_iter", map_iter dummy_map); - ("map_mem", map_mem forty_two dummy_map); - ("map_get", map_get forty_two dummy_map); - ("map_update", map_update forty_two dummy_map); - ("map_size", map_size); - ("add_seconds_timestamp", add_seconds_timestamp forty_two dummy_timestamp); - ("sub_timestamp_seconds", sub_timestamp_seconds dummy_timestamp forty_two); - ("diff_timestamps", diff_timestamps dummy_timestamp dummy_timestamp); - ("concat_string_pair", concat_string_pair dummy_string dummy_string); - ("slice_string", slice_string dummy_string); - ("string_size", string_size); - ("concat_bytes_pair", concat_bytes_pair dummy_bytes dummy_bytes); - ("slice_bytes", slice_bytes dummy_bytes); - ("bytes_size", bytes_size); - ("add_tez", add_tez); - ("sub_tez", sub_tez); - ("mul_teznat", mul_teznat); - ("bool_or", bool_or); - ("bool_and", bool_and); - ("bool_xor", bool_xor); - ("bool_not", bool_not); - ("is_nat", is_nat); - ("abs_int", abs_int forty_two); - ("int_nat", int_nat); - ("neg", neg forty_two); - ("add_int", add_int forty_two forty_two); - ("sub_int", sub_int forty_two forty_two); - ("mul_int", mul_int forty_two forty_two); - ("ediv_teznat", ediv_teznat Alpha_context.Tez.fifty_cents forty_two); - ("ediv_tez", ediv_tez); - ("ediv_int", ediv_int forty_two (Script_int.of_int 1)); - ("eq", eq); - ("lsl_nat", lsl_nat forty_two); - ("lsr_nat", lsr_nat forty_two); - ("or_nat", or_nat forty_two forty_two); - ("and_nat", and_nat forty_two forty_two); - ("xor_nat", xor_nat forty_two forty_two); - ("not_int", not_int forty_two); - ("if_", if_); - ("loop", loop); - ("loop_left", loop_left); - ("dip", dip); - ("check_signature", check_signature dummy_pk dummy_bytes); - ("blake2b", blake2b dummy_bytes); - ("sha256", sha256 dummy_bytes); - ("sha512", sha512 dummy_bytes); - ("dign", dign 42); - ("dugn", dugn 42); - ("dipn", dipn 42); - ("dropn", dropn 42); - ("neq", neq); - ("compare", compare Script_typed_ir.int_t forty_two forty_two); - ( "concat_string_precheck", - concat_string_precheck Script_list.(cons "42" empty) ); - ("concat_string", concat_string (S.safe_int 42)); - ("concat_bytes", concat_bytes (S.safe_int 42)); - ("exec", exec); - ("apply_rec", apply ~rec_flag:true); - ("apply", apply ~rec_flag:false); - ("lambda", lambda); - ("address", address); - ("contract", contract); - ("transfer_tokens", transfer_tokens); - ("implicit_account", implicit_account); - ("create_contract", create_contract); - ("set_delegate", set_delegate); - (* balance is free *) - ("balance", balance); - ("level", level); - ("now", now); - ("hash_key", hash_key dummy_pk); - ("source", source); - ("sender", sender); - ("self", self); - ("self_address", self_address); - ("amount", amount); - ("chain_id", chain_id); - ("unpack_failed", unpack_failed "dummy"); - ] - -(* /!\ The compiler will only complain if costs are _removed_ /!\*) -let all_parsing_costs = - let open Michelson_v1_gas.Cost_of.Typechecking in - [ - ("public_key_optimized", public_key_optimized); - ("public_key_readable", public_key_readable); - ("key_hash_optimized", key_hash_optimized); - ("key_hash_readable", key_hash_readable); - ("signature_optimized", signature_optimized); - ("signature_readable", signature_readable); - ("chain_id_optimized", chain_id_optimized); - ("chain_id_readable", chain_id_readable); - ("address_optimized", address_optimized); - ("contract_optimized", contract_optimized); - ("contract_readable", contract_readable); - ("check_printable", check_printable "dummy"); - ("ty_eq", ty_eq dummy_ty dummy_ty); - ("ty_eq_prim", ty_eq_prim); - ("parse_type_cycle", parse_type_cycle); - ("parse_instr_cycle", parse_instr_cycle); - ("parse_data_cycle", parse_data_cycle); - ("bool", bool); - ("parsing_unit", unit); - ("timestamp_readable", timestamp_readable "dummy"); - ("contract_exists", contract_exists); - ("proof_argument", proof_argument 42); - ] - -(* /!\ The compiler will only complain if costs are _removed_ /!\*) -let all_unparsing_costs = - let open Michelson_v1_gas.Cost_of.Unparsing in - [ - ("public_key_optimized", public_key_optimized); - ("public_key_readable", public_key_readable); - ("key_hash_optimized", key_hash_optimized); - ("key_hash_readable", key_hash_readable); - ("signature_optimized", signature_optimized); - ("signature_readable", signature_readable); - ("chain_id_optimized", chain_id_optimized); - ("chain_id_readable", chain_id_readable); - ("timestamp_readable", timestamp_readable); - ("address_optimized", address_optimized); - ("contract_optimized", contract_optimized); - ("contract_readable", contract_readable); - ("unparse_type", unparse_type dummy_ty); - ("unparse_instr_cycle", unparse_instr_cycle); - ("unparse_data_cycle", unparse_data_cycle); - ("unparsing_unit", unit); - ("operation", operation dummy_bytes); - ] - -(* /!\ The compiler will only complain if costs are _removed_ /!\*) -let all_io_costs = - let open Storage_costs in - [ - ("read_access 0 0", read_access ~path_length:0 ~read_bytes:0); - ("read_access 1 0", read_access ~path_length:1 ~read_bytes:0); - ("read_access 0 1", read_access ~path_length:0 ~read_bytes:1); - ("read_access 1 1", read_access ~path_length:1 ~read_bytes:1); - ("write_access 0", write_access ~written_bytes:0); - ("write_access 1", write_access ~written_bytes:1); - ] - -(* Here we're using knowledge of the internal representation of costs to - cast them to S ... *) -let cast_cost_to_s (c : Alpha_context.Gas.cost) : _ S.t = - Data_encoding.Binary.to_bytes_exn Alpha_context.Gas.cost_encoding c - |> Data_encoding.Binary.of_bytes_exn S.n_encoding - -(** Checks that all costs are positive values. *) -let test_cost_reprs_are_all_positive list () = - let open Lwt_result_syntax in - List.iter_es - (fun (cost_name, cost) -> - if S.(cost > S.zero) then return_unit - else if S.equal cost S.zero && List.mem ~equal:String.equal cost_name free - then return_unit - else - tzfail - (Exn - (Failure (Format.asprintf "Gas cost test \"%s\" failed" cost_name)))) - list - -(** Checks that all costs are positive values. *) -let test_costs_are_all_positive list () = - let list = - List.map (fun (cost_name, cost) -> (cost_name, cast_cost_to_s cost)) list - in - test_cost_reprs_are_all_positive list () - -let tests = - [ - Tztest.tztest - "Positivity of interpreter costs" - `Quick - (test_costs_are_all_positive all_interpreter_costs); - Tztest.tztest - "Positivity of typechecking costs" - `Quick - (test_costs_are_all_positive all_parsing_costs); - Tztest.tztest - "Positivity of unparsing costs" - `Quick - (test_costs_are_all_positive all_unparsing_costs); - Tztest.tztest - "Positivity of io costs" - `Quick - (test_cost_reprs_are_all_positive all_io_costs); - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("gas cost functions", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/gas/test_gas_levels.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/gas/test_gas_levels.ml deleted file mode 100644 index 53673770f75f5b1a84b724d3c81c62283e4a8471..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/gas/test_gas_levels.ml +++ /dev/null @@ -1,632 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Gas levels) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/gas/main.exe \ - -- --file test_gas_levels.ml - Subject: On gas consumption and exhaustion. -*) - -open Protocol -open Raw_context -module S = Saturation_repr - -(* This value is supposed to be larger than the block gas level limit - but not saturated. *) -let opg = max_int / 10000 - -exception Gas_levels_test_error of string - -let err x = Exn (Gas_levels_test_error x) - -let succeed x = match x with Ok _ -> true | _ -> false - -let failed x = not (succeed x) - -let dummy_context () = - let open Lwt_result_wrap_syntax in - let* block, _contract = Context.init1 ~consensus_threshold:0 () in - let*@ ctxt = - Raw_context.prepare - ~level:Int32.zero - ~predecessor_timestamp:Time.Protocol.epoch - ~timestamp:Time.Protocol.epoch - (* ~fitness:[] *) - (block.context : Tezos_protocol_environment.Context.t) - ~adaptive_issuance_enable:false - in - return ctxt - -let consume_gas_lwt context gas = - let open Lwt_result_wrap_syntax in - let*?@ ctxt = consume_gas context (S.safe_int gas) in - return ctxt - -let consume_gas_limit_in_block_lwt context gas = - let open Lwt_result_wrap_syntax in - let*?@ ctxt = consume_gas_limit_in_block context gas in - return ctxt - -let test_detect_gas_exhaustion_in_fresh_context () = - let open Lwt_result_syntax in - let* context = dummy_context () in - fail_unless - (consume_gas context (S.safe_int opg) |> succeed) - (err "In a fresh context, gas consumption is unlimited.") - -(** Create a context with a given block gas level, capped at the - hard gas limit per block *) -let make_context remaining_block_gas = - let open Lwt_result_syntax in - let open Gas_limit_repr in - let* context = dummy_context () in - let hard_limit = Arith.fp (constants context).hard_gas_limit_per_operation in - let hard_limit_block = - Arith.fp (constants context).hard_gas_limit_per_block - in - let block_gas = Arith.(unsafe_fp (Z.of_int remaining_block_gas)) in - let rec aux context to_consume = - (* Because of saturated arithmetic, [to_consume] should never be negative. *) - assert (Arith.(to_consume >= zero)) ; - if Arith.(to_consume = zero) then return context - else if Arith.(to_consume <= hard_limit) then - consume_gas_limit_in_block_lwt context to_consume - else - let* context = consume_gas_limit_in_block_lwt context hard_limit in - aux context (Arith.sub to_consume hard_limit) - in - aux context Arith.(sub hard_limit_block block_gas) - -(** Test operation gas exhaustion. Should pass when remaining gas is 0, - and fail when it goes over *) -let test_detect_gas_exhaustion_when_operation_gas_hits_zero () = - let open Lwt_result_syntax in - let gas_op = 100000 in - let* context = dummy_context () in - set_gas_limit context (Gas_limit_repr.Arith.unsafe_fp (Z.of_int gas_op)) - |> fun context -> - let* () = - fail_unless - (consume_gas context (S.safe_int gas_op) |> succeed) - (err "Succeed when consuming exactly the remaining operation gas.") - in - fail_unless - (consume_gas context (S.safe_int (gas_op + 1)) |> failed) - (err "Fail when consuming more than the remaining operation gas.") - -(** Test block gas exhaustion *) -let test_detect_gas_exhaustion_when_block_gas_hits_zero () = - let open Lwt_result_syntax in - let gas k = Gas_limit_repr.Arith.unsafe_fp (Z.of_int k) in - let remaining_gas = gas 100000 and too_much = gas (100000 + 1) in - let* context = make_context 100000 in - let* () = - fail_unless - (consume_gas_limit_in_block context remaining_gas |> succeed) - (err "Succeed when consuming exactly the remaining block gas.") - in - fail_unless - (consume_gas_limit_in_block context too_much |> failed) - (err "Fail when consuming more than the remaining block gas.") - -(** Test invalid gas limit. Should fail when limit is above the hard gas limit per - operation *) -let test_detect_gas_limit_consumption_above_hard_gas_operation_limit () = - let open Lwt_result_syntax in - let* context = dummy_context () in - fail_unless - (consume_gas_limit_in_block - context - (Gas_limit_repr.Arith.unsafe_fp (Z.of_int opg)) - |> failed) - (err - "Fail when consuming gas above the hard limit per operation in the \ - block.") - -(** For a given [context], check if its levels match those given in [block_level] and - [operation_level] *) -let check_context_levels context block_level operation_level = - let open Lwt_result_syntax in - let op_check = - match gas_level context with - | Unaccounted -> true - | Limited {remaining} -> - Gas_limit_repr.Arith.(unsafe_fp (Z.of_int operation_level) = remaining) - in - let block_check = - Gas_limit_repr.Arith.( - unsafe_fp (Z.of_int block_level) = block_gas_level context) - in - let* () = - fail_unless - (op_check || block_check) - (err "Unexpected block and operation gas levels") - in - let* () = fail_unless op_check (err "Unexpected operation gas level") in - fail_unless block_check (err "Unexpected block gas level") - -let monitor remaining_block_gas initial_operation_level consumed_gas () = - let open Lwt_result_syntax in - let op_limit = - Gas_limit_repr.Arith.unsafe_fp (Z.of_int initial_operation_level) - in - let* context = make_context remaining_block_gas in - let* context = consume_gas_limit_in_block_lwt context op_limit in - set_gas_limit context op_limit |> fun context -> - let* context = consume_gas_lwt context consumed_gas in - check_context_levels - context - (remaining_block_gas - initial_operation_level) - (initial_operation_level - consumed_gas) - -let test_monitor_gas_level = monitor 1000 100 10 - -(** Test cas consumption mode switching (limited -> unlimited) *) -let test_set_gas_unlimited () = - let open Lwt_result_syntax in - let init_block_gas = 100000 in - let op_limit_int = 10000 in - let op_limit = Gas_limit_repr.Arith.unsafe_fp (Z.of_int op_limit_int) in - let* context = make_context init_block_gas in - set_gas_limit context op_limit |> set_gas_unlimited |> fun context -> - let* context = consume_gas_lwt context opg in - check_context_levels context init_block_gas (-1) - -(** Test cas consumption mode switching (unlimited -> limited) *) -let test_set_gas_limited () = - let open Lwt_result_syntax in - let init_block_gas = 100000 in - let op_limit_int = 10000 in - let op_limit = Gas_limit_repr.Arith.unsafe_fp (Z.of_int op_limit_int) in - let op_gas = 100 in - let* context = make_context init_block_gas in - set_gas_unlimited context |> fun context -> - set_gas_limit context op_limit |> fun context -> - let* context = consume_gas_lwt context op_gas in - check_context_levels context init_block_gas (op_limit_int - op_gas) - -(*** Tests with blocks ***) - -let begin_validation_and_application ctxt chain_id mode ~predecessor = - let open Lwt_result_syntax in - let* validation_state = begin_validation ctxt chain_id mode ~predecessor in - let* application_state = begin_application ctxt chain_id mode ~predecessor in - return (validation_state, application_state) - -let validate_and_apply_operation (validation_state, application_state) op = - let open Lwt_result_syntax in - let oph = Alpha_context.Operation.hash_packed op in - let* validation_state = validate_operation validation_state oph op in - let* application_state, receipt = apply_operation application_state oph op in - return ((validation_state, application_state), receipt) - -let finalize_validation_and_application (validation_state, application_state) - shell_header = - let open Lwt_result_syntax in - let* () = finalize_validation validation_state in - finalize_application application_state shell_header - -let apply_with_gas header ?(operations = []) (pred : Block.t) = - let open Lwt_result_wrap_syntax in - let open Alpha_context in - let+@ context, consumed_gas = - let* vstate = - begin_validation_and_application - pred.context - Chain_id.zero - (Application header) - ~predecessor:pred.header.shell - in - let* vstate = - List.fold_left_es - (fun vstate op -> - let+ state, _result = validate_and_apply_operation vstate op in - state) - vstate - operations - in - let+ validation, result = - finalize_validation_and_application vstate (Some header.shell) - in - (validation.context, result.consumed_gas) - in - let hash = Block_header.hash header in - ( {Block.hash; header; operations; context; constants = pred.constants}, - consumed_gas ) - -let bake_with_gas ?policy ?timestamp ?operation ?operations pred = - let open Lwt_result_syntax in - let operations = - match (operation, operations) with - | Some op, Some ops -> Some (op :: ops) - | Some op, None -> Some [op] - | None, Some ops -> Some ops - | None, None -> None - in - let* header = Block.Forge.forge_header ?timestamp ?policy ?operations pred in - let* header = Block.Forge.sign_header header in - apply_with_gas header ?operations pred - -let check_consumed_gas consumed expected = - fail_unless - Alpha_context.Gas.Arith.(consumed = expected) - (err - (Format.asprintf - "Gas discrepancy: consumed gas : %a | expected : %a\n" - Alpha_context.Gas.Arith.pp - consumed - Alpha_context.Gas.Arith.pp - expected)) - -let lazy_unit = Alpha_context.Script.lazy_expr (Expr.from_string "Unit") - -let prepare_origination block source script = - let code = Expr.toplevel_from_string script in - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_unit} - in - Op.contract_origination (B block) source ~script - -let originate_contract block source script = - let open Lwt_result_syntax in - let* operation, dst = prepare_origination block source script in - let* block = Block.bake ~operation block in - return (block, dst) - -let init_block n to_originate = - let open Lwt_result_syntax in - let* block, src_list = Context.init_n n ~consensus_threshold:0 () in - match src_list with - | [] -> assert false - | src :: _ -> - (*** originate contracts ***) - let rec full_originate block originated = function - | [] -> return (block, List.rev originated) - | h :: t -> - let* block, ct = originate_contract block src h in - full_originate block (ct :: originated) t - in - let* block, originated = full_originate block [] to_originate in - return (block, src_list, originated) - -let nil_contract = - "parameter unit;\n\ - storage unit;\n\ - code {\n\ - \ DROP;\n\ - \ UNIT; NIL operation; PAIR\n\ - \ }\n" - -let fail_contract = "parameter unit; storage unit; code { FAIL }" - -let loop_contract = - "parameter unit;\n\ - storage unit;\n\ - code {\n\ - \ DROP;\n\ - \ PUSH bool True;\n\ - \ LOOP {\n\ - \ PUSH string \"GASGASGAS\";\n\ - \ PACK;\n\ - \ SHA3;\n\ - \ DROP;\n\ - \ PUSH bool True\n\ - \ };\n\ - \ UNIT; NIL operation; PAIR\n\ - \ }\n" - -let block_with_one_origination n contract = - let open Lwt_result_syntax in - let* block, srcs, originated = init_block n [contract] in - match originated with [dst] -> return (block, srcs, dst) | _ -> assert false - -let full_block n () = - let open Lwt_result_syntax in - let* block, src_list, originated = - init_block n [nil_contract; fail_contract; loop_contract] - in - let dst_nil, dst_fail, dst_loop = - match originated with [c1; c2; c3] -> (c1, c2, c3) | _ -> assert false - in - return (block, src_list, dst_nil, dst_fail, dst_loop) - -(** Combine a list of operations into an operation list. Also returns - the sum of their gas limits.*) -let combine_operations_with_gas block list_dst = - let open Lwt_result_syntax in - let rec make_op_list src full_gas op_list = function - | [] -> return (src, full_gas, List.rev op_list) - | (src, dst, gas_limit) :: t -> - let* op = - Op.transaction - ~gas_limit:(Custom_gas gas_limit) - (B block) - src - dst - Alpha_context.Tez.zero - in - make_op_list - (Some src) - (Alpha_context.Gas.Arith.add full_gas gas_limit) - (op :: op_list) - t - in - let* src, full_gas, op_list = - make_op_list None Alpha_context.Gas.Arith.zero [] list_dst - in - match src with - | None -> assert false - | Some source -> - let* operation = - Op.batch_operations ~recompute_counters:true ~source (B block) op_list - in - return (operation, full_gas) - -(** Applies [combine_operations_with_gas] to lists in a list, then bake a block - with this list of operations. Also returns the sum of all gas limits *) -let bake_operations_with_gas block list_list_dst = - let open Lwt_result_syntax in - let rec make_list full_gas op_list = function - | [] -> return (full_gas, List.rev op_list) - | list_dst :: t -> - let* op, gas = combine_operations_with_gas block list_dst in - make_list (Alpha_context.Gas.Arith.add full_gas gas) (op :: op_list) t - in - let* gas_limit_total, operations = - make_list Alpha_context.Gas.Arith.zero [] list_list_dst - in - let* block, consumed_gas = bake_with_gas ~operations block in - return (block, consumed_gas, gas_limit_total) - -(* A sampler for gas limits, the returned value should always be high - enough to apply a simple manager operation but lower than the - operation gas limit. *) -let basic_gas_sampler () = - Alpha_context.Gas.Arith.integral_of_int_exn - (Michelson_v1_gas.Internal_for_tests.int_cost_of_manager_operation + 1000 - + Random.int 900) - -let generic_test_block_one_origination contract gas_sampler structure = - let open Lwt_result_syntax in - let sources_number = List.length structure in - let* block, src_list, dst = - block_with_one_origination sources_number contract - in - let lld = - List.mapi - (fun i t -> - match List.nth src_list i with - | None -> assert false - | Some src -> (List.map (fun _ -> (src, dst, gas_sampler ()))) t) - structure - in - let* _block, consumed_gas, gas_limit_total = - bake_operations_with_gas block lld - in - check_consumed_gas consumed_gas gas_limit_total - -let make_batch_test_block_one_origination name contract gas_sampler = - let test = generic_test_block_one_origination contract gas_sampler in - let test_one_operation () = test [[()]] in - let test_one_operation_list () = test [[(); (); ()]] in - let test_many_single_operations () = test [[()]; [()]; [()]] in - let test_mixed_operations () = test [[(); ()]; [()]; [(); (); ()]] in - let app_n = List.map (fun (x, y) -> (x ^ " with contract " ^ name, y)) in - app_n - [ - ("bake one operation", test_one_operation); - ("bake one operation list", test_one_operation_list); - ("multiple single operations", test_many_single_operations); - ("both lists and single operations", test_mixed_operations); - ] - -let hard_gas_limit_per_operation = 1_040_000 - -let hard_gas_limit_per_block = 1_733_333 - -(** Tests the consumption of all gas in a block, should pass *) -let test_consume_exactly_all_block_gas () = - let open Lwt_result_syntax in - let number_of_ops = 2 in - let* block, src_list, dst = - block_with_one_origination number_of_ops nil_contract - in - let lld = - List.mapi - (fun i src -> - [ - ( src, - dst, - Alpha_context.Gas.Arith.integral_of_int_exn - (if i = number_of_ops - 1 then - hard_gas_limit_per_block - hard_gas_limit_per_operation - else hard_gas_limit_per_operation) ); - ]) - src_list - in - let* _, _, _ = bake_operations_with_gas block lld in - return_unit - -(** Tests the consumption of more than the block gas level with many single - operations, should fail *) -let test_malformed_block_max_limit_reached () = - let open Lwt_result_syntax in - let number_of_ops = 2 in - let* block, src_list, dst = - block_with_one_origination number_of_ops nil_contract - in - let lld = - List.mapi - (fun i src -> - [ - ( src, - dst, - Alpha_context.Gas.Arith.integral_of_int_exn - (if i = number_of_ops - 1 then - hard_gas_limit_per_block - hard_gas_limit_per_operation + 1 - else hard_gas_limit_per_operation) ); - ]) - src_list - in - let*! result = bake_operations_with_gas block lld in - match result with - | Error _ -> return_unit - | Ok _ -> - tzfail - (err - "Invalid block: sum of operation gas limits exceeds hard gas limit \ - per block") - -(** Tests the consumption of more than the block gas level with one big - operation list, should fail *) -let test_malformed_block_max_limit_reached' () = - let open Lwt_result_syntax in - let number_of_ops = 2 in - let* block, src_list, dst = - block_with_one_origination number_of_ops nil_contract - in - let lld = - List.mapi - (fun i src -> - [ - ( src, - dst, - Alpha_context.Gas.Arith.integral_of_int_exn - (if i = number_of_ops - 1 then - hard_gas_limit_per_block - hard_gas_limit_per_operation + 1 - else hard_gas_limit_per_operation) ); - ]) - src_list - in - let*! result = bake_operations_with_gas block lld in - match result with - | Error _ -> return_unit - | Ok _ -> - tzfail - (err - "Invalid block: sum of gas limits in operation list exceeds hard \ - gas limit per block") - -let test_block_mixed_operations () = - let open Lwt_result_syntax in - let number_of_ops = 4 in - let* block, src_list, dst_nil, dst_fail, dst_loop = - full_block number_of_ops () - in - let l = [[dst_nil]; [dst_nil; dst_fail; dst_nil]; [dst_loop]; [dst_nil]] in - let*? lld = - List.map2 - ~when_different_lengths:[] - (fun src l -> (List.map (fun x -> (src, x, basic_gas_sampler ()))) l) - src_list - l - in - let* _block, consumed_gas, gas_limit_total = - bake_operations_with_gas block lld - in - check_consumed_gas consumed_gas gas_limit_total - -(** Test that emptying an account does not cost extra-gas *) -let test_emptying_account_gas () = - let open Lwt_result_syntax in - let open Alpha_context in - let* b, bootstrap = Context.init1 ~consensus_threshold:0 () in - let bootstrap_pkh = Context.Contract.pkh bootstrap in - let {Account.pkh; pk; _} = Account.new_account () in - let contract = Contract.Implicit pkh in - let amount = Tez_helpers.of_int 10 in - let* op1 = Op.transaction (B b) bootstrap contract amount in - let* b = Block.bake ~operation:op1 b in - let* op2 = Op.revelation ~fee:Tez.zero (B b) pk in - let* b = Block.bake ~operation:op2 b in - let gas_limit = Op.Low in - let* op = - Op.delegation ~fee:amount ~gas_limit (B b) contract (Some bootstrap_pkh) - in - let* i = Incremental.begin_construction b in - (* The delegation operation should be valid as the operation effect - would be to remove [contract] and should not generate any extra - gas cost. *) - let expect_apply_failure = function - | [Environment.Ecoproto_error (Storage_error (Raw_context.Missing_key _))] - -> - (* The delegation is expected to fail in the apply part as the - contract was emptied when fees were retrieved. *) - return_unit - | err -> failwith "got unexpected error: %a" pp_print_trace err - in - let* (_i : Incremental.t) = - Incremental.add_operation ~expect_apply_failure i op - in - return_unit - -let quick (what, how) = Tztest.tztest what `Quick how - -let tests = - List.map - quick - ([ - ( "Detect gas exhaustion in fresh context", - test_detect_gas_exhaustion_in_fresh_context ); - ( "Detect gas exhaustion when operation gas as hits zero", - test_detect_gas_exhaustion_when_operation_gas_hits_zero ); - ( "Detect gas exhaustion when block gas as hits zero", - test_detect_gas_exhaustion_when_block_gas_hits_zero ); - ( "Detect gas limit consumption when it is above the hard gas operation \ - limit", - test_detect_gas_limit_consumption_above_hard_gas_operation_limit ); - ( "Each new operation impacts block gas level, each gas consumption \ - impacts operation gas level", - test_monitor_gas_level ); - ( "Switches operation gas consumption from limited to unlimited", - test_set_gas_unlimited ); - ( "Switches operation gas consumption from unlimited to limited", - test_set_gas_limited ); - ( "Accepts a block that consumes all of its gas", - test_consume_exactly_all_block_gas ); - ( "Detect when the sum of all operation gas limits exceeds the hard gas \ - limit per block", - test_malformed_block_max_limit_reached ); - ( "Detect when gas limit of operation list exceeds the hard gas limit \ - per block", - test_malformed_block_max_limit_reached' ); - ("the gas consumption of various operations", test_block_mixed_operations); - ("emptying an account costs gas", test_emptying_account_gas); - ] - @ make_batch_test_block_one_origination "nil" nil_contract basic_gas_sampler - @ make_batch_test_block_one_origination - "fail" - fail_contract - basic_gas_sampler - @ make_batch_test_block_one_origination - "infinite loop" - loop_contract - basic_gas_sampler) - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("gas levels", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/big_interpreter_stack.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/big_interpreter_stack.tz deleted file mode 100644 index 24832df0827f2300f65a71c3472cd266cbfaac3b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/big_interpreter_stack.tz +++ /dev/null @@ -1,5 +0,0 @@ -{ parameter unit ; - storage unit ; - code { CAR ; - { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { {} ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; - NIL operation; PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/emit.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/emit.tz deleted file mode 100644 index c8c2da0886d0959cbfda0ecc10aef16563fd5aa7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/emit.tz +++ /dev/null @@ -1,16 +0,0 @@ -parameter unit; -storage unit; -code { DROP ; - UNIT ; - PUSH string "right" ; - RIGHT nat ; - EMIT %tag1 ; - PUSH nat 2 ; - LEFT string ; - EMIT %tag2 (or (nat %int) (string %str)) ; - NIL operation ; - SWAP ; - CONS ; - SWAP ; - CONS ; - PAIR } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/fail_rec.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/fail_rec.tz deleted file mode 100644 index cac8886649280e4855955662073fdba00bcd20d6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/fail_rec.tz +++ /dev/null @@ -1,8 +0,0 @@ -{ parameter unit; - storage unit; - code { CAR; - LAMBDA_REC unit unit { }; - SWAP; - EXEC; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_CREATE_CONTRACT.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_CREATE_CONTRACT.tz deleted file mode 100644 index e3ee1fd0665a9cd4db8824d6507d587c56a9d546..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_CREATE_CONTRACT.tz +++ /dev/null @@ -1,24 +0,0 @@ -# This contract uses CREATE_CONTRACT in a view, which is forbidden. -{ - storage unit ; - parameter unit ; - code { - CAR ; - NIL operation ; - PAIR - } ; - view "v" unit unit { - DROP ; - UNIT ; - PUSH mutez 5 ; - NONE key_hash ; - CREATE_CONTRACT { - storage unit ; - parameter unit ; - code { CAR ; NIL operation ; PAIR } - } ; - DROP ; - DROP ; - UNIT - } -} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_SELF.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_SELF.tz deleted file mode 100644 index 79636452d4bff950d281929c3f71f5d2b33da718..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_SELF.tz +++ /dev/null @@ -1,11 +0,0 @@ -# This contract uses SELF in a view, which is forbidden. -{ - storage unit ; - parameter unit ; - code { - CAR ; - NIL operation ; - PAIR - } ; - view "v" unit unit { DROP ; SELF ; DROP ; UNIT } -} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_SET_DELEGATE.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_SET_DELEGATE.tz deleted file mode 100644 index 7e396e55dab124f89164af22e0535de4c17d9bf0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_SET_DELEGATE.tz +++ /dev/null @@ -1,11 +0,0 @@ -# This contract uses SET_DELEGATE in a view, which is forbidden. -{ - storage unit ; - parameter unit ; - code { - CAR ; - NIL operation ; - PAIR - } ; - view "v" key_hash unit { CAR ; SOME ; SET_DELEGATE ; DROP ; UNIT } -} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_TRANSFER_TOKENS.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_TRANSFER_TOKENS.tz deleted file mode 100644 index e6adb07fd31b88756505b3dc8741a2b44305ed0f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/forbidden_op_in_view_TRANSFER_TOKENS.tz +++ /dev/null @@ -1,12 +0,0 @@ -# This contract uses TRANSFER_TOKENS in a view, which is forbidden. -{ - storage unit ; - parameter unit ; - code { - CAR ; - NIL operation ; - PAIR - } ; - view "v" (pair unit mutez (contract unit)) unit - { CAR ; UNPAPAIR ; TRANSFER_TOKENS ; DROP ; UNIT } -} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/int-store.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/int-store.tz deleted file mode 100644 index acd5104c042bdd5e437864d25d1386ed81b156e9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/int-store.tz +++ /dev/null @@ -1,3 +0,0 @@ -{ parameter unit ; - storage int ; - code { CDR ; NIL operation; PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/omega.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/omega.tz deleted file mode 100644 index 52adfdf1facc7adeefbe797815339d2d5f43be28..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/omega.tz +++ /dev/null @@ -1,9 +0,0 @@ -{ parameter unit; - storage unit; - code { CAR; - LAMBDA_REC unit unit - { EXEC }; - SWAP; - EXEC; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact.tz deleted file mode 100644 index b3dd6402f440533399f767ae46efebb81ba2bbfa..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact.tz +++ /dev/null @@ -1,19 +0,0 @@ -{ parameter int; - storage int; - code { CAR ; - LAMBDA_REC int int - { DUP; - EQ; - IF { PUSH int 1 } - { DUP; - DUP 3; - PUSH int 1; - DUP 4; - SUB; - EXEC; - MUL}; - DIP { DROP 2 }}; - SWAP; - EXEC; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_apply.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_apply.tz deleted file mode 100644 index 85515df4cde8756e002fd9370278ce62dc1c4b5e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_apply.tz +++ /dev/null @@ -1,24 +0,0 @@ - {parameter int; - storage int; - code { CAR ; - LAMBDA_REC (pair unit int) int - { UNPAIR; - DUP 2; - EQ; - IF { PUSH int 1 } - { DUP 2; - DUP 4; - DUP 3; - APPLY; - PUSH int 1; - DUP 3; - SUB; - EXEC; - MUL}; - DIP { DROP 3 }}; - UNIT; - APPLY; - SWAP; - EXEC; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_apply_store.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_apply_store.tz deleted file mode 100644 index 8d38ed03bddb76d29d0a10562516b79ea453e0cc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_apply_store.tz +++ /dev/null @@ -1,27 +0,0 @@ -{ storage (or int (lambda int int)); - parameter (or (unit %gen) (int %exec)); - code { UNPAIR; - IF_LEFT{ DROP 2; - LAMBDA_REC (pair unit int) int - { UNPAIR; - DUP 2; - EQ; - IF { PUSH int 1 } - { DUP 2; - DUP 4; - DUP 3; - APPLY; - PUSH int 1; - DUP 3; - SUB; - EXEC; - MUL}; - DIP { DROP 3 }}; - UNIT; - APPLY; - RIGHT int} - { DIP { ASSERT_RIGHT }; - EXEC; - LEFT (lambda int int)}; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_store.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_store.tz deleted file mode 100644 index c4825db7f6349ccaf10c262f414ba1637b87c17d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/rec_fact_store.tz +++ /dev/null @@ -1,22 +0,0 @@ -{ storage (or int (lambda int int)); - parameter (or (unit %gen) (int %exec)); - code { UNPAIR; - IF_LEFT{ DROP 2; - LAMBDA_REC int int - { DUP; - EQ; - IF { PUSH int 1 } - { DUP; - DUP 3; - PUSH int 1; - DUP 4; - SUB; - EXEC; - MUL}; - DIP { DROP 2 }}; - RIGHT int} - { DIP { ASSERT_RIGHT }; - EXEC; - LEFT (lambda int int)}; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz deleted file mode 100644 index 0b9e2ff99264da3632fe62f07c95baf9bbf59381..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract.tz +++ /dev/null @@ -1,73 +0,0 @@ -# This contract manages a shielded pool with a 1 to 1 conversion with respect to -# the mutez, updated by a list of Sapling transactions. -# As a convention, all unshield transactions must contain in their `bound_data` -# field a Micheline encoded public_key_hash which is used as the recipient of -# the unshielded tez. - -storage (sapling_state 8); -parameter (list (sapling_transaction 8)); -code { # Stack manipulation - UNPAIR; - NIL operation; - SWAP; - DIP { SWAP}; - AMOUNT ; - SWAP ; - DIP {SWAP} ; - ITER { - # If the transaction is valid, the resulting stack contains the - # bound_data and balance of the transaction and the updated - # state. If the rest of the script goes well, this state - # will be the new state of the smart contract. - SAPLING_VERIFY_UPDATE; - # In the case of an invalid transaction, we stop. - ASSERT_SOME; - UNPAIR; - SWAP; - UNPAIR; - # Convert the balance in mutez, keeping the signed balance on top - # of the stack and the balance in mutez as the second element. - DUP; - DIP { ABS; # in case of negative balance i.e. shielding - PUSH mutez 1; - MUL; }; - # We have three cases now: unshielding, shielding and transfers. - # If the balance is strictly positive (i.e. unshielding), we send - # funds to the given address. - # If we can't unpack an address from the bound_data, we stop. - IFGT { - DIIP {UNPACK key_hash; - ASSERT_SOME; - IMPLICIT_ACCOUNT }; - SWAP; - # The tokens are transferred to the recipient. - DIP { UNIT; - TRANSFER_TOKENS; - SWAP; - DIP {CONS} ;}; - } - # If the balance is negative or 0 (i.e. shielding or transfer), - # we verify the amount transferred in the transaction is - # exactly the balance returned by verify_update. This enforces - # the conversion 1-1 between mutez and shielded token - # as the balance in mutez of the contract will always be - # the same as the number of tokens in the sapling_state. - # No operation is executed. - { - DIIP {SWAP}; - DIP {SWAP}; - SWAP; - SUB_MUTEZ; ASSERT_SOME; - # For a transfer or shield operation, we don't expect an - # implicit account in the `bound_data` field. - # If one is given, we fail as it might be an invalid - # operation or an erroneous call. - DIIP { SIZE; PUSH nat 0; ASSERT_CMPEQ; }; - SWAP; - }; - }; - DIP { - PUSH mutez 0; - ASSERT_CMPEQ;}; - SWAP; - PAIR} diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_double.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_double.tz deleted file mode 100644 index b826428db278e0a206bd868e60c060779a00ae0a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_double.tz +++ /dev/null @@ -1,27 +0,0 @@ -storage (pair (sapling_state :left 8) (sapling_state :right 8) ); -parameter (pair bool (pair (sapling_transaction :left 8) (sapling_transaction :right 8)) ); -code { UNPAIR ; - UNPAIR ; - DIP {UNPAIR} ; - DIIIP {UNPAIR} ; - DIIP {SWAP} ; - IF { SAPLING_VERIFY_UPDATE ; - ASSERT_SOME ; - CDR ; CDR ; - DIP {DIP {DUP}; - SAPLING_VERIFY_UPDATE; - ASSERT_SOME ; - DROP;}; - } - { DIP { DUP}; - SAPLING_VERIFY_UPDATE; - ASSERT_SOME; - DROP ; - DIP { SAPLING_VERIFY_UPDATE ; - ASSERT_SOME ; - CDR ; CDR; - }}; - PAIR; - NIL operation; - PAIR; - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_drop.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_drop.tz deleted file mode 100644 index b4d4a3a56bc8437ac560d46a5138b90e76c29f4e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_drop.tz +++ /dev/null @@ -1,13 +0,0 @@ -storage (unit); -parameter (list (sapling_transaction 8)); -code { UNPAIR ; - SAPLING_EMPTY_STATE 8; - SWAP ; - ITER { SAPLING_VERIFY_UPDATE ; - ASSERT_SOME ; - CDR ; CDR ; - } ; - DROP ; - NIL operation; - PAIR; - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_send.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_send.tz deleted file mode 100644 index 43a6edba46ec363d19edf4b9651380fbf23a73ff..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_send.tz +++ /dev/null @@ -1,20 +0,0 @@ -storage (unit); -parameter (pair (contract (or (sapling_transaction 8) (sapling_state 8))) (sapling_transaction 8)); -code { UNPAIR ; - UNPAIR; - SWAP ; - SAPLING_EMPTY_STATE 8; - SWAP ; - SAPLING_VERIFY_UPDATE ; - ASSERT_SOME ; - CDR ; - CDR ; - PUSH mutez 0; - SWAP ; - RIGHT (sapling_transaction 8); - TRANSFER_TOKENS; - NIL operation; - SWAP; - CONS; - PAIR; - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_state_as_arg.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_state_as_arg.tz deleted file mode 100644 index e8a96df046ee88f93be180d95076451ee166c894..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_contract_state_as_arg.tz +++ /dev/null @@ -1,18 +0,0 @@ -storage (option (sapling_transaction 8)); -parameter (or (sapling_transaction 8) (sapling_state 8)); -code { UNPAIR ; - IF_LEFT - { - DIP {DROP;}; - SOME; - } - { DIP {ASSERT_SOME;}; - SWAP ; - SAPLING_VERIFY_UPDATE; - ASSERT_SOME; - DROP ; - NONE (sapling_transaction 8) ; - }; - NIL operation; - PAIR; - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_push_sapling_state.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_push_sapling_state.tz deleted file mode 100644 index 8d1db432bf2ee6ea891c0ccd120fcdbb4618c4b4..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_push_sapling_state.tz +++ /dev/null @@ -1,11 +0,0 @@ -# Attempt to use `PUSH sapling_state 0` where 0 is the ID of a sapling state. -# sapling_state is not allowed in the instruction PUSH. -parameter unit; -storage unit; -code { DROP; - PUSH (sapling_state 8) 0; - DROP; - PUSH unit Unit; - NIL operation; - PAIR; - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_use_existing_state.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_use_existing_state.tz deleted file mode 100644 index bc8c46a28d87df52b6a291caa3fdc4146e39eb77..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/sapling_use_existing_state.tz +++ /dev/null @@ -1,12 +0,0 @@ -parameter (pair (sapling_transaction 8) (sapling_state 8)); -storage (sapling_state 8); -code { UNPAIR; - UNPAIR; - DIIP { DROP }; - SAPLING_VERIFY_UPDATE; - ASSERT_SOME; - CDR; - CDR; - NIL operation; - PAIR; - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/temp_big_maps.tz b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/temp_big_maps.tz deleted file mode 100644 index 0a9162f8f9826adbec0da6079044ce8a21e9c43c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/contracts/temp_big_maps.tz +++ /dev/null @@ -1,81 +0,0 @@ -# Testing passing/originating with big maps from different sources -# This contract is used by test_temp_big_maps.ml - -# The left member of the parameter is either: -# - (Left True) to use a fresh big map -# - (Left False) to use the stored big map -# - (Right bigmap) to use the passed big map - -# The right member of the parameter is used to decide between: -# - passing the argument (positive value) -# - doing nothing (zero) -# - originating (negative value) - -parameter (pair (or bool (big_map int int)) int); -storage (big_map int int); -code - { # parameter * storage :: [] - UNPAIR; # parameter :: storage :: [] - UNPAIR; # parameter.fst :: parameter.snd :: storage :: [] - DIP { SWAP }; # parameter.fst :: storage :: parameter.snd :: [] - IF_LEFT - { # parameter.fst.Left :: storage :: parameter.snd :: [] - IF - { # storage :: parameter.snd :: [] - DROP; # parameter.snd :: [] - EMPTY_BIG_MAP int int; # empty_big_map :: parameter.snd :: [] - PUSH (option int) (Some 2); # Some 2 :: empty_big_map :: parameter.snd :: [] - PUSH int 1; # 1 :: Some 2 :: empty_big_map :: parameter.snd :: [] - UPDATE; # big_map { 1 -> 2 } :: parameter.snd :: [] - } - { # stored_big_map :: parameter.snd :: [] - } - } - { # parameter.fst.Right :: storage :: parameter.snd :: [] - DIP { DROP } # passed_big_map :: parameter.snd :: [] - }; - DUP; # big_map :: big_map :: parameter.snd :: [] - DIG 2; # parameter.snd :: big_map :: big_map :: [] - DUP; # parameter.snd :: parameter.snd :: big_map :: big_map :: [] - IFGT - { # parameter.snd :: big_map :: big_map :: [] - PUSH int -1; - ADD; # parameter.snd - 1 :: big_map :: big_map :: [] - SWAP; # big_map :: parameter.snd - 1 :: big_map :: [] - RIGHT bool ; # Right big_map :: parameter.snd - 1 :: big_map :: [] - PAIR; # Right big_map * (parameter.snd - 1) :: big_map :: [] - DIP { SELF; PUSH mutez 0; }; # Right big_map * (parameter.snd - 1) :: 0 mutez :: self :: big_map :: [] - TRANSFER_TOKENS; # transfer_tokens :: big_map :: [] - NIL operation; # nil_operation :: transfer_tokens :: big_map :: [] - SWAP; # transfer_tokens :: nil_operation :: big_map :: [] - CONS # list operation :: big_map :: [] - } - { # parameter.snd :: big_map :: big_map :: [] - IFEQ - { # big_map :: big_map :: [] - DROP; # big_map :: [] - NIL operation; # list operation :: big_map :: [] - } - { # big_map :: big_map :: [] - PUSH mutez 0; # 0 mutez :: big_map :: big_map :: [] - NONE key_hash; # None key_hash :: 0 mutez :: big_map :: big_map :: [] - CREATE_CONTRACT - { - parameter unit; - storage (big_map int int); - code - { - UNPAIR; - DROP; - NIL operation; - PAIR - } - }; # create_contract :: address :: big_map :: [] - DIP { DROP }; # create_contract :: big_map :: [] - NIL operation; # nil_operation :: create_contract :: big_map :: [] - SWAP; # create_contract :: nil_operation :: big_map :: [] - CONS # list operation :: big_map :: [] - }; - }; - PAIR # (list operation * big_map) :: [] - } diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/dune b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/dune deleted file mode 100644 index b47cd95cbed001188cfaad611adbf04a005d963c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/dune +++ /dev/null @@ -1,84 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name - src_proto_019_PtParisB_lib_protocol_test_integration_michelson_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-alcotezt - octez-libs.base - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.base-test-helpers - octez-protocol-019-PtParisB-libs.client - tezos-benchmark - octez-libs.micheline - tezos-benchmark-019-PtParisB - tezos-benchmark-type-inference-019-PtParisB - octez-protocol-019-PtParisB-libs.plugin - tezos-protocol-019-PtParisB.parameters) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Octez_alcotezt - -open Tezos_base.TzPervasives - -open Tezos_protocol_019_PtParisB - -open Tezos_019_PtParisB_test_helpers - -open Tezos_base_test_helpers - -open Tezos_client_019_PtParisB - -open Tezos_micheline - -open Tezos_benchmark_019_PtParisB - -open Tezos_benchmark_type_inference_019_PtParisB - -open Tezos_protocol_plugin_019_PtParisB) - (modules - test_annotations - test_block_time_instructions - test_contract_event - test_global_constants_storage - test_interpretation - test_lazy_storage_diff - test_patched_contracts - test_sapling - test_script_cache - test_script_typed_ir_size - test_temp_big_maps - test_ticket_accounting - test_ticket_balance_key - test_ticket_balance - test_ticket_lazy_storage_diff - test_ticket_manager - test_ticket_operations_diff - test_ticket_scanner - test_ticket_storage - test_ticket_direct_spending - test_typechecking - test_lambda_normalization)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_integration_michelson_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (deps - (glob_files contracts/*) - (glob_files patched_contracts/*) - (glob_files_rec ../../../../../../michelson_test_scripts/*)) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_annotations.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_annotations.ml deleted file mode 100644 index 849eff71d39ffda129620b0887476a9ca8cf1fd6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_annotations.ml +++ /dev/null @@ -1,150 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Michelson annotations) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_annotations.ml - Subject: This module tests that Michelson annotations are properly handled. -*) - -open Protocol -open Alpha_context - -let type_with_annotations = - "(option :a (or :b (pair %c :d (int %e :f) (nat :g %h)) (bool %i :j)))" - -let contract_with_annotations = - Printf.sprintf - "{ parameter %s ;\n storage %s ;\n code { FAILWITH } }" - type_with_annotations - type_with_annotations - -let contract_factory_with_annotations = - Printf.sprintf - "{ parameter %s ;\n\ - \ storage (option address) ;\n\ - \ code { CAR ;\n\ - \ AMOUNT ;\n\ - \ NONE key_hash ;\n\ - \ CREATE_CONTRACT %s ;\n\ - \ DIP { SOME ;\n\ - \ NIL operation } ;\n\ - \ CONS ;\n\ - \ PAIR } }" - type_with_annotations - contract_with_annotations - -let lazy_none = Script.lazy_expr (Expr.from_string "None") - -let init_and_originate contract_code_string = - let open Lwt_result_syntax in - let* b, source = Context.init1 ~consensus_threshold:0 () in - let* inc = Incremental.begin_construction b in - let code = Expr.toplevel_from_string contract_code_string in - let script = Script.{code = lazy_expr code; storage = lazy_none} in - let* operation, addr = Op.contract_origination_hash (I inc) source ~script in - let+ inc = Incremental.add_operation inc operation in - (inc, source, addr) - -let assert_stored_script_equal inc addr expected_code_string = - let open Lwt_result_syntax in - let* stored_script = Context.Contract.script (I inc) addr in - Assert.equal_string - ~loc:__LOC__ - expected_code_string - (Expr.to_string stored_script) - -let get_address_from_storage inc factory_addr = - let open Lwt_result_wrap_syntax in - let* factory_storage = Context.Contract.storage (I inc) factory_addr in - let ctxt = Incremental.alpha_ctxt inc in - let*?@ option_address_t = Script_typed_ir.(option_t 0 address_t) in - let*! res = - Script_ir_translator.parse_data - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:false ()) - ~allow_forged_tickets:false - ~allow_forged_lazy_storage_id:false - option_address_t - (Micheline.root factory_storage) - in - let*?@ factory_storage, _ctxt = res in - match factory_storage with - | Some {entrypoint; _} when not (Entrypoint.is_default entrypoint) -> - failwith "Did not expect non-default entrypoint" - | Some {destination = Contract (Implicit _); _} -> - failwith "Did not expect implict account" - | Some {destination = Contract (Originated addr); entrypoint = _it_is_default} - -> - return addr - | _ -> - failwith - "The factory contract should have stored the address of the originated \ - contract" - -(* Checks that [contract_with_annotations] once originated is stored as is. *) -let test_external_origination () = - let open Lwt_result_syntax in - let* inc, _source, addr = init_and_originate contract_with_annotations in - assert_stored_script_equal inc addr contract_with_annotations - -(* Checks that [contract_with_annotations] originated from - [contract_factory_with_annotations] is stored as is. *) -let test_internal_origination () = - let open Lwt_result_syntax in - let* inc, source, factory = - init_and_originate contract_factory_with_annotations - in - let* operation = - Op.transaction - (I inc) - source - (Contract.Originated factory) - ~parameters:lazy_none - Tez.zero - in - let* b = Incremental.finalize_block inc in - let* inc = Incremental.begin_construction b in - let* inc = Incremental.add_operation inc operation in - let* addr = get_address_from_storage inc factory in - assert_stored_script_equal inc addr contract_with_annotations - -let tests = - [ - Tztest.tztest - "External origination preserves annotations" - `Quick - test_external_origination; - Tztest.tztest - "Internal origination preserves annotations" - `Quick - test_internal_origination; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("annotations", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_block_time_instructions.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_block_time_instructions.ml deleted file mode 100644 index 478aea0762625e5217a419fb3868f17565bcf761..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_block_time_instructions.ml +++ /dev/null @@ -1,84 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 TriliTech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Michelson block-time instructions) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_block_time_instructions.ml - Subject: This module tests that Michelson instructions related to block time are correct. -*) - -open Tezos_protocol_019_PtParisB_parameters -open Protocol -open Alpha_context - -let context_with_constants constants = - let open Lwt_result_syntax in - let* block, _contracts = Context.init_with_constants1 constants in - let+ incremental = Incremental.begin_construction block in - Incremental.alpha_ctxt incremental - -let test_min_block_time () = - let open Lwt_result_syntax in - let* context = context_with_constants Default_parameters.constants_mainnet in - let* result, _ = - Contract_helpers.run_script - context - ~storage:"0" - ~parameter:"Unit" - {| { parameter unit; storage nat; code { DROP; MIN_BLOCK_TIME; NIL operation; PAIR } } |} - () - in - - let expected_value = - Default_parameters.constants_mainnet.minimal_block_delay - |> Period.to_seconds |> Z.of_int64 - in - - match Micheline.root result.storage with - | Int (_, result_storage) when Z.equal result_storage expected_value -> - return_unit - | _ -> - failwith - "Expected storage to be %a, but got %a" - Z.pp_print - expected_value - Micheline_printer.print_expr - (Micheline_printer.printable - Michelson_v1_primitives.string_of_prim - result.storage) - -let tests = - [ - Tztest.tztest - "MIN_BLOCK_TIME gives current minimal block delay" - `Quick - test_min_block_time; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("block time instructions", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_contract_event.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_contract_event.ml deleted file mode 100644 index 28729f9e1cf14132e396a961393b2139fc628d77..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_contract_event.ml +++ /dev/null @@ -1,140 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Marigold, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** Testing - ------- - Component: Protocol (event logging) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_contract_event.ml - Subject: This module tests that the event logs can be written to the receipt - in correct order and expected format. -*) - -(** Parse a Michelson contract from string. *) -let originate_contract file storage src b = - let open Lwt_result_syntax in - let load_file f = - let ic = open_in f in - let res = really_input_string ic (in_channel_length ic) in - close_in ic ; - res - in - let contract_string = load_file file in - let code = Expr.toplevel_from_string contract_string in - let storage = Expr.from_string storage in - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - let* operation, dst = - Op.contract_origination (B b) src ~fee:(Tez_helpers.of_int 10) ~script - in - let* incr = Incremental.begin_construction b in - let* incr = Incremental.add_operation incr operation in - let+ b = Incremental.finalize_block incr in - (dst, b) - -let path = project_root // Filename.dirname __FILE__ - -(** Run emit.tz and assert that both the order of events and data content are correct *) -let contract_test () = - let open Lwt_result_syntax in - let* b, src = Context.init1 ~consensus_threshold:0 () in - let* dst, b = originate_contract (path // "contracts/emit.tz") "Unit" src b in - let fee = Tez_helpers.of_int 10 in - let parameters = Script.unit_parameter in - let* operation = - Op.transaction ~fee ~parameters (B b) src dst (Tez_helpers.of_int 0) - in - let* incr = Incremental.begin_construction b in - let* incr = Incremental.add_operation incr operation in - match Incremental.rev_tickets incr with - | [ - Operation_metadata - { - contents = - Single_result - (Manager_operation_result - { - internal_operation_results = - [ - Internal_operation_result - ( { - operation = - Event {tag = tag1; payload = data1; ty = ty1}; - _; - }, - Applied (IEvent_result _) ); - Internal_operation_result - ( { - operation = - Event {tag = tag2; payload = data2; ty = ty2}; - _; - }, - Applied (IEvent_result _) ); - ]; - _; - }); - }; - ] -> - let open Micheline in - ((match root data1 with - | Prim (_, D_Right, [String (_, "right")], _) -> () - | _ -> assert false) ; - - match root data2 with - | Prim (_, D_Left, [Int (_, n)], _) -> assert (Z.to_int n = 2) - | _ -> assert false) ; - assert (Entrypoint.to_string tag1 = "tag1") ; - assert (Entrypoint.to_string tag2 = "tag2") ; - (match root ty1 with - | Prim (_, T_or, [Prim (_, T_nat, [], []); Prim (_, T_string, [], [])], []) - -> - () - | _ -> assert false) ; - (match root ty2 with - | Prim - ( _, - T_or, - [Prim (_, T_nat, [], ["%int"]); Prim (_, T_string, [], ["%str"])], - [] ) -> - () - | _ -> assert false) ; - return_unit - | _ -> assert false - -let tests = - [ - Tztest.tztest - "contract emits event with correct data in proper order" - `Quick - contract_test; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("event logging", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_global_constants_storage.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_global_constants_storage.ml deleted file mode 100644 index f45b0ac495701bf81f392945ee148583289f0aa0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_global_constants_storage.ml +++ /dev/null @@ -1,156 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) -open Protocol -open Alpha_context -open Transfers - -(** Testing - ------- - Component: Protocol (global table of constants) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_global_constants_storage.ml - Subject: This module tests that the global table of constants - can be written to and read from across blocks. -*) - -let get_next_context b = - let open Lwt_result_syntax in - let* b = Incremental.begin_construction b in - return (Incremental.alpha_ctxt b) - -let assert_proto_error_id loc id result = - let test err = - (Error_monad.find_info_of_error err).id - = "proto." ^ Protocol.name ^ "." ^ id - in - Assert.error ~loc result test - -let expr_to_hash expr = - let open Result_syntax in - let lexpr = Script_repr.lazy_expr @@ Expr.from_string expr in - let+ b = Script_repr.force_bytes lexpr in - Script_expr_hash.hash_bytes [b] - -(* This test has a long wind-up, but is very simple: it just asserts - that values written to the global table of constants persist across - blocks. *) -let get_happy_path () = - let open Lwt_result_wrap_syntax in - let* b, (alice, bob) = Context.init2 ~consensus_threshold:0 () in - let* b = Incremental.begin_construction b in - let expr_str = "Pair 3 7" in - let expr = Expr.from_string expr_str in - let*?@ hash = expr_to_hash expr_str in - let* op = - Op.register_global_constant - (I b) - ~source:alice - ~value:(Script_repr.lazy_expr expr) - in - let* b = Incremental.add_operation b op in - let* b = Incremental.finalize_block b in - let assert_unchanged b = - let* context = get_next_context b in - let*! result = Global_constants_storage.get context hash in - let*?@ _, result_expr = result in - let+ () = - Test_global_constants.assert_expr_equal __LOC__ expr result_expr - in - b - in - let* b = assert_unchanged b in - let do_many_transfers b = - let* b = Incremental.begin_construction b in - let* b = n_transactions 10 b alice bob (Tez.of_mutez_exn 1000L) in - let* b = Incremental.finalize_block b in - assert_unchanged b - in - let* (_ : Block.t) = - let* b = do_many_transfers b in - let* b = do_many_transfers b in - do_many_transfers b - in - return_unit - -(* Blocks that include a registration of a bad expression should - fail. *) -let test_registration_of_bad_expr_fails () = - let open Lwt_result_syntax in - let* b, alice = Context.init1 () in - let* b = Incremental.begin_construction b in - (* To produce the failure, we attempt to register an expression with - a malformed hash. *) - let expr = Expr.from_string "Pair 1 (constant \"foo\")" in - let* op = - Op.register_global_constant - (I b) - ~source:alice - ~value:(Script_repr.lazy_expr expr) - in - let*! result = Incremental.add_operation b op in - assert_proto_error_id __LOC__ "Badly_formed_constant_expression" result - -(* You cannot register the same expression twice. *) -let test_no_double_register () = - let open Lwt_result_syntax in - let* b, alice = Context.init1 ~consensus_threshold:0 () in - let expr = Expr.from_string "Pair 1 2" in - let* operation = - Op.register_global_constant - (B b) - ~source:alice - ~value:(Script_repr.lazy_expr expr) - in - let* b = Block.bake ~operation b in - (* Register the same expression again *) - let* op = - Op.register_global_constant - (B b) - ~source:alice - ~value:(Script_repr.lazy_expr expr) - in - let* i = Incremental.begin_construction b in - let*! result = Incremental.add_operation i op in - assert_proto_error_id __LOC__ "Expression_already_registered" result - -let tests = - [ - Tztest.tztest "Multiple blocks happy path" `Quick get_happy_path; - Tztest.tztest - "Bad register global operations fail when added to the block" - `Quick - test_registration_of_bad_expr_fails; - Tztest.tztest - "You cannot register the same expression twice." - `Quick - test_no_double_register; - ] - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [("global table of constants", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_interpretation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_interpretation.ml deleted file mode 100644 index 3f2bfbf1f0e6c4d90adf1df820b6ed2bd755044c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_interpretation.ml +++ /dev/null @@ -1,487 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (interpretation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_interpretation.ml - Subject: Interpretation of Michelson scripts -*) - -open Protocol -open Alpha_context -open Script_interpreter - -let test_context () = - let open Lwt_result_syntax in - let* b, _cs = Context.init3 () in - let* v = Incremental.begin_construction b in - return (Incremental.alpha_ctxt v) - -let logger = - Script_interpreter_logging.make - (module struct - let log_interp _ _ _ _ _ = () - - let log_entry _ _ _ _ _ = () - - let log_exit _ _ _ _ _ = () - - let log_control _ = () - - let get_log () = Lwt_result_syntax.return_none - end) - -let run_step ctxt code accu stack = - let open Lwt_result_syntax in - let open Script_interpreter in - let open Contract_helpers in - let* ((_, _, ctxt') as r) = - Internals.step_descr None ctxt default_step_constants code accu stack - in - let* _, _, ctxt'' = - Internals.step_descr - (Some logger) - ctxt - default_step_constants - code - accu - stack - in - if Gas.(remaining_operation_gas ctxt' <> remaining_operation_gas ctxt'') then - Alcotest.failf "Logging should not have an impact on gas consumption." ; - return r - -(** Runs a script with an ill-typed parameter and verifies that a - Bad_contract_parameter error is returned. *) -let test_bad_contract_parameter () = - let open Lwt_result_syntax in - let* ctx = test_context () in - (* Run script with a parameter of wrong type *) - let*! result = - Contract_helpers.run_script - ctx - "{parameter unit; storage unit; code { CAR; NIL operation; PAIR }}" - ~storage:"Unit" - ~parameter:"0" - () - in - match result with - | Ok _ -> Alcotest.fail "expected an error" - | Error (Environment.Ecoproto_error (Bad_contract_parameter source') :: _) -> - Alcotest.(check Testable.contract) - "incorrect field in Bad_contract_parameter" - (Contract.Originated Contract_helpers.default_self) - source' ; - return_unit - | Error errs -> - Alcotest.failf "Unexpected error: %a" Error_monad.pp_print_trace errs - -let test_multiplication_close_to_overflow_passes () = - let open Lwt_result_syntax in - let* ctx = test_context () in - (* Get sure that multiplication deals with numbers between 2^62 and - 2^63 without overflowing *) - let*! result = - Contract_helpers.run_script - ctx - "{parameter unit;storage unit;code {DROP; PUSH mutez \ - 2944023901536524477; PUSH nat 2; MUL; DROP; UNIT; NIL operation; PAIR}}" - ~storage:"Unit" - ~parameter:"Unit" - () - in - match result with - | Ok _ -> return_unit - | Error errs -> - Alcotest.failf "Unexpected error: %a" Error_monad.pp_print_trace errs - -let dummy_loc = -1 - -(** The purpose of these two tests is to check that the Michelson interpreter is - stack-safe (because it is tail-recursive). - - This requires to confront it to deep recursions, typically deeper than what - the gas limit allows. Unfortunately we cannot run the interpreter in - unaccounted gas mode because for efficiency it uses a custom gas management - that represents the gas counter as a mere integer. Instead we set the gas - counter to the highest possible value ([Saturation_repr.saturated]); with - the current gas costs and limits this enables more than a million recursive - calls which is larger than the stack size. *) - -let test_stack_overflow () = - let open Lwt_result_syntax in - let open Script_typed_ir in - let* ctxt = test_context () in - (* Set the gas counter to the maximum value *) - let ctxt = - Gas.update_remaining_operation_gas ctxt - @@ Gas.fp_of_milligas_int (Saturation_repr.saturated :> int) - in - let stack = Bot_t in - let descr kinstr = {kloc = 0; kbef = stack; kaft = stack; kinstr} in - let enorme_et_seq n = - let rec aux n acc = - if n = 0 then acc - else aux (n - 1) (IPush (dummy_loc, Bool_t, true, IDrop (dummy_loc, acc))) - in - aux n (IHalt dummy_loc) - in - let*! result = - run_step ctxt (descr (enorme_et_seq 1_000_000)) EmptyCell EmptyCell - in - match result with - | Ok _ -> return_unit - | Error trace -> - let trace_string = - Format.asprintf "%a" Environment.Error_monad.pp_trace trace - in - Alcotest.failf "Unexpected error (%s) at %s" trace_string __LOC__ - -(** The stack-safety of the interpreter relies a lot on the stack-safety of - Lwt.bind. This second test is similar to the previous one but uses an - instruction (IBig_map_mem) for which the interpreter calls Lwt.bind. *) - -let test_stack_overflow_in_lwt () = - let open Lwt_result_syntax in - let open Script_typed_ir in - let* ctxt = test_context () in - let ctxt = - Gas.update_remaining_operation_gas ctxt - @@ Gas.fp_of_milligas_int (Saturation_repr.saturated :> int) - in - let stack = Bot_t in - let descr kinstr = {kloc = 0; kbef = stack; kaft = stack; kinstr} in - let push_empty_big_map k = IEmpty_big_map (dummy_loc, unit_t, unit_t, k) in - let large_mem_seq n = - let rec aux n acc = - if n = 0 then acc - else - aux - (n - 1) - (IDup - ( dummy_loc, - IPush - ( dummy_loc, - Unit_t, - (), - IBig_map_mem (dummy_loc, IDrop (dummy_loc, acc)) ) )) - in - aux n (IDrop (dummy_loc, IHalt dummy_loc)) - in - let script = push_empty_big_map (large_mem_seq 1_000_000) in - let*! result = run_step ctxt (descr script) EmptyCell EmptyCell in - match result with - | Ok _ -> return_unit - | Error trace -> - let trace_string = - Format.asprintf "%a" Environment.Error_monad.pp_trace trace - in - Alcotest.failf "Unexpected error (%s) at %s" trace_string __LOC__ - -(** Test the encoding/decoding of script_interpreter.ml specific errors *) -let test_json_roundtrip name testable enc v = - let open Lwt_result_syntax in - let v' = - Data_encoding.Json.destruct enc (Data_encoding.Json.construct enc v) - in - Alcotest.check - testable - (Format.asprintf "round trip should not change value of %s" name) - v - v' ; - return_unit - -(** Encoding/decoding of script_interpreter.ml specific errors. *) -let test_json_roundtrip_err name e () = - test_json_roundtrip - name - Testable.protocol_error - Environment.Error_monad.error_encoding - e - -let error_encoding_tests = - let contract_zero = Contract.Implicit Signature.Public_key_hash.zero in - let script_expr_int = Micheline.strip_locations (Micheline.Int (0, Z.zero)) in - List.map - (fun (name, e) -> - Tztest.tztest - (Format.asprintf "test error encoding: %s" name) - `Quick - (test_json_roundtrip_err name e)) - [ - ("Reject", Reject (0, script_expr_int, None)); - ("Overflow", Overflow (0, None)); - ("Runtime_contract_error", Runtime_contract_error Contract_hash.zero); - ("Bad_contract_parameter", Bad_contract_parameter contract_zero); - ("Cannot_serialize_failure", Cannot_serialize_failure); - ("Cannot_serialize_storage", Cannot_serialize_storage); - ] - -module Test_map_instr_on_options = struct - type storage = {prev : int option; total : int} - - (* storage: (last input * total); param replaces the last input and - if some – gets added to the total. *) - let test_map_option_script = - {| { parameter (option int); - storage (pair (option int) int); - code { - UNPAIR ; - DIP { CDR } ; - MAP { - DUP ; - DIP { ADD } ; - } ; - PAIR ; - NIL operation ; - PAIR ; - } - } |} - - let run_test_map_opt_script param {prev; total} = - let open Lwt_result_syntax in - let storage = - Option.fold - ~none:(Format.sprintf "Pair None %d" total) - ~some:(fun p -> Format.sprintf "Pair (Some %d) %d" p total) - prev - in - let parameter = - Option.fold ~none:"None" ~some:(Format.sprintf "Some %d") param - in - let* ctxt = test_context () in - Contract_helpers.run_script - ctxt - test_map_option_script - ~storage - ~parameter - () - - let assume_storage_shape = - let open Micheline in - let open Michelson_v1_primitives in - function - | Prim (_, D_Pair, [Prim (_, D_None, [], _); Int (_, total)], _) -> - {prev = None; total = Z.to_int total} - | Prim (_, D_Pair, [Prim (_, D_Some, [Int (_, prev)], _); Int (_, total)], _) - -> - {prev = Some (Z.to_int prev); total = Z.to_int total} - | _ -> QCheck2.assume_fail () - - let assertions storage_before storage_after = - let open Lwt_result_syntax in - function - | None -> - let* () = - Assert.is_none ~loc:__LOC__ ~pp:Format.pp_print_int storage_after.prev - in - Assert.equal_int ~loc:__LOC__ storage_before.total storage_after.total - | Some input -> - let* prev_aft = Assert.get_some ~loc:__LOC__ storage_after.prev in - let* () = Assert.equal_int ~loc:__LOC__ input prev_aft in - Assert.equal_int - ~loc:__LOC__ - (storage_before.total + input) - storage_after.total - - let test_mapping (input, prev, total) = - let open Lwt_result_syntax in - let storage_before = {prev; total} in - let* {storage; _}, _ = run_test_map_opt_script input storage_before in - let new_storage = assume_storage_shape (Micheline.root storage) in - assertions storage_before new_storage input -end - -let test_contract path storage param ~entrypoint_str ~ok ~ko = - let open Lwt_result_syntax in - let entrypoint = - match entrypoint_str with - | None -> Entrypoint.default - | Some str -> Entrypoint.of_string_strict_exn str - in - let* ctx = test_context () in - let read_file filename = - let ch = open_in filename in - let s = really_input_string ch (in_channel_length ch) in - close_in ch ; - s - in - let script = read_file path in - let*! result = - Contract_helpers.run_script - ctx - script - ~storage - ~parameter:param - ~entrypoint - () - in - match result with Ok (res, _) -> ok res | Error t -> ko t - -let fail_with_trace trace = - Alcotest.failf "Unexpected error: %a" Error_monad.pp_print_trace trace - -let test_contract_success path storage param expected_storage_str - ?entrypoint_str () = - let open Lwt_result_syntax in - let expected_storage = Expr.from_string expected_storage_str in - test_contract - path - storage - param - ~ok:(fun real -> - if real.storage = expected_storage then return_unit - else Alcotest.fail "Unexpected result") - ~ko:fail_with_trace - ~entrypoint_str - -let test_contract_fail path storage param ?entrypoint_str () = - let open Lwt_result_syntax in - test_contract - path - storage - param - ~ok:(fun _ -> - Alcotest.failf - "Unexpected success: interpreting %s should have failed." - path) - ~ko:(fun _ -> return_unit) - ~entrypoint_str - -let test_store_and_reload path ~init_storage ~entrypoint_str_1 ~param_1 - ~expected_storage_str_1 ~entrypoint_str_2 ~param_2 ~expected_storage_str_2 - () = - let expected_storage_1 = Expr.from_string expected_storage_str_1 in - test_contract - path - init_storage - param_1 - ~entrypoint_str:(Some entrypoint_str_1) - ~ok:(fun real -> - if real.storage = expected_storage_1 then - test_contract_success - path - expected_storage_str_1 - param_2 - expected_storage_str_2 - ~entrypoint_str:entrypoint_str_2 - () - else - Alcotest.failf - "Unexpected result. \n Expected :\n %s \n Real : \n %s \n" - (Expr.to_string expected_storage_1) - (Expr.to_string real.storage)) - ~ko:fail_with_trace - -let path = project_root // Filename.dirname __FILE__ - -let tests = - [ - Tztest.tztest "bad contract error" `Quick test_bad_contract_parameter; - Tztest.tztest "check robustness overflow error" `Slow test_stack_overflow; - Tztest.tztest - "check robustness overflow error in lwt" - `Slow - test_stack_overflow_in_lwt; - Tztest.tztest - "multiplication no illegitimate overflow" - `Quick - test_multiplication_close_to_overflow_passes; - Tztest.tztest "stack overflow error" `Slow test_stack_overflow; - Tztest.tztest_qcheck2 - ~name:"map instr against options" - QCheck2.Gen.( - triple (opt small_signed_int) (opt small_signed_int) small_signed_int) - Test_map_instr_on_options.test_mapping; - Tztest.tztest - "lambda_rec instruction" - `Quick - (test_contract_success (path // "contracts/rec_fact.tz") "0" "5" "120"); - Tztest.tztest - "lambda_rec instruction with apply" - `Quick - (test_contract_success - (path // "contracts/rec_fact_apply.tz") - "0" - "5" - "120"); - Tztest.tztest - "lambda_rec instruction with an infinite recursion" - `Quick - (test_contract_fail (path // "contracts/omega.tz") "Unit" "Unit"); - Tztest.tztest - "lambda_rec instruction storage" - `Quick - (test_store_and_reload - (path // "contracts/rec_fact_store.tz") - ~init_storage:"Left 0" - ~entrypoint_str_1:"gen" - ~param_1:"Unit" - ~expected_storage_str_1: - {|Right - (Lambda_rec - { DUP ; - EQ ; - IF { PUSH int 1 } { DUP ; DUP 3 ; PUSH int 1 ; DUP 4 ; SUB - ; EXEC ; MUL } ; - DIP { DROP 2 } })|} - ~entrypoint_str_2:"exec" - ~param_2:"5" - ~expected_storage_str_2:"Left 120"); - Tztest.tztest - "lambda_rec instruction storage apply store" - `Quick - (test_store_and_reload - (path // "contracts/rec_fact_apply_store.tz") - ~init_storage:"Left 0" - ~entrypoint_str_1:"gen" - ~param_1:"Unit" - ~expected_storage_str_1: - {|Right - { PUSH unit Unit ; - PAIR ; - LAMBDA_REC - (pair unit int) - int - { UNPAIR ; - DUP 2 ; - EQ ; - IF { PUSH int 1 } - { DUP 2 ; DUP 4 ; DUP 3 ; APPLY ; PUSH int 1 ; DUP 3 ; - SUB ; EXEC ; MUL } ; - DIP { DROP 3 } } ; - SWAP ; - EXEC }|} - ~entrypoint_str_2:"exec" - ~param_2:"5" - ~expected_storage_str_2:"Left 120"); - ] - @ error_encoding_tests - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("interpretation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_lambda_normalization.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_lambda_normalization.ml deleted file mode 100644 index b6ca2e4805b3bb9e38a272da44471dd7ea155367..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_lambda_normalization.ml +++ /dev/null @@ -1,244 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Michelson) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_lambda_normalization.ml - Subject: Test that lambdas are normalized to optimized format at elaboration -*) - -open Protocol -open Alpha_context -open Script_typed_ir - -let new_ctxt () = - let open Lwt_result_wrap_syntax in - let* block, _contract = Context.init1 () in - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - -let parse_and_project (ty : ((_, _) lambda, _) ty) (node : Script.node) = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - let elab_conf = Script_ir_translator_config.make ~legacy:false () in - let*@ lam, _ctxt = - Script_ir_translator.parse_data - ~elab_conf - ctxt - ~allow_forged_tickets:false - ~allow_forged_lazy_storage_id:false - ty - node - in - match lam with - | Lam (_kdescr, node) -> return node - | LamRec (_kdescr, node) -> - return - Micheline.( - Prim (dummy_location, Michelson_v1_primitives.D_Lambda_rec, [node], [])) - -let node_of_string str = - let open Lwt_result_wrap_syntax in - let*? parsed = - Micheline_parser.no_parsing_error - @@ Michelson_v1_parser.parse_expression ~check:false str - in - return @@ Micheline.root parsed.expanded - -let node_to_string node = - Format.asprintf - "%a" - Micheline_printer.print_expr - ((Micheline_printer.printable Michelson_v1_primitives.string_of_prim) - (Micheline.strip_locations node)) - -let assert_lambda_normalizes_to ~loc ty str expected = - let open Lwt_result_wrap_syntax in - let* node = node_of_string str in - let* node_normalized = parse_and_project ty node in - let str_normalized = node_to_string node_normalized in - let* expected_node = node_of_string expected in - let expected = node_to_string expected_node in - Assert.equal_string ~loc expected str_normalized - -let assert_normalizes_to ~loc ty str expected = - let open Lwt_result_wrap_syntax in - let* () = assert_lambda_normalizes_to ~loc ty str expected in - let* () = - assert_lambda_normalizes_to - ~loc - ty - ("Lambda_rec " ^ str) - ("Lambda_rec " ^ expected) - in - return_unit - -let test_lambda_normalization () = - let open Lwt_result_wrap_syntax in - let*?@ ty = - Script_typed_ir.(lambda_t Micheline.dummy_location unit_t never_t) - in - let*?@ lam_unit_unit = - Script_typed_ir.(lambda_t Micheline.dummy_location unit_t unit_t) - in - let* () = - (* Empty sequence normalizes to itself. *) - assert_lambda_normalizes_to ~loc:__LOC__ lam_unit_unit "{}" "{}" - in - let* () = - (* Another example normalizing to itself. *) - assert_normalizes_to ~loc:__LOC__ ty "{FAILWITH}" "{FAILWITH}" - in - let* () = - (* Readable address normalizes to optimized. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; FAILWITH}|} - {|{PUSH address 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78; FAILWITH}|} - in - let* () = - (* Binary pair normalizes to itself. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH (pair nat nat) (Pair 0 0); FAILWITH}|} - {|{PUSH (pair nat nat) (Pair 0 0); FAILWITH}|} - in - let* () = - (* Ternary pair normalizes to nested binary pairs. Type is unchanged. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH (pair nat nat nat) (Pair 0 0 0); FAILWITH}|} - {|{PUSH (pair nat nat nat) (Pair 0 (Pair 0 0)); FAILWITH}|} - in - let* () = - (* Same with nested pairs in type. Type is still unchanged. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH (pair nat (pair nat nat)) (Pair 0 0 0); FAILWITH}|} - {|{PUSH (pair nat (pair nat nat)) (Pair 0 (Pair 0 0)); FAILWITH}|} - in - let* () = - (* Quadrary pair normalizes to sequence. Type is unchanged. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH (pair nat nat nat nat) (Pair 0 0 0 0); FAILWITH}|} - {|{PUSH (pair nat nat nat nat) {0; 0; 0; 0}; FAILWITH}|} - in - let* () = - (* Code inside LAMBDA is normalized too. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{LAMBDA unit never - {PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; FAILWITH}; - FAILWITH}|} - {|{LAMBDA unit never - {PUSH address 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78; FAILWITH}; - FAILWITH}|} - in - let* () = - (* Same with LAMBDA replaced by PUSH. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH (lambda unit never) - {PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; FAILWITH}; - FAILWITH}|} - {|{PUSH (lambda unit never) - {PUSH address 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78; FAILWITH}; - FAILWITH}|} - in - let* () = - (* Code inside LAMBDA_REC is normalized too. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{LAMBDA_REC unit never - {PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; - FAILWITH}; - FAILWITH}|} - {|{LAMBDA_REC unit never - {PUSH address 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78; - FAILWITH}; - FAILWITH}|} - in - let* () = - (* Same with LAMBDA_REC replaced by PUSH. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH (lambda unit never) - (Lambda_rec - {PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; - FAILWITH}); - FAILWITH}|} - {|{PUSH (lambda unit never) - (Lambda_rec - {PUSH address 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78; - FAILWITH}); - FAILWITH}|} - in - let* () = - (* Code inside CREATE_CONTRACT is normalized too. *) - assert_normalizes_to - ~loc:__LOC__ - ty - {|{PUSH mutez 0; - NONE key_hash; - CREATE_CONTRACT - {parameter unit; - storage unit; - code { PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"; FAILWITH}}; - DROP; - FAILWITH}|} - {|{PUSH mutez 0; - NONE key_hash; - CREATE_CONTRACT - {parameter unit; - storage unit; - code { PUSH address 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78; FAILWITH}}; - DROP; - FAILWITH}|} - in - return_unit - -let tests = - [ - Tztest.tztest - "lambdas are normalized to optimized format during elaboration" - `Quick - test_lambda_normalization; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("lambda normalization", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_lazy_storage_diff.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_lazy_storage_diff.ml deleted file mode 100644 index 4dfdfe81d3eb864f8268617a6f41058cbc190457..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_lazy_storage_diff.ml +++ /dev/null @@ -1,153 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Michelson) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_lazy_storage_diff.ml - Subject: Test lazy storage -*) - -open Protocol - -(** Generation of input data *) - -let ids = - [|1; 42; 1337; 1984|] |> Array.map Z.of_int - |> Array.map Lazy_storage_kind.Big_map.Id.parse_z - -let strs = [|"0"; "True"; "nat"; "bool"|] - -let exprs = strs |> Array.map Expr.from_string - -let hashes = - strs |> Array.map (fun x -> [x]) |> Array.map Script_expr_hash.hash_string - -let updates_len_existing = [1; 2; 3] - -let updates_len_other = 0 :: updates_len_existing - -let gen_inits idx : - (( Lazy_storage_kind.Big_map.Id.t, - Lazy_storage_kind.Big_map.alloc ) - Lazy_storage_diff.init - * int list) - list = - [ - (Existing, updates_len_existing); - (Copy {src = ids.(idx - 1)}, updates_len_other); - ( Alloc {key_type = exprs.(idx); value_type = exprs.(idx - 1)}, - updates_len_other ); - ] - -let gen_update_list idx : Lazy_storage_kind.Big_map.update list = - [None; Some exprs.(idx)] - |> List.map (fun value -> - Lazy_storage_kind.Big_map. - {key = exprs.(idx); key_hash = hashes.(idx); value}) - -let rec gen_updates updates_len : Lazy_storage_kind.Big_map.updates list = - if updates_len = 0 then [] - else - gen_updates (updates_len - 1) - |> List.map (fun suffix -> - gen_update_list updates_len - |> List.map (fun prefix -> prefix :: suffix)) - |> List.flatten - -let gen_updates_list updates_lens : Lazy_storage_kind.Big_map.updates list = - updates_lens |> List.map gen_updates |> List.flatten - -let gen_diffs idx : - ( Lazy_storage_kind.Big_map.Id.t, - Lazy_storage_kind.Big_map.alloc, - Lazy_storage_kind.Big_map.updates ) - Lazy_storage_diff.diff - list = - let open Lazy_storage_diff in - Remove - :: (gen_inits idx - |> List.map (fun (init, updates_lens) -> - gen_updates_list updates_lens - |> List.map (fun updates -> Update {init; updates})) - |> List.flatten) - -let gen_diffs_items idx : Lazy_storage_diff.diffs_item list = - let id = ids.(idx) in - gen_diffs idx |> List.map (fun diff -> Lazy_storage_diff.make Big_map id diff) - -let rec gen_diffs_list len : Lazy_storage_diff.diffs list = - if len = 0 then [] - else - gen_diffs_list (len - 1) - |> List.map (fun suffix -> - gen_diffs_items len |> List.map (fun prefix -> prefix :: suffix)) - |> List.flatten - -let diffs_list_lens = [0; 1; 2; 3] - -let diffs_list : Lazy_storage_diff.diffs list = - diffs_list_lens |> List.map gen_diffs_list |> List.flatten - -(** Properties to check *) - -let conversion_roundtrip lazy_storage_diff = - let legacy_big_map_diff = - Contract_storage.Legacy_big_map_diff.of_lazy_storage_diff lazy_storage_diff - in - let reconverted = - Contract_storage.Legacy_big_map_diff.to_lazy_storage_diff - legacy_big_map_diff - in - assert (Stdlib.( = ) reconverted lazy_storage_diff) - -let encoding_roundtrip lazy_storage_diff = - let encoded = - Data_encoding.Binary.to_bytes_exn - Lazy_storage_diff.encoding - lazy_storage_diff - in - match Data_encoding.Binary.of_bytes Lazy_storage_diff.encoding encoded with - | Ok decoded -> assert (Stdlib.( = ) decoded lazy_storage_diff) - | Error _ -> Stdlib.failwith "Decoding failed" - -(** Iterator and test definitions *) - -let on_diffs f () = - let open Lwt_result_syntax in - List.iter f diffs_list ; - return_unit - -(* Marked Slow because they take 5 to 10 seconds and are unlikely to change *) -let tests = - [ - Tztest.tztest "conversion roundtrip" `Slow (on_diffs conversion_roundtrip); - Tztest.tztest "encoding roundtrip" `Slow (on_diffs encoding_roundtrip); - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("lazy storage diff", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_patched_contracts.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_patched_contracts.ml deleted file mode 100644 index 78868a581dd62e0bfda659f8a625ced2a09832d8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_patched_contracts.ml +++ /dev/null @@ -1,221 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Migration (patched scripts) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_patched_contracts.ml - Subject: Migration -*) - -open Tezos_micheline -open Protocol - -module type LEGACY_SCRIPT_PATCHES = sig - type t - - val script_hash : t -> Script_expr_hash.t - - val code : t -> Michelson_v1_primitives.prim Micheline.canonical - - val patches : t list -end - -module type LEGACY_PATCH_TESTS = sig - type t - - val tests : t -> unit Alcotest_lwt.test_case list -end - -let script_hash_testable = - Alcotest.testable Script_expr_hash.pp Script_expr_hash.equal - -(** This functor provides testing for legacy script patches. Patches to - be tested should be placed in a module conformal to the signature - [LEGACY_SCRIPT_PATCHES]. It should contain a list of patches and for - each patch it has to provide a hash of the patched contract and the - new code (as binary-encoded Micheline). - - Additionally for each patch 3 files need to be placed in - [patched_contracts] subdirectory: - * script_hash.original.tz – containing the original version of the - script; - * script_hash.patched.tz - containing the patched version; - * script_hash.diff - containing the diff between the two. - - These files are there so that reviewers of the migration can easily - see what changes are made to each contract and these tests make sure - that the patched code supplied in file is identical to the one - included in the migration; and that the diff is correct. *) -module Legacy_patch_test (Patches : LEGACY_SCRIPT_PATCHES) : - LEGACY_PATCH_TESTS with type t = Patches.t = struct - type t = Patches.t - - let readable_micheline m = - let open Micheline in - map_node (fun _ -> ()) Michelson_v1_primitives.string_of_prim (root m) - - let path = project_root // Filename.dirname __FILE__ - - let contract_path ?(ext = "patched.tz") hash = - Filename.concat "patched_contracts" - @@ Format.asprintf "%a.%s" Script_expr_hash.pp hash ext - - let read_file ?ext hash = - let filename = path // contract_path ?ext hash in - Lwt_io.(with_file ~mode:Input filename read) - - (* Test that the hashes of the scripts in ./patched_contract/.original.tz - match hashes of the contracts being updated by the migration. *) - let test_original_contract legacy_script_hash () = - let open Lwt_result_syntax in - let*! code = read_file ~ext:"original.tz" legacy_script_hash in - let michelson = Michelson_v1_parser.parse_toplevel ~check:true code in - let*? prog = Micheline_parser.no_parsing_error michelson in - let bytes = - Data_encoding.Binary.to_bytes_exn - Alpha_context.Script.expr_encoding - prog.expanded - in - Alcotest.check - script_hash_testable - "Expr hash doesn't match" - legacy_script_hash - (Script_expr_hash.hash_bytes [bytes]) ; - return_unit - - (* Test that the binary-encoded versions of the patched contracts used during the - migration correspond to the content of the `./patched_contracts/.tz` - files *) - let test_patched_contract patch () = - let open Lwt_result_syntax in - let*! expected_michelson = read_file @@ Patches.script_hash patch in - let*? program = - Micheline_parser.no_parsing_error - @@ Michelson_v1_parser.parse_toplevel ~check:true expected_michelson - in - match - Micheline_diff.diff - ~prev:(readable_micheline @@ Patches.code patch) - ~current:(readable_micheline program.expanded) - () - with - | Some diff -> - let msg = - Format.asprintf - "Patched code for %a different than expected!\n%a" - Script_expr_hash.pp - (Patches.script_hash patch) - Micheline_printer.print_expr - diff - in - Alcotest.fail msg - | None -> return_unit - - (* Test that the diff files `./patched_contracts/.diff` - are the results of the `diff` command on the corresponding - original and patched files *) - let verify_diff legacy_script_hash () = - let open Lwt_result_syntax in - let*! expected_diff = read_file ~ext:"diff" legacy_script_hash in - let original_code = contract_path ~ext:"original.tz" legacy_script_hash in - (* The other test asserts that this is indeed the patched code. *) - let current_code = contract_path ~ext:"patched.tz" legacy_script_hash in - let diff_cmd = - ( "", - [| - "diff"; - "-u"; - "--label"; - original_code; - "--label"; - current_code; - original_code; - current_code; - |] ) - in - let*! actual_diff = Lwt_process.pread ~cwd:path diff_cmd in - Alcotest.(check string) "same diff" expected_diff actual_diff ; - return_unit - - let typecheck_patched_script code () = - let open Lwt_result_wrap_syntax in - (* Number 3 below controls how many accounts should be - created. This number shouldn't be too small or the context - won't have enough at least [minimal_stake] tokens. *) - let* block, _contracts = Context.init3 () in - let* inc = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt inc in - let*@ _code, _ctxt = - Script_ir_translator.parse_code - ~elab_conf:Script_ir_translator_config.(make ~legacy:false ()) - ~code:(Script_repr.lazy_expr code) - ctxt - in - return_unit - - let tests (patch : Patches.t) = - let script_hash = Patches.script_hash patch in - [ - Tztest.tztest - (Format.asprintf - "check original contract hash %a" - Script_expr_hash.pp - script_hash) - `Quick - (test_original_contract script_hash); - Tztest.tztest - (Format.asprintf - "check patched contract %a" - Script_expr_hash.pp - script_hash) - `Quick - (test_patched_contract patch); - Tztest.tztest - (Format.asprintf "verify patch for %a" Script_expr_hash.pp script_hash) - `Quick - (verify_diff script_hash); - Tztest.tztest - (Format.asprintf "type check %a" Script_expr_hash.pp script_hash) - `Quick - (typecheck_patched_script @@ Patches.code patch); - ] -end - -(* List modules containing patched scripts here: *) -let test_modules : (module LEGACY_SCRIPT_PATCHES) list = - [(module Legacy_script_patches)] - -let tests = - List.concat_map - (fun (module Patches : LEGACY_SCRIPT_PATCHES) -> - let module Test = Legacy_patch_test (Patches) in - List.concat_map Test.tests Patches.patches) - test_modules - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("patched contracts", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_sapling.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_sapling.ml deleted file mode 100644 index a2248df9bf471ae50b4b7cc1b99c2682d230add2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_sapling.ml +++ /dev/null @@ -1,1330 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Sapling) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_sapling.ml - Subject: On the privacy-preserving library Sapling -*) - -open Protocol -open Alpha_context - -module Raw_context_tests = struct - open Sapling_helpers.Common - - (* This test adds to the first 100 positions in the commitments tree the - constant value `uncommitted` for which we know the corresponding root and - tests that the returned root is as expected. *) - let commitments_add_uncommitted () = - let open Lwt_result_wrap_syntax in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let module H = Tezos_sapling.Core.Client.Hash in - let cm = H.uncommitted ~height:0 in - let expected_root = H.uncommitted ~height:32 in - let*@ ctx, id = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id ~memo_size:0 in - let* (_ctx : Raw_context.t) = - List.fold_left_es - (fun ctx pos -> - let*@ ctx, root = Sapling_storage.Commitments.get_root ctx id in - assert (root = expected_root) ; - let*@ ctx, _size = - Sapling_storage.Commitments.add - ctx - id - [H.to_commitment cm] - (Int64.of_int pos) - in - let+@ ctx, root = Sapling_storage.Commitments.get_root ctx id in - assert (root = expected_root) ; - ctx) - ctx - (0 -- 99) - in - return_unit - - (* Nullifiers don't check for duplicates are it's done by verify_update, - however committing to disk twice the same nf causes a storage error by - trying to initialize the same key twice. *) - let nullifier_double () = - let open Lwt_result_wrap_syntax in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ ctx, id = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id ~memo_size:0 in - let nf = gen_nf () in - let open Sapling_storage in - let state = - {id = Some id; diff = Sapling_storage.empty_diff; memo_size = 0} - in - let state = nullifiers_add state nf in - let state = nullifiers_add state nf in - assert (Compare.List_length_with.(state.diff.nullifiers = 2)) ; - let*@ disk_size = Sapling_storage.Nullifiers.size ctx id in - assert (disk_size = 0L) ; - Sapling_storage.apply_diff ctx id state.diff |> assert_error - - (* In this test we add two lists of nullifiers to the state, one is applied to - the context (committed to disk) and one is kept in kept in a diff (only in - memory). We then check that nullifier_mem answers true for those two lists - and false for a third one. *) - let nullifier_test () = - let open Lwt_result_wrap_syntax in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ ctx, id = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id ~memo_size:0 in - let nf_list_ctx = - WithExceptions.List.init ~loc:__LOC__ 10 (fun _ -> gen_nf ()) - in - let state = - List.fold_left - (fun state nf -> Sapling_storage.nullifiers_add state nf) - {id = Some id; diff = Sapling_storage.empty_diff; memo_size = 0} - nf_list_ctx - in - let*@ ctx, _ = Sapling_storage.apply_diff ctx id state.diff in - let nf_list_diff = - WithExceptions.List.init ~loc:__LOC__ 10 (fun _ -> gen_nf ()) - in - let state = - List.fold_left - (fun state nf -> Sapling_storage.nullifiers_add state nf) - state - nf_list_diff - in - let* () = - List.iter_ep - (fun nf -> - let*@ _ctx, bool = Sapling_storage.nullifiers_mem ctx state nf in - assert bool ; - return_unit) - (nf_list_ctx @ nf_list_diff) - in - let nf_list_absent = - WithExceptions.List.init ~loc:__LOC__ 10 (fun _ -> gen_nf ()) - in - List.iter_ep - (fun nf -> - let*@ _ctx, bool = Sapling_storage.nullifiers_mem ctx state nf in - assert (not bool) ; - return_unit) - nf_list_absent - - (* This test applies a diff with tuples of ciphertext, commitment. Then it - checks the result of get_from with different indexes. *) - let cm_cipher_test () = - let open Lwt_result_wrap_syntax in - Random.self_init () ; - let memo_size = Random.int 200 in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ ctx, id = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id ~memo_size in - let*@ diff, ctx = Sapling_storage.state_from_id ctx id in - let list_added = - WithExceptions.List.init ~loc:__LOC__ 10 (fun _ -> - gen_cm_cipher ~memo_size ()) - in - let state = Sapling_storage.add diff list_added in - let*@ ctx, (_ : Z.t) = Sapling_storage.apply_diff ctx id state.diff in - let rec test_from from until expected = - if from > until then return_unit - else - let*@ ctx, result = Sapling_storage.Ciphertexts.get_from ctx id from in - let expected_cipher = List.map snd expected in - assert (result = expected_cipher) ; - let*@ result = Sapling_storage.Commitments.get_from ctx id from in - let expected_cm = List.map fst expected in - assert (result = expected_cm) ; - test_from - (Int64.succ from) - until - (WithExceptions.Option.get ~loc:__LOC__ @@ List.tl expected) - in - test_from 0L 9L list_added - - (* This test tests the insertion of a list vs inserting one by one. - It does so by checking the equality of the roots. *) - let list_insertion_test () = - let open Lwt_result_wrap_syntax in - Random.self_init () ; - let memo_size = Random.int 200 in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ ctx, id_one_by_one = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id_one_by_one ~memo_size in - let list_to_add = - fst @@ List.split - @@ WithExceptions.List.init ~loc:__LOC__ 33 (fun _ -> - gen_cm_cipher ~memo_size ()) - in - let rec test counter ctx = - if counter >= 32 then return_unit - else - (* add a single cm to the existing tree *) - let*@ ctx, _size = - Sapling_storage.Commitments.add - ctx - id_one_by_one - [ - WithExceptions.Option.get ~loc:__LOC__ - @@ List.nth list_to_add counter; - ] - (Int64.of_int counter) - (* create a new tree and add a list of cms *) - in - let*@ ctx, id_all_at_once = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id_all_at_once ~memo_size in - let*@ ctx, _size = - Sapling_storage.Commitments.add - ctx - id_all_at_once - (WithExceptions.List.init ~loc:__LOC__ (counter + 1) (fun i -> - WithExceptions.Option.get ~loc:__LOC__ - @@ List.nth list_to_add i)) - 0L - in - let*@ ctx, root_one_by_one = - Sapling_storage.Commitments.get_root ctx id_one_by_one - in - let*@ ctx, root_all_at_once = - Sapling_storage.Commitments.get_root ctx id_all_at_once - in - assert (root_all_at_once = root_one_by_one) ; - test (counter + 1) ctx - in - test 0 ctx - - (* This test adds 10 more roots the maximum capacity, all at different - levels, and checks that all but the first 10 are stored. - Then it adds one in the diff and checks it is stored. - Then it adds 10 at the same level and check that only the last one is - stored. *) - let root_test () = - let open Lwt_result_wrap_syntax in - let open Tezos_sapling.Core in - let gen_root () = - Data_encoding.Binary.of_bytes_exn - Validator.Hash.encoding - (Tezos_crypto.Hacl.Rand.gen 32) - in - let roots_ctx = - WithExceptions.List.init - ~loc:__LOC__ - (Int32.to_int Sapling_storage.Roots.size + 10) - (fun _ -> gen_root ()) - in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ ctx, id = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id ~memo_size:0 in - (* Add one root per level to the context *) - let* ctx, _ = - List.fold_left_es - (fun (ctx, cnt) root -> - let*@ ctx = Sapling_storage.Roots.add ctx id root in - (* Very low level way to "bake" a block. It would be better to use the - helpers functions but they complicate the access to the raw_context. *) - let+@ ctx = - Raw_context.prepare - ~level:(Int32.add b.header.shell.level cnt) - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - (Raw_context.recover ctx) - ~adaptive_issuance_enable:false - in - (ctx, Int32.succ cnt)) - (ctx, 0l) - roots_ctx - in - (* Check mem on all the roots in the context. *) - let state = - Sapling_storage. - {id = Some id; diff = Sapling_storage.empty_diff; memo_size = 0} - in - let* (_ : int) = - List.fold_left_es - (fun i root -> - let+@ bool = Sapling_storage.root_mem ctx state root in - assert (if i < 10 then not bool else bool) ; - i + 1) - 0 - roots_ctx - in - (* Add roots w/o increasing the level *) - let roots_same_level = - WithExceptions.List.init ~loc:__LOC__ 10 (fun _ -> gen_root ()) - in - let* ctx = - List.fold_left_es - (fun ctx root -> - let*@ ctxt = Sapling_storage.Roots.add ctx id root in - return ctxt) - ctx - roots_same_level - in - let* _, _ = - List.fold_left_es - (fun (i, ctx) root -> - let+@ bool = Sapling_storage.root_mem ctx state root in - assert (if i < 9 then not bool else bool) ; - (i + 1, ctx)) - (0, ctx) - roots_same_level - in - return_unit - - let test_get_memo_size () = - let open Lwt_result_wrap_syntax in - let* b, _contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ ctx, id = - Lazy_storage_diff.fresh - Lazy_storage_kind.Sapling_state - ~temporary:false - ctx - in - let*@ ctx = Sapling_storage.init ctx id ~memo_size:0 in - let+@ memo_size = Sapling_storage.get_memo_size ctx id in - assert (memo_size = 0) -end - -module Alpha_context_tests = struct - open Sapling_helpers.Alpha_context_helpers - - (* Create a transaction with memo_size 1, test that is validates with a newly - created empty_state with memo_size 1 and does not with memo_size 0. *) - let test_verify_memo () = - let open Lwt_result_syntax in - let* ctx = init () in - let sk = - Tezos_sapling.Core.Wallet.Spending_key.of_seed - (Tezos_crypto.Hacl.Rand.gen 32) - in - let vt = - let ps = Tezos_sapling.Storage.empty ~memo_size:0 in - (* the dummy output will have memo_size 0 *) - Tezos_sapling.Forge.forge_transaction - ~number_dummy_outputs:1 - [] - [] - sk - "anti-replay" - ~bound_data:"" - ps - in - let* _, _ = verify_update ctx vt ~memo_size:0 |> assert_some in - verify_update ctx vt ~memo_size:1 |> assert_none - - (* Bench the proving and validation time of shielding and transferring several - tokens. *) - let test_bench_phases () = - let open Lwt_result_syntax in - let* ctx = init () in - let rounds = 5 in - Log.info "\nrounds: %d\n" rounds ; - let w = wallet_gen () in - let cs = Tezos_sapling.Storage.empty ~memo_size:8 in - (* one verify_update to get the id *) - let vt = transfer w cs [] in - let* ctx, id = verify_update ctx vt |> assert_some in - let* cs = client_state_alpha ctx id in - let start = Unix.gettimeofday () in - let vts = List.map (fun _ -> transfer w cs []) (1 -- rounds) in - let ctime_shields = Unix.gettimeofday () -. start in - Log.info "client_shields %f\n" ctime_shields ; - let start = Unix.gettimeofday () in - let* ctx = - List.fold_left_es - (fun ctx vt -> - let+ ctx, _id = verify_update ctx ~id vt |> assert_some in - ctx) - ctx - vts - in - let vtime_shields = Unix.gettimeofday () -. start in - Log.info "valdtr_shields %f\n" vtime_shields ; - let* cs = client_state_alpha ctx id in - let start = Unix.gettimeofday () in - let vts = List.map (fun i -> transfer w cs [i]) (1 -- rounds) in - let ctime_transfers = Unix.gettimeofday () -. start in - Log.info "client_txs %f\n" ctime_transfers ; - let start = Unix.gettimeofday () in - let+ (_ctx : context) = - List.fold_left_es - (fun ctx vt -> - let+ ctx, _id = verify_update ctx ~id vt |> assert_some in - ctx) - ctx - vts - in - let vtime_transfers = Unix.gettimeofday () -. start in - Log.info "valdtr_txs %f\n" vtime_transfers - - (* Same as before but for the legacy instruction. *) - let test_bench_phases_legacy () = - let open Lwt_result_syntax in - let* ctx = init () in - let rounds = 5 in - Log.info "\nrounds: %d\n" rounds ; - let w = wallet_gen () in - let cs = Tezos_sapling.Storage.empty ~memo_size:8 in - (* one verify_update to get the id *) - let vt = transfer_legacy w cs [] in - let* ctx, id = verify_update_legacy ctx vt |> assert_some in - let* cs = client_state_alpha ctx id in - let start = Unix.gettimeofday () in - let vts = List.map (fun _ -> transfer_legacy w cs []) (1 -- rounds) in - let ctime_shields = Unix.gettimeofday () -. start in - Log.info "client_shields %f\n" ctime_shields ; - let start = Unix.gettimeofday () in - let* ctx = - List.fold_left_es - (fun ctx vt -> - let+ ctx, _id = verify_update_legacy ctx ~id vt |> assert_some in - ctx) - ctx - vts - in - let vtime_shields = Unix.gettimeofday () -. start in - Log.info "valdtr_shields %f\n" vtime_shields ; - let* cs = client_state_alpha ctx id in - let start = Unix.gettimeofday () in - let vts = List.map (fun i -> transfer_legacy w cs [i]) (1 -- rounds) in - let ctime_transfers = Unix.gettimeofday () -. start in - Log.info "client_txs %f\n" ctime_transfers ; - let start = Unix.gettimeofday () in - let+ (_ctx : context) = - List.fold_left_es - (fun ctx vt -> - let+ ctx, _id = verify_update_legacy ctx ~id vt |> assert_some in - ctx) - ctx - vts - in - let vtime_transfers = Unix.gettimeofday () -. start in - Log.info "valdtr_txs %f\n" vtime_transfers - - (* Transfer several times the same token. *) - let test_bench_fold_over_same_token () = - let open Lwt_result_syntax in - let* ctx = init () in - let rounds = 5 in - let w = wallet_gen () in - let cs = Tezos_sapling.Storage.empty ~memo_size:8 in - (* one verify_update to get the id *) - let vt = transfer w cs [] in - let* ctx, id = verify_update ctx vt |> assert_some in - let rec loop cnt ctx = - if cnt >= rounds then return_unit - else - (* inefficient: re-synch from scratch at each round *) - let* cs = client_state_alpha ctx id in - let vt = transfer w cs [cnt] in - let* ctx, _id = verify_update ctx ~id vt |> assert_some in - loop (cnt + 1) ctx - in - loop 0 ctx - - (* - The following tests trigger all the branches of - Sapling_validator.verify_update. - The function performs several checks and returns None in case of failure. - During development the function was modified to throw a different exception - for each of its checks so to be sure that they were reached. - *) - - (* Test that double spending the same input fails the nf check. *) - let test_double_spend_same_input () = - let open Lwt_result_syntax in - let* ctx = init () in - let w = wallet_gen () in - let cs = Tezos_sapling.Storage.empty ~memo_size:8 in - (* one verify_update to get the id *) - let vt = transfer w cs [] in - let* ctx, id = verify_update ctx vt |> assert_some in - let* cs = client_state_alpha ctx id in - let vt = transfer w cs [0] in - let* _ctx, id = verify_update ctx ~id vt |> assert_some in - let vt = transfer w cs [0; 0] in - verify_update ctx ~id vt |> assert_none - - let test_verifyupdate_one_transaction () = - let open Lwt_result_syntax in - let* ctx = init () in - let w = wallet_gen () in - let cs = Tezos_sapling.Storage.empty ~memo_size:8 in - let vt = transfer w cs [] in - let* ctx, id = verify_update ctx vt |> assert_some in - let* cs = client_state_alpha ctx id in - let vt = transfer w cs [0] in - (* fails sig check because of wrong balance *) - let vt_broken = - Tezos_sapling.Core.Validator.UTXO. - {vt with balance = Int64.(succ vt.balance)} - in - let* () = verify_update ctx ~id vt_broken |> assert_none in - (* randomize one output to fail check outputs *) - (* don't randomize the ciphertext as it is not part of the proof *) - let open Tezos_sapling.Core.Client.UTXO in - let o = WithExceptions.Option.get ~loc:__LOC__ @@ List.hd vt.outputs in - let o_wrong_cm = - { - o with - cm = randomized_byte o.cm Tezos_sapling.Core.Client.Commitment.encoding; - } - in - let vt_broken = - Tezos_sapling.Core.Validator.UTXO.{vt with outputs = [o_wrong_cm]} - in - let* () = verify_update ctx ~id vt_broken |> assert_none in - (* position inside the cv *) - let pos = Random.int 32 in - let o_wrong_cv = - { - o with - ciphertext = - randomized_byte - ~pos - o.ciphertext - Tezos_sapling.Core.Client.Ciphertext.encoding; - } - in - let vt_broken = - Tezos_sapling.Core.Validator.UTXO.{vt with outputs = [o_wrong_cv]} - in - verify_update ctx ~id vt_broken |> assert_none - - let test_verifyupdate_two_transactions () = - let open Lwt_result_syntax in - let* ctx = init () in - let w = wallet_gen () in - let cs = Tezos_sapling.Storage.empty ~memo_size:8 in - (* generate the first storage *) - let vt = transfer w cs [] in - let* ctx, id1 = verify_update ctx vt |> assert_some in - let* cs1 = client_state_alpha ctx id1 in - let vt1 = transfer w cs1 [0] in - (* generate the second storage *) - let vt = transfer w cs [] in - let* ctx, id2 = verify_update ctx vt |> assert_some in - let* cs2 = client_state_alpha ctx id2 in - let vt2 = transfer w cs2 [0] in - (* fail root check *) - let* () = verify_update ctx ~id:id1 vt2 |> assert_none in - (* Swap the root so that it passes the root_mem check but fails - the input check *) - let vt1_broken = - Tezos_sapling.Core.Validator.UTXO.{vt2 with root = vt1.root} - in - let* () = verify_update ctx ~id:id1 vt1_broken |> assert_none in - (* fail the sig check *) - let vt1_broken = - Tezos_sapling.Core.Validator.UTXO.{vt1 with outputs = vt2.outputs} - in - verify_update ctx ~id:id1 vt1_broken |> assert_none -end - -module Interpreter_tests = struct - open Sapling_helpers.Interpreter_helpers - - let parameters_of_list transactions = - let string = "{ " ^ String.concat " ; " transactions ^ " }" in - Alpha_context.Script.(lazy_expr (Expr.from_string string)) - - let path = project_root // Filename.dirname __FILE__ - - (* In this test, we use a contract which takes a list of transactions, applies - all of them, and assert all of them are correct. It also enforces a 1-to-1 - conversion with mutez by asking an amount to shield and asking for a pkh to - unshield. - We create 2 keys a and b. We originate the contract, then do two lists of - shield for a, then transfers several outputs to b while unshielding, then - transfer all of b inputs to a while adding dummy inputs and outputs. - At last, we fail by making a faulty transaction. *) - let test_shielded_tez () = - let open Lwt_result_wrap_syntax in - let* genesis, baker, src0, src1 = init () in - let memo_size = 8 in - let* dst, b1, anti_replay = - originate_contract_hash - (path // "contracts/sapling_contract.tz") - "{ }" - src0 - genesis - baker - in - let wa = wallet_gen () in - let list_transac, total = - shield ~memo_size wa.sk 2 wa.vk (Format.sprintf "0x%s") anti_replay - in - let parameters = parameters_of_list list_transac in - (* a does a list of shield transaction *) - let* b2, _state = - transac_and_sync ~memo_size b1 parameters total src0 dst baker - in - (* we shield again on another block, forging with the empty state *) - let list_transac, total' = - shield ~memo_size wa.sk 2 wa.vk (Format.sprintf "0x%s") anti_replay - in - let parameters = parameters_of_list list_transac in - (* a does a list of shield transaction *) - let* b3, state = - transac_and_sync ~memo_size b2 parameters total' src0 dst baker - in - (* address that will receive an unshield *) - let* balance_before_shield = Context.Contract.balance (B b3) src1 in - (* address that will receive an unshield *) - let wb = wallet_gen () in - let list_addr = gen_addr 2 wb.vk in - (* Take the first two inputs *) - let list_forge_input = - List.map - (fun pos_int -> - let pos = Int64.of_int pos_int in - let forge_input = - snd - (Tezos_sapling.Forge.Input.get state pos wa.vk - |> WithExceptions.Option.get ~loc:__LOC__) - in - forge_input) - (0 -- 4) - in - let list_forge_output = - List.map - (fun addr -> Tezos_sapling.Forge.make_output addr 1L (Bytes.create 8)) - list_addr - in - let src1_pkh = Context.Contract.pkh src1 in - let* incr = Incremental.begin_construction b3 in - let alpha_ctxt = Incremental.alpha_ctxt incr in - let*@ bound_data, _alpha_ctxt = - Script_ir_translator.pack_data - alpha_ctxt - Script_typed_ir.key_hash_t - src1_pkh - in - let hex_transac = - to_hex - (Tezos_sapling.Forge.forge_transaction - ~number_dummy_inputs:0 - ~number_dummy_outputs:0 - list_forge_input - list_forge_output - wa.sk - anti_replay - ~bound_data:(Bytes.to_string bound_data) - state) - Tezos_sapling.Core.Client.UTXO.transaction_encoding - in - let string = Format.sprintf "{0x%s}" hex_transac in - let parameters = - Alpha_context.Script.(lazy_expr (Expr.from_string string)) - in - (* a transfers to b and unshield some money to src_1 (the pkh) *) - let* b4, state = - transac_and_sync ~memo_size b3 parameters 0 src0 dst baker - in - let* balance_after_shield = Context.Contract.balance (B b4) src1 in - let diff_due_to_shield = - Int64.sub - (Tez_helpers.to_mutez balance_after_shield) - (Tez_helpers.to_mutez balance_before_shield) - in - (* The balance after shield is obtained from the balance before shield by - the shield specific update. *) - (* The inputs total [total] mutez and 2 of those are transfered in shielded tez *) - let* () = - Assert.equal_int ~loc:__LOC__ (Int64.to_int diff_due_to_shield) (total - 2) - in - let list_forge_input = - List.map - (fun i -> - let pos = Int64.of_int (i + 5 + 5) in - let forge_input = - snd - (Tezos_sapling.Forge.Input.get state pos wb.vk - |> WithExceptions.Option.get ~loc:__LOC__) - in - forge_input) - (0 -- 1) - in - let addr_a = - snd - @@ Tezos_sapling.Core.Client.Viewing_key.new_address - wa.vk - Tezos_sapling.Core.Client.Viewing_key.default_index - in - let output = Tezos_sapling.Forge.make_output addr_a 2L (Bytes.create 8) in - let hex_transac = - to_hex - (Tezos_sapling.Forge.forge_transaction - ~number_dummy_inputs:1 - ~number_dummy_outputs:1 - list_forge_input - [output] - wb.sk - anti_replay - ~bound_data:"" - state) - Tezos_sapling.Core.Client.UTXO.transaction_encoding - in - let string = Format.sprintf "{0x%s}" hex_transac in - let parameters = - Alpha_context.Script.(lazy_expr (Expr.from_string string)) - in - (* b transfers to a with dummy inputs and outputs *) - let* b, state = - transac_and_sync ~memo_size b4 parameters 0 src0 dst baker - in - (* Here we fail by doing the same transaction again*) - let* incr = Incremental.begin_construction b in - let fee = Tez_helpers.of_int 10 in - let dst = Alpha_context.Contract.Originated dst in - let* operation = - Op.transaction ~gas_limit:Max ~fee (B b) src0 dst Tez.zero ~parameters - in - let* (_incr : Incremental.t) = - Incremental.add_operation (* TODO make more precise *) - ~expect_apply_failure:(fun _ -> return_unit) - incr - operation - in - (* Here we fail by changing the field bound_data*) - let orginal_transac = - Tezos_sapling.Forge.forge_transaction - list_forge_input - [output] - wb.sk - anti_replay - ~bound_data:"right" - state - in - let modified_transac = - Tezos_sapling.Core.Validator.UTXO. - {orginal_transac with bound_data = "wrong"} - in - let string = - Format.sprintf - "{0x%s}" - (to_hex - modified_transac - Tezos_sapling.Core.Client.UTXO.transaction_encoding) - in - let parameters = - Alpha_context.Script.(lazy_expr (Expr.from_string string)) - in - let* incr = Incremental.begin_construction b in - let fee = Tez_helpers.of_int 10 in - let* operation = - Op.transaction ~gas_limit:Max ~fee (B b) src0 dst Tez.zero ~parameters - in - let* (_incr : Incremental.t) = - Incremental.add_operation (* TODO make more precise *) - ~expect_apply_failure:(fun _ -> return_unit) - incr - operation - in - return_unit - - let test_push_sapling_state_should_be_forbidden () = - let open Lwt_result_syntax in - let* block, baker, src, _ = - init () - (* Originating a contract to get a sapling_state with ID 0, used in the next contract *) - in - let* _, _, _ = - originate_contract_hash - (path // "contracts/sapling_contract.tz") - "{ }" - src - block - baker - in - (* Originating the next contract should fail *) - let*! result = - originate_contract_hash - (path // "contracts/sapling_push_sapling_state.tz") - "{ }" - src - block - baker - in - match result with - | Error - [ - Environment.Ecoproto_error (Script_tc_errors.Ill_typed_contract _); - Environment.Ecoproto_error - (Script_tc_errors.Unexpected_lazy_storage _); - ] -> - return_unit - | _ -> assert false - - let test_use_state_from_other_contract_and_transact () = - let open Lwt_result_syntax in - (* - Attempt to use a sapling state of a contract A in a contract B - *) - let* block, baker, src, _ = init () (* Originating the contracts *) in - let memo_size = 8 in - (* let* _shielded_pool_contract_address, block, _anti_replay_shielded_pool = - originate_contract "contracts/sapling_contract.tz" "{ }" src block baker in - *) - let* existing_state_contract_address, block, anti_replay_2 = - originate_contract_hash - (path // "contracts/sapling_use_existing_state.tz") - "{ }" - src - block - baker - in - (* we create one shielding transaction and transform it in Micheline to use - it as a parameter - *) - let wa = wallet_gen () in - let transactions, _total = - shield - ~memo_size - wa.sk - 1 - wa.vk - (Format.sprintf "(Pair 0x%s 0)") - anti_replay_2 - in - let transaction = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd transactions - in - let parameters = - Alpha_context.Script.(lazy_expr (Expr.from_string transaction)) - in - let*! result = - transac_and_sync - ~memo_size - block - parameters - 0 - src - existing_state_contract_address - baker - in - match result with - | Ok _ -> Alcotest.failf "Unexpected operations success" - | Error errs -> - assert ( - List.exists - (function - | Environment.Ecoproto_error - (Tezos_protocol_019_PtParisB.Protocol.Script_tc_errors - .Unexpected_forged_value _) -> - true - | _ -> false) - errs) ; - return_unit - - (* In this test we do two transactions in one block and same two in two block. - We check that the sate is the same expect for roots. - The second transaction is possible only if the first one is done. *) - let test_transac_and_block () = - let open Lwt_result_wrap_syntax in - let* b, baker, src, _ = init () in - let memo_size = 8 in - let* dst, block_start, anti_replay = - originate_contract_hash - (path // "contracts/sapling_contract.tz") - "{ }" - src - b - baker - in - let {sk; vk} = wallet_gen () in - let hex_transac_1 = hex_shield ~memo_size {sk; vk} anti_replay in - let string_1 = Format.sprintf "{%s}" hex_transac_1 in - let parameters_1 = - Alpha_context.Script.(lazy_expr (Expr.from_string string_1)) - in - let* block_1, state = - transac_and_sync ~memo_size block_start parameters_1 15 src dst baker - in - let intermediary_root = Tezos_sapling.Storage.get_root state in - let addr = - snd - @@ Tezos_sapling.Core.Wallet.Viewing_key.(new_address vk default_index) - in - let output = Tezos_sapling.Forge.make_output addr 15L (Bytes.create 8) in - let hex_transac_2 = - "0x" - ^ to_hex - (Tezos_sapling.Forge.forge_transaction - [ - snd - (Tezos_sapling.Forge.Input.get state 0L vk - |> WithExceptions.Option.get ~loc:__LOC__); - ] - [output] - sk - anti_replay - ~bound_data:"" - state) - Tezos_sapling.Core.Client.UTXO.transaction_encoding - in - let string_2 = Format.sprintf "{%s}" hex_transac_2 in - let parameters_2 = - Alpha_context.Script.(lazy_expr (Expr.from_string string_2)) - in - let* block_1, state_1 = - transac_and_sync ~memo_size block_1 parameters_2 0 src dst baker - in - let final_root = Tezos_sapling.Storage.get_root state_1 in - let* _root, diff_1 = - Alpha_services.Contract.single_sapling_get_diff - Block.rpc_ctxt - block_1 - dst - ~offset_commitment:0L - ~offset_nullifier:0L - () - in - let fee = Tez_helpers.of_int 10 in - let*? amount_tez = Tez_helpers.(one_mutez *? Int64.of_int 15) in - let* operation1 = - Op.transaction - ~gas_limit:High - ~fee - (B block_start) - src - (Contract.Originated dst) - amount_tez - ~parameters:parameters_1 - in - let* incr = Incremental.begin_construction block_start in - (* We need to manually get the counter here *) - let ctx = Incremental.alpha_ctxt incr in - let pkh = Context.Contract.pkh src in - let*@ counter = Alpha_context.Contract.get_counter ctx pkh in - let* operation2 = - Op.transaction - ~gas_limit:High - ~counter - ~fee - (B block_start) - src - (Contract.Originated dst) - Tez.zero - ~parameters:parameters_2 - in - let* operation = - Op.batch_operations - ~recompute_counters:true - ~source:src - (I incr) - [operation1; operation2] - in - let* incr = Incremental.add_operation incr operation in - let* block_2 = Incremental.finalize_block incr in - let* _root, diff_2 = - Alpha_services.Contract.single_sapling_get_diff - Block.rpc_ctxt - block_2 - dst - ~offset_commitment:0L - ~offset_nullifier:0L - () - in - (* We check that the same transactions have passed *) - assert (diff_1 = diff_2) ; - let is_root_in block dst root = - let* incr = Incremental.begin_construction block in - let ctx_2 = Incremental.alpha_ctxt incr in - let* script = Alpha_services.Contract.script Block.rpc_ctxt block dst in - let ctx_without_gas_2 = Alpha_context.Gas.set_unlimited ctx_2 in - let*@ Ex_script (Script script), ctxt = - Script_ir_translator.parse_script - ctx_without_gas_2 - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets_in_storage:true - ~allow_forged_lazy_storage_id_in_storage:true - script - in - let*?@ id, _ctx_2 = - Script_ir_translator.get_single_sapling_state - ctxt - script.storage_type - script.storage - in - let single_id = WithExceptions.Option.get ~loc:__LOC__ id in - let id = - Lazy_storage_kind.Sapling_state.Id.parse_z - @@ Alpha_context.Sapling.Id.unparse_to_z single_id - in - let*@ raw_ctx = - Raw_context.prepare - block.context - ~level:block.header.shell.level - ~predecessor_timestamp:block.header.shell.timestamp - ~timestamp:block.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let*@ result = Sapling_storage.Roots.mem raw_ctx id root in - return result - in - (* We check that the second state did not store the root in between - transactions. *) - let* () = is_root_in block_2 dst intermediary_root |> assert_false in - (* We check that the second state did store the final root. *) - let* () = is_root_in block_2 dst final_root |> assert_true in - (* We check that the first state did store the final root. *) - let* () = is_root_in block_1 dst final_root |> assert_true in - (* We check that the first state did store the root in between transactions. *) - is_root_in block_1 dst intermediary_root |> assert_true - - (* In this test we try a contract which creates an empty sapling state on the - fly. It then applies a list of transactions, checks they are correct and - drops the result. We make several shields in the same list (since the state - is drop). *) - let test_drop () = - let open Lwt_result_syntax in - let* b, baker, src, _ = init () in - let* dst, b, anti_replay = - originate_contract_hash - (path // "contracts/sapling_contract_drop.tz") - "Unit" - src - b - baker - in - let {sk; vk} = wallet_gen () in - let list_transac, _total = - shield ~memo_size:8 sk 4 vk (Format.sprintf "0x%s") anti_replay - in - let parameters = parameters_of_list list_transac in - let dst = Contract.Originated dst in - let* operation = - Op.transaction - ~gas_limit:Max - ~fee:(Tez_helpers.of_int 10) - (B b) - src - dst - Tez.zero - ~parameters - in - let* (_b : Block.t) = next_block b operation in - return_unit - - (* We use a contrac with two states. Its parameter is two transactions and a - bool. The two transactions are tested valid against the two states, but - only one state according to the bool is updated. - We do two transactions shielding to different keys in the two states. - At each transactions both are applied but only state is updated. - We then check that the first state is updated in the correct way. *) - let test_double () = - let open Lwt_result_wrap_syntax in - let* b, baker, src, _ = init () in - let memo_size = 8 in - let* dst, b, anti_replay = - originate_contract_hash - (path // "contracts/sapling_contract_double.tz") - "(Pair { } { })" - src - b - baker - in - let wa = wallet_gen () in - let hex_transac_1 = hex_shield ~memo_size wa anti_replay in - let wb = wallet_gen () in - let hex_transac_2 = hex_shield ~memo_size wb anti_replay in - let str_1 = - "(Pair True (Pair " ^ hex_transac_1 ^ " " ^ hex_transac_2 ^ "))" - in - let str_2 = - "(Pair False (Pair " ^ hex_transac_2 ^ " " ^ hex_transac_1 ^ "))" - in - (* transac 1 is applied to state_1*) - let parameters_1 = - Alpha_context.Script.(lazy_expr (Expr.from_string str_1)) - in - (* tranasc_2 is applied to state_2*) - let parameters_2 = - Alpha_context.Script.(lazy_expr (Expr.from_string str_2)) - in - let fee = Tez_helpers.of_int 10 in - let cdst = Contract.Originated dst in - let* operation = - Op.transaction - ~gas_limit:Max - ~fee - (B b) - src - cdst - Tez.zero - ~parameters:parameters_1 - in - let* b = next_block b operation in - let* operation = - Op.transaction - ~gas_limit:Max - ~fee - (B b) - src - cdst - Tez.zero - ~parameters:parameters_2 - in - let* b = next_block b operation in - let* incr = Incremental.begin_construction b in - let ctx = Incremental.alpha_ctxt incr in - let ctx_without_gas = Alpha_context.Gas.set_unlimited ctx in - let* storage = Alpha_services.Contract.storage Block.rpc_ctxt b dst in - let storage_lazy_expr = Alpha_context.Script.lazy_expr storage in - let*?@ (Ty_ex_c tytype) = - let memo_size = memo_size_of_int memo_size in - let open Script_typed_ir in - let state_ty = sapling_state_t ~memo_size in - pair_t (-1) state_ty state_ty - in - let*@ (state_1, state_2), _ctx = - Script_ir_translator.parse_storage - ctx_without_gas - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets:true - ~allow_forged_lazy_storage_id:true - tytype - ~storage:storage_lazy_expr - in - (*Only works when diff is empty*) - let local_state_from_disk disk_state ctx = - let id = - Alpha_context.Sapling.(disk_state.id) - |> WithExceptions.Option.get ~loc:__LOC__ - in - let+@ diff = - Alpha_context.Sapling.get_diff - ctx - id - ~offset_commitment:0L - ~offset_nullifier:0L - () - in - client_state_of_diff ~memo_size diff - in - let* state_1 = local_state_from_disk state_1 ctx in - let+ state_2 = local_state_from_disk state_2 ctx in - (* we check that first state contains 15 to addr_1 but not 15 to addr_2*) - assert (Option.is_some @@ Tezos_sapling.Forge.Input.get state_1 0L wa.vk) ; - assert (Option.is_some @@ Tezos_sapling.Forge.Input.get state_2 0L wa.vk) ; - assert (Option.is_none @@ Tezos_sapling.Forge.Input.get state_1 0L wb.vk) ; - assert (Option.is_none @@ Tezos_sapling.Forge.Input.get state_2 0L wb.vk) - - let test_state_as_arg () = - let open Lwt_result_syntax in - let* b, baker, src, _ = init () in - let* dst, b, anti_replay = - originate_contract_hash - (path // "contracts/sapling_contract_state_as_arg.tz") - "None" - src - b - baker - in - let* dst_2, b, anti_replay_2 = - originate_contract_hash - (path // "contracts/sapling_contract_send.tz") - "Unit" - src - b - baker - in - let w = wallet_gen () in - let hex_transac_1 = hex_shield ~memo_size:8 w anti_replay in - let string = "Left " ^ hex_transac_1 in - let parameters = - Alpha_context.Script.(lazy_expr (Expr.from_string string)) - in - let fee = Tez_helpers.of_int 10 in - let dst = Contract.Originated dst in - let* operation = - Op.transaction ~gas_limit:Max ~fee (B b) src dst Tez.zero ~parameters - in - let* b = next_block b operation in - let contract = "0x" ^ to_hex dst Alpha_context.Contract.encoding in - let hex_transac_2 = hex_shield ~memo_size:8 w anti_replay_2 in - let string = "(Pair " ^ contract ^ " " ^ hex_transac_2 ^ ")" in - let parameters = - Alpha_context.Script.(lazy_expr (Expr.from_string string)) - in - let dst_2 = Contract.Originated dst_2 in - let* operation = - Op.transaction ~gas_limit:Max ~fee (B b) src dst_2 Tez.zero ~parameters - in - let* (_b : Block.t) = next_block b operation in - return_unit -end - -let tests = - [ - Tztest.tztest - "commitments_add_uncommitted" - `Quick - Raw_context_tests.commitments_add_uncommitted; - Tztest.tztest "nullifier_double" `Quick Raw_context_tests.nullifier_double; - Tztest.tztest "nullifier_test" `Quick Raw_context_tests.nullifier_test; - Tztest.tztest "cm_cipher_test" `Quick Raw_context_tests.cm_cipher_test; - Tztest.tztest - "list_insertion_test" - `Quick - Raw_context_tests.list_insertion_test; - Tztest.tztest "root" `Quick Raw_context_tests.root_test; - Tztest.tztest "get_memo_size" `Quick Raw_context_tests.test_get_memo_size; - Tztest.tztest "verify_memo" `Quick Alpha_context_tests.test_verify_memo; - Tztest.tztest "bench_phases" `Slow Alpha_context_tests.test_bench_phases; - Tztest.tztest - "bench_phases_legacy" - `Slow - Alpha_context_tests.test_bench_phases_legacy; - Tztest.tztest - "bench_fold_over_same_token" - `Slow - Alpha_context_tests.test_bench_fold_over_same_token; - Tztest.tztest - "double_spend_same_input" - `Quick - Alpha_context_tests.test_double_spend_same_input; - Tztest.tztest - "verifyupdate_one_transaction" - `Quick - Alpha_context_tests.test_verifyupdate_one_transaction; - Tztest.tztest - "verifyupdate_two_transactions" - `Quick - Alpha_context_tests.test_verifyupdate_two_transactions; - Tztest.tztest "shielded_tez" `Quick Interpreter_tests.test_shielded_tez; - Tztest.tztest - "use state from other contract and transact" - `Quick - Interpreter_tests.test_use_state_from_other_contract_and_transact; - Tztest.tztest - "Instruction PUSH sapling_state 0 should be forbidden" - `Quick - Interpreter_tests.test_push_sapling_state_should_be_forbidden; - Tztest.tztest - "transac_and_block" - `Quick - Interpreter_tests.test_transac_and_block; - Tztest.tztest "drop" `Quick Interpreter_tests.test_drop; - Tztest.tztest "double" `Quick Interpreter_tests.test_double; - Tztest.tztest "state_as_arg" `Quick Interpreter_tests.test_state_as_arg; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sapling", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_script_cache.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_script_cache.ml deleted file mode 100644 index c701be064af33e9b035be966cacea5495ae878c8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_script_cache.ml +++ /dev/null @@ -1,484 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (cache) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_script_cache.ml - Subject: These unit tests check basic behavior of script cache -*) - -open Protocol -open Alpha_context -open Contract_helpers -open Script_ir_translator - -exception Script_cache_test_error of string - -let err x = Exn (Script_cache_test_error x) - -(* - - The following value is hard-coded to detect change in the size - model. It has been computed by a manual run of the test. - -*) -let liquidity_baking_contract_size = 182272 - -let liquidity_baking_contract = - Contract_hash.of_b58check_exn "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" - -let make_block block f = - let open Lwt_result_syntax in - let* incr = Incremental.begin_construction block in - let* ret, ctxt = f (Incremental.alpha_ctxt incr) in - let incr = Incremental.set_alpha_ctxt incr ctxt in - let* block = Incremental.finalize_block incr in - let* next_block = Block.bake block in - return (ret, next_block) - -let ( @! ) f g = - let open Lwt_result_syntax in - f @@ fun ctxt -> - let* ret = g ctxt in - return (ret, ctxt) - -let equal_scripts (s1 : Script.t) (s2 : Script.t) = - let open Result_syntax in - Script_repr.( - let* code1 = force_bytes s1.code in - let* code2 = force_bytes s2.code in - let* storage1 = force_bytes s1.storage in - let* storage2 = force_bytes s2.storage in - return (Bytes.equal code1 code2 && Bytes.equal storage1 storage2)) - -let find ctxt addr = - let open Lwt_result_wrap_syntax in - let*@ ctxt, identifier, result = Script_cache.find ctxt addr in - match result with - | None -> - (* by [find_correctly_looks_up]. *) - assert false - | Some (script, Ex_script ir) -> - return (ctxt, identifier, script, Ex_script ir) - -let value_as_int : - type a ac. (a, ac) Script_typed_ir.ty -> a -> Script_int.z Script_int.num = - fun ty v -> match ty with Int_t -> v | _ -> Stdlib.failwith "value_as_int" - -let path = project_root // Filename.dirname __FILE__ - -let add_some_contracts k src block baker = - let open Lwt_result_syntax in - let* liquidity_baking_contract_id, block = - make_block block @@ fun ctxt -> - let* ctxt, id, _, _ = find ctxt liquidity_baking_contract in - return (id, ctxt) - in - let* rev_contracts, block = - List.fold_left_es - (fun (rev_contracts, block) _ -> - let* addr, block = - originate_contract_hash - (path // "contracts/int-store.tz") - "31" - src - block - baker - in - let* block = Block.bake block in - make_block block @@ fun ctxt -> - let* ctxt, id, _, _ = find ctxt addr in - let contract = (id, addr) in - return (contract :: rev_contracts, ctxt)) - ([], block) - (1 -- k) - in - let contracts = - (* After each baking [liquidity_baking_contract] is the most - recently used contract. *) - let lb = (liquidity_baking_contract_id, liquidity_baking_contract) in - List.rev (lb :: rev_contracts) - in - return (contracts, block) - -(* - - The following value is hard-coded to detect change in the size - model. It has been computed by a manual run of the test. - -*) -let int_store_contract_size = 592 - -(* - - Check our assumptions regarding the size of reference scripts. - -*) -let assert_cache_size expected_size ctxt = - fail_unless - (Script_cache.size ctxt = expected_size) - (err - (Printf.sprintf - "Invalid script cache size, expecting %d, got %d" - expected_size - (Script_cache.size ctxt))) - -let test_size_of_liquidity_baking_contract () = - let open Lwt_result_syntax in - let* block, _, _, _ = init () in - let* (), _block = - make_block block @! assert_cache_size liquidity_baking_contract_size - in - return_unit - -let test_size_of_int_store_contract () = - let open Lwt_result_wrap_syntax in - let* block, baker, src, _ = init () in - let* addr, block = - originate_contract_hash - (path // "contracts/int-store.tz") - "31" - src - block - baker - in - let* (), _block = - make_block block @! fun ctxt -> - let*@ ctxt, _, _ = Script_cache.find ctxt addr in - assert_cache_size - (int_store_contract_size + liquidity_baking_contract_size) - ctxt - in - return_unit - -(* - - When a contract is in the context, [find] correctly returns it. - -*) -let test_find_correctly_looks_up () = - let open Lwt_result_wrap_syntax in - let* block, baker, src, _ = init () in - let* addr, block = - originate_contract_hash - (path // "contracts/sapling_contract.tz") - "{ }" - src - block - baker - in - let* (), _block = - make_block block @! fun ctxt -> - (* - Contract is present. - *) - let*@ _, _, result = Script_cache.find ctxt addr in - let*@ ctxt, script = Contract.get_script ctxt addr in - let*?@ cond = - match (result, script) with - | None, _ -> Result_syntax.return_false - | Some _, None -> - (* because we assume that get_script correctly behaves. *) - assert false - | Some (cached_script, _), Some script -> - equal_scripts script cached_script - in - let* () = - fail_unless - cond - (err "find should be able to retrieve an originated contract") - (* - Contract is absent. - *) - in - let addr = Contract_helpers.fake_KT1 in - let*@ _, _, cached_contract = Script_cache.find ctxt addr in - fail_unless - (cached_contract = None) - (err "find should return None for unbound contracts") - in - return_unit - -(* - - [test_update] correctly modifies a cached contract in the context. - -*) -let test_update_modifies_cached_contract () = - let open Lwt_result_wrap_syntax in - let* block, baker, src, _ = init () in - let* addr, block = - originate_contract_hash - (path // "contracts/int-store.tz") - "36" - src - block - baker - in - let* (), _block = - make_block block @! fun ctxt -> - let* ctxt, identifier, script, Ex_script (Script ir) = find ctxt addr in - match ir.storage_type with - | Int_t -> - let storage' = Script_int.(add ir.storage (Script_int.of_int 1)) in - let cached_contract' = - (script, Ex_script (Script {ir with storage = storage'})) - in - let*?@ ctxt = Script_cache.update ctxt identifier cached_contract' 1 in - let* _, _, _, Ex_script (Script ir') = find ctxt addr in - let storage = value_as_int ir'.storage_type ir'.storage in - fail_unless - (Script_int.compare storage storage' = 0) - (err - (Format.sprintf - "Update failed, expecting %s, got %s" - (Script_int.to_string storage') - (Script_int.to_string storage))) - | _ -> - (* by definition of int-store.tz. *) - assert false - in - return_unit - -(* - - [test_entries] returns the list of cached scripts in order of least - modification date. - -*) -let test_entries_returns_the_list_in_correct_order () = - let open Lwt_result_wrap_syntax in - let ncontracts = 10 in - let* block, baker, src, _ = init () in - let* contracts, block = add_some_contracts ncontracts src block baker in - let addrs = snd @@ List.split contracts in - let* (), _block = - make_block block @! fun ctxt -> - let*?@ entries = Script_cache.entries ctxt in - let cached_contracts = fst (List.split entries) in - fail_unless - (addrs = cached_contracts) - (err "entries must return cached contracts in order") - in - return_unit - -(* - - [test_contract_rank] correctly computes LRU rank. - -*) -let test_contract_rank_is_lru_rank () = - let open Lwt_result_syntax in - let ncontracts = 10 in - let* block, baker, src, _ = init () in - let* contracts, block = add_some_contracts ncontracts src block baker in - let addrs = snd @@ List.split contracts in - let* (), _block = - make_block block @! fun ctxt -> - let rec check_rank k = function - | [] -> return_unit - | addr :: addrs -> ( - match Script_cache.contract_rank ctxt addr with - | None -> tzfail (err "Contract rank should find a cached contract") - | Some rank -> - let* () = - fail_unless - (k = rank) - (err - (Printf.sprintf - "Invalid contract rank, expecting %d, got %d" - k - rank)) - in - check_rank (k + 1) addrs) - in - check_rank 0 addrs - in - return_unit - -(* - - [size] correctly returns the sums of the (declared) sizes. - -*) -let test_size_adds_entries_sizes () = - let open Lwt_result_syntax in - let ncontracts = 10 in - let* block, baker, src, _ = init () in - let* _, block = add_some_contracts ncontracts src block baker in - let* (), _block = - make_block block @! fun ctxt -> - let expected_size = - liquidity_baking_contract_size + (ncontracts * int_store_contract_size) - in - fail_unless - (Script_cache.size ctxt = expected_size) - (err - (Printf.sprintf - "Invalid script cache size, expecting %d, got %d" - expected_size - (Script_cache.size ctxt))) - in - return_unit - -(* - - [test_size_limit] is the value found in [Constants_repr.cache_layout]. - -*) -let defined_size_limit = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_mainnet - .cache_script_size - -let test_size_limit_is_in_constants_repr () = - let open Lwt_result_syntax in - let* block, _baker, _src, _ = init () in - let* (), _block = - make_block block @! fun ctxt -> - fail_unless - (Script_cache.size_limit ctxt = defined_size_limit) - (err - (Printf.sprintf - "Invalid size limit, expecting %d, got %d" - defined_size_limit - (Script_cache.size_limit ctxt))) - in - return_unit - -(* - - [test_entries] are conform to an LRU strategy: when the cache is - full the least recently used entries are removed. - -*) -let test_entries_shows_lru () = - let open Lwt_result_wrap_syntax in - let ncontracts = 10 in - let* block, baker, src, _ = init () in - let* contracts, block = add_some_contracts ncontracts src block baker in - (* We pretend that the contracts' sizes grow so much that they cannot all - fit into the cache. *) - let new_size = 2 * defined_size_limit / ncontracts in - let* (), block = - make_block block @@ fun ctxt -> - let* ctxt = - List.fold_left_es - (fun ctxt (_, addr) -> - let* ctxt, id, script, cached_contract = find ctxt addr in - let*?@ result = - Script_cache.update ctxt id (script, cached_contract) new_size - in - return result) - ctxt - contracts - in - return ((), ctxt) - in - (* At this point, the cache should only contain the most recently modified - contracts. *) - let* (), _block = - make_block block @@ fun ctxt -> - let*?@ entries = Script_cache.entries ctxt in - let rev_entries = List.rev entries in - let rev_contracts = List.rev contracts in - let rec aux rev_entries rev_contracts = - Printf.eprintf - "%d %d\n" - (List.length rev_entries) - (List.length rev_contracts) ; - match (rev_entries, rev_contracts) with - | [], _ -> - (* We do not count liquidity baking contract. *) - let removed_contracts = List.length rev_contracts - 1 in - fail_unless - (removed_contracts = ncontracts / 2) - (err - (Printf.sprintf - "Too few contracts have been removed from the cache while it \ - is full, %d remaining while expecting %d" - removed_contracts - (ncontracts / 2))) - | (contract, size) :: rev_entries, (_, contract') :: rev_contracts -> - let* () = - fail_unless - (size = new_size || contract = liquidity_baking_contract) - (err - (Printf.sprintf - "A contract in the cache has not the right size, expecting \ - %d, got %d" - new_size - size)) - in - let* () = - fail_unless - (contract = contract') - (err - (Printf.sprintf - "entries do not return cached contracts in right order")) - in - aux rev_entries rev_contracts - | _, [] -> - (* There cannot be more entries than contracts. *) - assert false - in - let* () = aux rev_entries rev_contracts in - return ((), ctxt) - in - return_unit - -let tests = - let open Tztest in - [ - tztest - "assumption about size of liquidity baking holds" - `Quick - test_size_of_liquidity_baking_contract; - tztest - "assumption about size of 'int_store' contract holds" - `Quick - test_size_of_int_store_contract; - tztest "find correctly looks up" `Quick test_find_correctly_looks_up; - tztest - "update correctly modifies" - `Quick - test_update_modifies_cached_contract; - tztest - "entries correctly list contracts in order" - `Quick - test_entries_returns_the_list_in_correct_order; - tztest "contract_rank is LRU rank" `Quick test_contract_rank_is_lru_rank; - tztest "size returns entries size" `Quick test_size_adds_entries_sizes; - tztest - "size limit is a protocol constant" - `Quick - test_size_limit_is_in_constants_repr; - tztest "entries show LRU behavior" `Quick test_entries_shows_lru; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("script cache", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_script_typed_ir_size.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_script_typed_ir_size.ml deleted file mode 100644 index 746ba573c8ef14fd00b5bc7bf9e4e609062e1ec2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_script_typed_ir_size.ml +++ /dev/null @@ -1,1053 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (script typed IR size) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_script_typed_ir_size.ml - Subject: Script_typed_ir computes good approximation of values' sizes -*) - -open Protocol -open Alpha_context -open Script_typed_ir - -(* - Helpers - ------- -*) - -exception Script_typed_ir_test_error of string - -let err x = Exn (Script_typed_ir_test_error x) - -let dummy_loc = Micheline.dummy_location - -let get = Stdlib.Option.get - -let is_ok m = match m with Ok x -> x | _ -> assert false - -let footprint v = - (* This is to turn every statically allocated data into - heap-allocated data, to consider the worst-case in-memory - representation of values. Note that it does NOT remove sharing.*) - let v' = - try Marshal.(from_bytes (to_bytes v [Closures]) 0) - with _ -> (* Custom blocks are problematic. *) v - in - let size v = Obj.(reachable_words (repr v) * 8) in - max (size v) (size v') - -(** [gen_string s] returns a heap-allocated string. Notice that a - string literal ["foo"] written in the code is statically allocated - and is therefore not counted by [Obj.reachable_words]. *) -let gen_string s = - let s = Bytes.of_string s |> Bytes.to_string in - is_ok @@ Script_string.of_string s - -let boxed_set_elements s = Script_set.fold (fun x s -> x :: s) s [] - -let boxed_map_bindings s = Script_map.fold (fun k v s -> (k, v) :: s) s [] - -let big_map_bindings (Big_map s) = Big_map_overlay.bindings s.diff.map - -let show_script_int fmt x = Z.pp_print fmt (Script_int.to_zint x) - -let show_bool fmt b = Format.fprintf fmt "%B" b - -let show_script_string fmt x = - Format.fprintf fmt "%s" (Script_string.to_string x) - -let show_address fmt Script_typed_ir.{destination; entrypoint} = - Format.fprintf - fmt - "%a(%d):%a(%d)" - Destination.pp - destination - (footprint destination) - Entrypoint.pp - entrypoint - (footprint entrypoint) - -let dont_show _fmt _ = () - -let size = {Tezos_benchmark.Base_samplers.min = 4; max = 32} - -module Crypto_samplers = -Tezos_benchmark.Crypto_samplers.Make_finite_key_pool (struct - let size = 10 - - let algo = `Default -end) - -include - Michelson_samplers.Make - (struct - let parameters : Michelson_samplers.parameters = - { - base_parameters = - { - Michelson_samplers_base.int_size = size; - string_size = size; - bytes_size = size; - }; - list_size = size; - set_size = size; - map_size = size; - } - end) - (Crypto_samplers) - -let random_state = Random.State.make [|37; 73; 17; 71; 42|] - -let sample_ty size = Random_type.m_type ~size () random_state - -let sample_value ty = Random_value.value ty random_state - -type ex = Ex : string * ('a, _) Script_typed_ir.ty * 'a * int -> ex [@@boxed] - -let ex ?(error = 0) label ty v = Ex (label, ty, v, error) - -let ex_random ?(error = 0) show ty ?(sample = fun () -> sample_value ty) label = - let v = sample () in - let label = Format.asprintf "@[%a%s@]@." show v label in - ex ~error label ty v - -let exs ?(error = 0) n show ty ?(sample = fun () -> sample_value ty) label = - List.map (fun _ -> ex_random ~error show ty label ~sample) (1 -- n) - -let nsample = 100 - -type ex_kinstr = Kinstr : string * ('a, 'b, 'c, 'd) kinstr -> ex_kinstr -[@@boxed] - -(** [check_value_size ()] covers a finite number of cases of Michelson - values, checking that the cost model is sound with respect to their - memory footprint. - - One could wonder why we do not simply use a single value generator - based on a randomly chosen type. We actually implemented such a - strategy in a previous version of this test but this results in a - flaky test. Indeed, for some types, the values are overapproximated - and it was difficult to correctly handle the accumulation of errors - when types were randomly composed. - - The current strategy requires more code but, in exchange, it - provides a finer control over the overapproximation. As a - consequence, we can check for example that there is no - overapproximation for values for which the model is exact. We can - also check that the overapproximation is at least well understood - on the values for which size model is not exact. *) -let check_value_size () = - let check (Ex (what, ty, v, error)) = - let expected_size = footprint v in - let _, size = Script_typed_ir_size.value_size ty v in - let size = Saturation_repr.to_int size in - fail_when - (expected_size + error < size || size < expected_size) - (err - (Printf.sprintf - "%s was expected to have size %d while the size model answered %d \ - (with +%d accepted over approximation error)" - what - expected_size - size - error)) - in - List.iter_es - check - ((* - Unit_t - ====== - *) - [ex "() : unit" Unit_t ()] - (* - Int_t - ===== - *) - @ (let error = 8 in - [ - ex ~error "0 : int" Int_t Script_int.zero; - ex ~error "2^63 : int" Int_t (Script_int.of_int max_int); - ex - ~error - "37^73 : int" - Int_t - (Script_int.of_zint Z.(pow (of_int 37) 73)); - ex - ~error - "-37^73 : int" - Int_t - (Script_int.of_zint Z.(neg (pow (of_int 37) 73))); - ex - ~error - "13270006022583112970 : int" - Int_t - (get @@ Script_int.of_string "13270006022583112970"); - ] - @ exs ~error nsample show_script_int Int_t ": int") - (* - Nat_t - ===== - *) - @ (let error = 8 in - [ - ex ~error "0 : nat" Nat_t Script_int.zero_n; - ex - ~error - "2^63 : nat" - Nat_t - (get Script_int.(is_nat @@ of_int max_int)); - ex - ~error - "37^73 : int" - Nat_t - (get Script_int.(is_nat @@ of_zint Z.(pow (of_int 37) 73))); - ] - @ exs ~error nsample show_script_int Nat_t ": nat") - (* - Signature_t - =========== - *) - @ (let show fmt (Script_typed_ir.Script_signature.Signature_tag s) = - Signature.pp fmt s - in - exs ~error:8 nsample show Signature_t ": signature") - (* - String_t - ======== - *) - @ (let show fmt s = Format.fprintf fmt "%s" (Script_string.to_string s) in - exs nsample show String_t ": string") - (* - Bytes_t - ======= - *) - @ (let show fmt s = Format.fprintf fmt "%s" (Bytes.to_string s) in - exs nsample show Bytes_t ": bytes") - (* - Mutez_t - ======= - *) - @ (let show fmt t = Format.fprintf fmt "%s" (Tez.to_string t) in - exs nsample show Mutez_t ": mutez") - (* - Key_hash_t - ========== - *) - @ (let show = Signature.Public_key_hash.pp in - exs nsample show Key_hash_t ": key_hash") - (* - Key_t - ===== - *) - @ (let show = Signature.Public_key.pp in - exs nsample show Key_t ": key_t") - (* - Timestamp_t - =========== - *) - @ (let show fmt s = - Format.fprintf fmt "%s" (Script_timestamp.to_string s) - in - exs ~error:8 nsample show Timestamp_t ": timestamp_t") - (* - Address_t - ========= - *) - @ exs nsample show_address Address_t ": address_t" - (* - Bool_t - ====== - *) - @ [ex "true : bool" Bool_t true; ex "false : bool" Bool_t false] - (* - Pair_t - ====== - *) - @ (let module P = struct - type ('a, 'b) f = {apply : 'c. ('a * 'b, 'c) ty -> ex} - end in - let on_pair : type a b. (a, _) ty -> (b, _) ty -> (a, b) P.f -> ex = - fun ty1 ty2 f -> - let (Ty_ex_c ty) = is_ok @@ pair_t dummy_loc ty1 ty2 in - f.apply ty - in - let open Script_int in - [ - (* "int * int" *) - on_pair - int_t - int_t - {apply = (fun ty -> ex "(0, 0) : int * int" ty (of_int 0, of_int 0))}; - (* "string * string" *) - on_pair - string_t - string_t - { - apply = - (fun ty -> - let foo = gen_string "foo" in - let bar = gen_string "bar" in - ex "(foo, bar) : string * string" ty (foo, bar)); - }; - (* "string * int" *) - on_pair - string_t - int_t - { - apply = - (fun ty -> - let foo = gen_string "foo" in - ex "(foo, 0) : string * int" ty (foo, of_int 0)); - }; - (* "int * int * int" *) - on_pair - int_t - int_t - { - apply = - (fun ty -> - on_pair int_t ty - @@ { - apply = - (fun ty -> - ex - "(0, (1, 2)) : int * int * int" - ty - (of_int 0, (of_int 1, of_int 2))); - }); - }; - ]) - (* - Or_t - ======= - *) - @ (let module P = struct - type ('a, 'b) f = {apply : 'c. (('a, 'b) or_, 'c) ty -> ex} - end in - let on_or : type a b. (a, _) ty -> (b, _) ty -> (a, b) P.f -> ex = - fun ty1 ty2 f -> - let (Ty_ex_c ty) = is_ok @@ or_t dummy_loc ty1 ty2 in - f.apply ty - in - let open Script_int in - [ - (* "int + int" *) - on_or - int_t - int_t - {apply = (fun ty -> ex "L 0 : int + int" ty (L (of_int 0)))}; - on_or - int_t - int_t - {apply = (fun ty -> ex "R 0 : int + int" ty (R (of_int 0)))}; - (* "string + string" *) - on_or - string_t - string_t - { - apply = - (fun ty -> - let foo = gen_string "foo" in - ex "L foo : string * string" ty (L foo)); - }; - on_or - string_t - string_t - { - apply = - (fun ty -> - let foo = gen_string "foo" in - ex "R foo : string * string" ty (R foo)); - }; - (* "string + int" *) - on_or - string_t - int_t - { - apply = - (fun ty -> - let foo = gen_string "foo" in - ex "L foo : string * int" ty (L foo)); - }; - (* "int + int + int" *) - on_or - int_t - int_t - { - apply = - (fun ty -> - on_or - int_t - ty - { - apply = - (fun ty -> ex "L 0 : int + int + int" ty (L (of_int 0))); - }); - }; - on_or - int_t - int_t - { - apply = - (fun ty -> - on_or - int_t - ty - { - apply = - (fun ty -> - ex "R (L 0) : int + int + int" ty (R (L (of_int 0)))); - }); - }; - on_or - int_t - int_t - { - apply = - (fun ty -> - on_or - int_t - ty - { - apply = - (fun ty -> - ex "R (R 0) : int + int + int" ty (R (R (of_int 0)))); - }); - }; - ]) - (* - Option_t - ======== - *) - @ (let module P = struct - type 'a f = {apply : 'c. ('a option, 'c) ty -> ex} - end in - let on_option : type a. (a, _) ty -> a P.f -> ex = - fun ty f -> f.apply @@ is_ok @@ option_t dummy_loc ty - in - let open Script_int in - [ - (* "option int" *) - on_option int_t {apply = (fun ty -> ex "None : option int" ty None)}; - on_option - int_t - {apply = (fun ty -> ex "Some 0 : option int" ty (Some (of_int 0)))}; - (* "option string" *) - on_option - string_t - {apply = (fun ty -> ex "None : option string" ty None)}; - on_option - string_t - { - apply = - (fun ty -> - ex "Some \"foo\" : option string" ty (Some (gen_string "foo"))); - }; - ]) - (* - List_t - ====== - *) - @ (let module P = struct - type 'a f = {apply : 'c. ('a Script_list.t, 'c) ty -> ex list} - end in - let on_list : type a. (a, _) ty -> a P.f -> ex list = - fun ty f -> f.apply @@ is_ok @@ list_t dummy_loc ty - in - let check ty show_elt = - on_list - ty - { - apply = - (fun ty -> - let show fmt l = - Format.pp_print_list show_elt fmt @@ Script_list.to_list l - in - exs nsample show ty ": list _"); - } - in - check string_t show_script_string) - (* - Set_t - ====== - *) - @ (let module P = struct - type 'a f = {apply : 'c. ('a set, 'c) ty -> ex list} - end in - let on_set : type a. (a, _) ty -> a P.f -> ex list = - fun ty f -> f.apply @@ is_ok @@ set_t dummy_loc ty - in - let check ty show_elt = - on_set - ty - { - apply = - (fun ty -> - let show fmt s = - Format.fprintf - fmt - "%a / %a" - show_script_int - (Script_set.size s) - (Format.pp_print_list show_elt) - (boxed_set_elements s) - in - exs nsample show ty ": set _"); - } - in - check string_t show_script_string) - (* - Map_t - ====== - *) - @ (let module P = struct - type ('k, 'v) f = {apply : 'c. (('k, 'v) map, 'c) ty -> ex list} - end in - let on_map : type k v. (k, _) ty -> (v, _) ty -> (k, v) P.f -> ex list = - fun kty vty f -> f.apply @@ is_ok @@ map_t dummy_loc kty vty - in - let check kty vty show_key show_value = - on_map - kty - vty - { - apply = - (fun ty -> - let show_binding fmt (k, v) = - Format.fprintf fmt "(%a -> %a)" show_key k show_value v - in - let show fmt s = - Format.pp_print_list show_binding fmt (boxed_map_bindings s) - in - exs nsample show ty ": map _"); - } - in - check string_t string_t show_script_string show_script_string) - (* - Big_map_t - ====== - *) - @ (let module P = struct - type ('k, 'v) f = {apply : 'c. (('k, 'v) big_map, 'c) ty -> ex list} - end in - let on_big_map : type k v. (k, _) ty -> (v, _) ty -> (k, v) P.f -> ex list - = - fun kty vty f -> f.apply @@ is_ok @@ big_map_t dummy_loc kty vty - in - let check kty vty show_key show_value = - on_big_map - kty - vty - { - apply = - (fun ty -> - let show_binding fmt (_, (k, v)) = - match v with - | Some v -> - Format.fprintf fmt "(%a -> %a)" show_key k show_value v - | None -> Format.fprintf fmt "(%a?)" show_key k - in - let show fmt s = - Format.pp_print_list show_binding fmt (big_map_bindings s) - in - exs nsample show ty ": big_map _"); - } - in - check bool_t bool_t show_bool show_bool) - (* - Contract_t - ========= - *) - @ (let show fmt typed_contract = - let destination = Typed_contract.destination typed_contract in - let entrypoint = Typed_contract.entrypoint typed_contract in - show_address fmt {destination; entrypoint} - in - exs - nsample - show - (is_ok @@ contract_t dummy_loc string_t) - ": contract string") - (* - Chain_t - ========= - *) - @ exs nsample dont_show chain_id_t ": chain_id" - (* - Bls12_381_g1_t - ============== - *) - @ exs nsample dont_show bls12_381_g1_t ": bls12_381_g1_t" - (* - Bls12_381_g2_t - ============== - *) - @ exs nsample dont_show bls12_381_g2_t ": bls12_381_g2_t" - (* - Bls12_381_fr_t - ============== - *) - @ exs nsample dont_show bls12_381_fr_t ": bls12_381_fr_t" - (* - Ticket_t - ======== - *) - @ exs - ~error:8 - nsample - dont_show - (is_ok @@ ticket_t dummy_loc bool_t) - ": ticket bool" - (* - Missing by lack of fully functional samplers: - - Sapling_transaction_t ; - - Sapling_transaction_deprecated_t ; - - Sapling_state ; - - Operation_t ; - - Chest_key_t ; - - Chest_t ; - - Lambda_t. - Missing because of language deprecation: - - Tx_rollup_l2_address_t. - *) - ) - -let check_ty_size () = - let check () = - match (sample_ty (Random.int 10 + 1) : ex_ty) with - | Ex_ty ty -> - let expected_size = footprint ty in - let _, size = Script_typed_ir_size.Internal_for_tests.ty_size ty in - let size = Saturation_repr.to_int size in - let what = "some type" in - fail_when - (size <> expected_size) - (err - (Printf.sprintf - "%s was expected to have size %d while the size model answered \ - %d." - what - expected_size - size)) - in - List.iter_es (fun _ -> check ()) (1 -- nsample) - -let check_size ~name ~expected item = - let open Lwt_result_syntax in - let _, e = expected item in - let exp = Saturation_repr.to_int e in - let actual = 8 * Obj.(reachable_words @@ repr item) in - let overapprox = 1_000_000 * (exp - actual) / actual in - let msg verb = - Printf.sprintf - "For %s model predicts the size of %d bytes; while actual measured size \ - is %d bytes. The model %s %d.%04d%%" - name - exp - actual - verb - (abs @@ (overapprox / 10_000)) - (abs @@ (overapprox mod 10_000)) - in - let* () = fail_when (overapprox < 0) (err @@ msg "under-approximates by") in - fail_when (overapprox > 0) (err @@ msg "over-approximates by") -(* We expected the model to always be exact. *) - -(* Test that the model accurately predicts instruction sizes. It tests each - type of instruction separately as much as possible. Tested values are - specifically tailored so that they can't be shared (in particular all - reused values are wrapped in functions to discourage sharing). Thanks - to this the model gives precise predictions for each instruction. In real - life the model will over-approximate due to sharing. It should never under- - approximate though. *) -let check_kinstr_size () = - let open Lwt_result_syntax in - let check (Kinstr (name, instr)) = - check_size - ~name - ~expected:Script_typed_ir_size.Internal_for_tests.kinstr_size - instr - in - (* Location is an immediate value, so we don't care if it's shared. *) - let loc = Micheline.dummy_location in - let str s = - (* It's important to transform the string somehow, or else it will be shared - and thus not reached by Obj.reachable_words. *) - match Script_string.of_string @@ String.uppercase_ascii s with - | Ok ss -> ss - | Error _ -> assert false - in - let entrypoint name = - Entrypoint.of_string_strict_exn @@ String.uppercase_ascii name - in - (* Constants below are wrapped in functions to force recomputation and - discourage sharing. *) - let halt () = IHalt loc in - let drop () = IDrop (loc, halt ()) in - let cdr = ICdr (loc, halt ()) in - let push ty v = IPush (loc, ty, v, halt ()) in - let unit_option_t () = - WithExceptions.Result.get_ok ~loc:__LOC__ @@ option_t loc Unit_t - in - let stack_type () = Item_t (unit_option_t (), Bot_t) in - let id_lambda () = - Lam - ( { - kloc = loc; - kbef = stack_type (); - kaft = stack_type (); - kinstr = halt (); - }, - Micheline.Seq (loc, []) ) - in - (* Following constants are used but once. *) - let zero_memo_size = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Alpha_context.Sapling.Memo_size.parse_z Z.zero - in - (* Check size of the lambda alone. *) - let* () = - check_size - ~name:"id lambda" - ~expected:Script_typed_ir_size.lambda_size - (id_lambda ()) - in - (* Testing individual instructions. *) - List.iter_es - check - [ - Kinstr ("IDrop", drop ()); - Kinstr ("IDup", IDup (loc, halt ())); - Kinstr ("ISwap", ISwap (loc, halt ())); - Kinstr ("IPush", push String_t @@ str "tezos"); - Kinstr ("ICons_pair", ICons_pair (loc, halt ())); - Kinstr ("ICar", ICar (loc, halt ())); - Kinstr ("ICdr", cdr); - Kinstr ("IUnpair", IUnpair (loc, halt ())); - Kinstr ("ICons_some", ICons_some (loc, halt ())); - Kinstr ("ICons_none", ICons_none (loc, Int_t, halt ())); - Kinstr - ( "IIf_none", - IIf_none - { - loc; - branch_if_some = drop (); - branch_if_none = halt (); - k = halt (); - } ); - Kinstr ("IOpt_map", IOpt_map {loc; body = halt (); k = halt ()}); - Kinstr ("ICons_left", ICons_left (loc, Nat_t, halt ())); - Kinstr ("ICons_right", ICons_right (loc, Int_t, halt ())); - Kinstr - ( "IIf_left", - IIf_left - { - loc; - branch_if_left = drop (); - branch_if_right = drop (); - k = halt (); - } ); - Kinstr ("ICons_list", ICons_list (loc, halt ())); - Kinstr ("INil", INil (loc, Bytes_t, halt ())); - Kinstr - ( "IIf_cons", - IIf_cons - { - loc; - branch_if_cons = IDrop (loc, drop ()); - branch_if_nil = halt (); - k = halt (); - } ); - Kinstr ("IList_map", IList_map (loc, halt (), None, halt ())); - Kinstr ("IList_iter", IList_iter (loc, None, drop (), halt ())); - Kinstr ("IList_size", IList_size (loc, halt ())); - Kinstr ("IEmpty_set", IEmpty_set (loc, String_t, halt ())); - Kinstr ("ISet_iter", ISet_iter (loc, None, drop (), halt ())); - Kinstr ("ISet_mem", ISet_mem (loc, halt ())); - Kinstr ("ISet_update", ISet_update (loc, halt ())); - Kinstr ("ISet_size", ISet_size (loc, halt ())); - Kinstr ("IEmpty_map", IEmpty_map (loc, Nat_t, None, halt ())); - Kinstr ("IMap_map", IMap_map (loc, None, cdr, halt ())); - Kinstr ("IMap_iter", IMap_iter (loc, None, drop (), halt ())); - Kinstr ("IMap_mem", IMap_mem (loc, halt ())); - Kinstr ("IMap_get", IMap_get (loc, halt ())); - Kinstr ("IMap_update", IMap_update (loc, halt ())); - Kinstr ("IMap_get_and_update", IMap_get_and_update (loc, halt ())); - Kinstr ("IMap_size", IMap_size (loc, halt ())); - Kinstr ("IEmpty_big_map", IEmpty_big_map (loc, Nat_t, String_t, halt ())); - Kinstr ("IBig_map_mem", IBig_map_mem (loc, halt ())); - Kinstr ("IBig_map_get", IBig_map_get (loc, halt ())); - Kinstr ("IBig_map_update", IBig_map_update (loc, halt ())); - Kinstr ("IBig_map_get_and_update", IBig_map_get_and_update (loc, halt ())); - Kinstr ("IConcat_string", IConcat_string (loc, halt ())); - Kinstr ("IConcat_string_pair", IConcat_string_pair (loc, halt ())); - Kinstr ("ISlice_string", ISlice_string (loc, halt ())); - Kinstr ("IString_size", IString_size (loc, halt ())); - Kinstr ("IConcat_bytes", IConcat_bytes (loc, halt ())); - Kinstr ("IConcat_bytes_pair", IConcat_bytes_pair (loc, halt ())); - Kinstr ("ISlice_bytes", ISlice_bytes (loc, halt ())); - Kinstr ("IBytes_size", IBytes_size (loc, halt ())); - Kinstr - ("IAdd_seconds_to_timestamp ", IAdd_seconds_to_timestamp (loc, halt ())); - Kinstr - ("IAdd_timestamp_to_seconds", IAdd_timestamp_to_seconds (loc, halt ())); - Kinstr ("ISub_timestamp_seconds", ISub_timestamp_seconds (loc, halt ())); - Kinstr ("IDiff_timestamps", IDiff_timestamps (loc, halt ())); - Kinstr ("IAdd_tez", IAdd_tez (loc, halt ())); - Kinstr ("ISub_tez", ISub_tez (loc, halt ())); - Kinstr ("ISub_tez_legacy", ISub_tez_legacy (loc, halt ())); - Kinstr ("IMul_tez_nat", IMul_teznat (loc, halt ())); - Kinstr ("IMul_nattez", IMul_nattez (loc, halt ())); - Kinstr ("IEdiv_teznat", IEdiv_teznat (loc, halt ())); - Kinstr ("IEdiv_nattez", IEdiv_tez (loc, halt ())); - Kinstr ("IOr", IOr (loc, halt ())); - Kinstr ("IAnd", IAnd (loc, halt ())); - Kinstr ("IXor", IXor (loc, halt ())); - Kinstr ("INot", INot (loc, halt ())); - Kinstr ("IIs_nat", IIs_nat (loc, halt ())); - Kinstr ("INeg", INeg (loc, halt ())); - Kinstr ("IAbs_int", IAbs_int (loc, halt ())); - Kinstr ("IInt_nat", IInt_nat (loc, halt ())); - Kinstr ("IAdd_int", IAdd_int (loc, halt ())); - Kinstr ("IAdd_nat", IAdd_nat (loc, halt ())); - Kinstr ("ISub_int", ISub_int (loc, halt ())); - Kinstr ("IMul_int", IMul_int (loc, halt ())); - Kinstr ("IMul_nat", IMul_nat (loc, halt ())); - Kinstr ("IEdiv_int", IEdiv_int (loc, halt ())); - Kinstr ("IEdiv_nat", IEdiv_nat (loc, halt ())); - Kinstr ("ILsl_nat", ILsl_nat (loc, halt ())); - Kinstr ("ILsr_nat", ILsr_nat (loc, halt ())); - Kinstr ("IOr_nat", IOr_nat (loc, halt ())); - Kinstr ("IAnd_nat", IAnd_nat (loc, halt ())); - Kinstr ("IAnd_int_nat", IAnd_int_nat (loc, halt ())); - Kinstr ("IXor_nat", IXor_nat (loc, halt ())); - Kinstr ("INot_int", INot_int (loc, halt ())); - Kinstr ("IAnd_bytes", IAnd_bytes (loc, halt ())); - Kinstr ("IOr_bytes", IOr_bytes (loc, halt ())); - Kinstr ("IXor_bytes", IXor_bytes (loc, halt ())); - Kinstr ("INot_bytes", INot_bytes (loc, halt ())); - Kinstr ("ILsl_bytes", ILsl_bytes (loc, halt ())); - Kinstr ("ILsr_bytes", ILsr_bytes (loc, halt ())); - Kinstr - ( "IIf", - IIf - { - loc; - branch_if_true = halt (); - branch_if_false = halt (); - k = halt (); - } ); - Kinstr ("ILoop", ILoop (loc, push Bool_t true, halt ())); - Kinstr ("ILoop_left", ILoop_left (loc, INever loc, halt ())); - Kinstr ("IDip", IDip (loc, halt (), None, halt ())); - Kinstr ("IExec", IExec (loc, None, halt ())); - Kinstr ("IApply", IApply (loc, String_t, halt ())); - Kinstr ("ILambda", ILambda (loc, id_lambda (), halt ())); - Kinstr ("IFailwith", IFailwith (loc, String_t)); - Kinstr ("ICompare", ICompare (loc, String_t, halt ())); - Kinstr ("IEq", IEq (loc, halt ())); - Kinstr ("INeq", INeq (loc, halt ())); - Kinstr ("ILt", ILt (loc, halt ())); - Kinstr ("IGt", IGt (loc, halt ())); - Kinstr ("ILe", ILe (loc, halt ())); - Kinstr ("IGe", IGe (loc, halt ())); - Kinstr ("IAddress", IAddress (loc, halt ())); - Kinstr ("IContract", IContract (loc, Unit_t, entrypoint "entry", halt ())); - Kinstr - ( "IView", - IView - ( loc, - View_signature - { - name = str "myview"; - input_ty = unit_option_t (); - output_ty = unit_option_t (); - }, - None, - halt () ) ); - Kinstr ("ITransfer_tokens", ITransfer_tokens (loc, halt ())); - Kinstr ("IImplicit_account", IImplicit_account (loc, halt ())); - Kinstr - ( "ICreate_contract", - ICreate_contract - { - loc; - storage_type = Unit_t; - code = Micheline.(strip_locations @@ Seq (loc, [])); - k = halt (); - } ); - Kinstr ("ISet_delegate", ISet_delegate (loc, halt ())); - Kinstr ("INow", INow (loc, halt ())); - Kinstr ("IMin_block_time", IMin_block_time (loc, halt ())); - Kinstr ("IBalance", IBalance (loc, halt ())); - Kinstr ("ILevel", ILevel (loc, halt ())); - Kinstr ("ICheck_signature", ICheck_signature (loc, halt ())); - Kinstr ("IHash_key", IHash_key (loc, halt ())); - Kinstr ("IPack", IPack (loc, Int_t, halt ())); - Kinstr ("IUnpack", IUnpack (loc, Int_t, halt ())); - Kinstr ("IBlake2b", IBlake2b (loc, halt ())); - Kinstr ("ISha_256", ISha256 (loc, halt ())); - Kinstr ("ISha512", ISha512 (loc, halt ())); - Kinstr ("ISource", ISource (loc, halt ())); - Kinstr ("ISender", ISender (loc, halt ())); - Kinstr ("ISelf", ISelf (loc, Unit_t, entrypoint "entry", halt ())); - Kinstr ("ISelf_address", ISelf_address (loc, halt ())); - Kinstr ("IAmount", IAmount (loc, halt ())); - Kinstr - ( "ISapling_empty_state", - ISapling_empty_state (loc, zero_memo_size, halt ()) ); - Kinstr ("ISapling_verify_update", ISapling_verify_update (loc, halt ())); - Kinstr - ( "ISapling_verify_update_deprecated", - ISapling_verify_update_deprecated (loc, halt ()) ); - Kinstr ("IDig", IDig (loc, 0, KRest, halt ())); - Kinstr ("IDug", IDug (loc, 0, KRest, halt ())); - Kinstr ("IDipn", IDipn (loc, 0, KRest, halt (), halt ())); - Kinstr ("IDropn", IDropn (loc, 0, KRest, halt ())); - Kinstr ("IChainId", IChainId (loc, halt ())); - Kinstr ("INever", INever loc); - Kinstr ("IVoting_power", IVoting_power (loc, halt ())); - Kinstr ("ITotal_voting_power", ITotal_voting_power (loc, halt ())); - Kinstr ("IKeccak", IKeccak (loc, halt ())); - Kinstr ("ISha3", ISha3 (loc, halt ())); - Kinstr ("IAdd_bls12_381_g1", IAdd_bls12_381_g1 (loc, halt ())); - Kinstr ("IAdd_bls12_381_2g", IAdd_bls12_381_g2 (loc, halt ())); - Kinstr ("IAdd_bls12_381_fr", IAdd_bls12_381_fr (loc, halt ())); - Kinstr ("IMul_bls12_381_g1", IMul_bls12_381_g1 (loc, halt ())); - Kinstr ("IMul_bls12_381_g2", IMul_bls12_381_g2 (loc, halt ())); - Kinstr ("IMul_bls12_381_fr", IMul_bls12_381_fr (loc, halt ())); - Kinstr ("IMul_bls12_381_z_fr", IMul_bls12_381_z_fr (loc, halt ())); - Kinstr ("IMul_bls12_381_fr_z", IMul_bls12_381_fr_z (loc, halt ())); - Kinstr ("IMul_bls12_381_fr_z", IMul_bls12_381_fr_z (loc, halt ())); - Kinstr ("IInt_bls12_381_fr", IInt_bls12_381_fr (loc, halt ())); - Kinstr ("INeg_bls12_381_g1", INeg_bls12_381_g1 (loc, halt ())); - Kinstr ("INeg_bls12_381_g2", INeg_bls12_381_g2 (loc, halt ())); - Kinstr ("INeg_bls12_381_fr", INeg_bls12_381_fr (loc, halt ())); - Kinstr - ("IPairing_check_bls12_381", IPairing_check_bls12_381 (loc, halt ())); - Kinstr ("IComb", IComb (loc, 0, Comb_one, halt ())); - Kinstr ("IUncomb", IUncomb (loc, 0, Uncomb_one, halt ())); - Kinstr ("IComb_get", IComb_get (loc, 0, Comb_get_zero, halt ())); - Kinstr ("IComb_set", IComb_set (loc, 0, Comb_set_zero, halt ())); - Kinstr ("IDup_n", IDup_n (loc, 0, Dup_n_zero, halt ())); - Kinstr ("ITicket", ITicket (loc, None, halt ())); - Kinstr ("IRead_ticket", IRead_ticket (loc, None, halt ())); - Kinstr ("ISplit_ticket", ISplit_ticket (loc, halt ())); - Kinstr ("IJoin_tickets", IJoin_tickets (loc, Unit_t, halt ())); - Kinstr ("IOpen_chest", IOpen_chest (loc, halt ())); - Kinstr - ( "IEmit", - IEmit - { - loc; - tag = entrypoint "entry"; - ty = Unit_t; - unparsed_ty = Micheline.(strip_locations @@ Seq (loc, [])); - k = halt (); - } ); - Kinstr ("IHalt ()", halt ()); - ] - -let check_witness_sizes () = - let loc = Micheline.dummy_location in - let stack_prefix_preservation = - KPrefix - ( loc, - Unit_t, - KPrefix - ( loc, - Unit_t, - KPrefix - ( loc, - Unit_t, - KPrefix - ( loc, - Unit_t, - KPrefix - ( loc, - Unit_t, - KPrefix - ( loc, - Unit_t, - KPrefix (loc, Unit_t, KPrefix (loc, Unit_t, KRest)) - ) ) ) ) ) ) - in - check_size - ~name:"stack_prefix_preservation_witness" - ~expected: - Script_typed_ir_size.Internal_for_tests - .stack_prefix_preservation_witness_size - stack_prefix_preservation - -let check_micheline_sizes () = - let open Michelson_v1_primitives in - let check (name, micheline) = - check_size ~name ~expected:Cache_memory_helpers.node_size micheline - in - let int i = Micheline.(Int (dummy_loc, Z.of_int i)) in - let big_int z = Micheline.(Int (dummy_loc, z)) in - let str s = Micheline.(String (dummy_location, String.lowercase_ascii s)) in - let bytes b = Micheline.(Bytes (dummy_location, Bytes.of_string b)) in - let prim ?(annot = []) p args = - Micheline.(Prim (dummy_location, p, args, annot)) - in - let seq xs = Micheline.(Seq (dummy_location, xs)) in - List.iter_es - check - [ - ("empty micheline", seq []); - ("a single number", int 1024); - ("a large number", big_int Z.(of_int 3 * of_int max_int)); - ("a short string", str "tezostezostezos"); - ("a short bytestring", bytes "tezostezostezos"); - ("a prim with no args", prim I_UNIT []); - ("a seq of prims", seq [prim I_DUP []; prim I_DROP []]); - ("a prim with arg", prim I_DIG [int 2]); - ( "combine everything together", - seq - [ - prim I_UNIT []; - prim I_DUG [int 3] ~annot:[String.lowercase_ascii "@number"]; - prim I_DIP [seq [prim I_DROP [int 2]]]; - prim I_PUSH [prim T_string []; str "tezos"]; - ] ); - ] - -let tests = - let open Tztest in - [ - tztest "value size" `Quick check_value_size; - tztest "ty size" `Quick check_ty_size; - tztest "kinstr size" `Quick check_kinstr_size; - tztest "witness sizes" `Quick check_witness_sizes; - tztest "micheline sizes" `Quick check_micheline_sizes; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("script typed ir size", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_temp_big_maps.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_temp_big_maps.ml deleted file mode 100644 index 1e31d0dd7eb89cb2474877c70768a53b5963e899..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_temp_big_maps.ml +++ /dev/null @@ -1,118 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (temporary big maps) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_temp_big_maps.ml - Subject: On temporary big maps. -*) - -open Protocol - -let to_raw_context (b : Block.t) = - let open Lwt_result_wrap_syntax in - let+@ ctxt = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - ctxt - -let check_no_dangling_temp_big_map b = - let open Lwt_result_syntax in - let* ctxt = to_raw_context b in - let*! () = - Storage.Big_map.fold ctxt ~init:() ~order:`Sorted ~f:(fun id () -> - assert (not (Lazy_storage_kind.Big_map.Id.is_temp id)) ; - Lwt.return_unit) - in - let*! () = - Storage.Big_map.fold ctxt ~init:() ~order:`Undefined ~f:(fun id () -> - assert (not (Lazy_storage_kind.Big_map.Id.is_temp id)) ; - Lwt.return_unit) - in - return_unit - -let call_the_contract b ~baker ~src contract param_left param_right = - let open Lwt_result_syntax in - let fee = Alpha_context.Tez.one in - let amount = Alpha_context.Tez.zero in - let param = Printf.sprintf "Pair (%s) %s" param_left param_right in - let parameters = Alpha_context.Script.lazy_expr (Expr.from_string param) in - let* operation = Op.transaction ~fee (B b) src contract amount ~parameters in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) b - in - let* incr = Incremental.add_operation incr operation in - Incremental.finalize_block incr - -let path = project_root // Filename.dirname __FILE__ - -(** Originates the contract at contracts/temp_big_maps.tz and calls it with - the pair [(param_left, param_right)]. - An action (originating, storing, passing, passing twice) is done on a big - map (either fresh, passed, or stored). - All combinations are exercised. -*) -let test_temp_big_maps_contract param_left param_right () = - let open Lwt_result_syntax in - let* b, baker, src, _src2 = Contract_helpers.init () in - let* contract, b = - Contract_helpers.originate_contract - (path // "contracts/temp_big_maps.tz") - "{}" - src - b - baker - in - let* () = check_no_dangling_temp_big_map b in - let* b = call_the_contract b ~baker ~src contract param_left param_right in - check_no_dangling_temp_big_map b - -let param_left_values = ["Left True"; "Left False"; "Right {}"] - -let param_right_values = ["-1"; "0"; "1"; "2"] - -let tests = - List.flatten - (List.map - (fun param_left -> - List.map - (fun param_right -> - Tztest.tztest - (Printf.sprintf "temp_big_maps(%s, %s)" param_left param_right) - `Quick - (test_temp_big_maps_contract param_left param_right)) - param_right_values) - param_left_values) - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("temp big maps", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_accounting.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_accounting.ml deleted file mode 100644 index 21e947ee8419b0aeb4ada91e89ba1e649b65c98a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_accounting.ml +++ /dev/null @@ -1,1447 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_scanner) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_accounting.ml - Subject: Ticket scanner tests -*) - -open Protocol -open Alpha_context -open Script_typed_ir - -let assert_equal_string_list ~loc msg = - Assert.assert_equal_list ~loc String.equal msg Format.pp_print_string - -let assert_fail_with ~loc ~msg f = - let open Lwt_result_wrap_syntax in - let*!@ res = f () in - match res with - | Error [x] -> - let x = Format.asprintf "%a" Error_monad.pp x in - Assert.equal ~loc String.equal "" Format.pp_print_string msg x - | Ok _ -> failwith "Expected an error at %s, but got `Ok'." loc - | Error _ -> failwith "Expected a single error at %s." loc - -let string_list_of_ex_token_diffs ctxt token_diffs = - let open Lwt_result_wrap_syntax in - let accum (xs, ctxt) - (Ticket_token.Ex_token {ticketer; contents_type; contents}, amount) = - let*@ x, ctxt = - Script_ir_unparser.unparse_comparable_data - ctxt - Script_ir_unparser.Readable - contents_type - contents - in - let str = - Format.asprintf - {|{ticketer: "%a"; contents: %a; amount: %a}|} - Contract.pp - ticketer - Michelson_v1_printer.print_expr - x - Z.pp_print - amount - in - return (str :: xs, ctxt) - in - let* xs, ctxt = List.fold_left_es accum ([], ctxt) token_diffs in - return (List.rev xs, ctxt) - -let make_ex_token ctxt ~ticketer ~type_exp ~content_exp = - let open Lwt_result_wrap_syntax in - let*?@ Script_ir_translator.Ex_comparable_ty contents_type, ctxt = - let node = Micheline.root @@ Expr.from_string type_exp in - Script_ir_translator.parse_comparable_ty ctxt node - in - let*?@ ticketer = Contract.of_b58check ticketer in - let*@ contents, ctxt = - let node = Micheline.root @@ Expr.from_string content_exp in - Script_ir_translator.parse_comparable_data ctxt contents_type node - in - return (Ticket_token.Ex_token {ticketer; contents_type; contents}, ctxt) - -let assert_equal_ticket_diffs ~loc ctxt given expected = - let open Lwt_result_syntax in - let* ctxt, tbs1 = - List.fold_left_map_es - (fun ctxt ((ticketer, content), delta) -> - let+ token, ctxt = - make_ex_token - ctxt - ~ticketer - ~type_exp:"string" - ~content_exp:(Printf.sprintf "%S" content) - in - (ctxt, (token, Z.of_int delta))) - ctxt - expected - in - let* tbs1, ctxt = string_list_of_ex_token_diffs ctxt tbs1 in - let* tbs2, _ctxt = string_list_of_ex_token_diffs ctxt given in - assert_equal_string_list - ~loc - "Compare token balances" - (List.sort String.compare tbs1) - (List.sort String.compare tbs2) - -let assert_equal_ticket_receipt ~loc given expected = - let open Lwt_result_wrap_syntax in - let make_receipt_item (ticketer, content, updates) = - let*?@ ticketer = Contract.of_b58check ticketer in - let contents = Expr.from_string (Printf.sprintf "%S" content) in - let contents_type = Expr.from_string "string" in - let ticket_token = Ticket_token.{ticketer; contents_type; contents} in - let updates = - List.map - (fun (account, amount) -> - let account = Destination.Contract account in - let amount = Z.of_int amount in - Ticket_receipt.{account; amount}) - updates - in - return Ticket_receipt.{ticket_token; updates} - in - let* expected = List.map_es make_receipt_item expected in - Assert.equal_with_encoding - ~loc - (Data_encoding.list Ticket_receipt.item_encoding) - expected - given - -let updates_of_key_values ctxt ~key_type ~value_type key_values = - let open Lwt_result_wrap_syntax in - List.fold_right_es - (fun (key, value) (kvs, ctxt) -> - let*@ key_hash, ctxt = - Script_ir_translator.hash_comparable_data ctxt key_type key - in - let*@ key, ctxt = - Script_ir_unparser.unparse_comparable_data - ctxt - Script_ir_unparser.Readable - key_type - key - in - let* value, ctxt = - match value with - | None -> return (None, ctxt) - | Some value -> - let*@ value_node, ctxt = - Script_ir_translator.unparse_data - ctxt - Script_ir_unparser.Readable - value_type - value - in - return (Some value_node, ctxt) - in - return ({Big_map.key; key_hash; value} :: kvs, ctxt)) - key_values - ([], ctxt) - -let make_alloc big_map_id alloc updates = - Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update {init = Lazy_storage.Alloc alloc; updates}) - -let init () = - let open Lwt_result_syntax in - let* block, source = Context.init1 () in - let* operation, originated = - Op.contract_origination_hash (B block) source ~script:Op.dummy_script - in - let* block = Block.bake ~operation block in - let* inc = Incremental.begin_construction block in - return (originated, Incremental.alpha_ctxt inc) - -(** Initializes one address for operations and one baker. *) -let init_for_operation () = - let open Lwt_result_syntax in - let+ block, (src0, src1) = Context.init2 ~consensus_threshold:0 () in - let baker = Context.Contract.pkh src0 in - (baker, src1, block) - -let two_ticketers block = - let open Lwt_result_syntax in - let* result = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt result in - let*! cs = Contract.list ctxt in - match cs with c1 :: c2 :: _ -> return (c1, c2) | _ -> assert false - -let ticket_list_script = - {| - { parameter (list (ticket string)); - storage (list (ticket string)); - code { CAR; NIL operation ; PAIR } } - |} - -let setup ctxt ~key_type ~value_type entries = - let open Lwt_result_wrap_syntax in - let*@ ctxt, big_map_id = Big_map.fresh ~temporary:false ctxt in - let* updates, ctxt = - updates_of_key_values - ctxt - ~key_type - ~value_type - (List.map (fun (k, v) -> (k, Some v)) entries) - in - let*?@ key_type_node, ctxt = - Script_ir_unparser.unparse_ty ~loc:Micheline.dummy_location ctxt key_type - in - let*?@ value_type_node, ctxt = - Script_ir_unparser.unparse_ty ~loc:Micheline.dummy_location ctxt value_type - in - let key_type = Micheline.strip_locations key_type_node in - let value_type = Micheline.strip_locations value_type_node in - let alloc = make_alloc big_map_id Big_map.{key_type; value_type} updates in - return (alloc, big_map_id, ctxt) - -let new_big_map ctxt contract ~key_type ~value_type entries = - let open Lwt_result_wrap_syntax in - let* alloc, big_map_id, ctxt = setup ctxt ~key_type ~value_type entries in - let storage = Expr.from_string "{}" in - let*@ ctxt = - Contract.update_script_storage ctxt contract storage (Some [alloc]) - in - return (big_map_id, ctxt) - -let alloc_diff ctxt ~key_type ~value_type entries = - let open Lwt_result_syntax in - let* allocations, _, ctxt = setup ctxt ~key_type ~value_type entries in - return (allocations, ctxt) - -let remove_diff ctxt contract ~key_type ~value_type ~existing_entries = - let open Lwt_result_syntax in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type existing_entries - in - return (Lazy_storage.make Lazy_storage.Kind.Big_map big_map_id Remove, ctxt) - -let copy_diff ctxt contract ~key_type ~value_type ~existing_entries ~updates = - let open Lwt_result_wrap_syntax in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type existing_entries - in - let* updates, ctxt = - updates_of_key_values ctxt ~key_type ~value_type updates - in - let*@ ctxt, new_big_map_id = Big_map.fresh ctxt ~temporary:false in - return - ( Lazy_storage.make - Lazy_storage.Kind.Big_map - new_big_map_id - (Update {init = Lazy_storage.Copy {src = big_map_id}; updates}), - ctxt ) - -let existing_diff ctxt contract ~key_type ~value_type ~existing_entries ~updates - = - let open Lwt_result_syntax in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type existing_entries - in - let* updates, ctxt = - updates_of_key_values ctxt ~key_type ~value_type updates - in - return - ( Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update {init = Lazy_storage.Existing; updates}), - ctxt ) - -let empty_big_map ctxt ~key_type ~value_type = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let*@ ctxt, big_map_id = Big_map.fresh ~temporary:false ctxt in - return - ( Big_map - { - id = Some big_map_id; - diff = {map = Big_map_overlay.empty; size = 0}; - key_type; - value_type; - }, - ctxt ) - -let make_big_map ctxt contract ~key_type ~value_type entries = - let open Lwt_result_syntax in - let open Script_typed_ir in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type entries - in - return - ( Big_map - { - id = Some big_map_id; - diff = {map = Big_map_overlay.empty; size = 0}; - key_type; - value_type; - }, - ctxt ) - -let originate_script block ~script ~storage ~sender ~baker ~forges_tickets = - let open Lwt_result_syntax in - let code = Expr.toplevel_from_string script in - let storage = Expr.from_string storage in - let* operation, destination = - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - Op.contract_origination_hash - (B block) - sender - ~fee:(Tez_helpers.of_int 10) - ~script - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let* incr = - Incremental.add_operation - ?expect_apply_failure: - (if forges_tickets then Some (fun _ -> return_unit) else None) - incr - operation - in - let script = (code, storage) in - let+ block = Incremental.finalize_block incr in - (destination, script, block) - -let origination_operation ctxt ~sender ~script:(code, storage) ~orig_contract = - let open Lwt_result_wrap_syntax in - let script = Script.{code = lazy_expr code; storage = lazy_expr storage} in - let unparsed_storage = storage in - let*@ ( Script_ir_translator.Ex_script - (Script - { - storage_type; - storage; - code = _; - arg_type = _; - views = _; - entrypoints = _; - code_size = _; - }), - ctxt ) = - Script_ir_translator.parse_script - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets_in_storage:true - ~allow_forged_lazy_storage_id_in_storage:true - script - in - let operation = - Internal_operation - { - sender; - operation = - Origination - { - delegate = None; - code; - unparsed_storage; - credit = Tez.one; - preorigination = orig_contract; - storage_type; - storage; - }; - nonce = 1; - } - in - return (operation, ctxt) - -let originate block ~sender ~baker ~script ~storage ~forges_tickets = - let open Lwt_result_syntax in - let* orig_contract, script, block = - originate_script block ~script ~storage ~sender ~baker ~forges_tickets - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - return (orig_contract, script, incr) - -let transfer_operation ctxt ~sender ~destination ~arg_type ~arg = - let open Lwt_result_wrap_syntax in - let*@ params_node, ctxt = - Script_ir_translator.unparse_data - ctxt - Script_ir_unparser.Readable - arg_type - arg - in - return - ( Internal_operation - { - sender; - operation = - Transaction_to_smart_contract - { - amount = Tez.zero; - unparsed_parameters = params_node; - entrypoint = Entrypoint.default; - destination; - location = Micheline.dummy_location; - parameters_ty = arg_type; - parameters = arg; - }; - nonce = 1; - }, - ctxt ) - -let ticket_string_type = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Script_typed_ir.(ticket_t (-1) string_t) - -let ticket_string_list_type = - Result.value_f ~default:(fun _ -> assert false) - @@ Script_typed_ir.list_t (-1) ticket_string_type - -let boxed_list = Script_list.of_list - -let big_map_type ~key_type ~value_type = - Script_typed_ir.big_map_t (-1) key_type value_type - -let type_has_tickets ctxt ty = Ticket_scanner.type_has_tickets ctxt ty - -(** Test that adding a ticket to a lazy storage diff is picked up. *) -let assert_ticket_diffs ctxt ~loc ~self_contract ~arg_type ~storage_type ~arg - ~old_storage ~new_storage ~lazy_storage_diff ~expected_diff - ~expected_receipt = - let open Lwt_result_wrap_syntax in - let*?@ arg_type_has_tickets, ctxt = type_has_tickets ctxt arg_type in - let*?@ storage_type_has_tickets, ctxt = type_has_tickets ctxt storage_type in - let*@ ticket_diff, ticket_receipt, ctxt = - Ticket_accounting.ticket_diffs - ctxt - ~self_contract:(Originated self_contract) - ~arg_type_has_tickets - ~storage_type_has_tickets - ~arg - ~old_storage - ~new_storage - ~lazy_storage_diff - in - let*?@ ticket_diffs, ctxt = Ticket_token_map.to_list ctxt ticket_diff in - let* () = assert_equal_ticket_diffs ~loc ctxt ticket_diffs expected_diff in - let expected_receipt = - List.map - (fun (contract, contents, amounts) -> - let amounts = - List.map - (fun (contract, amount) -> (Contract.Originated contract, amount)) - amounts - in - (contract, contents, amounts)) - expected_receipt - in - assert_equal_ticket_receipt ~loc ticket_receipt expected_receipt - -let assert_balance = Ticket_helpers.assert_balance - -let string_ticket ticketer contents amount = - let amount = - WithExceptions.Option.get ~loc:__LOC__ - @@ Ticket_amount.of_n @@ Script_int.abs @@ Script_int.of_int amount - in - let ticketer = - Result.value_f ~default:(fun _ -> assert false) - @@ Contract.of_b58check ticketer - in - let contents = - Result.value_f ~default:(fun _ -> assert false) - @@ Script_string.of_string contents - in - Script_typed_ir.{ticketer; contents; amount} - -let string_ticket_token = Ticket_helpers.string_ticket_token - -let test_diffs_empty () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let*?@ int_ticket_big_map_ty = - big_map_type ~key_type:int_t ~value_type:ticket_string_type - in - (* Start with an empty big-map *) - let* empty_big_map, ctxt = - empty_big_map ctxt ~key_type:int_t ~value_type:ticket_string_type - in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:unit_t - ~storage_type:int_ticket_big_map_ty - ~arg:() - ~old_storage:empty_big_map - ~new_storage:empty_big_map - ~lazy_storage_diff:[] - ~expected_diff:[] - ~expected_receipt:[] - -(** Test that sending one ticket as an argument, when the new storage is empty - results in: - - Negative diff - - Empty receipt (since no ticket was added/removed from storage) *) -let test_diffs_tickets_in_args () = - let open Lwt_result_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let arg = string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:ticket_string_type - ~storage_type:unit_t - ~arg - ~old_storage:() - ~new_storage:() - ~lazy_storage_diff:[] - ~expected_diff:[(("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1)] - ~expected_receipt:[] - -(** Test adding a ticket to the args, which is also accounted for in the new - storage, results in: - - Empty diff - - Receipt with positive update (since one ticket was added to storage) *) -let test_diffs_tickets_in_args_and_storage () = - let open Lwt_result_syntax in - let* contract, ctxt = init () in - let arg = string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:ticket_string_type - ~storage_type:ticket_string_list_type - ~arg - ~old_storage:(boxed_list []) - ~new_storage:(boxed_list [arg]) - ~lazy_storage_diff:[] - ~expected_diff:[(("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 0)] - ~expected_receipt: - [("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, 1)])] - -(** Test that adding two tickets in the args, and only one new ticket in the - storage results in: - - Negative diff - - Receipt with single positive update (since one ticket was added to storage) *) -let test_diffs_drop_one_ticket () = - let open Lwt_result_syntax in - let* contract, ctxt = init () in - let arg = - boxed_list - [ - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1; - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 1; - ] - in - let new_storage = - boxed_list [string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1] - in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:ticket_string_list_type - ~storage_type:ticket_string_list_type - ~arg - ~old_storage:(boxed_list []) - ~new_storage - ~lazy_storage_diff:[] - ~expected_diff: - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 0); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), -1); - ] - ~expected_receipt: - [("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, 1)])] - -(** Test that adding a new ticket to the storage results in: - - Positive diff - - Receipt with single positive update *) -let test_diffs_adding_new_ticket_to_storage () = - let open Lwt_result_syntax in - let* contract, ctxt = init () in - let new_storage = - boxed_list [string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1] - in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:Script_typed_ir.unit_t - ~storage_type:ticket_string_list_type - ~arg:() - ~old_storage:(boxed_list []) - ~new_storage - ~lazy_storage_diff:[] - ~expected_diff:[(("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1)] - ~expected_receipt: - [("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, 1)])] - -(** Test that removing one ticket from the storage results in: - - Negative diff - - Receipt with negative update *) -let test_diffs_remove_from_storage () = - let open Lwt_result_syntax in - let* contract, ctxt = init () in - let old_storage = - boxed_list - [ - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1; - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 2; - ] - in - let new_storage = - boxed_list [string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1] - in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:Script_typed_ir.unit_t - ~storage_type:ticket_string_list_type - ~arg:() - ~old_storage - ~new_storage - ~lazy_storage_diff:[] - ~expected_diff: - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 0); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), -2); - ] - ~expected_receipt: - [("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue", [(contract, -2)])] - -(* Test adding ticket through lazy-storage diff results in: - - Positive diff - - Receipt with positive update *) -let test_diffs_lazy_storage_alloc () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let*?@ int_ticket_big_map_ty = - big_map_type ~key_type:int_t ~value_type:ticket_string_type - in - (* Start with an empty big-map *) - let* empty_big_map, ctxt = - empty_big_map ctxt ~key_type:int_t ~value_type:ticket_string_type - in - (* We add one ticket to the storage. *) - let* lazy_storage_diff, ctxt = - alloc_diff - ctxt - ~key_type:int_t - ~value_type:ticket_string_type - [ - ( Script_int.of_int 1, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ); - ] - in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:int_ticket_big_map_ty - ~storage_type:int_ticket_big_map_ty - ~arg:empty_big_map - ~old_storage:empty_big_map - ~new_storage:empty_big_map - ~lazy_storage_diff:[lazy_storage_diff] - ~expected_diff:[(("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1)] - ~expected_receipt: - [("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, 1)])] - -(* Test removing a big map containing a ticket results in: - - Negative diff - - Receipt with negative update *) -let test_diffs_remove_from_big_map () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let*?@ int_ticket_big_map_ty = - big_map_type ~key_type:int_t ~value_type:ticket_string_type - in - (* Start with an empty big-map *) - let* empty_big_map, ctxt = - empty_big_map ctxt ~key_type:int_t ~value_type:ticket_string_type - in - (* Remove one ticket from the lazy storage. *) - let* lazy_storage_diff, ctxt = - remove_diff - ctxt - contract - ~key_type:int_t - ~value_type:ticket_string_type - ~existing_entries: - [ - ( Script_int.of_int 1, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ); - ] - in - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:unit_t - ~storage_type:int_ticket_big_map_ty - ~arg:() - ~old_storage:empty_big_map - ~new_storage:empty_big_map - ~lazy_storage_diff:[lazy_storage_diff] - ~expected_diff:[(("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1)] - ~expected_receipt: - [("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, -1)])] - -(** Test copying a big-map. *) -let test_diffs_copy_big_map () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let*?@ int_ticket_big_map_ty = - big_map_type ~key_type:int_t ~value_type:ticket_string_type - in - (* Start with an empty big-map *) - let* empty_big_map, ctxt = - empty_big_map ctxt ~key_type:int_t ~value_type:ticket_string_type - in - (* We add one ticket to the storage. *) - let* lazy_storage_diff, ctxt = - copy_diff - ctxt - contract - ~key_type:int_t - ~value_type:ticket_string_type - ~existing_entries: - [ - ( Script_int.of_int 1, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ); - ] - ~updates: - [ - ( Script_int.of_int 2, - Some (string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 1) - ); - ] - in - (* We copy a big-map with one ticket inside (this is illegal in Michelson). - Then we add a new ticket to the map. The result is two new tickets. - *) - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:unit_t - ~storage_type:int_ticket_big_map_ty - ~arg:() - ~old_storage:empty_big_map - ~new_storage:empty_big_map - ~lazy_storage_diff:[lazy_storage_diff] - ~expected_diff: - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), 1); - ] - ~expected_receipt: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, 1)]); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue", [(contract, 1)]); - ] - -(** Test that adding and removing items from an existing big-map results - yield corresponding ticket-token diffs. *) -let test_diffs_add_to_existing_big_map () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let*?@ int_ticket_big_map_ty = - big_map_type ~key_type:int_t ~value_type:ticket_string_type - in - let* old_storage, ctxt = - make_big_map - ctxt - contract - ~key_type:int_t - ~value_type:ticket_string_type - [ - (* It doesn't matter what the old entries are. They are never traversed *) - ( Script_int.of_int 1, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ); - ( Script_int.of_int 2, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 1 ); - ( Script_int.of_int 3, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 1 ); - ] - in - (* We add one ticket to the storage. *) - let* lazy_storage_diff, ctxt = - existing_diff - ctxt - contract - ~key_type:int_t - ~value_type:ticket_string_type - ~existing_entries: - [ - ( Script_int.of_int 1, - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ); - ] - ~updates: - [ - (* Add one new ticket to the big-map. *) - ( Script_int.of_int 2, - Some (string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 2) - ); - (* Remove a ticket *) - (Script_int.of_int 1, None); - ] - in - (* Even if the old and the new storage are the same (and contains tickets) - we should still detect the diff from the lazy-storage diff. - Since the old and new storage are lazy, they should never be traversed. - *) - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:unit_t - ~storage_type:int_ticket_big_map_ty - ~arg:() - ~old_storage - ~new_storage:old_storage - ~lazy_storage_diff:[lazy_storage_diff] - ~expected_diff: - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), 2); - ] - ~expected_receipt: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", [(contract, -1)]); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue", [(contract, 2)]); - ] - -(** Test a combination of updates. *) -let test_diffs_args_storage_and_lazy_diffs () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* contract, ctxt = init () in - let*?@ int_ticket_big_map_ty = - big_map_type ~key_type:int_t ~value_type:ticket_string_type - in - let*?@ (Ty_ex_c list_big_map_pair_type) = - pair_t (-1) ticket_string_list_type int_ticket_big_map_ty - in - let* empty_big_map, ctxt = - empty_big_map ctxt ~key_type:int_t ~value_type:ticket_string_type - in - (* We send two tickets in the args. *) - let arg = - boxed_list - [ - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1; - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 1; - ] - in - (* We add three tickets to the storage. *) - let* lazy_storage_diff, ctxt = - existing_diff - ctxt - contract - ~key_type:int_t - ~value_type:ticket_string_type - ~existing_entries:[] - ~updates: - [ - ( Script_int.of_int 1, - Some (string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1) - ); - ( Script_int.of_int 2, - Some (string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 1) - ); - ( Script_int.of_int 3, - Some - (string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 1) - ); - ] - in - (* We have three tickets in the old storage. *) - let old_storage = - ( boxed_list - [ - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1; - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 1; - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 1; - ], - empty_big_map ) - in - let new_storage = - ( boxed_list - [ - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 1; - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "yellow" 1; - ], - empty_big_map ) - in - (* - Diff: - Before script execution: - - Args: 1 red, 1 blue - - Old storage : 1 red, 1 blue, 1 green - - Total: 2 red, 2 blue, 1 green - After execution: - - New_storage: 1 green, 1 yellow - - Lazy-diff: 1 red, 1 blue, 1 green - - Total: 1 red, 1 blue, 2 green, 1 yellow - Net diff: - - -1 red, -1 blue, +1 green, +1 yellow - Receipt (diff in storage): - Before script execution: - - Old storage : 1 red, 1 blue, 1 green - - Total: 1 red, 1 blue, 1 green - After execution: - - New_storage: 1 green, 1 yellow - - Lazy-diff: 1 red, 1 blue, 1 green - - Total: 1 red, 1 blue, 2 green, 1 yellow - Net diff: - - +1 green, +1 yellow - - *) - assert_ticket_diffs - ctxt - ~loc:__LOC__ - ~self_contract:contract - ~arg_type:ticket_string_list_type - ~storage_type:list_big_map_pair_type - ~arg - ~old_storage - ~new_storage - ~lazy_storage_diff:[lazy_storage_diff] - ~expected_diff: - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), 1); - ] - ~expected_receipt: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow", [(contract, 1)]); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green", [(contract, 1)]); - ] - -(** Test that attempting to transfer a ticket that exceeds the budget fails. *) -let test_update_invalid_transfer () = - let open Lwt_result_syntax in - let* baker, sender, block = init_for_operation () in - let* destination, _script, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let ctxt = Incremental.alpha_ctxt incr in - let arg_type = ticket_string_list_type in - let arg = - boxed_list [string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1] - in - let* operation, ctxt = - transfer_operation - ctxt - ~sender:(Contract sender) - ~destination - ~arg_type - ~arg - in - assert_fail_with - ~loc:__LOC__ - ~msg: - "Attempted to send 1 unit(s) of a ticket created by \ - KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq." - (fun () -> - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:sender - ~ticket_diffs:Ticket_token_map.empty - [operation]) - -(** Test that adding more tickets created by the [self] contract is valid and - results in a balance update. *) -let test_update_ticket_self_diff () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init_for_operation () in - let* self, _script, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let ticketer = Contract_hash.to_b58check self in - let self = Contract.Originated self in - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let*@ ticket_diffs, ctxt = - Ticket_token_map.of_list - ctxt - ~merge_overlap:(fun _ -> assert false) - [(red_token, Z.of_int 10)] - in - let*@ _, ctxt = - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs - [] - in - (* After update, we should have 10 added red tokens. *) - let*@ red_self_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract self) - red_token - in - assert_balance ~loc:__LOC__ ctxt red_self_token_hash (Some 10) - -(* Test that sending tickets to self succeed (there are no budget constraints). *) -let test_update_self_ticket_transfer () = - let open Lwt_result_wrap_syntax in - let* baker, self, block = init_for_operation () in - let* ticket_receiver, _script, incr = - originate - block - ~sender:self - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - (* Ticket is self. That means we can transfer an unlimited amounts of such - ticket-tokens. *) - let ticketer = Contract.to_b58check self in - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let* operation, ctxt = - let arg_type = ticket_string_list_type in - let arg = - boxed_list - [ - (* Send a total of 10 units of ticket-tokens. *) - string_ticket ticketer "red" 1; - string_ticket ticketer "red" 2; - string_ticket ticketer "red" 3; - string_ticket ticketer "red" 4; - ] - in - transfer_operation - ctxt - ~sender:(Contract self) - ~destination:ticket_receiver - ~arg_type - ~arg - in - let*@ _, ctxt = - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs:Ticket_token_map.empty - [operation] - in - (* Once we're done with the update, we expect ticket-receiver to have been - credited with 10 units of ticket-tokens. *) - let* () = - let*@ red_receiver_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract (Originated ticket_receiver)) - red_token - in - assert_balance ~loc:__LOC__ ctxt red_receiver_token_hash (Some 10) - in - return_unit - -(** Test that transferring a ticket that does not exceed the budget succeeds. *) -let test_update_valid_transfer () = - let open Lwt_result_wrap_syntax in - let* baker, self, block = init_for_operation () in - let* destination, _script, incr = - originate - block - ~sender:self - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let ticketer = "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" in - assert (ticketer <> Contract.to_b58check self) ; - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let*@ red_self_token_hash, ctxt = - Ticket_balance_key.of_ex_token ctxt ~owner:(Contract self) red_token - in - let*@ red_receiver_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract (Originated destination)) - red_token - in - (* Set up the balance so that the self contract owns one ticket. *) - let*@ _, ctxt = - Ticket_balance.adjust_balance ctxt red_self_token_hash ~delta:Z.one - in - let* operation, ctxt = - let arg_type = ticket_string_list_type in - let arg = boxed_list [string_ticket ticketer "red" 1] in - transfer_operation ctxt ~sender:(Contract self) ~destination ~arg_type ~arg - in - let*@ ticket_diffs, ctxt = - Ticket_token_map.of_list - ctxt - ~merge_overlap:(fun _ -> assert false) - [(red_token, Z.of_int (-1))] - in - let*@ _, ctxt = - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs - [operation] - in - (* Once we're done with the update, we expect the balance to have been moved - from [self] to [destination]. *) - let* () = assert_balance ~loc:__LOC__ ctxt red_self_token_hash None in - let* () = assert_balance ~loc:__LOC__ ctxt red_receiver_token_hash (Some 1) in - return_unit - -(** Test that transferring a ticket to itself is allowed and does not impact - the balance. *) -let test_update_transfer_tickets_to_self () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init_for_operation () in - let* self_hash, _script, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let ticketer = "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" in - assert (ticketer <> Contract_hash.to_b58check self_hash) ; - let self = Contract.Originated self_hash in - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let*@ red_self_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract self) - red_token - in - (* Set up the balance so that the self contract owns ten tickets. *) - let*@ _, ctxt = - Ticket_balance.adjust_balance ctxt red_self_token_hash ~delta:(Z.of_int 10) - in - let* operation, ctxt = - let arg_type = ticket_string_list_type in - let arg = boxed_list [string_ticket ticketer "red" 1] in - transfer_operation - ctxt - ~sender:(Contract self) - ~destination:self_hash - ~arg_type - ~arg - in - let*@ _, ctxt = - (* Ticket diff removes 5 tickets. *) - let* ticket_diffs, ctxt = - Ticket_token_map.of_list - ctxt - ~merge_overlap:(fun _ -> assert false) - [(red_token, Z.of_int (-5))] - in - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs - [operation] - in - (* We started with 10 units. Removed 5 from storage and sent one to [self]. - Therefore we expect 10 - 5 + 1 = 6 units remaining. *) - let* () = assert_balance ~loc:__LOC__ ctxt red_self_token_hash (Some 6) in - return_unit - -(** Test that attempting to originate a contract with tickets that exceed the - budget fails. *) -let test_update_invalid_origination () = - let open Lwt_result_syntax in - let* baker, sender, block = init_for_operation () in - let* orig_contract, script, incr = - let storage = - let ticketer = "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" in - Printf.sprintf - {|{ Pair %S "red" 1; Pair %S "green" 1; Pair %S "blue" 1; } |} - ticketer - ticketer - ticketer - in - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let ctxt = Incremental.alpha_ctxt incr in - let* operation, ctxt = - origination_operation ctxt ~sender:(Contract sender) ~orig_contract ~script - in - assert_fail_with - ~loc:__LOC__ - ~msg: - "Attempted to send 1 unit(s) of a ticket created by \ - KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq." - (fun () -> - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:sender - ~ticket_diffs:Ticket_token_map.empty - [operation]) - -(** Test update valid origination. *) -let test_update_valid_origination () = - let open Lwt_result_wrap_syntax in - let* baker, self, block = init_for_operation () in - let ticketer = "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" in - assert (ticketer <> Contract.to_b58check self) ; - let* orig_contract, script, incr = - let storage = Printf.sprintf {|{ Pair %S "red" 1; }|} ticketer in - originate - block - ~sender:self - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let*@ red_self_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract self) - red_token - in - (* Set up the balance so that the self contract owns one ticket. *) - let*@ _, ctxt = - Ticket_balance.adjust_balance ctxt red_self_token_hash ~delta:Z.one - in - let* operation, ctxt = - origination_operation ctxt ~sender:(Contract self) ~orig_contract ~script - in - let*@ _, ctxt = - let* ticket_diffs, ctxt = - Ticket_token_map.of_list - ctxt - ~merge_overlap:(fun _ -> assert false) - [(red_token, Z.of_int (-1))] - in - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs - [operation] - in - (* Once we're done with the update, we expect the balance to have been moved - from [self] to [destination]. *) - let*@ red_originated_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract (Originated orig_contract)) - red_token - in - assert_balance ~loc:__LOC__ ctxt red_originated_token_hash (Some 1) - -let test_update_self_origination () = - let open Lwt_result_wrap_syntax in - let* baker, self, block = init_for_operation () in - let ticketer = Contract.to_b58check self in - let* orig_contract, script, incr = - let storage = Printf.sprintf {|{ Pair %S "red" 1; }|} ticketer in - originate - block - ~sender:self - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let*@ red_originated_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract (Originated orig_contract)) - red_token - in - let* operation, ctxt = - origination_operation ctxt ~sender:(Contract self) ~orig_contract ~script - in - let*@ _, ctxt = - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs:Ticket_token_map.empty - [operation] - in - (* Once we're done with the update, we expect the balance to have been - credited to the originated contract. *) - assert_balance ~loc:__LOC__ ctxt red_originated_token_hash (Some 1) - -(** Test ticket-token map of list with duplicates. *) -let test_ticket_token_map_of_list_with_duplicates () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init_for_operation () in - let* self, _script, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let ticketer = Contract_hash.to_b58check self in - let self = Contract.Originated self in - let ctxt = Incremental.alpha_ctxt incr in - let* red_token = string_ticket_token ticketer "red" in - let*@ ticket_diffs, ctxt = - Ticket_token_map.of_list - ctxt - ~merge_overlap:(fun ctxt v1 v2 -> Ok (Z.add v1 v2, ctxt)) - [(red_token, Z.of_int 10); (red_token, Z.of_int 5)] - in - let*@ _, ctxt = - Ticket_accounting.update_ticket_balances - ctxt - ~self_contract:self - ~ticket_diffs - [] - in - (* After update, we should have 10 + 5 added red tokens. *) - let*@ red_self_token_hash, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract self) - red_token - in - assert_balance ~loc:__LOC__ ctxt red_self_token_hash (Some 15) - -let tests = - [ - Tztest.tztest "Diffs empty" `Quick test_diffs_empty; - Tztest.tztest "Diffs for tickets in args" `Quick test_diffs_tickets_in_args; - Tztest.tztest - "Diffs for tickets in args and storage" - `Quick - test_diffs_tickets_in_args_and_storage; - Tztest.tztest "Diffs for dropped ticket" `Quick test_diffs_drop_one_ticket; - Tztest.tztest - "Diffs for adding new ticket to storage" - `Quick - test_diffs_adding_new_ticket_to_storage; - Tztest.tztest - "Diffs for removing from storage" - `Quick - test_diffs_remove_from_storage; - Tztest.tztest - "Diffs for lazy storage allocation" - `Quick - test_diffs_lazy_storage_alloc; - Tztest.tztest - "Diffs for removing from big-map" - `Quick - test_diffs_remove_from_big_map; - Tztest.tztest "Diffs for copying a big-map" `Quick test_diffs_copy_big_map; - Tztest.tztest - "Diffs for adding to an existing big-map" - `Quick - test_diffs_add_to_existing_big_map; - Tztest.tztest - "Diffs for args, storage and lazy-diff" - `Quick - test_diffs_args_storage_and_lazy_diffs; - Tztest.tztest - "Update tickets balances with invalid transfer" - `Quick - test_update_invalid_transfer; - Tztest.tztest "Update ticket self diff" `Quick test_update_ticket_self_diff; - Tztest.tztest - "Update ticket balances for valid transfer" - `Quick - test_update_valid_transfer; - Tztest.tztest - "Update ticket balances for transfer with 'self' tickets" - `Quick - test_update_self_ticket_transfer; - Tztest.tztest - "Update transfer tickets to self" - `Quick - test_update_transfer_tickets_to_self; - Tztest.tztest - "Update invalid origination" - `Quick - test_update_invalid_origination; - Tztest.tztest - "Update valid origination" - `Quick - test_update_valid_origination; - Tztest.tztest - "Update valid self origination" - `Quick - test_update_self_origination; - Tztest.tztest - "ticket-token map with duplicate keys" - `Quick - test_ticket_token_map_of_list_with_duplicates; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket accounting", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_balance.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_balance.ml deleted file mode 100644 index 15bf82ca176360cd37468d57d6560df7f05b3764..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_balance.ml +++ /dev/null @@ -1,1791 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_balance_key) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_balance.ml - Subject: Ticket balance key hashing -*) - -open Protocol -open Alpha_context - -type init_env = { - block : Block.t; - baker : Signature.public_key_hash; - contract : Contract.t; -} - -let init_env () = - let open Lwt_result_wrap_syntax in - let* block, baker, contract, _src2 = Contract_helpers.init () in - return {block; baker; contract} - -let transaction block ~baker ~sender ~entrypoint ~recipient ~parameters = - let open Lwt_result_wrap_syntax in - let parameters = Script.lazy_expr @@ Expr.from_string parameters in - let* operation = - Op.transaction - (B block) - ~gas_limit:Max - ~entrypoint - ~parameters - ~fee:Tez.one - sender - recipient - (Tez.of_mutez_exn 0L) - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let* incr = Incremental.add_operation incr operation in - Incremental.finalize_block incr - -let originate = Contract_helpers.originate_contract_from_string - -let get_balance ctxt ~token ~owner = - let open Lwt_result_wrap_syntax in - let* key_hash, ctxt = Ticket_balance_key.of_ex_token ctxt ~owner token in - Ticket_balance.get_balance ctxt key_hash - -let get_used_ticket_storage block = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - wrap - @@ Ticket_balance.Internal_for_tests.used_storage_space - (Incremental.alpha_ctxt incr) - -let get_paid_ticket_storage block = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - wrap - @@ Ticket_balance.Internal_for_tests.paid_storage_space - (Incremental.alpha_ctxt incr) - -let get_used_contract_storage block contract = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - let alpha_ctxt = Incremental.alpha_ctxt incr in - wrap @@ Alpha_context.Contract.used_storage_space alpha_ctxt contract - -let get_paid_contract_storage block contract = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - let alpha_ctxt = Incremental.alpha_ctxt incr in - wrap - @@ Alpha_context.Contract.Internal_for_tests.paid_storage_space - alpha_ctxt - contract - -let assert_paid_contract_storage ~loc block contract expected = - let open Lwt_result_wrap_syntax in - let* storage = get_paid_contract_storage block contract in - Assert.equal - ~loc - Z.equal - "Paid contract storage " - Z.pp_print - (Z.of_int expected) - storage - -let assert_used_contract_storage ~loc block contract expected = - let open Lwt_result_wrap_syntax in - let* storage = get_used_contract_storage block contract in - Assert.equal - ~loc - Z.equal - "Used contract storage " - Z.pp_print - (Z.of_int expected) - storage - -let assert_paid_ticket_storage ~loc block expected = - let open Lwt_result_wrap_syntax in - let* storage = get_paid_ticket_storage block in - Assert.equal - ~loc - Z.equal - "Paid ticket storage " - Z.pp_print - (Z.of_int expected) - storage - -let assert_used_ticket_storage ~loc block expected = - let open Lwt_result_wrap_syntax in - let* storage = get_used_ticket_storage block in - Assert.equal - ~loc - Z.equal - "Used ticket storage " - Z.pp_print - (Z.of_int expected) - storage - -let assert_token_balance ~loc block token owner expected = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let*@ balance, _ = - get_balance ctxt ~token ~owner:(Destination.Contract owner) - in - match (balance, expected) with - | Some b, Some e -> Assert.equal_int ~loc (Z.to_int b) e - | Some b, None -> - failwith "%s: Expected no balance but got some %d" loc (Z.to_int b) - | None, Some b -> failwith "%s: Expected balance %d but got none" loc b - | None, None -> return_unit - -let string_token ~ticketer content = - let contents = - WithExceptions.Result.get_ok ~loc:__LOC__ @@ Script_string.of_string content - in - Ticket_token.Ex_token - {ticketer; contents_type = Script_typed_ir.string_t; contents} - -let unit_ticket ~ticketer = - Ticket_token.Ex_token - {ticketer; contents_type = Script_typed_ir.unit_t; contents = ()} - -let new_contracts ~before ~after = - let open Lwt_result_wrap_syntax in - let all_contracts current_block = - let* result = Incremental.begin_construction current_block in - let ctxt = Incremental.alpha_ctxt result in - let*! cs = Contract.list ctxt in - return cs - in - let* cs1 = all_contracts before in - let* cs2 = all_contracts after in - let not_in_cs1 = - let module S = Set.Make (String) in - let set = S.of_list @@ List.map Contract.to_b58check cs1 in - fun c -> not @@ S.mem (Contract.to_b58check c) set - in - return (List.filter not_in_cs1 cs2) - -let get_new_contract before f = - let open Lwt_result_wrap_syntax in - let* after = f before in - let* contracts = new_contracts ~before ~after in - match contracts with - | c :: _ -> return (c, after) - | _ -> failwith "Expected one new contracts" - -(** Test adding a ticket to a strict storage. *) -let test_add_strict () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* Originate *) - let* contract, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter unit; - storage (list (ticket string)); - code - { CDR; - PUSH nat 1; - PUSH string "Red"; - TICKET; - ASSERT_SOME; - CONS; - NIL operation ; - PAIR } } - |} - ~storage:"{}" - block - in - let token_red = string_token ~ticketer:contract "Red" in - (* Before calling the contract the balance should be empty. *) - let* () = assert_token_balance ~loc:__LOC__ block token_red contract None in - (* Run the script *) - let* block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"Unit" - in - (* After calling the contract, one ticket is added and balance is one. *) - let* () = - assert_token_balance ~loc:__LOC__ block token_red contract (Some 1) - in - (* Calling the contract again should increase the balance once more. *) - let* block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"Unit" - in - assert_token_balance ~loc:__LOC__ block token_red contract (Some 2) - -(** Test adding and removing tickets from a list in the storage. *) -let test_add_remove () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* Originate *) - let* contract, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (or (unit %add) (unit %remove)); - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { DROP ; - PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - CONS ; - NIL operation ; - PAIR } - { DROP 2 ; NIL (ticket string) ; NIL operation ; PAIR } } } - |} - ~storage:"{}" - block - in - let add_one block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"Left Unit" - in - let clear block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"Right Unit" - in - let token_red = string_token ~ticketer:contract "Red" in - (* Before calling the contract the balance should be empty *) - let* () = assert_token_balance ~loc:__LOC__ block token_red contract None in - (* Call the contract twice *) - let* block = add_one block in - let* block = add_one block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red contract (Some 2) - in - (* Remove tickets from the contract *) - let* block = clear block in - assert_token_balance ~loc:__LOC__ block token_red contract None - -(** Test adding multiple tickets to a big-map. *) -let test_add_to_big_map () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - let* contract, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter int ; - storage (big_map int (ticket string)) ; - code { LEFT (big_map int (ticket string)) ; - LOOP_LEFT - { UNPAIR ; - PUSH int 0 ; - SWAP ; - DUP ; - DUG 2 ; - COMPARE ; - LE ; - IF { DROP ; RIGHT (pair int (big_map int (ticket string))) } - { SWAP ; - PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - SOME ; - DUP 3 ; - GET_AND_UPDATE ; - DROP ; - PUSH int 1 ; - DIG 2 ; - SUB ; - PAIR ; - LEFT (big_map int (ticket string)) } } ; - NIL operation ; - PAIR } } - |} - ~storage:"{}" - block - in - let* block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"100" - in - let token_red = string_token ~ticketer:contract "Red" in - assert_token_balance ~loc:__LOC__ block token_red contract (Some 100) - -(** Test adding, swapping and clearing big-maps from storage. - The script contains in its storage two big-maps: - - pair - (big_map %map1 int (ticket string)) - (big_map %map2 int (ticket string))) - - And takes three actions: - 1) Add one ticket to map1 - 2) Swap map1 and map2 - 3) Clear map1 - *) -let test_swap_big_map () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - let* contract, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (or (or (int %add) (unit %clear)) (unit %swap)) ; - storage (pair (big_map %map1 int (ticket string)) (big_map %map2 int (ticket string))) ; - code { UNPAIR ; - NIL operation ; - SWAP ; - IF_LEFT - { IF_LEFT - { DIG 2 ; - UNPAIR ; - PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - SOME ; - DIG 3 ; - GET_AND_UPDATE ; - DROP ; - PAIR ; - SWAP ; - PAIR } - { DROP ; SWAP ; CDR ; EMPTY_BIG_MAP int (ticket string) ; - PAIR ; SWAP ; PAIR } } - { DROP ; SWAP ; UNPAIR ; SWAP ; PAIR ; SWAP ; PAIR } } } - |} - ~storage:"Pair {} {}" - block - in - let add_to_index block ix = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:(Printf.sprintf "Left (Left %d)" ix) - in - let swap_big_maps block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"Right Unit" - in - let clear_left_big_map block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:contract - ~parameters:"Left (Right Unit)" - in - (* Add three tickets to [map1] *) - let* block = add_to_index block 1 in - let* block = add_to_index block 2 in - let* block = add_to_index block 3 in - let token_red = string_token ~ticketer:contract "Red" in - let* () = - assert_token_balance ~loc:__LOC__ block token_red contract (Some 3) - in - (* Swap [map1] and [map2]. This should not impact the ticket balance. *) - let* block = swap_big_maps block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red contract (Some 3) - in - (* Remove all tickets from [map1] (which is empty). *) - let* block = clear_left_big_map block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red contract (Some 3) - in - (* Swap [map1] and [map2]. Now, [map1] contains three tickets. *) - let* block = swap_big_maps block in - (* Clear all tickets from [map1]. *) - let* block = clear_left_big_map block in - assert_token_balance ~loc:__LOC__ block token_red contract None - -(* Test sending a ticket to an address *) -let test_send_tickets () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract that can receive a ticket and store it in a list. *) - let* ticket_receiver, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (ticket string) ; - storage (list (ticket string)) ; - code { UNPAIR ; CONS ; NIL operation ; PAIR } } - |} - ~storage:"{}" - block - in - (* A contract that, given an address to a contract that receives tickets, - mints a ticket and sends it over. *) - let* ticket_sender, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter address ; - storage unit ; - code { CAR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract of type `ticket(string)' not found" ; - FAILWITH } - { PUSH mutez 0 ; - PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - |} - ~storage:"Unit" - block - in - let mint_and_send block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_sender - ~parameters: - (Printf.sprintf {|"%s"|} @@ Contract.to_b58check ticket_receiver) - in - (* Call ticket-sender twice in order to transfer tickets to ticket-receiver *) - let* block = mint_and_send block in - let* block = mint_and_send block in - let token_red = string_token ~ticketer:ticket_sender "Red" in - assert_token_balance ~loc:__LOC__ block token_red ticket_receiver (Some 2) - -(** Test sending and storing tickets with amount zero. *) -let test_send_and_store_zero_amount_tickets () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract that, given an address to a contract that receives tickets, - mints a ticket and sends it over. *) - let* ticket_minter, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - |} - ~storage:"Unit" - block - in - (* A contract with two entrypoints: - - Store (ticket): stores the received ticket. - - Send (address) sends the last received tickets to the given address. - *) - let ticket_storer_script = - {| - { parameter (or (address %send) (ticket %store string)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { CONTRACT (ticket string) ; - IF_NONE - { DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { SWAP ; - IF_CONS - { DIG 2 ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - SWAP ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } - { DROP ; PUSH string "Empty storage" ; FAILWITH } } } - { CONS ; NIL operation ; PAIR } } } - |} - in - let* ticket_store_1, _script, block = - originate - ~baker - ~source_contract - ~script:ticket_storer_script - ~storage:"{}" - block - in - let* ticket_store_2, _script, block = - originate - ~baker - ~source_contract - ~script:ticket_storer_script - ~storage:"{}" - block - in - let mint_and_send_to_storer_1 block amount = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_minter - ~parameters: - (Printf.sprintf - {|Pair "%s%s" %d|} - (Contract.to_b58check ticket_store_1) - "%store" - amount) - in - let send_from_store_1_to_store_2 block = - transaction - ~entrypoint:(Entrypoint.of_string_strict_exn "send") - ~baker - ~sender:source_contract - block - ~recipient:ticket_store_1 - ~parameters: - (Printf.sprintf - {|"%s%s"|} - (Contract.to_b58check ticket_store_2) - "%store") - in - let token_red = string_token ~ticketer:ticket_minter "Red" in - (* Mint and send a ticket with amount 0 to [ticket_store_1], which fails. - After the transaction: - - [ticket_store_1]: - [ ] - *) - let*! result = mint_and_send_to_storer_1 block 0 in - assert (Result.is_error result) ; - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_1 None - in - (* Mint and send a ticket with amount 10 to [ticket_store_1]. After - the transaction: - - [ticket_store_1]: - [ - (TM, "Red", 10) - ] - *) - let* block = mint_and_send_to_storer_1 block 10 in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_1 (Some 10) - in - (* Send the top of [ticket_storer_1]'s list to [ticket_store_2]. That is the - ticket (TM, "Red", 10). After the transaction: - - ticket_store_1: - [ ] - ticket_store_2: - [ - (TM, "Red", 10) - ] - *) - let* block = send_from_store_1_to_store_2 block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_1 None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_2 (Some 10) - in - (* Send the top of [ticket_store_1]'s stack to [ticket_store_2]. - However, this fails because [ticket_store_1]'s stack is empty. - Now, [ticket_store_2] holds both tickets. - - ticket_store_1: - [ ] - [ticket_store_2]: - [ - (TM, "Red", 10) - ] - *) - let*! result = send_from_store_1_to_store_2 block in - assert (Result.is_error result) ; - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_1 None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_2 (Some 10) - in - (* Mint and send a ticket with amount 5 to [ticket_store_1]. After the - transaction: - - [ticket_store_1]: - [ - (TM, "Red", 5) - ] - [ticket_store_2]: - [ - (TM, "Red", 10) - ] - *) - let* block = mint_and_send_to_storer_1 block 5 in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_1 (Some 5) - in - (* Send the top of [ticket_store_1]'s stack to [ticket_store_2]. That is the - ticket (TM, "Red", 5). After the transaction, [ticket_store_2] holds three - tickets: - - ticket_store_1: - [ ] - [ticket_store_2]: - [ - (TM, "Red", 5) - (TM, "Red", 10) - ] - *) - let* block = send_from_store_1_to_store_2 block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_1 None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_store_2 (Some 15) - in - return_unit - -(** Test sending tickets to an implicit account. *) -let test_send_tickets_to_implicit_account () = - let open Lwt_result_wrap_syntax in - let* block, baker, contract, contract2 = Contract_helpers.init () in - let () = - match (contract, contract2) with - | Contract.Implicit _, Contract.Implicit _ -> () - | _ -> assert false - in - (* A contract that receives an address and mints and sends a ticket to it. *) - let* ticketer, _script, block = - originate - ~baker - ~source_contract:contract - ~script: - {| - { parameter address; - storage unit; - code { CAR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0; - PUSH nat 1 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR }}} - |} - ~storage:"Unit" - block - in - let* block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:contract - block - ~recipient:ticketer - ~parameters:(Printf.sprintf {|"%s"|} (Contract.to_b58check contract2)) - in - let token = string_token ~ticketer "Ticket" in - assert_token_balance ~loc:__LOC__ block token contract2 (Some 1) - -(** Test sending tickets in a big-map. *) -let test_send_tickets_in_big_map () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract that can receive a big-map with tickets. *) - let* ticket_receiver, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (big_map int (ticket string)) ; - storage (big_map int (ticket string)) ; - code { CAR ; NIL operation ; PAIR } } - |} - ~storage:"{}" - block - in - (* A contract with two actions: - - [mint_and_save(key, content)] for creating and saving a new ticket in - a big-map. - - [send (address)] for transferring the big-map to the given address. - *) - let* ticket_manager, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (or (pair %mint_and_save int string) (address %send)) ; - storage (big_map int (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { UNPAIR ; - DIG 2 ; - PUSH nat 1 ; - DIG 3 ; - TICKET ; - ASSERT_SOME ; - SOME ; - DIG 2 ; - GET_AND_UPDATE ; - DROP ; - NIL operation ; - PAIR } - { CONTRACT (big_map int (ticket string)) ; - IF_NONE - { PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - EMPTY_BIG_MAP int (ticket string) ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } } - |} - ~storage:"{}" - block - in - let mint_and_save key content block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_manager - ~parameters:(Printf.sprintf {|Left (Pair %d "%s")|} key content) - in - let send block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_manager - ~parameters: - (Printf.sprintf {|Right "%s"|} @@ Contract.to_b58check ticket_receiver) - in - let token_red = string_token ~ticketer:ticket_manager "Red" in - let token_blue = string_token ~ticketer:ticket_manager "Blue" in - let token_yellow = string_token ~ticketer:ticket_manager "Yellow" in - (* Call ticket manager to mint and save three tickets in a big-map. *) - let* block = mint_and_save 1 "Red" block in - let* block = mint_and_save 2 "Blue" block in - let* block = mint_and_save 3 "Yellow" block in - (* Verify that all three tickets are accounted for and belong to - ticket-manager. *) - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_manager (Some 1) - in - let* () = - assert_token_balance ~loc:__LOC__ block token_blue ticket_manager (Some 1) - in - let* () = - assert_token_balance ~loc:__LOC__ block token_yellow ticket_manager (Some 1) - in - (* Send over the big-map with tickets to ticket-receiver. *) - let* block = send block in - (* Verify that all three tickets now belong to the ticket-receiver contract. *) - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_receiver (Some 1) - in - let* () = - assert_token_balance ~loc:__LOC__ block token_blue ticket_receiver (Some 1) - in - let* () = - assert_token_balance - ~loc:__LOC__ - block - token_yellow - ticket_receiver - (Some 1) - in - (* Finally test that the ticket-manager no longer holds any of the tickets *) - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_manager None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_blue ticket_manager None - in - assert_token_balance ~loc:__LOC__ block token_yellow ticket_manager None - -(* Test sending tickets in a big-map. *) -let test_modify_big_map () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract with two actions: - - [Add ((int, string))] for adding a ticket to the big-map. - - [Remove(int)] for removing an index from the big-map. - *) - let* ticket_manager, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (or (pair %add int string) (int %remove)) ; - storage (big_map int (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { UNPAIR ; - DIG 2 ; - PUSH nat 1 ; - DIG 3 ; - TICKET ; - ASSERT_SOME ; - SOME ; - DIG 2 ; - GET_AND_UPDATE ; - DROP ; - NIL operation ; - PAIR } - { SWAP ; - NONE (ticket string) ; - DIG 2 ; - GET_AND_UPDATE ; - DROP ; - NIL operation ; - PAIR } } } - |} - ~storage:"{}" - block - in - let add key content block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_manager - ~parameters:(Printf.sprintf {|Left (Pair %d "%s")|} key content) - in - let remove key block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_manager - ~parameters:(Printf.sprintf {|Right %d|} key) - in - let token_red = string_token ~ticketer:ticket_manager "Red" in - let token_blue = string_token ~ticketer:ticket_manager "Blue" in - let token_yellow = string_token ~ticketer:ticket_manager "Yellow" in - let token_green = string_token ~ticketer:ticket_manager "Green" in - (* Add a red, blue and a yellow ticket *) - let* block = add 1 "Red" block in - let* block = add 2 "Blue" block in - let* block = add 3 "Yellow" block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_manager (Some 1) - in - let* () = - assert_token_balance ~loc:__LOC__ block token_blue ticket_manager (Some 1) - in - let* () = - assert_token_balance ~loc:__LOC__ block token_yellow ticket_manager (Some 1) - in - (* Replace the red ticket at index 1 with a green one. *) - let* block = add 1 "Green" block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_manager None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_green ticket_manager (Some 1) - in - (* Remove the blue ticket at index 2. *) - let* block = remove 2 block in - let* () = - assert_token_balance ~loc:__LOC__ block token_blue ticket_manager None - in - (* Add one more green ticket at index 4 and verify that the total count is 2. *) - let* block = add 4 "Green" block in - assert_token_balance ~loc:__LOC__ block token_green ticket_manager (Some 2) - -(* Test sending tickets in a big-map to a receiver that drops it. *) -let test_send_tickets_in_big_map_and_drop () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract that can receive a big-map with tickets but drops it. *) - let* ticket_receiver, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (big_map int (ticket string)) ; - storage unit; - code { DROP; PUSH unit Unit; NIL operation ; PAIR } } - |} - ~storage:"Unit" - block - in - (* A contract that, given an address, creates a ticket and sends it to the - corresponding contract in a big-map. *) - let* ticket_sender, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter address ; - storage unit ; - code { CAR ; - EMPTY_BIG_MAP int (ticket string) ; - PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - SOME ; - PUSH int 1 ; - GET_AND_UPDATE ; - DROP ; - SWAP ; - CONTRACT (big_map int (ticket string)) ; - IF_NONE - { DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - - |} - ~storage:"Unit" - block - in - let token_red = string_token ~ticketer:ticket_sender "Red" in - (* Call ticket-sender to send a ticket to ticket-receiver. *) - let* block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_sender - ~parameters: - (Printf.sprintf {|"%s"|} @@ Contract.to_b58check ticket_receiver) - in - (* Verify that neither ticket-sender nor ticket-receiver holds any balance - for the ticket. *) - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_sender None - in - assert_token_balance ~loc:__LOC__ block token_red ticket_receiver None - -(* Test create contract with tickets *) -let test_create_contract_with_ticket () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - let* ticket_creator, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (pair (pair string nat) key_hash) ; - storage unit ; - code { UNPAIR ; - UNPAIR ; - UNPAIR ; - TICKET ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - SOME ; - CREATE_CONTRACT - { parameter (ticket string) ; - storage (ticket string) ; - code { CAR ; NIL operation ; PAIR } } ; - SWAP ; - DROP ; - SWAP ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } - |} - ~storage:"Unit" - block - in - let token_red = string_token ~ticketer:ticket_creator "Red" in - (* Call ticket-creator to originate a new contract with one ticket *) - let* new_contract, block = - get_new_contract block (fun block -> - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_creator - ~parameters: - (Printf.sprintf - {|Pair (Pair "Red" 1) "%s"|} - (Contract.to_b58check source_contract))) - in - let* () = - assert_token_balance ~loc:__LOC__ block token_red new_contract (Some 1) - in - assert_token_balance ~loc:__LOC__ block token_red ticket_creator None - -let test_join_tickets () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - let* ticket_joiner, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter unit ; - storage (option (ticket string)) ; - code { CDR ; - IF_NONE - { PUSH nat 1 ; PUSH string "Red" ; - TICKET ; ASSERT_SOME ; SOME ; NIL operation ; PAIR } - { PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - PAIR ; - JOIN_TICKETS ; - NIL operation ; - PAIR } } } - |} - ~storage:"None" - block - in - let token_red = string_token ~ticketer:ticket_joiner "Red" in - (* Call ticket joiner to create and join an additional ticket. *) - let add block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_joiner - ~parameters:"Unit" - in - (* Add three tickets *) - let* block = add block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_joiner (Some 1) - in - let* block = add block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_joiner (Some 2) - in - let* block = add block in - assert_token_balance ~loc:__LOC__ block token_red ticket_joiner (Some 3) - -(* A simple fungible token contract implemented using tickets of type - [ticket unit]. - parameter: - - burn: ticket unit - - mint: (contract %destination (ticket unit)) x (nat %amount) -*) -let ticket_builder = - {| - - parameter - (or (ticket %burn unit) - (pair %mint (contract %destination (ticket unit)) (nat %amount))); - storage address; - code - { - AMOUNT; PUSH mutez 0; ASSERT_CMPEQ; - - UNPAIR; - IF_LEFT - { - # Burn entrypoint - # Check that the ticket is ticketed by ourselves - READ_TICKET; CAR; SELF_ADDRESS; ASSERT_CMPEQ; - - # Drop the ticket - DROP; - - # Finish - NIL operation - } - { - # Mint entrypoint - # Authenticate SENDER - DUP @manager 2; SENDER; ASSERT_CMPEQ; - - UNPAIR; - SWAP; UNIT; TICKET; ASSERT_SOME; - PUSH mutez 0; SWAP; TRANSFER_TOKENS; - NIL operation; SWAP; CONS - }; - PAIR - } - - |} - -(* A simple wallet for fungible tokens implemented using tickets of - type [ticket unit]. - parameter: - - receive: ticket unit - - send: - * destination: (contract (ticket unit)) - * amount: nat - * ticketer: address -*) -let ticket_wallet = - {| - parameter - (or - (ticket %receive unit) - (pair %send (contract %destination (ticket unit)) (nat %amount) (address %ticketer))); - storage (pair (address %manager) (big_map %tickets address (ticket unit))); - code - { - AMOUNT; PUSH mutez 0; ASSERT_CMPEQ; - - UNPAIR 3; - IF_LEFT - { - # Receive entrypoint - - # Get the ticketer - READ_TICKET; CAR @ticketer; DUP; - - # Extract the associated ticket, if any, from the stored big map - DIG 4; - NONE (ticket unit); - DIG 2; - GET_AND_UPDATE; - - # Join it with the parameter - IF_SOME - { - DIG 3; - PAIR; - JOIN_TICKETS; - ASSERT_SOME - } - { DIG 2 }; - SOME; - DIG 2; - GET_AND_UPDATE; - ASSERT_NONE; - SWAP; - PAIR; - NIL operation - } - { - # Send entrypoints - - # Authenticate SENDER - DUP @manager 2; SENDER; ASSERT_CMPEQ; - - UNPAIR 3; - - # Get the ticket associated to the requested ticketer - DIG 4; - NONE (ticket unit); - DUP @ticketer 5; - GET_AND_UPDATE; - ASSERT_SOME; - - # Substract the requested amount - READ_TICKET; - GET @total_amount 4; - DUP @amount 5; - SWAP; SUB; - DUP; EQ; - IF - { - # Drop @remaining_amount because it is zero - DROP; - # Drop @amount because this is now irrelevant - DIG 3; DROP; - # Drop @ticketer because we are not storing any ticket in this wallet - DIG 3; DROP; - # Bring the big map to the stack top since the ticket entry is already striked out - DUG 3 - } - { - ISNAT; ASSERT_SOME @remaining_amount; - - # Split the ticket - DIG 4; PAIR; SWAP; SPLIT_TICKET; - ASSERT_SOME; UNPAIR @to_send @to_keep; - - # Store the ticket to keep - DUG 5; - SOME; - DIG 3; - GET_AND_UPDATE; - ASSERT_NONE; - }; - DIG 2; PAIR; - - # Send the ticket - SWAP; - PUSH mutez 0; - DIG 3; - TRANSFER_TOKENS; - NIL operation; - SWAP; - CONS; - }; - PAIR - } - |} - -(** Test ticket wallet implementation including sending tickets to self. *) -let test_ticket_wallet () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - let* ticket_builder, _script, block = - originate - ~baker - ~source_contract - ~script:ticket_builder - ~storage:(Printf.sprintf "%S" @@ Contract.to_b58check source_contract) - block - in - let* ticket_wallet, _script, block = - originate - ~baker - ~source_contract - ~script:ticket_wallet - ~storage: - (Printf.sprintf "Pair %S {}" @@ Contract.to_b58check source_contract) - block - in - (* Call ticket-builder to mint one ticket and send to ticket-wallet. *) - let ticket_builder_token = unit_ticket ~ticketer:ticket_builder in - let send_one block = - transaction - ~entrypoint:(Entrypoint.of_string_strict_exn "mint") - ~baker - ~sender:source_contract - block - ~recipient:ticket_builder - ~parameters: - (Printf.sprintf - {|Pair "%s%sreceive" 1|} - (Contract.to_b58check ticket_wallet) - "%") - in - (* Call ticket wallet to send a ticket to ticket-builder's burn address - entrypoint. *) - let send_to_burn block = - transaction - ~entrypoint:(Entrypoint.of_string_strict_exn "send") - ~baker - ~sender:source_contract - block - ~recipient:ticket_wallet - ~parameters: - (Printf.sprintf - {|Pair "%s%sburn" 1 %S|} - (Contract.to_b58check ticket_builder) - "%" - (Contract.to_b58check ticket_builder)) - in - let send_to_self block = - transaction - ~entrypoint:(Entrypoint.of_string_strict_exn "send") - ~baker - ~sender:source_contract - block - ~recipient:ticket_wallet - ~parameters: - (Printf.sprintf - {|Pair "%s%sreceive" 1 %S|} - (Contract.to_b58check ticket_wallet) - "%" - (Contract.to_b58check ticket_builder)) - in - let assert_balance block balance = - assert_token_balance - ~loc:__LOC__ - block - ticket_builder_token - ticket_wallet - balance - in - (* Mint and send tickets to wallet. *) - let* block = send_one block in - let* () = assert_balance block (Some 1) in - let* block = send_one block in - let* () = assert_balance block (Some 2) in - (* Send to self should not affect the balance. *) - let* block = send_to_self block in - let* () = assert_balance block (Some 2) in - (* Burn tickets by sending to burn address. *) - let* block = send_to_burn block in - let* () = assert_balance block (Some 1) in - let* block = send_to_burn block in - assert_balance block None - -(* Test used ticket storage and paid storage. *) -let test_ticket_storage () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract that can receive a ticket and store it. Each new ticket it - receives is added to a list. *) - let* ticket_keeper, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (ticket string) ; - storage (list (ticket string)) ; - code { UNPAIR ; CONS ; NIL operation ; PAIR } } - |} - ~storage:"{}" - block - in - (* A contract that receives a pair of ticket and address and forwards the - ticket to the given address. The contract does not store any tickets. *) - let* ticket_forwarder, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (pair (ticket string) address) ; - storage unit ; - code { CAR ; - UNPAIR ; - SWAP ; - CONTRACT (ticket string) ; - IF_NONE - { DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - |} - ~storage:"Unit" - block - in - (* A contract that takes two addresses: one to a ticket-forward contract and - one to a ticket-receiver contract, mints and sends the ticket to a - ticket-forward address along with the address of the ticket-receiver. - - Altogether we have: - - [ticket_minter] ----> [ticket_forwarder] ----> [ticket_receiver] - *) - let* ticket_minter, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (pair address address) ; storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (pair (ticket string) address) ; - IF_NONE - { DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH nat 1 ; - PUSH string "Red" ; - TICKET ; - ASSERT_SOME ; - PAIR ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } |} - ~storage:"Unit" - block - in - let mint_and_send block = - transaction - ~entrypoint:Entrypoint.default - ~baker - ~sender:source_contract - block - ~recipient:ticket_minter - ~parameters: - (Printf.sprintf - {|Pair %S %S|} - (Contract.to_b58check ticket_forwarder) - (Contract.to_b58check ticket_keeper)) - in - let* block = mint_and_send block in - let token_red = string_token ~ticketer:ticket_minter "Red" in - (* Verify that the ticket is accredited to the ticket keeper and no one else. - The ticket table now looks like: - *) - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_minter None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_forwarder None - in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_keeper (Some 1) - in - (* Both ticket paid and used storage should now be 65 bytes for the key and - one for the value. Ticket table looks like: - - | Owner x Ticket-token | Amount | - |--------------------------|--------| - | ticket_keeper x Red | 1 | - - Used storage: 65 + 1 = 66 - - Paid storage: 66 - *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 66 in - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 66 in - (* Send another ticket that uses the same slot. That does not increase used - storage. The first call from [ticket_minter] to ticket-forwarder results in - a table: - - | Owner x Ticket-token | Amount | - |--------------------------|--------| - | ticket_forwarder x Red | 1 | - | ticket_keeper x Red | 1 | - - Used storage: 132 - - The call from ticket-forwarder to [ticket_keeper] results in: - - | Owner x Ticket-token | Amount | - |--------------------------|--------| - | ticket_keeper x Red | 2 | - - Used storage: 66 - - Noted that the paid-storage "water-marker" was pushed up to 132. - *) - let* block = mint_and_send block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_keeper (Some 2) - in - let* () = assert_used_ticket_storage ~loc:__LOC__ block 66 in - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 132 in - (* Send yet another ticket that uses the same slot. That does not increase used - storage and it's using already paid storage. The first call from - [ticket_minter] to ticket-forwarder results in a table: - - | Owner x Ticket-token | Amount | - |--------------------------|--------| - | ticket_forwarder x Red | 1 | - | ticket_keeper x Red | 2 | - - Used storage: 132 - - The call from ticket-forwarder to [ticket_keeper] results in: - - | Owner x Ticket-token | Amount | - |--------------------------|--------| - | ticket_keeper x Red | 3 | - - Used storage: 66 - - Here, the paid_storage "water-mark" is not pushed up. - *) - let* block = mint_and_send block in - let* () = - assert_token_balance ~loc:__LOC__ block token_red ticket_keeper (Some 3) - in - let* () = assert_used_ticket_storage ~loc:__LOC__ block 66 in - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 132 in - return_unit - -(* Test used ticket storage and paid storage. *) -let test_storage_for_create_and_remove_tickets () = - let open Lwt_result_wrap_syntax in - let* {block; baker; contract = source_contract} = init_env () in - (* A contract with two endpoints: - - Create n tickets and add to its storage - - Remove all tickets - *) - let* ticket_manager, _script, block = - originate - ~baker - ~source_contract - ~script: - {| - { parameter (or (pair %add nat string) (unit %clear)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { UNPAIR ; DIG 2 ; SWAP ; DIG 2 ; TICKET ; ASSERT_SOME ; CONS ; NIL operation ; PAIR } - { DROP 2 ; NIL (ticket string) ; NIL operation ; PAIR } } } - |} - ~storage:"{}" - block - in - let add block n content = - transaction - ~entrypoint:(Entrypoint.of_string_strict_exn "add") - ~baker - ~sender:source_contract - block - ~recipient:ticket_manager - ~parameters:(Printf.sprintf "Pair %d %S" n content) - in - let clear block = - transaction - ~entrypoint:(Entrypoint.of_string_strict_exn "clear") - ~baker - ~sender:source_contract - block - ~recipient:ticket_manager - ~parameters:"Unit" - in - (* Initially the used and paid contract storage size is 141. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 141 - in - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 141 - in - (* Add 1000 units of "A" tickets. *) - let* block = add block 1000 "A" in - (* After adding one block the new used and paid storage grows to accommodate - for the new ticket. The size is 141 + 40 (size of ticket) = 181. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 181 - in - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 181 - in - (* The size of used and paid-for ticket storage is 67 bytes. (65 for hash - and 2 for amount). *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 67 in - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 67 in - (* Add 1000 units of "B" tickets. *) - let* block = add block 1000 "B" in - (* The new used and paid for contract storage grow to 155 + 40 = 195. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 221 - in - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 221 - in - (* The new used and paid for ticket storage doubles (2 * 67 = 134). *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 134 in - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 134 in - (* Clear all tickets. *) - let* block = clear block in - (* We're back to 115 base-line for the used contract storage and keep 195 for - paid. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 141 - in - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 221 - in - (* Since the ticket-table is empty it does not take up any space. However, - we've already paid for 134 bytes. *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 0 in - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 134 in - (* Add one unit of "C" tickets. *) - let* block = add block 1 "C" in - (* The new used storage is 141 + 39 (size of ticket) = 180. The size is 39 - rather than 40 because it carries a smaller amount payload. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 180 - in - (* We still have paid for 221 contract storage. *) - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 221 - in - (* There is one row in the ticket table with size 65 (for the hash) + 1 - (for the amount) = 65 bytes. *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 66 in - (* We've still paid for 134 bytes however. *) - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 134 in - (* Add yet another "C" ticket. *) - let* block = add block 1 "C" in - (* The new used storage is 180 + 39 (size of ticket) = 219. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 219 - in - (* We still have paid for 221 contract storage. *) - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 221 - in - (* There is still only one row in the ticket table with size 66. *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 66 in - (* And we've still paid for 134 bytes. *) - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 134 in - (* Add a "D" ticket. *) - let* block = add block 1 "D" in - (* The new used storage is 219 + 39 (size of ticket) = 258. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 258 - in - (* The paid storage also increases to 258. *) - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 258 - in - (* There are now two rows in the ticket table: 2 x 66 = 132 *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 132 in - (* And we've still paid for 134 bytes. *) - let* () = assert_paid_ticket_storage ~loc:__LOC__ block 134 in - let* block = add block 1 "E" in - (* The new used storage is 258 + 39 (size of ticket) = 297. *) - let* () = - assert_used_contract_storage ~loc:__LOC__ block ticket_manager 297 - in - (* The paid storage also increases to 297. *) - let* () = - assert_paid_contract_storage ~loc:__LOC__ block ticket_manager 297 - in - (* There are now three rows in the ticket table: 3 x 66 = 198. *) - let* () = assert_used_ticket_storage ~loc:__LOC__ block 198 in - (* And the paid storage has increased. *) - assert_paid_ticket_storage ~loc:__LOC__ block 198 - -let tests = - [ - Tztest.tztest "add strict" `Quick test_add_strict; - Tztest.tztest "add and remove" `Quick test_add_remove; - Tztest.tztest "add to big-map" `Quick test_add_to_big_map; - Tztest.tztest "swap big-map" `Quick test_swap_big_map; - Tztest.tztest "send ticket" `Quick test_send_tickets; - Tztest.tztest - "send ticket to implicit" - `Quick - test_send_tickets_to_implicit_account; - Tztest.tztest - "send and store tickets with amount 0" - `Quick - test_send_and_store_zero_amount_tickets; - Tztest.tztest "send tickets in big-map" `Quick test_send_tickets_in_big_map; - Tztest.tztest "modify big-map" `Quick test_modify_big_map; - Tztest.tztest "send drop" `Quick test_send_tickets_in_big_map_and_drop; - Tztest.tztest - "create contract with ticket" - `Quick - test_create_contract_with_ticket; - Tztest.tztest "join" `Quick test_join_tickets; - Tztest.tztest "wallet" `Quick test_ticket_wallet; - Tztest.tztest "ticket storage" `Quick test_ticket_storage; - Tztest.tztest - "storage for create and remove tickets" - `Quick - test_storage_for_create_and_remove_tickets; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket balance", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_balance_key.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_balance_key.ml deleted file mode 100644 index 97414e697f3d0f1ed099c745e6ff9f1fb4911ef3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_balance_key.ml +++ /dev/null @@ -1,453 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_balance_key) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_balance_key.ml - Subject: Ticket balance key hashing -*) - -open Protocol -open Alpha_context - -let new_ctxt () = - let open Lwt_result_wrap_syntax in - let* block, _contract = Context.init1 () in - let* incr = Incremental.begin_construction block in - return @@ Incremental.alpha_ctxt incr - -let make_contract ticketer = - let open Lwt_result_wrap_syntax in - let*?@ x = Contract.of_b58check ticketer in - return x - -let make_ex_token ctxt ~ticketer ~ty ~content = - let open Lwt_result_wrap_syntax in - let*?@ Script_ir_translator.Ex_comparable_ty cty, ctxt = - let node = Micheline.root @@ Expr.from_string ty in - Script_ir_translator.parse_comparable_ty ctxt node - in - let* ticketer = make_contract ticketer in - let*@ contents, ctxt = - let node = Micheline.root @@ Expr.from_string content in - Script_ir_translator.parse_comparable_data ctxt cty node - in - return (Ticket_token.Ex_token {contents_type = cty; ticketer; contents}, ctxt) - -let make_key ctxt ~ticketer ~ty ~content ~owner = - let open Lwt_result_wrap_syntax in - let* ex_token, ctxt = make_ex_token ctxt ~ticketer ~ty ~content in - let* owner = make_contract owner in - let*@ key, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract owner) - ex_token - in - return (key, ctxt) - -let equal_script_hash ~loc msg key1 key2 = - Assert.equal ~loc Ticket_hash.equal msg Ticket_hash.pp key1 key2 - -let not_equal_script_hash ~loc msg key1 key2 = - Assert.not_equal ~loc Ticket_hash.equal msg Ticket_hash.pp key1 key2 - -let assert_keys ~ticketer1 ~ticketer2 ~ty1 ~ty2 ~amount1 ~amount2 ~content1 - ~content2 ~owner1 ~owner2 assert_condition = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - let* key1, ctxt = - make_key ctxt ~ticketer:ticketer1 ~ty:ty1 ~content:content1 ~owner:owner1 - in - let* key2, _ = - make_key ctxt ~ticketer:ticketer2 ~ty:ty2 ~content:content2 ~owner:owner2 - in - assert_condition (key1, amount1) (key2, amount2) - -let assert_keys_not_equal ~loc = - assert_keys (fun (key1, _) (key2, _) -> - not_equal_script_hash ~loc "Assert that keys are not equal" key1 key2) - -let assert_keys_equal ~loc = - assert_keys (fun (key1, _) (key2, _) -> - equal_script_hash ~loc "Assert that keys are equal" key1 key2) - -(** Test that tickets with two different amounts map to the same hash. - The amount is not part of the ticket balance key. *) -let test_different_amounts () = - assert_keys_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"unit" - ~ty2:"unit" - ~content1:"Unit" - ~content2:"Unit" - ~amount1:1 - ~amount2:2 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that two tickets with different ticketers map to different hashes. *) -let test_different_ticketers () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~ty1:"nat" - ~ty2:"nat" - ~content1:"1" - ~content2:"1" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that two tickets with different owners map to different hashes. *) -let test_different_owners () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"nat" - ~ty2:"nat" - ~content1:"1" - ~content2:"1" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - -(** Test that two tickets with different contents map to different hashes. *) -let test_different_content () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"nat" - ~ty2:"nat" - ~content1:"1" - ~content2:"2" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type nat and a ticket of type int, with the same - content, map to different hashes. *) -let test_nat_int () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"nat" - ~ty2:"int" - ~content1:"1" - ~content2:"1" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type nat and a ticket of type mutez, with the same - content, map to different hashes. *) -let test_nat_mutez () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"nat" - ~ty2:"mutez" - ~content1:"1" - ~content2:"1" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type nat and a ticket of type bool, with the - contents (False/0), map to different hashes. *) -let test_bool_nat () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"bool" - ~ty2:"nat" - ~content1:"False" - ~content2:"0" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type nat and a ticket of type bytes, with the - contents (0/0x), map to different hashes. *) -let test_nat_bytes () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"nat" - ~ty2:"bytes" - ~content1:"0" - ~content2:"0x" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type string and a chain_id with same content - map to different hashes. *) -let test_string_chain_id () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"string" - ~ty2:"chain_id" - ~content1:{|"NetXynUjJNZm7wi"|} - ~content2:{|"NetXynUjJNZm7wi"|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type string and a key_hash with same content - map to different hashes. *) -let test_string_key_hash () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"string" - ~ty2:"key_hash" - ~content1:{|"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"|} - ~content2:{|"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type string and a key with same content - map to different hashes. *) -let test_string_key () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"string" - ~ty2:"key" - ~content1:{|"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"|} - ~content2:{|"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type string and a timestamp with same content - map to different hashes. *) -let test_string_timestamp () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"string" - ~ty2:"timestamp" - ~content1:{|"2019-09-26T10:59:51Z"|} - ~content2:{|"2019-09-26T10:59:51Z"|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type string and a address with same content - map to different hashes. *) -let test_string_address () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"string" - ~ty2:"address" - ~content1:{|"KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%entrypoint"|} - ~content2:{|"KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%entrypoint"|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type string and a signature with same content - map to different hashes. *) -let test_string_signature () = - let signature = - {|"edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7"|} - in - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"string" - ~ty2:"signature" - ~content1:signature - ~content2:signature - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Tests that annotations are not taken into account when hashing keys. - Two comparable types that only differ in their annotations should - map to to the same hash. Here, the type [pair int string] is identical to - [pair (int %id) (string %name)]. - *) -let test_annotation_pair () = - assert_keys_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"(pair int string)" - ~ty2:{|(pair (int %id) (string %name))|} - ~content1:{|Pair 1 "hello"|} - ~content2:{|Pair 1 "hello"|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Tests that annotations are not taken into account when hashing keys. - Here the types [or int string] and [or (int %id) (string %name)] - should hash to the same key. - *) -let test_annotation_or () = - assert_keys_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"(or int string)" - ~ty2:{|(or (int %id) (string %name))|} - ~content1:{|Left 1|} - ~content2:{|Left 1|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Tests that annotations are not taken into account when hashing keys. - Here the types [int] and [(int :int_alias)] should hash to the same key. - *) -let test_annotation_type_alias () = - assert_keys_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"int" - ~ty2:"(int :int_alias)" - ~content1:"0" - ~content2:"0" - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Tests that annotations are not taken into account when hashing keys. - Here the types [pair (or int string) int] and - [pair (or (int %id) (string %name)) int] should hash to the same key. - *) -let test_annotation_pair_or () = - assert_keys_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"pair (or int string) int" - ~ty2:{|pair (or (int %id) (string %name)) int|} - ~content1:{|Pair (Left 1) 2|} - ~content2:{|Pair (Left 1) 2|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type [option int] and [option nat] with the same - content, [None], don't map to the same hash. *) -let test_option_none () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"option int" - ~ty2:"option nat" - ~content1:{|None|} - ~content2:{|None|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -(** Test that a ticket of type [option int] and [option nat] with the same - content, [Some 0], don't map to the same hash. *) -let test_option_some () = - assert_keys_not_equal - ~loc:__LOC__ - ~ticketer1:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ticketer2:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~ty1:"option int" - ~ty2:"option nat" - ~content1:{|Some 0|} - ~content2:{|Some 0|} - ~amount1:1 - ~amount2:1 - ~owner1:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - ~owner2:"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -let tests = - [ - Tztest.tztest "different ticketers" `Quick test_different_ticketers; - Tztest.tztest "different owners" `Quick test_different_owners; - Tztest.tztest "different content" `Quick test_different_content; - Tztest.tztest "different amounts" `Quick test_different_amounts; - Tztest.tztest "nat int" `Quick test_nat_int; - Tztest.tztest "nat mutez" `Quick test_nat_mutez; - Tztest.tztest "not bool" `Quick test_bool_nat; - Tztest.tztest "nat bytes" `Quick test_nat_bytes; - Tztest.tztest "string chain_id" `Quick test_string_chain_id; - Tztest.tztest "string key_hash" `Quick test_string_key_hash; - Tztest.tztest "string timestamp" `Quick test_string_timestamp; - Tztest.tztest "string address" `Quick test_string_address; - Tztest.tztest "string key" `Quick test_string_key; - Tztest.tztest "string signature" `Quick test_string_signature; - Tztest.tztest "annotations for pair" `Quick test_annotation_pair; - Tztest.tztest "annotations for or" `Quick test_annotation_or; - Tztest.tztest "annotations for type alias" `Quick test_annotation_type_alias; - Tztest.tztest "annotations for paired ors" `Quick test_annotation_pair_or; - Tztest.tztest "option none" `Quick test_option_none; - Tztest.tztest "option some" `Quick test_option_some; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket balance key", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_direct_spending.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_direct_spending.ml deleted file mode 100644 index 4eefbcb89d42cd94dc7ecf0cb7ce273d8ecbec98..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_direct_spending.ml +++ /dev/null @@ -1,195 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2023 Nomadic Labs *) -(* Copyright (c) 2023-2024 Marigold *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Tickets, direct spending from implicit accounts - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_direct_spending.ml - Subject: Test direct spending of tickets from implicit accounts -*) - -open Protocol -open Alpha_context - -type constructor = Pair | Ticket - -let originate_contract ~code ~storage originator block = - let open Lwt_result_syntax in - let storage = Script.lazy_expr (Expr.from_string storage) in - let code = Script.lazy_expr (Expr.toplevel_from_string code) in - let script = Script.{code; storage} in - let* operation, contract_address = - Op.contract_origination ~script (B block) originator - in - let* block = Block.bake ~operation block in - return (contract_address, block) - -let call_contract ~source ~contract ?entrypoint ~arg block = - let open Lwt_result_syntax in - let arg = Script.lazy_expr (Expr.from_string arg) in - let* operation = - Op.transaction - ~parameters:arg - ?entrypoint - (B block) - source - contract - Tez.zero - in - Block.bake ~operation block - -let assert_ticket_balance ~loc ~ticketer ~expected_balance owner block = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let token = - Ticket_token.Ex_token - {ticketer; contents_type = Script_typed_ir.unit_t; contents = ()} - in - let*@ key_hash, ctxt = Ticket_balance_key.of_ex_token ctxt ~owner token in - let*@ balance_opt, _ctxt = Ticket_balance.get_balance ctxt key_hash in - let balance = Option.value ~default:Z.zero balance_opt in - Assert.equal_z ~loc balance (Z.of_int expected_balance) - -let ticket_boomerang_script = - {| -# This contract sends back a unit ticket of amount 1 to its sender -parameter unit; -storage unit; -code - { - DROP; - NIL operation; - SENDER; CONTRACT (ticket unit); ASSERT_SOME; - PUSH mutez 0; - PUSH nat 1; UNIT; TICKET; ASSERT_SOME; - TRANSFER_TOKENS; - CONS; - UNIT; SWAP; PAIR - } - |} - -let ticket_consumer_script = - {| -# This contract consumes a unit ticket -parameter (ticket unit); -storage unit; -code - { - CDR; - NIL operation; - PAIR - } -|} - -(** This test validates the transfer of tickets from implicit accounts to originated accounts - using the [Transaction] manager operation. It performs the following steps: - - 1. Deposit a ticket into an implicit account using [ticket_boomerang_script]. - 2. The implicit account then transfers the ticket to [ticket_consumer_script] - using [Transaction]. - 3. The outcome depends [direct_ticket_spending_enable] feature flag: - - If enabled: The ticket transfer should be successful, - resulting in an updated balance in the ticket table. - - If disabled: The transfer attempt should fail, - triggering a [Bad_contract_parameter] error. *) -let test_spending ~direct_ticket_spending_enable ~constructor () = - let open Lwt_result_syntax in - let constants = - let default_constants = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_test - in - { - default_constants with - consensus_threshold = 0; - direct_ticket_spending_enable; - } - in - let* block, (delegate, implicit) = Context.init_with_constants2 constants in - (* Originate a contract sending tickets to whoever ask for them. *) - let* boomerang, block = - originate_contract - ~code:ticket_boomerang_script - ~storage:"Unit" - delegate - block - in - let boomerang_str = Format.asprintf "%a" Contract.pp boomerang in - let* consumer, block = - originate_contract - ~code:ticket_consumer_script - ~storage:"Unit" - delegate - block - in - let* () = - assert_ticket_balance - ~loc:__LOC__ - ~ticketer:boomerang - ~expected_balance:0 - (Destination.Contract implicit) - block - in - let* block = - call_contract ~source:implicit ~contract:boomerang ~arg:"Unit" block - in - let* () = - assert_ticket_balance - ~loc:__LOC__ - ~ticketer:boomerang - ~expected_balance:1 - (Destination.Contract implicit) - block - in - let arg = - match constructor with - | Pair -> sf "Pair %S Unit 1" boomerang_str - | Ticket -> sf "Ticket %S unit Unit 1" boomerang_str - in - if direct_ticket_spending_enable then - let* block = call_contract ~source:implicit ~contract:consumer ~arg block in - assert_ticket_balance - ~loc:__LOC__ - ~ticketer:boomerang - ~expected_balance:0 - (Destination.Contract implicit) - block - else - let*! res = call_contract ~source:implicit ~contract:consumer ~arg block in - Assert.proto_error ~loc:__LOC__ res (function - | Script_interpreter.Bad_contract_parameter _ -> true - | _ -> false) - -let tests = - [ - Tztest.tztest - "Test ticket spending from implicit accounts (feature enabled) with Pair \ - ticket constructor" - `Quick - (test_spending ~direct_ticket_spending_enable:true ~constructor:Pair); - Tztest.tztest - "Test ticket spending from implicit accounts (feature disabled) with \ - Pair ticket constructor" - `Quick - (test_spending ~direct_ticket_spending_enable:false ~constructor:Pair); - Tztest.tztest - "Test ticket spending from implicit accounts (feature enabled) with \ - Ticket constructor" - `Quick - (test_spending ~direct_ticket_spending_enable:true ~constructor:Ticket); - Tztest.tztest - "Test ticket spending from implicit accounts (feature disabled) with \ - Ticket constructor" - `Quick - (test_spending ~direct_ticket_spending_enable:false ~constructor:Ticket); - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket direct spending", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_lazy_storage_diff.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_lazy_storage_diff.ml deleted file mode 100644 index 0c383a5c4bc0eec2f1d369d33a012e810e4e3ba5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_lazy_storage_diff.ml +++ /dev/null @@ -1,698 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Trili Tech, *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_scanner) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_lazy_storage_diff.ml - Subject: Ticket scanner tests -*) - -open Protocol -open Alpha_context - -let assert_equal_string_list ~loc msg = - Assert.assert_equal_list ~loc String.equal msg Format.pp_print_string - -let string_list_of_ex_token_diffs ctxt token_diffs = - let open Lwt_result_wrap_syntax in - let accum (xs, ctxt) - (Ticket_token.Ex_token {ticketer; contents_type; contents}, amount) = - let*@ x, ctxt = - Script_ir_unparser.unparse_comparable_data - ctxt - Script_ir_unparser.Readable - contents_type - contents - in - let str = - Format.asprintf - "((%a, %a), %a)" - Contract.pp - ticketer - Michelson_v1_printer.print_expr - x - Z.pp_print - amount - in - return (str :: xs, ctxt) - in - let* xs, ctxt = List.fold_left_es accum ([], ctxt) token_diffs in - return (List.rev xs, ctxt) - -let make_ex_token ctxt ~ticketer ~type_exp ~content_exp = - let open Lwt_result_wrap_syntax in - let*?@ Script_ir_translator.Ex_comparable_ty contents_type, ctxt = - let node = Micheline.root @@ Expr.from_string type_exp in - Script_ir_translator.parse_comparable_ty ctxt node - in - let*@ ticketer = Lwt.return @@ Contract.of_b58check ticketer in - let*@ contents, ctxt = - let node = Micheline.root @@ Expr.from_string content_exp in - Script_ir_translator.parse_comparable_data ctxt contents_type node - in - return (Ticket_token.Ex_token {ticketer; contents_type; contents}, ctxt) - -let assert_equal_balances ~loc ctxt given expected = - let open Lwt_result_wrap_syntax in - let* ctxt, tbs1 = - List.fold_left_map_es - (fun ctxt ((ticketer, content), delta) -> - let+ token, ctxt = - make_ex_token - ctxt - ~ticketer - ~type_exp:"string" - ~content_exp:(Printf.sprintf "%S" content) - in - (ctxt, (token, Z.of_int delta))) - ctxt - expected - in - let* tbs1, ctxt = string_list_of_ex_token_diffs ctxt tbs1 in - let* tbs2, _ctxt = string_list_of_ex_token_diffs ctxt given in - assert_equal_string_list - ~loc - "Compare token balances" - (List.sort String.compare tbs1) - (List.sort String.compare tbs2) - -let updates_of_key_values ctxt key_values = - let open Lwt_result_wrap_syntax in - List.fold_right_es - (fun (key, value) (kvs, ctxt) -> - let*@ key_hash, ctxt = - Script_ir_translator.hash_comparable_data - ctxt - Script_typed_ir.int_t - (Script_int.of_int key) - in - return - ( { - Big_map.key = Expr.from_string @@ string_of_int key; - key_hash; - value = Option.map Expr.from_string value; - } - :: kvs, - ctxt )) - key_values - ([], ctxt) - -let make_alloc big_map_id alloc updates = - Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update {init = Lazy_storage.Alloc alloc; updates}) - -let init () = - let open Lwt_result_wrap_syntax in - let* block, source = Context.init1 () in - let* operation, originated = - Op.contract_origination_hash (B block) source ~script:Op.dummy_script - in - let* block = Block.bake ~operation block in - let* inc = Incremental.begin_construction block in - return (originated, Incremental.alpha_ctxt inc) - -let setup ctxt contract ~key_type ~value_type entries = - let open Lwt_result_wrap_syntax in - let*@ ctxt, big_map_id = Big_map.fresh ~temporary:false ctxt in - let key_type = Expr.from_string key_type in - let value_type = Expr.from_string value_type in - let* updates, ctxt = updates_of_key_values ctxt entries in - let alloc = make_alloc big_map_id Big_map.{key_type; value_type} updates in - return (alloc, big_map_id, contract, ctxt) - -let new_big_map ctxt contract ~key_type ~value_type entries = - let open Lwt_result_wrap_syntax in - let* alloc, big_map_id, contract, ctxt = - setup ctxt contract ~key_type ~value_type - @@ List.map (fun (k, v) -> (k, Some v)) entries - in - let storage = Expr.from_string "{}" in - let*@ ctxt = - Contract.update_script_storage ctxt contract storage (Some [alloc]) - in - return (big_map_id, ctxt) - -let alloc_diff ctxt contract ~key_type ~value_type entries = - let open Lwt_result_wrap_syntax in - let* allocations, _, _, ctxt = - setup - ctxt - contract - ~key_type - ~value_type - (List.map (fun (k, v) -> (k, Some v)) entries) - in - return (allocations, ctxt) - -let remove_diff ctxt contract ~key_type ~value_type ~existing_entries = - let open Lwt_result_wrap_syntax in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type existing_entries - in - return (Lazy_storage.make Lazy_storage.Kind.Big_map big_map_id Remove, ctxt) - -let copy_diff ctxt contract ~key_type ~value_type ~existing_entries ~updates = - let open Lwt_result_wrap_syntax in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type existing_entries - in - let* updates, ctxt = updates_of_key_values ctxt updates in - let*@ ctxt, new_big_map_id = Big_map.fresh ctxt ~temporary:false in - return - ( Lazy_storage.make - Lazy_storage.Kind.Big_map - new_big_map_id - (Update {init = Lazy_storage.Copy {src = big_map_id}; updates}), - ctxt ) - -let existing_diff ctxt contract ~key_type ~value_type ~existing_entries ~updates - = - let open Lwt_result_wrap_syntax in - let* big_map_id, ctxt = - new_big_map ctxt contract ~key_type ~value_type existing_entries - in - let* updates, ctxt = updates_of_key_values ctxt updates in - return - ( Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update {init = Lazy_storage.Existing; updates}), - ctxt ) - -(** Test that no ticket-tokens are extracted from a diff for allocating an empty - big-map. *) -let test_allocate_new_empty () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - alloc_diff ctxt contract ~key_type:"int" ~value_type:"ticket string" [] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances ~loc:__LOC__ ctxt diff [] - -(** Test that no ticket-tokens are extracted from a lazy-diff of a big-map - that does not contain tickets. *) -let test_allocate_new_no_tickets () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - alloc_diff - ctxt - contract - ~key_type:"int" - ~value_type:"string" - [(1, {|"A"|}); (2, {|"B"|}); (3, {|"C"|})] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances ~loc:__LOC__ ctxt diff [] - -(** Test that ticket-tokens can be extracted from a lazy-diff for allocating a - new big-map. *) -let test_allocate_new () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - alloc_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - (3, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 2); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), 3); - ] - -(** Test that ticket-tokens with negative balances are extracted from a - lazy-diff that removes a big-map. *) -let test_remove_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - remove_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - (3, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), -2); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), -3); - ] - -(** Test that there are no ticket-token balance deltas extracted from a - lazy-diff that applies no updates. *) -let test_no_updates_to_existing_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - existing_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - (3, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - ~updates:[] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances ~loc:__LOC__ ctxt diff [] - -(** Test that ticket-tokens extracted reflect the balance diffs that are - extracted from a lazy-diff that modifies an existing big-map. - *) -let test_update_existing_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - existing_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - (3, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - ~updates: - [ - (* Replace entry at index 1 *) - (1, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "yellow" 4|}); - (* Remove entry at index 2 *) - (2, None); - (* Add new entry at index 4 *) - (4, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "pink" 5|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), -2); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), 4); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "pink"), 5); - ] - -(** Test that ticket-tokens extracted reflect the balance diffs that are - extracted from a lazy-diff that modifies an existing big-map and with - multiple updates to the same key. - *) -let test_update_same_key_multiple_times_existing_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - existing_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [(1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|})] - ~updates: - [ - (* Replace entry at index 1 *) - (1, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "yellow" 1|}); - (* Replace entry at index 1 *) - (1, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 1|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), -1); - ] - -(** Test that ticket-tokens extracted reflect the balance diffs that are - extracted from a lazy-diff that modifies an existing big-map and with - multiple removals of the same item. - *) -let test_remove_same_key_multiple_times_existing_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - existing_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [(1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|})] - ~updates: - [ - (* Remove entry at index 1 *) - (1, None); - (* Remove entry at index 1 again *) - (1, None); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [(("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1)] - -(** Test that ticket-tokens extracted reflect the balance diffs that are - extracted from a lazy-diff that modifies an existing big-map and with - multiple additions and removals of the same item. - *) -let test_update_and_remove_same_key_multiple_times_existing_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - existing_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [(1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|})] - ~updates: - [ - (* Remove entry at index 1 *) - (1, None); - (* Add a yellow ticket at index 1. *) - (1, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "yellow" 1|}); - (* Remove entry at index 1 again *) - (1, None); - (* Add a green ticket at index 1. *) - (1, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 1|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 1); - ] - -(** Test that the extracted ticket-tokens from a lazy diff for copying a big-map - reflects the tokens of the source as well as the updates. *) -let test_copy_big_map () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - copy_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - (3, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - ~updates:[] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 2); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), 3); - ] - -(** Test that the extracted ticket-tokens from a lazy diff for copying a big-map - reflects the tokens of the source as well as the updates. *) -let test_copy_big_map_with_updates () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - copy_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - (3, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - ~updates: - [ - (* Remove element at index 1*) - (1, None); - (* Replace element at index 3 *) - (3, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "yellow" 4|}); - (* Add a new element at index 4 *) - (4, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "pink" 5|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 2); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), 3); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), -3); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), 4); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "pink"), 5); - ] - -(** Test that the extracted ticket-tokens from a lazy diff for copying a big-map - with multiple updates to the same key reflects the tokens of the source as - well as the updates. *) -let test_copy_big_map_with_updates_to_same_key () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff, ctxt = - copy_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [(1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|})] - ~updates: - [ - (* Remove element at index 1 *) - (1, None); - (* Add element at index 1 *) - (1, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "yellow" 2|}); - (* Remove again *) - (1, None); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff ctxt [diff] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (* From the copy of the big-map *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1); - (* From removing the element from the copied big-map *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (* From adding to the copied big-map. *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), 2); - (* From removing from the copied big-map *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "yellow"), -2); - ] - -(** Test combinations of lazy-diffs. *) -let test_mix_lazy_diffs () = - let open Lwt_result_wrap_syntax in - let* contract, ctxt = init () in - let* diff_copy, ctxt = - copy_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [(1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|})] - ~updates: - [ - (* Remove element at index 1 *) - (1, None); - (* Replace element at index 2 *) - (2, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "green" 2|}); - ] - in - let* diff_existing, ctxt = - existing_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [(1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1|})] - ~updates: - [ - (* Remove entry at index 2 *) - (2, None); - (* Add new entry at index 3 *) - (3, Some {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "blue" 3|}); - ] - in - let* diff_remove, ctxt = - remove_diff - ctxt - contract - ~key_type:"int" - ~value_type:"ticket string" - ~existing_entries: - [ - (1, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "white" 1|}); - (2, {|Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "black" 1|}); - ] - in - let*@ diff, ctxt = - Ticket_lazy_storage_diff.ticket_diffs_of_lazy_storage_diff - ctxt - [diff_copy; diff_existing; diff_remove] - in - assert_equal_balances - ~loc:__LOC__ - ctxt - diff - [ - (* From the copy *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green"), 2); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red"), 1); - (* From updating an existing *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue"), 3); - (* From the remove *) - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "white"), -1); - (("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "black"), -1); - ] - -let tests = - [ - Tztest.tztest "allocate new empty" `Quick test_allocate_new_empty; - Tztest.tztest "allocate new" `Quick test_allocate_new; - Tztest.tztest "allocate new no tickets" `Quick test_allocate_new_no_tickets; - Tztest.tztest "Remove" `Quick test_remove_big_map; - Tztest.tztest - "no updates to existing" - `Quick - test_no_updates_to_existing_big_map; - Tztest.tztest "update existing big-map" `Quick test_update_existing_big_map; - Tztest.tztest - "update same key multiple times on existing big-map" - `Quick - test_update_same_key_multiple_times_existing_big_map; - Tztest.tztest - "remove same key multiple times on existing big-map" - `Quick - test_remove_same_key_multiple_times_existing_big_map; - Tztest.tztest - "update and remove same key multiple times on existing big-map" - `Quick - test_update_and_remove_same_key_multiple_times_existing_big_map; - Tztest.tztest "copy" `Quick test_copy_big_map; - Tztest.tztest "copy with updates" `Quick test_copy_big_map_with_updates; - Tztest.tztest - "copy with multiple updates to same key" - `Quick - test_copy_big_map_with_updates_to_same_key; - Tztest.tztest "mix lazy diffs" `Quick test_mix_lazy_diffs; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket lazy storage diff", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_manager.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_manager.ml deleted file mode 100644 index dec97b041c1670eed992452d5076b05d023745f9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_manager.ml +++ /dev/null @@ -1,819 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_balance_key) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_manager.ml - Subject: Tests that compare the ticket-balance table against tickets in the - contract storages. The tests include a lot of operations that - sends and store tickets. After each operation we check that the - ticket balance table reflects the actual tickets stored. - This relies on the invariant that any ticket-token referenced by - the table corresponds to a ticket in a storage. Currently, storage - is the only place to actually keep existing tickets. -*) - -open Protocol -open Alpha_context - -type init_env = { - block : Block.t; - baker : Signature.public_key_hash; - contract : Contract.t; -} - -let init_env () = - let open Lwt_result_wrap_syntax in - let* block, baker, contract, _src2 = Contract_helpers.init () in - return {block; baker; contract} - -let collect_token_amounts ctxt tickets = - let open Lwt_result_syntax in - let accum (tokens, ctxt) ticket = - let token, amount = - Ticket_scanner.ex_token_and_amount_of_ex_ticket ticket - in - let tokens = (token, Script_int.(to_zint (amount :> n num))) :: tokens in - return (tokens, ctxt) - in - List.fold_left_es accum ([], ctxt) tickets - -let tokens_of_value ~include_lazy ctxt ty x = - let open Lwt_result_wrap_syntax in - let*? has_tickets, ctxt = Ticket_scanner.type_has_tickets ctxt ty in - let* tickets, ctxt = - Ticket_scanner.tickets_of_value ~include_lazy ctxt has_tickets x - in - let* tas, ctxt = collect_token_amounts ctxt tickets in - let* bm, ctxt = - Ticket_token_map.of_list - ctxt - ~merge_overlap:(fun ctxt v1 v2 -> Ok (Z.add v1 v2, ctxt)) - tas - in - Lwt.return @@ Ticket_token_map.to_list ctxt bm - -(* Extract ticket-token balance of storage *) -let ticket_balance_of_storage ctxt (contract : Alpha_context.Contract.t) = - let open Lwt_result_wrap_syntax in - match contract with - | Implicit _ -> return ([], ctxt) - | Originated contract_hash -> ( - let*@ ctxt, script = - Alpha_context.Contract.get_script ctxt contract_hash - in - match script with - | None -> return ([], ctxt) - | Some script -> - let*@ ( Script_ir_translator.Ex_script - (Script {storage; storage_type; _}), - ctxt ) = - Script_ir_translator.parse_script - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets_in_storage:true - ~allow_forged_lazy_storage_id_in_storage:true - script - in - let*@ tokens, ctxt = - tokens_of_value ~include_lazy:true ctxt storage_type storage - in - let*@ tokens, ctxt = - List.fold_left_es - (fun (acc, ctxt) (ex_token, amount) -> - let* key, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Contract contract) - ex_token - in - let acc = (key, amount) :: acc in - return (acc, ctxt)) - ([], ctxt) - tokens - in - return (tokens, ctxt)) - -let transaction block ~sender ~recipient ~amount ~parameters = - let open Lwt_result_wrap_syntax in - let parameters = Script.lazy_expr @@ Expr.from_string parameters in - let* block = Incremental.begin_construction block in - let* operation = - Op.transaction - (I block) - ~gas_limit:Max - ~entrypoint:Entrypoint.default - ~parameters - ~fee:Tez.zero - sender - recipient - (Tez.of_mutez_exn amount) - in - let* block = Incremental.add_operation block operation in - Incremental.finalize_block block - -let all_contracts current_block = - let open Lwt_result_wrap_syntax in - let* result = Incremental.begin_construction current_block in - let ctxt = Incremental.alpha_ctxt result in - let*! cs = Contract.list ctxt in - return cs - -(* Fetch all added contracts between [before] and [after]. *) -let new_contracts ~before ~after = - let open Lwt_result_wrap_syntax in - let* cs1 = all_contracts before in - let* cs2 = all_contracts after in - let not_in_cs1 = - let module S = Set.Make (String) in - let set = S.of_list @@ List.map Contract.to_b58check cs1 in - fun c -> not @@ S.mem (Contract.to_b58check c) set - in - return @@ List.filter not_in_cs1 cs2 - -let get_first_two_new_contracts before f = - let open Lwt_result_wrap_syntax in - let* after = f before in - let* c = new_contracts ~before ~after in - match c with - | c1 :: c2 :: _ -> return (c1, c2, after) - | _ -> failwith "Expected two new contracts" - -let show_key_balance key balance = - let key = String.escaped @@ Format.asprintf "%a" Ticket_hash.pp key in - let balance = Z.to_string balance in - (key, balance) - -let compare_key_balance (k1, b1) (k2, b2) = - match String.compare k1 k2 with - | n when n <> 0 -> n - | _ -> String.compare b1 b2 - -let normalize_balances key_balances = - List.filter_map - (fun (key, balance) -> - if Z.equal balance Z.zero then None - else Some (show_key_balance key balance)) - key_balances - |> List.sort compare_key_balance - -let equal_key_balances kb1 kb2 = - let compare x y = compare_key_balance x y = 0 in - List.for_all2 - ~when_different_lengths:"Length of key-balances don't match" - compare - kb1 - kb2 - -let show_balance_table kvs = - let show_rows kvs = - let key_col_length = - List.fold_left (fun mx (s, _) -> max mx (String.length s)) 0 kvs - in - let column align col_length s = - let space = - Stdlib.List.init (col_length - String.length s) (fun _ -> " ") - |> String.concat "" - in - match align with - | `Left -> Printf.sprintf "%s%s" s space - | `Right -> Printf.sprintf "%s%s" space s - in - List.map - (fun (k, v) -> - Printf.sprintf - "| %s | %s |" - (column `Left key_col_length k) - (column `Right 8 v)) - kvs - |> String.concat "\n" - in - show_rows (("Token x Content x Owner", "Balance") :: kvs) - -let validate_ticket_balances block = - let open Lwt_result_wrap_syntax in - let* contracts = all_contracts block in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let* kvs_storage, ctxt = - List.fold_left_es - (fun (acc, ctxt) contract -> - let* lists, ctxt = ticket_balance_of_storage ctxt contract in - return (lists @ acc, ctxt)) - ([], ctxt) - contracts - in - let*@ kvs_balance, _ctxt = - List.fold_left_es - (fun (acc, ctxt) (key, _) -> - let* balance, ctxt = Ticket_balance.get_balance ctxt key in - let acc = - match balance with None -> acc | Some b -> (key, b) :: acc - in - return (acc, ctxt)) - ([], ctxt) - kvs_storage - in - let kvs_storage = normalize_balances kvs_storage in - let kvs_balance = normalize_balances kvs_balance in - let print_both () = - print_endline "Storage table:" ; - print_endline @@ show_balance_table kvs_storage ; - print_endline "Balance table:" ; - print_endline @@ show_balance_table kvs_balance - in - match equal_key_balances kvs_balance kvs_storage with - | Ok true -> return_unit - | Ok false -> - print_both () ; - failwith "Storage and balance don't match" - | Error e -> - print_both () ; - failwith "%s" e - -module Ticket_manager = struct - (* A rather complicated script for various ticket operations. - See documentation for [action] below for a list of the params. - *) - let script = - {| - { parameter - (or (or (or (or %add (pair %add_lazy (pair int string) nat) (pair %add_strict string nat)) - (pair %create (pair string nat) key_hash)) - (or (or %remove (or (unit %remove_all_lazy) (int %remove_lazy)) (unit %remove_strict)) - (big_map %replace_big_map int (ticket string)))) - (or %send - (or (pair %send_lazy int address) (pair %send_new (pair string nat) address)) - (or (unit %send_self_replace_big_map) (address %send_strict)))) ; - storage (pair (list %list (ticket string)) (big_map %map int (ticket string))) ; - code { NIL (ticket string) ; - SWAP ; - UNPAIR ; - IF_LEFT - { DIG 2 ; - DROP ; - IF_LEFT - { IF_LEFT - { IF_LEFT - { # `add_lazy` entrypoint - UNPAIR ; - UNPAIR ; - DIG 3 ; - DIG 3 ; - SWAP ; - UNPAIR ; - SWAP ; - DUP 3 ; - DUP 6 ; - TICKET ; - ASSERT_SOME ; - SOME ; - DUP 5 ; - GET_AND_UPDATE ; - DROP ; - DUP 3 ; - DUP 6 ; - TICKET ; - ASSERT_SOME ; - SOME ; - DUP 5 ; - GET_AND_UPDATE ; - DROP ; - DIG 2 ; - DIG 4 ; - TICKET ; - ASSERT_SOME ; - SOME ; - DIG 3 ; - GET_AND_UPDATE ; - DROP ; - SWAP ; - PAIR ; - NIL operation ; - PAIR } - { - # `add_strict` entrypoint - UNPAIR ; - DIG 2 ; - UNPAIR ; - DIG 3 ; - DIG 3 ; - TICKET ; - ASSERT_SOME ; - CONS ; - PAIR ; - NIL operation ; - PAIR } } - { # `create` entrypoint - UNPAIR ; - UNPAIR ; - DUP 3 ; - DUG 2 ; - TICKET ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - SOME ; - CREATE_CONTRACT - { parameter (ticket string) ; - storage (ticket string) ; - code { JOIN_TICKETS ; - IF_NONE - { PUSH string "Failed to join tickets" ; FAILWITH } - { NIL operation ; PAIR } } } ; - SWAP ; - DROP ; - EMPTY_BIG_MAP int (ticket string) ; - PUSH nat 99 ; - PUSH string "NEW_TICKET_IN_ORIGINATED_CONTRACT" ; - TICKET ; - ASSERT_SOME ; - SOME ; - PUSH int 1 ; - GET_AND_UPDATE ; - DROP ; - PUSH mutez 0 ; - DIG 3 ; - SOME ; - CREATE_CONTRACT - { parameter (ticket string) ; - storage (big_map int (ticket string)) ; - code { UNPAIR ; - SOME ; - PUSH int 1 ; - GET_AND_UPDATE ; - DROP ; - NIL operation ; - PAIR } } ; - SWAP ; - DROP ; - DIG 2 ; - NIL operation ; - DIG 2 ; - CONS ; - DIG 2 ; - CONS ; - PAIR } } - { IF_LEFT - { IF_LEFT - { IF_LEFT - { # `remove_all_lazy` entrypoint - DROP ; - CAR ; - EMPTY_BIG_MAP int (ticket string) ; - SWAP ; - PAIR ; - NIL operation ; - PAIR } - { # `remove` entrypoint - SWAP ; - UNPAIR ; - SWAP ; - NONE (ticket string) ; - DIG 3 ; - GET_AND_UPDATE ; - DROP ; - SWAP ; - PAIR ; - NIL operation ; - PAIR } } - { # `remove_strict` entrypoint - DROP ; CDR ; NIL (ticket string) ; PAIR ; NIL operation ; PAIR } } - { # `replace_big_map` entrypoint - SWAP ; - CAR ; - SWAP ; - NONE (ticket string) ; - PUSH int 1 ; - GET_AND_UPDATE ; - DROP ; - PUSH nat 1 ; - PUSH string "ADDED_BY_REPLACE_BIG_MAP" ; - TICKET ; - ASSERT_SOME ; - SOME ; - PUSH int 11 ; - GET_AND_UPDATE ; - DROP ; - NONE (ticket string) ; - PUSH int 11 ; - GET_AND_UPDATE ; - DROP ; - PUSH nat 1 ; - PUSH string "ADDED_BY_REPLACE_BIG_MAP" ; - TICKET ; - ASSERT_SOME ; - SOME ; - PUSH int 11 ; - GET_AND_UPDATE ; - DROP ; - SWAP ; - PAIR ; - NIL operation ; - PAIR } } } - { IF_LEFT - { DIG 2 ; - DROP ; - IF_LEFT - { # `send_lazy` entrypoint - UNPAIR ; - DIG 2 ; - UNPAIR ; - DIG 3 ; - CONTRACT (ticket string) ; - IF_NONE - { DIG 2 ; - DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { DIG 2 ; - NONE (ticket string) ; - DIG 4 ; - GET_AND_UPDATE ; - IF_NONE - { SWAP ; DROP ; PUSH string "Could not find ticket" ; FAILWITH } - { DIG 2 ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - SWAP ; - DIG 2 ; - PAIR ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - { # `send_new` entrypoint - UNPAIR ; - UNPAIR ; - DIG 3 ; - DIG 3 ; - SWAP ; - UNPAIR ; - DIG 2 ; - CONTRACT (ticket string) ; - IF_NONE - { DIG 2 ; - DROP ; - DIG 2 ; - DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { PUSH mutez 0 ; - DIG 5 ; - DIG 5 ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - DUG 2 ; - PAIR ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - { IF_LEFT - { # `send_self_replace_big_map` entrypoint - DROP ; - SWAP ; - DROP ; - UNPAIR ; - SELF_ADDRESS ; - CONTRACT - (or (or (or (or %add (pair %add_lazy (pair int string) nat) (pair %add_strict string nat)) - (pair %create (pair string nat) key_hash)) - (or (or %remove (or (unit %remove_all_lazy) (int %remove_lazy)) (unit %remove_strict)) - (big_map %replace_big_map int (ticket string)))) - (or %send - (or (pair %send_lazy int address) (pair %send_new (pair string nat) address)) - (or (unit %send_self_replace_big_map) (address %send_strict)))) ; - IF_NONE - { PUSH string "Failed to get self-contract" ; FAILWITH } - { EMPTY_BIG_MAP int (ticket string) ; - DIG 3 ; - PUSH nat 1 ; - PUSH string "ADDED_BY_SEND_SELF_REPLACE" ; - TICKET ; - ASSERT_SOME ; - SOME ; - PUSH int 10 ; - GET_AND_UPDATE ; - DROP ; - NONE (ticket string) ; - PUSH int 2 ; - GET_AND_UPDATE ; - DROP ; - DIG 2 ; - PUSH mutez 0 ; - DIG 2 ; - RIGHT (or (or unit int) unit) ; - RIGHT - (or (or (pair (pair int string) nat) (pair string nat)) (pair (pair string nat) key_hash)) ; - LEFT (or (or (pair int address) (pair (pair string nat) address)) (or unit address)) ; - TRANSFER_TOKENS ; - SWAP ; - PUSH nat 1 ; - PUSH string "ADDED_BY_SEND_SELF_REPLACE_TO_STORAGE" ; - TICKET ; - ASSERT_SOME ; - SOME ; - PUSH int 11 ; - GET_AND_UPDATE ; - DROP ; - DIG 2 ; - PAIR ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } - { # `send_strict` entrypoint - SWAP ; - UNPAIR ; - DIG 2 ; - CONTRACT (ticket string) ; - IF_NONE - { DROP ; - PUSH string "Contract of type `ticket(string)` not found" ; - FAILWITH } - { NONE (ticket string) ; - DIG 2 ; - ITER { SWAP ; IF_NONE { SOME } { PAIR ; JOIN_TICKETS } } ; - IF_NONE - { DROP ; PUSH string "Couldn't produce a ticket" ; FAILWITH } - { SWAP ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - SWAP ; - DIG 2 ; - PAIR ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } } } } } - |} - - type remove_args = Remove_lazy of int | Remove_strict | Remove_all_lazy - - type send_args = - | Send_lazy of {index : int; recipient : Contract.t} - | Send_strict of Contract.t - | Send_new of {content : string; amount : int; recipient : Contract.t} - | Send_self_replace_big_map - - type add_args = - | Add_lazy of {index : int; content : string; amount : int} - | Add_strict of {content : string; amount : int} - - type action = - | Remove of remove_args - | Add of add_args - | Create of {content : string; amount : int; originator : Contract.t} - | Send of send_args - - let remove_lazy ~index = Remove (Remove_lazy index) - - let remove_strict = Remove Remove_strict - - let add_lazy ~index ~content ~amount = Add (Add_lazy {index; content; amount}) - - let add_strict ~content ~amount = Add (Add_strict {content; amount}) - - let create ~content ~amount ~originator = Create {content; amount; originator} - - let send_lazy ~index ~recipient = Send (Send_lazy {index; recipient}) - - let send_strict ~recipient = Send (Send_strict recipient) - - let send_new ~content ~amount ~recipient = - Send (Send_new {content; amount; recipient}) - - let remove_all_lazy = Remove Remove_all_lazy - - let send_self_replace_big_map = Send Send_self_replace_big_map - - let string_args = function - | Remove (Remove_lazy ix) -> - Printf.sprintf "Left (Right (Left (Left (Right %d))))" ix - | Remove Remove_strict -> "Left (Right (Left (Right Unit)))" - | Remove Remove_all_lazy -> "Left (Right (Left (Left (Left Unit))))" - | Add (Add_lazy {index; content; amount}) -> - Printf.sprintf - {|Left (Left (Left (Left (Pair (Pair %d "%s") %d))))|} - index - content - amount - | Add (Add_strict {content; amount}) -> - Printf.sprintf - {|Left (Left (Left (Right (Pair "%s" %d))))|} - content - amount - | Create {content; amount; originator} -> - Printf.sprintf - {|Left (Left (Right (Pair (Pair "%s" %d) "%s")))|} - content - amount - (Contract.to_b58check originator) - | Send (Send_lazy {index; recipient}) -> - Printf.sprintf - {|Right (Left (Left (Pair %d "%s")))|} - index - (Contract.to_b58check recipient) - | Send (Send_strict contract) -> - Printf.sprintf - {|Right (Right (Right "%s"))|} - (Contract.to_b58check contract) - | Send (Send_new {content; amount; recipient}) -> - Printf.sprintf - {|(Right (Left (Right (Pair (Pair "%s" %d) "%s"))))|} - content - amount - (Contract.to_b58check recipient) - | Send Send_self_replace_big_map -> "Right (Right (Left Unit))" - - let originate block ~originator baker = - Contract_helpers.originate_contract_from_string - ~script - ~storage:"Pair {} {}" - ~source_contract:originator - ~baker - block - - let transaction block ~sender ~ticket_manager ~parameters = - let parameters = string_args parameters in - transaction block ~sender ~recipient:ticket_manager ~amount:0L ~parameters -end - -(* Sets up the environment and returns a function for running a transaction - and validating the balance table against tickets in the storage once - completed. *) -let setup_test () = - let open Lwt_result_wrap_syntax in - let module TM = Ticket_manager in - let* {block; baker; contract = originator} = init_env () in - let* ticket_manager, _script, block = TM.originate block ~originator baker in - let test block parameters = - let* b = - TM.transaction block ~sender:originator ~ticket_manager ~parameters - in - let* () = validate_ticket_balances b in - return b - in - return (test, originator, block) - -(** Test create new contracts and send tickets to them. *) -let test_create_contract_and_send_tickets () = - let open Lwt_result_wrap_syntax in - let module TM = Ticket_manager in - let* test, originator, b = setup_test () in - - (* Call the `create` endpoint that creates two new ticket receiver contracts: - - Both contracts accepts a single ticket as an argument. - - The first holds a big-map with tickets in its storage. - - The second holds a ticket in its storage and only accepts "green" tickets. - - The second contract joins all received tickets. - *) - let* ticket_receiver_green_1, ticket_receiver_green_2, b = - get_first_two_new_contracts b @@ fun b -> - test b @@ TM.create ~content:"Green" ~amount:1 ~originator - in - (* - * Invoke the second ticket receiver contract: - - Remove all strict tickets - - Replace them with a list of 2 green ones - - Send all (joined) strict tickets to the ticket receiver - *) - let* b = test b @@ TM.remove_strict in - let* b = test b @@ TM.add_strict ~content:"Green" ~amount:1 in - let* b = test b @@ TM.add_strict ~content:"Green" ~amount:1 in - let* b = test b @@ TM.send_strict ~recipient:ticket_receiver_green_1 in - (* Send a new ticket *) - let* b = - test - b - (TM.send_new - ~content:"Green" - ~amount:10 - ~recipient:ticket_receiver_green_1) - in - (* Add a green ticket to the lazy storage at index 1 and send it to the green - ticket-receiver *) - let* b = test b @@ TM.add_lazy ~index:1 ~content:"Green" ~amount:10 in - let* (_b : Block.t) = - test b @@ TM.send_lazy ~index:1 ~recipient:ticket_receiver_green_2 - in - return_unit - -(** Tets add and remove tickets from lazy storage. *) -let test_add_remove_from_lazy_storage () = - let open Lwt_result_wrap_syntax in - let module TM = Ticket_manager in - let* tm, _, b = setup_test () in - let* b = tm b @@ TM.add_lazy ~index:1 ~content:"Red" ~amount:10 in - let* b = tm b @@ TM.add_lazy ~index:2 ~content:"Green" ~amount:10 in - let* b = tm b @@ TM.add_lazy ~index:3 ~content:"Blue" ~amount:10 in - (* Remove ticket at index 1. *) - let* b = tm b @@ TM.remove_lazy ~index:1 in - let* b = tm b @@ TM.add_lazy ~index:1 ~content:"Red" ~amount:1 in - let* b = tm b @@ TM.add_lazy ~index:2 ~content:"Green" ~amount:2 in - let* b = tm b @@ TM.add_lazy ~index:3 ~content:"Blue" ~amount:3 in - (* Remove the big-map. *) - let* b = tm b TM.remove_all_lazy in - (* Add back a ticket at index 1. *) - let* (_b : Block.t) = - tm b @@ TM.add_lazy ~index:1 ~content:"Red" ~amount:10 - in - return_unit - -(** Test send to self and replace big-map. *) -let test_send_self_replace_big_map () = - let open Lwt_result_wrap_syntax in - let module TM = Ticket_manager in - let* tm, _, b = setup_test () in - (* Send self replace bigmap *) - let* b = tm b @@ TM.add_lazy ~index:1 ~content:"Red" ~amount:1 in - let* b = tm b @@ TM.add_lazy ~index:2 ~content:"Green" ~amount:1 in - let* b = tm b @@ TM.add_lazy ~index:3 ~content:"Blue" ~amount:1 in - let* b = tm b @@ TM.send_self_replace_big_map in - let* b = tm b @@ TM.send_self_replace_big_map in - let* (_b : Block.t) = tm b @@ TM.send_self_replace_big_map in - return_unit - -(** Test add to and remove from strict storage. *) -let test_add_remove_strict () = - let open Lwt_result_wrap_syntax in - let module TM = Ticket_manager in - let* tm, _, b = setup_test () in - (* Add some more strict tickets *) - let* b = tm b @@ TM.add_strict ~content:"Red" ~amount:1 in - let* b = tm b @@ TM.add_strict ~content:"Red" ~amount:2 in - let* b = tm b @@ TM.add_strict ~content:"Red" ~amount:20 in - let* b = tm b @@ TM.add_strict ~content:"Green" ~amount:1 in - let* b = tm b @@ TM.add_strict ~content:"Red" ~amount:1 in - - (* Remove strict tickets *) - let* b = tm b @@ TM.remove_strict in - let* (_b : Block.t) = tm b @@ TM.add_strict ~content:"Red" ~amount:1 in - return_unit - -(** Test mixed operations. *) -let test_mixed_operations () = - let open Lwt_result_wrap_syntax in - let module TM = Ticket_manager in - let* tm, _, b = setup_test () in - (* Add some more strict tickets *) - let* b = tm b @@ TM.add_strict ~content:"Red" ~amount:1 in - let* b = tm b @@ TM.add_strict ~content:"Green" ~amount:1 in - (* Add some lazy tickets *) - let* b = tm b @@ TM.add_lazy ~index:1 ~content:"Red" ~amount:1 in - let* b = tm b @@ TM.add_lazy ~index:2 ~content:"Green" ~amount:1 in - let* b = tm b @@ TM.add_lazy ~index:3 ~content:"Blue" ~amount:1 in - (* Remove strict and lazy *) - let* b = tm b @@ TM.remove_strict in - let* (_b : Block.t) = tm b @@ TM.remove_all_lazy in - return_unit - -let tests = - [ - Tztest.tztest "Create contract" `Quick test_create_contract_and_send_tickets; - Tztest.tztest - "Send self replace big-map" - `Quick - test_send_self_replace_big_map; - Tztest.tztest - "Add and remove from strict storage" - `Quick - test_add_remove_strict; - Tztest.tztest - "Add and remove from lazy storage" - `Quick - test_add_remove_from_lazy_storage; - Tztest.tztest "Mix of operations" `Quick test_mixed_operations; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket manager", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml deleted file mode 100644 index 95a4bab76c449e7375f6648ddf98409a0d0d0a48..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml +++ /dev/null @@ -1,1327 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_scanner) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_operations_diff.ml - Subject: Ticket scanner tests -*) - -open Protocol -open Alpha_context -open Script_typed_ir - -(** A local non-private type that mirrors - [Ticket_operations_diff.ticket_token_diff]. *) -type ticket_token_diff = { - ticket_token : Ticket_token.ex_token; - total_amount : Script_int.n Script_int.num; - destinations : (Destination.t * ticket_amount) list; -} - -let to_local_ticket_token_diff - {Ticket_operations_diff.ticket_token; total_amount; destinations} = - {ticket_token; total_amount; destinations} - -let assert_fails ~loc ?error m = - let open Lwt_result_syntax in - let*! res = m in - let rec aux err_res = - match (err_res, error) with - | Environment.Ecoproto_error err' :: rest, Some err -> - (* Matched exact error. *) - if err' = err then return_unit else aux rest - | _ :: rest, Some _ -> aux rest - | [], Some _ -> - (* Expected a different error. *) - let msg = - Printf.sprintf "Expected a different error at location %s" loc - in - Stdlib.failwith msg - | _, None -> - (* Any error is ok. *) - return_unit - in - match res with - | Ok _ -> Stdlib.failwith "Expected failure" - | Error err_res -> aux err_res - -let big_map_updates_of_key_values ctxt key_values = - let open Lwt_result_wrap_syntax in - List.fold_right_es - (fun (key, value) (kvs, ctxt) -> - let*@ key_hash, ctxt = - Script_ir_translator.hash_comparable_data - ctxt - Script_typed_ir.int_t - (Script_int.of_int key) - in - return - ( { - Big_map.key = Expr.from_string @@ string_of_int key; - key_hash; - value = Option.map Expr.from_string value; - } - :: kvs, - ctxt )) - key_values - ([], ctxt) - -let new_int_key_big_map ctxt contract ~value_type entries = - let open Lwt_result_wrap_syntax in - let*@ ctxt, big_map_id = Big_map.fresh ~temporary:false ctxt in - let key_type = Expr.from_string "int" in - let value_type = Expr.from_string value_type in - let* updates, ctxt = - big_map_updates_of_key_values ctxt - @@ List.map (fun (k, v) -> (k, Some v)) entries - in - let alloc = - Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update - {init = Lazy_storage.Alloc Big_map.{key_type; value_type}; updates}) - in - let storage = Expr.from_string "{}" in - let*@ ctxt = - Contract.update_script_storage ctxt contract storage (Some [alloc]) - in - return (big_map_id, ctxt) - -let assert_equal_string_list ~loc msg = - Assert.assert_equal_list ~loc String.equal msg Format.pp_print_string - -let string_of_ticket_token ctxt - (Ticket_token.Ex_token {ticketer; contents_type; contents}) = - let open Lwt_result_wrap_syntax in - let*@ x, _ = - Script_ir_unparser.unparse_comparable_data - ctxt - Script_ir_unparser.Readable - contents_type - contents - in - return - @@ Format.asprintf - {|("%a", %a)|} - Contract.pp - ticketer - Michelson_v1_printer.print_expr - x - -let string_of_destination_and_amounts cas = - Format.asprintf - "[%a]" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "; ") - (fun fmt (contract, (amount : ticket_amount)) -> - Format.fprintf - fmt - {|("%a", %s)|} - Destination.pp - contract - Script_int.(to_string (amount :> n num)))) - cas - -let string_of_ticket_operations_diff ctxt - {ticket_token; total_amount; destinations} = - let open Lwt_result_wrap_syntax in - let* ticket_token = string_of_ticket_token ctxt ticket_token in - let destinations = string_of_destination_and_amounts destinations in - return - (Printf.sprintf - "(%s, %s, %s)" - ticket_token - (Script_int.to_string total_amount) - destinations) - -let assert_equal_ticket_token_diffs ctxt ~loc ticket_diffs - ~(expected : ticket_token_diff list) = - let open Lwt_result_wrap_syntax in - (* Sort destinations by contract and the strings alphabetically so that order - does not matter for comparison. *) - let sorted_strings ticket_diffs = - let ticket_diffs = - List.map - (fun {ticket_token; total_amount; destinations} -> - { - ticket_token; - total_amount; - destinations = - List.sort - (fun (c1, _) (c2, _) -> Destination.compare c1 c2) - destinations; - }) - ticket_diffs - in - let+ strings = - List.map_es (string_of_ticket_operations_diff ctxt) ticket_diffs - in - List.sort String.compare strings - in - let* exp_str_diffs = sorted_strings expected in - let* str_diffs = - sorted_strings @@ List.map to_local_ticket_token_diff ticket_diffs - in - assert_equal_string_list - ~loc - "Equal ticket-token-diffs" - exp_str_diffs - str_diffs - -let string_token ~ticketer content = - let contents = - Result.value_f ~default:(fun _ -> assert false) - @@ Script_string.of_string content - in - Ticket_token.Ex_token - {ticketer; contents_type = Script_typed_ir.string_t; contents} - -(** Initializes one address for operations and one baker. *) -let init () = - let open Lwt_result_wrap_syntax in - let+ block, (src0, src1) = Context.init2 ~consensus_threshold:0 () in - let baker = Context.Contract.pkh src0 in - (baker, src1, block) - -let originate block ~script ~storage ~sender ~baker ~forges_tickets = - let open Lwt_result_wrap_syntax in - let code = Expr.toplevel_from_string script in - let storage = Expr.from_string storage in - let* operation, destination = - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - Op.contract_origination_hash - (B block) - sender - ~fee:(Tez_helpers.of_int 10) - ~script - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let* incr = - Incremental.add_operation - ?expect_apply_failure: - (if forges_tickets then Some (fun _ -> return_unit) else None) - incr - operation - in - let script = (code, storage) in - let+ block = Incremental.finalize_block incr in - (destination, script, block) - -let two_ticketers block = - let open Lwt_result_wrap_syntax in - let* result = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt result in - let*! cs = Contract.list ctxt in - match cs with c1 :: c2 :: _ -> return (c1, c2) | _ -> assert false - -let one_ticketer block = - let open Lwt_result_wrap_syntax in - let+ c1, _c2 = two_ticketers block in - c1 - -let nat n = Script_int.(abs @@ of_int n) - -let origination_operation block ~sender ~baker ~script ~storage ~forges_tickets - = - let open Lwt_result_wrap_syntax in - let* orig_contract, (code, storage), block = - originate block ~script ~storage ~sender ~baker ~forges_tickets - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let ctxt = Incremental.alpha_ctxt incr in - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - let unparsed_storage = storage in - let*@ ( Script_ir_translator.Ex_script - (Script - { - storage_type; - storage; - code = _; - arg_type = _; - views = _; - entrypoints = _; - code_size = _; - }), - ctxt ) = - Script_ir_translator.parse_script - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:true ()) - ~allow_forged_tickets_in_storage:true - ~allow_forged_lazy_storage_id_in_storage:true - script - in - let operation = - Script_typed_ir.Internal_operation - { - sender = Contract sender; - operation = - Origination - { - delegate = None; - code; - unparsed_storage; - credit = Tez.one; - preorigination = orig_contract; - storage_type; - storage; - }; - nonce = 1; - } - in - let incr = Incremental.set_alpha_ctxt incr ctxt in - return (Contract.Originated orig_contract, operation, incr) - -let delegation_operation ~sender = - Script_typed_ir.Internal_operation - {sender; operation = Delegation None; nonce = 1} - -let originate block ~sender ~baker ~script ~storage ~forges_tickets = - let open Lwt_result_wrap_syntax in - let* orig_contract, _script, block = - originate block ~script ~storage ~sender ~baker ~forges_tickets - in - let* incr = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - return (orig_contract, incr) - -let transfer_operation ~incr ~sender ~destination ~parameters_ty ~parameters = - let open Lwt_result_wrap_syntax in - let ctxt = Incremental.alpha_ctxt incr in - let*@ params_node, ctxt = - Script_ir_translator.unparse_data - ctxt - Script_ir_unparser.Readable - parameters_ty - parameters - in - let incr = Incremental.set_alpha_ctxt incr ctxt in - return - ( Script_typed_ir.Internal_operation - { - sender; - operation = - Transaction_to_smart_contract - { - amount = Tez.zero; - unparsed_parameters = params_node; - entrypoint = Entrypoint.default; - destination; - location = Micheline.dummy_location; - parameters_ty; - parameters; - }; - nonce = 1; - }, - incr ) - -let ticket_diffs_of_operations incr operations = - Ticket_operations_diff.ticket_diffs_of_operations - (Incremental.alpha_ctxt incr) - operations - -let unit_script = - {| - { parameter unit; - storage unit; - code { CAR; NIL operation ; PAIR } } - |} - -let ticket_list_script = - {| - { parameter (list (ticket string)); - storage (list (ticket string)); - code { CAR; NIL operation ; PAIR } } - |} - -let ticket_big_map_script = - {| - { parameter (big_map int (ticket string)); - storage (big_map int (ticket string)); - code { CAR; NIL operation ; PAIR } } - |} - -let list_ticket_string_ty = - let open Result_syntax in - let* ticket_ty = ticket_t Micheline.dummy_location string_t in - list_t Micheline.dummy_location ticket_ty - -let make_ticket (ticketer, contents, amount) = - let open Lwt_result_syntax in - let*? contents = Script_string.of_string contents in - let amount = nat amount in - let*? amount = - Option.value_e - ~error: - (Environment.Error_monad.trace_of_error - Script_tc_errors.Forbidden_zero_ticket_quantity) - @@ Ticket_amount.of_n amount - in - return {ticketer; contents; amount} - -let make_tickets ts = - let open Lwt_result_wrap_syntax in - let* elements = List.map_es make_ticket ts in - return @@ Script_list.of_list elements - -let transfer_tickets_operation ~incr ~sender ~destination tickets = - let open Lwt_result_wrap_syntax in - let*?@ parameters_ty = list_ticket_string_ty in - let*@ parameters = make_tickets tickets in - transfer_operation ~incr ~sender ~destination ~parameters_ty ~parameters - -(** Test that no tickets are returned for operations that do not contain - tickets. *) -let test_non_ticket_operations () = - let open Lwt_result_wrap_syntax in - let* _baker, sender, block = init () in - let* incr = Incremental.begin_construction block in - let operations = [delegation_operation ~sender:(Contract sender)] in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr operations in - assert_equal_ticket_token_diffs ctxt ~loc:__LOC__ ticket_diffs ~expected:[] - -(** Test transfer to a contract that does not take tickets. *) -let test_transfer_to_non_ticket_contract () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* orig_contract, incr = - originate - block - ~sender - ~baker - ~script:unit_script - ~storage:"Unit" - ~forges_tickets:false - in - let* operation, incr = - transfer_operation - ~incr - ~sender:(Contract sender) - ~destination:orig_contract - ~parameters_ty:unit_t - ~parameters:() - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs ctxt ~loc:__LOC__ ticket_diffs ~expected:[] - -(** Test transfer an empty list of tickets. *) -let test_transfer_empty_ticket_list () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* orig_contract, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:orig_contract - [] - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs ctxt ~loc:__LOC__ ticket_diffs ~expected:[] - -let one = Ticket_amount.one - -let two = Ticket_amount.add one one - -let three = Ticket_amount.add two one - -let five = Ticket_amount.add three two - -(** Test transfer a list of one ticket. *) -let test_transfer_one_ticket () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let* orig_contract, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:orig_contract - [(ticketer, "white", 1)] - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "white"; - total_amount = nat 1; - destinations = - [(Destination.Contract (Originated orig_contract), one)]; - }; - ] - -(** Test transferring a list of multiple tickets. This should work when - zero-tickets are disabled as well as when the parameters do not contain any - zero-amount tickets. *) -let test_transfer_multiple_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let* orig_contract, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:orig_contract - [ - (ticketer, "red", 1); - (ticketer, "blue", 2); - (ticketer, "green", 3); - (ticketer, "red", 4); - ] - in - let orig_contract = Contract.Originated orig_contract in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "red"; - total_amount = nat 5; - destinations = [(Destination.Contract orig_contract, five)]; - }; - { - ticket_token = string_token ~ticketer "blue"; - total_amount = nat 2; - destinations = [(Destination.Contract orig_contract, two)]; - }; - { - ticket_token = string_token ~ticketer "green"; - total_amount = nat 3; - destinations = [(Destination.Contract orig_contract, three)]; - }; - ] - -(** Test transfer a list of tickets of different types. *) -let test_transfer_different_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer1, ticketer2 = two_ticketers block in - let* destination, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination - [ - (ticketer1, "red", 1); - (ticketer1, "green", 1); - (ticketer1, "blue", 1); - (ticketer2, "red", 1); - (ticketer2, "green", 1); - (ticketer2, "blue", 1); - (ticketer1, "red", 1); - (ticketer1, "green", 1); - (ticketer1, "blue", 1); - ] - in - let destination = Destination.Contract (Originated destination) in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer:ticketer1 "red"; - total_amount = nat 2; - destinations = [(destination, two)]; - }; - { - ticket_token = string_token ~ticketer:ticketer1 "green"; - total_amount = nat 2; - destinations = [(destination, two)]; - }; - { - ticket_token = string_token ~ticketer:ticketer1 "blue"; - total_amount = nat 2; - destinations = [(destination, two)]; - }; - { - ticket_token = string_token ~ticketer:ticketer2 "red"; - total_amount = nat 1; - destinations = [(destination, one)]; - }; - { - ticket_token = string_token ~ticketer:ticketer2 "green"; - total_amount = nat 1; - destinations = [(destination, one)]; - }; - { - ticket_token = string_token ~ticketer:ticketer2 "blue"; - total_amount = nat 1; - destinations = [(destination, one)]; - }; - ] - -(** Test transfer to two contracts with different types of tickets. *) -let test_transfer_to_two_contracts_with_different_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let parameters = - [(ticketer, "red", 1); (ticketer, "green", 1); (ticketer, "blue", 1)] - in - let* destination1, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation1, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:destination1 - parameters - in - let* block = Incremental.finalize_block incr in - let* destination2, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation2, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:destination2 - parameters - in - let*@ ticket_diffs, ctxt = - ticket_diffs_of_operations incr [operation1; operation2] - in - let one = Ticket_amount.one in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "red"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract (Originated destination2), one); - (Destination.Contract (Originated destination1), one); - ]; - }; - { - ticket_token = string_token ~ticketer "green"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract (Originated destination2), one); - (Destination.Contract (Originated destination1), one); - ]; - }; - { - ticket_token = string_token ~ticketer "blue"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract (Originated destination2), one); - (Destination.Contract (Originated destination1), one); - ]; - }; - ] - -(** Test originate a contract that does not contain tickets. *) -let test_originate_non_ticket_contract () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* _orig_contract, operation, incr = - origination_operation - block - ~sender - ~baker - ~script:unit_script - ~storage:"Unit" - ~forges_tickets:false - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs ctxt ~loc:__LOC__ ticket_diffs ~expected:[] - -(** Test originate a contract with an empty list of tickets. *) -let test_originate_with_empty_tickets_list () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let storage = "{}" in - let* _orig_contract, operation, incr = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:false - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs ctxt ~loc:__LOC__ ticket_diffs ~expected:[] - -(** Test originate a contract with a single ticket. *) -let test_originate_with_one_ticket () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let storage = - Printf.sprintf {|{Pair %S "white" 1}|} (Contract.to_b58check ticketer) - in - let* orig_contract, operation, ctxt = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations ctxt [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "white"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - ] - -(** Test originate a contract with multiple tickets. *) -let test_originate_with_multiple_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let storage = - let ticketer_addr = Contract.to_b58check ticketer in - Printf.sprintf - {|{ - Pair %S "red" 1; - Pair %S "blue" 2 ; - Pair %S "green" 3; - Pair %S "red" 4;} - |} - ticketer_addr - ticketer_addr - ticketer_addr - ticketer_addr - in - let* orig_contract, operation, ctxt = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations ctxt [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "red"; - total_amount = nat 5; - destinations = [(Destination.Contract orig_contract, five)]; - }; - { - ticket_token = string_token ~ticketer "blue"; - total_amount = nat 2; - destinations = [(Destination.Contract orig_contract, two)]; - }; - { - ticket_token = string_token ~ticketer "green"; - total_amount = nat 3; - destinations = [(Destination.Contract orig_contract, three)]; - }; - ] - -(** Test originate a contract with multiple tickets of different types. *) -let test_originate_with_different_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer1, ticketer2 = two_ticketers block in - let storage = - let ticketer1_addr = Contract.to_b58check ticketer1 in - let ticketer2_addr = Contract.to_b58check ticketer2 in - Printf.sprintf - {|{ - Pair %S "red" 1; - Pair %S "green" 1; - Pair %S "blue" 1; - Pair %S "red" 1; - Pair %S "green" 1; - Pair %S "blue" 1 ; - Pair %S "red" 1; - Pair %S "green" 1; - Pair %S "blue" 1; } - |} - ticketer1_addr - ticketer1_addr - ticketer1_addr - ticketer2_addr - ticketer2_addr - ticketer2_addr - ticketer1_addr - ticketer1_addr - ticketer1_addr - in - let* orig_contract, operation, ctxt = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations ctxt [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer:ticketer1 "red"; - total_amount = nat 2; - destinations = [(Destination.Contract orig_contract, two)]; - }; - { - ticket_token = string_token ~ticketer:ticketer1 "green"; - total_amount = nat 2; - destinations = [(Destination.Contract orig_contract, two)]; - }; - { - ticket_token = string_token ~ticketer:ticketer1 "blue"; - total_amount = nat 2; - destinations = [(Destination.Contract orig_contract, two)]; - }; - { - ticket_token = string_token ~ticketer:ticketer2 "red"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - { - ticket_token = string_token ~ticketer:ticketer2 "green"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - { - ticket_token = string_token ~ticketer:ticketer2 "blue"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - ] - -(** Test originate two contracts with multiple tickets of different types. *) -let test_originate_two_contracts_with_different_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let storage = - let ticketer_addr = Contract.to_b58check ticketer in - Printf.sprintf - {|{Pair %S "red" 1; Pair %S "green" 1; Pair %S "blue" 1; }|} - ticketer_addr - ticketer_addr - ticketer_addr - in - let* orig_contract1, operation1, incr = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let* block = Incremental.finalize_block incr in - let* orig_contract2, operations2, incr = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let*@ ticket_diffs, ctxt = - ticket_diffs_of_operations incr [operation1; operations2] - in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "red"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract orig_contract2, one); - (Destination.Contract orig_contract1, one); - ]; - }; - { - ticket_token = string_token ~ticketer "green"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract orig_contract2, one); - (Destination.Contract orig_contract1, one); - ]; - }; - { - ticket_token = string_token ~ticketer "blue"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract orig_contract2, one); - (Destination.Contract orig_contract1, one); - ]; - }; - ] - -(** Test originate and transfer tickets. *) -let test_originate_and_transfer () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let ticketer_addr = Contract.to_b58check ticketer in - let storage = - Printf.sprintf - {|{Pair %S "red" 1; Pair %S "green" 1; Pair %S "blue" 1; }|} - ticketer_addr - ticketer_addr - ticketer_addr - in - let* orig_contract1, operation1, incr = - origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - in - let* block = Incremental.finalize_block incr in - let* destination2, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - let* operation2, incr = - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:destination2 - [(ticketer, "red", 1); (ticketer, "green", 1); (ticketer, "blue", 1)] - in - let*@ ticket_diffs, ctxt = - ticket_diffs_of_operations incr [operation1; operation2] - in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "red"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract (Originated destination2), one); - (Destination.Contract orig_contract1, one); - ]; - }; - { - ticket_token = string_token ~ticketer "green"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract (Originated destination2), one); - (Destination.Contract orig_contract1, one); - ]; - }; - { - ticket_token = string_token ~ticketer "blue"; - total_amount = nat 2; - destinations = - [ - (Destination.Contract (Originated destination2), one); - (Destination.Contract orig_contract1, one); - ]; - }; - ] - -(** Test originate a contract with a big-map with tickets inside. *) -let test_originate_big_map_with_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, ticketer, block = init () in - let* operation, originated = - Op.contract_origination_hash (B block) ticketer ~script:Op.dummy_script - in - let* block = Block.bake ~operation block in - let* incr = Incremental.begin_construction block in - let ticketer_addr = Contract.to_b58check ticketer in - let* big_map_id, ctxt = - new_int_key_big_map - (Incremental.alpha_ctxt incr) - originated - ~value_type:"ticket string" - [ - (1, Printf.sprintf {|Pair %S "red" 1|} ticketer_addr); - (2, Printf.sprintf {|Pair %S "green" 1|} ticketer_addr); - (3, Printf.sprintf {|Pair %S "blue" 1|} ticketer_addr); - ] - in - let incr = Incremental.set_alpha_ctxt incr ctxt in - let* block = Incremental.finalize_block incr in - let* orig_contract, operation, incr = - let storage = - Printf.sprintf "%d" @@ Z.to_int (Big_map.Id.unparse_to_z big_map_id) - in - origination_operation - block - ~sender:ticketer - ~baker - ~script:ticket_big_map_script - ~storage - ~forges_tickets:true - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer "red"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - { - ticket_token = string_token ~ticketer "green"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - { - ticket_token = string_token ~ticketer "blue"; - total_amount = nat 1; - destinations = [(Destination.Contract orig_contract, one)]; - }; - ] - -(** Test transfer a big-map with tickets. *) -let test_transfer_big_map_with_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, ticketer_contract, block = init () in - let* operation, originated = - Op.contract_origination_hash - (B block) - ticketer_contract - ~script:Op.dummy_script - in - let* block = Block.bake ~operation block in - let* incr = Incremental.begin_construction block in - let ticketer_addr = Contract.to_b58check ticketer_contract in - let* big_map_id, ctxt = - new_int_key_big_map - (Incremental.alpha_ctxt incr) - originated - ~value_type:"ticket string" - [ - (1, Printf.sprintf {|Pair %S "red" 1|} ticketer_addr); - (2, Printf.sprintf {|Pair %S "green" 1|} ticketer_addr); - (3, Printf.sprintf {|Pair %S "blue" 1|} ticketer_addr); - ] - in - let incr = Incremental.set_alpha_ctxt incr ctxt in - let* block = Incremental.finalize_block incr in - let* orig_contract, incr = - originate - block - ~sender:ticketer_contract - ~baker - ~script:ticket_big_map_script - ~storage:"{}" - ~forges_tickets:false - in - let open Lwt_result_syntax in - let*?@ value_type = ticket_t Micheline.dummy_location string_t in - let*?@ parameters_ty = big_map_t Micheline.dummy_location int_t value_type in - let parameters = - Big_map - { - id = Some big_map_id; - diff = {map = Big_map_overlay.empty; size = 0}; - key_type = int_t; - value_type; - } - in - let* operation, incr = - transfer_operation - ~incr - ~sender:(Contract ticketer_contract) - ~destination:orig_contract - ~parameters_ty - ~parameters - in - let*@ ticket_diffs, ctxt = ticket_diffs_of_operations incr [operation] in - let destination = Destination.Contract (Originated orig_contract) in - assert_equal_ticket_token_diffs - ctxt - ~loc:__LOC__ - ticket_diffs - ~expected: - [ - { - ticket_token = string_token ~ticketer:ticketer_contract "red"; - total_amount = nat 1; - destinations = [(destination, one)]; - }; - { - ticket_token = string_token ~ticketer:ticketer_contract "green"; - total_amount = nat 1; - destinations = [(destination, one)]; - }; - { - ticket_token = string_token ~ticketer:ticketer_contract "blue"; - total_amount = nat 1; - destinations = [(destination, one)]; - }; - ] - -(** Test transferring a list of multiple tickets where two of them have zero - amounts fails. *) -let test_transfer_fails_on_multiple_zero_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let* orig_contract, incr = - originate - block - ~sender - ~baker - ~script:ticket_list_script - ~storage:"{}" - ~forges_tickets:false - in - assert_fails - ~loc:__LOC__ - ~error:Script_tc_errors.Forbidden_zero_ticket_quantity - @@ (* let* operation, incr = *) - transfer_tickets_operation - ~incr - ~sender:(Contract sender) - ~destination:orig_contract - [ - (ticketer, "red", 1); - (ticketer, "blue", 0); - (ticketer, "green", 2); - (ticketer, "red", 0); - (ticketer, "green", 3); - ] - -(** Test that zero-amount tickets are detected and that an error is yielded. *) -let test_fail_on_zero_amount_tickets () = - let open Lwt_result_wrap_syntax in - let* baker, sender, block = init () in - let* ticketer = one_ticketer block in - let storage = - let ticketer_addr = Contract.to_b58check ticketer in - Printf.sprintf - {| - { Pair %S "red" 1; - Pair %S "blue" 2 ; - Pair %S "green" 3; - Pair %S "red" 0; - Pair %S "red" 4; } - |} - ticketer_addr - ticketer_addr - ticketer_addr - ticketer_addr - ticketer_addr - in - assert_fails - ~loc:__LOC__ - ~error:Script_tc_errors.Forbidden_zero_ticket_quantity - @@ origination_operation - block - ~sender - ~baker - ~script:ticket_list_script - ~storage - ~forges_tickets:true - -let tests = - [ - Tztest.tztest - "operations that do not involve tickets" - `Quick - test_non_ticket_operations; - Tztest.tztest - "transfer to non-ticket contract" - `Quick - test_transfer_to_non_ticket_contract; - Tztest.tztest - "transfer empty ticket list" - `Quick - test_transfer_empty_ticket_list; - Tztest.tztest "transfer one ticket" `Quick test_transfer_one_ticket; - Tztest.tztest - "transfer multiple tickets" - `Quick - test_transfer_multiple_tickets; - Tztest.tztest - "transfer different tickets" - `Quick - test_transfer_different_tickets; - Tztest.tztest - "transfer to two contracts with different tickets" - `Quick - test_transfer_to_two_contracts_with_different_tickets; - Tztest.tztest - "originate contract that does not contain tickets" - `Quick - test_originate_non_ticket_contract; - Tztest.tztest - "originate with empty ticket list" - `Quick - test_originate_with_empty_tickets_list; - Tztest.tztest - "originate with one ticket" - `Quick - test_originate_with_one_ticket; - Tztest.tztest - "originate with multiple tickets" - `Quick - test_originate_with_multiple_tickets; - Tztest.tztest - "originate with different tickets" - `Quick - test_originate_with_different_tickets; - Tztest.tztest - "originate two contracts with different tickets" - `Quick - test_originate_two_contracts_with_different_tickets; - Tztest.tztest "originate and transfer" `Quick test_originate_and_transfer; - Tztest.tztest - "originate big-map with tickets" - `Quick - test_originate_big_map_with_tickets; - Tztest.tztest - "transfer big-map with tickets" - `Quick - test_transfer_big_map_with_tickets; - Tztest.tztest - "transfer fails on multiple zero tickets" - `Quick - test_transfer_fails_on_multiple_zero_tickets; - Tztest.tztest - "fail in zero-amount tickets" - `Quick - test_fail_on_zero_amount_tickets; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket operations diff", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_scanner.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_scanner.ml deleted file mode 100644 index 277ac40339e521d3afbe3357a0dad8ef90a2f25c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_scanner.ml +++ /dev/null @@ -1,707 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Trili Tech, *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* Copyright (c) 2024 Marigold, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Ticket_scanner) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_scanner.ml - Subject: Ticket scanner tests -*) - -open Protocol -open Alpha_context - -let assert_fails ~loc ?error m = - let open Lwt_result_syntax in - let*! res = m in - let rec aux err_res = - match (err_res, error) with - | Environment.Ecoproto_error err' :: rest, Some err -> - if err = err' then return_unit else aux rest - | _, Some _ -> - (* Expected a different error. *) - let msg = - Printf.sprintf "Expected a different error at location %s" loc - in - Stdlib.failwith msg - | _, None -> - (* Any error is ok. *) - return_unit - in - match res with - | Ok _ -> Stdlib.failwith "Expected failure" - | Error err_res -> aux err_res - -let new_ctxt () = - let open Lwt_result_wrap_syntax in - let* block, _contract = Context.init1 () in - let* incr = Incremental.begin_construction block in - return @@ Incremental.alpha_ctxt incr - -let assert_equal_string_list ~loc msg = - Assert.assert_equal_list ~loc String.equal msg Format.pp_print_string - -let string_list_of_ex_tickets ctxt tickets = - let open Lwt_result_wrap_syntax in - let accum (xs, ctxt) - (Ticket_scanner.Ex_ticket - (cty, {Script_typed_ir.ticketer; contents; amount})) = - let*@ x, ctxt = - Script_ir_translator.unparse_data - ctxt - Script_ir_unparser.Readable - cty - contents - in - let content = - Format.kasprintf Fun.id "%a" Michelson_v1_printer.print_expr x - in - let str = - Format.kasprintf - Fun.id - "(%a, %s, %a)" - Contract.pp - ticketer - content - Z.pp_print - Script_int.(to_zint (amount :> n num)) - in - return (str :: xs, ctxt) - in - let* xs, ctxt = List.fold_left_es accum ([], ctxt) tickets in - return (List.rev xs, ctxt) - -let make_ex_ticket ctxt ~ticketer ~type_exp ~content_exp ~amount = - let open Lwt_result_wrap_syntax in - let*?@ Script_ir_translator.Ex_comparable_ty cty, ctxt = - let node = Micheline.root @@ Expr.from_string type_exp in - Script_ir_translator.parse_comparable_ty ctxt node - in - let*?@ ticketer = Contract.of_b58check ticketer in - let*@ contents, ctxt = - let node = Micheline.root @@ Expr.from_string content_exp in - Script_ir_translator.parse_comparable_data ctxt cty node - in - let amount = Script_int.(abs @@ of_int amount) in - let amount = - WithExceptions.Option.get ~loc:__LOC__ @@ Ticket_amount.of_n amount - in - let ticket = Script_typed_ir.{ticketer; contents; amount} in - return (Ticket_scanner.Ex_ticket (cty, ticket), ctxt) - -let assert_equals_ex_tickets ctxt ~loc ex_tickets expected = - let open Lwt_result_wrap_syntax in - let* str_tickets, ctxt = string_list_of_ex_tickets ctxt ex_tickets in - let* str_tickets_expected, _ctxt = string_list_of_ex_tickets ctxt expected in - assert_equal_string_list - ~loc - "Compare with expected tickets" - (List.sort String.compare str_tickets) - (List.sort String.compare str_tickets_expected) - -let tickets_of_value ctxt ~include_lazy ~type_exp ~value_exp = - let open Lwt_result_wrap_syntax in - let Script_typed_ir.Ex_ty ty, ctxt = - let node = Micheline.root @@ Expr.from_string type_exp in - Result.value_f - ~default:(fun () -> Stdlib.failwith "Failed to parse") - (Script_ir_translator.parse_any_ty ctxt ~legacy:false node) - in - let node = Micheline.root @@ Expr.from_string value_exp in - let*@ value, ctxt = - Script_ir_translator.parse_data - ctxt - ~elab_conf:(Script_ir_translator_config.make ~legacy:false ()) - ~allow_forged_tickets:true - ~allow_forged_lazy_storage_id:true - ty - node - in - let*?@ ht, ctxt = Ticket_scanner.type_has_tickets ctxt ty in - wrap @@ Ticket_scanner.tickets_of_value ctxt ~include_lazy ht value - -let assert_contains_tickets ctxt ~loc ~include_lazy ~type_exp ~value_exp - expected = - let open Lwt_result_wrap_syntax in - let* ex_tickets, _ = - tickets_of_value ctxt ~include_lazy ~type_exp ~value_exp - in - assert_equals_ex_tickets ctxt ~loc ex_tickets expected - -let assert_fail_non_empty_overlay ctxt ~loc ~include_lazy ~type_exp ~value_exp = - let open Lwt_result_syntax in - let*! res = tickets_of_value ctxt ~include_lazy ~type_exp ~value_exp in - match res with - | Error [x] -> - let x = Format.kasprintf Fun.id "%a" Error_monad.pp x in - Assert.equal - ~loc - String.equal - "" - Format.pp_print_string - "Unsupported big-map value with non-empty overlay" - x - | _ -> failwith "Expected an error at %s" loc - -let make_string_tickets ctxt ticketer_amounts = - let open Lwt_result_wrap_syntax in - List.fold_right_es - (fun (ticketer, content, amount) (tickets, ctxt) -> - let* ticket, ctxt = - make_ex_ticket - ctxt - ~ticketer - ~type_exp:"string" - ~content_exp:(Printf.sprintf {|"%s"|} content) - ~amount - in - return (ticket :: tickets, ctxt)) - ticketer_amounts - ([], ctxt) - -let tickets_from_big_map_ref ~pre_populated value_exp = - let open Lwt_result_wrap_syntax in - let* block, source = Context.init1 () in - let* operation, originated = - Op.contract_origination_hash (B block) source ~script:Op.dummy_script - in - let* block = Block.bake ~operation block in - let* inc = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt inc in - let*@ ctxt, big_map_id = Big_map.fresh ~temporary:false ctxt in - let int_ty_expr = Expr.from_string "int" in - let* diffs, ctxt = - let* updates, ctxt = - List.fold_left_es - (fun (kvs, ctxt) (key, value) -> - let*@ key_hash, ctxt = - Script_ir_translator.hash_comparable_data - ctxt - Script_typed_ir.int_t - (Script_int.of_int key) - in - return - ( { - Big_map.key = Expr.from_string @@ string_of_int key; - key_hash; - value = Some (Expr.from_string value); - } - :: kvs, - ctxt )) - ([], ctxt) - pre_populated - in - let alloc = - Big_map. - {key_type = int_ty_expr; value_type = Expr.from_string "ticket string"} - in - return - ( [ - Lazy_storage.make - Lazy_storage.Kind.Big_map - big_map_id - (Update {init = Lazy_storage.Alloc alloc; updates}); - ], - ctxt ) - in - let*@ ctxt = - Contract.update_script_storage ctxt originated int_ty_expr (Some diffs) - in - let value_exp = - value_exp @@ Z.to_string (Big_map.Id.unparse_to_z big_map_id) - in - return (value_exp, ctxt) - -let assert_big_map_int_ticket_string_ref ~loc ~pre_populated ~big_map_exp - ex_tickets = - let open Lwt_result_wrap_syntax in - let* value_exp, ctxt = tickets_from_big_map_ref ~pre_populated big_map_exp in - let* ex_tickets, ctxt = make_string_tickets ctxt ex_tickets in - assert_contains_tickets - ctxt - ~include_lazy:true - ~loc - ~type_exp:"big_map int (ticket string)" - ~value_exp - ex_tickets - -let assert_fail_non_empty_overlay_with_big_map_ref ~loc ~pre_populated - ~big_map_exp = - let open Lwt_result_wrap_syntax in - let* value_exp, ctxt = tickets_from_big_map_ref ~pre_populated big_map_exp in - assert_fail_non_empty_overlay - ctxt - ~include_lazy:true - ~loc - ~type_exp:"big_map int (ticket string)" - ~value_exp - -let assert_string_tickets ~loc ~include_lazy ~type_exp ~value_exp ~expected = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - let* ex_tickets, ctxt = make_string_tickets ctxt expected in - let* () = - assert_contains_tickets - ctxt - ~include_lazy - ~loc - ~type_exp - ~value_exp - ex_tickets - in - assert_contains_tickets - ctxt - ~include_lazy - ~loc - ~type_exp - ~value_exp - ex_tickets - -(** Test that the ticket can be extracted from a a single unit ticket *) -let test_tickets_in_unit_ticket () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - let type_exp = "ticket(unit)" in - let value_exp = - {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" unit Unit 10|} - in - let* ex_ticket, ctxt = - make_ex_ticket - ctxt - ~ticketer:"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" - ~type_exp:"unit" - ~content_exp:"Unit" - ~amount:10 - in - assert_contains_tickets - ctxt - ~loc:__LOC__ - ~include_lazy:false - ~type_exp - ~value_exp - [ex_ticket] - -let assert_string_tickets_fail_on_zero_amount ~loc ~include_lazy ~type_exp - ~value_exp = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - assert_fails ~loc ~error:Script_tc_errors.Forbidden_zero_ticket_quantity - @@ tickets_of_value ctxt ~include_lazy ~type_exp ~value_exp - -let test_tickets_in_list_with_zero_amount () = - assert_string_tickets_fail_on_zero_amount - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"list(ticket(string))" - ~value_exp: - {| - { - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 3; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "orange" 0; - } - |} - -(** Test that all tickets can be extracted from a list of tickets *) -let test_tickets_in_list () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"list(ticket(string))" - ~value_exp: - {| - { - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 3; - } - |} - ~expected: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", 1); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green", 2); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue", 3); - ] - -let test_tickets_in_pair_with_zero_amount () = - assert_string_tickets_fail_on_zero_amount - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"pair (ticket string) (ticket string) (ticket string)" - ~value_exp: - {| - Pair - (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1) - (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2) - (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 0) - |} - -(** Test that all tickets can be extracted from a pair of tickets *) -let test_tickets_in_pair () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"pair (ticket string) (ticket string)" - ~value_exp: - {| - Pair - (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1) - (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2) - |} - ~expected: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", 1); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green", 2); - ] - -let test_tickets_in_map_with_zero_amount () = - assert_string_tickets_fail_on_zero_amount - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"map int (ticket string)" - ~value_exp: - {| - { - Elt 1 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1); - Elt 2 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2); - Elt 3 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 0); - } - |} - -(** Test that all tickets from a map can be extracted. *) -let test_tickets_in_map () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"map int (ticket string)" - ~value_exp: - {| - { - Elt 1 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1); - Elt 2 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2); - } - |} - ~expected: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", 1); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green", 2); - ] - -(** Test that all tickets from a big-map with non-empty overlay fails. - If we extend the ticket scanner function to support non-empty overlays - this test needs to be adapted. - *) -let test_tickets_in_big_map () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - assert_fail_non_empty_overlay - ctxt - ~loc:__LOC__ - ~include_lazy:true - ~type_exp:"big_map int (ticket string)" - ~value_exp: - {| - { - Elt 1 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1); - Elt 2 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2); - } - |} - -(** Test that tickets are not extracted from big-map with [include_lazy] set - to false. *) -let test_tickets_in_big_map_strict_only () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"big_map int (ticket string)" - ~value_exp: - {| - { - Elt 1 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1); - Elt 2 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 2); - Elt 3 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 3); - } - |} - ~expected:[] - -(** Test that tickets can be extracted from a list of tickets inside a big-map - This fails due to non-empty overlay. If we extend the ticket scanner - function to support non-empty overlays this test needs to be adapted. -*) -let test_tickets_in_list_in_big_map () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_ctxt () in - assert_fail_non_empty_overlay - ctxt - ~loc:__LOC__ - ~include_lazy:true - ~type_exp:"(big_map int (list(ticket string)))" - ~value_exp: - {| - { - Elt 1 { - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 1 - }; - Elt 2 { - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 1; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "orange" 1 - } - } - |} - -(** Test that tickets can be extracted from a combination of a list and lazy structure - and that only the strict part is considered with [include_lazy] set to fasle *) -let test_tickets_in_pair_big_map_and_list_strict_only () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"pair (big_map int (ticket string)) (list (ticket string))" - ~value_exp: - {| - Pair - { - Elt 1 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1); - Elt 2 (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 1) - } - { - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 1; - Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "orange" 1 - } - |} - ~expected: - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue", 1); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "orange", 1); - ] - -(** Test that tickets can be extracted from the left side of an or-expression. *) -let test_tickets_in_or_left () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"or (ticket string) int" - ~value_exp: - {| Left (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1) |} - ~expected:[("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", 1)] - -(** Test that tickets from the left side of an or-expression with zero amount - are rejected. *) -let test_tickets_in_or_left_with_zero_amount () = - assert_string_tickets_fail_on_zero_amount - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"or (ticket string) int" - ~value_exp: - {| Left (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 0) |} - -(** Test that tickets can be extracted from the right side of an or-expression. *) -let test_tickets_in_or_right () = - assert_string_tickets - ~loc:__LOC__ - ~include_lazy:false - ~type_exp:"or int (ticket string)" - ~value_exp: - {| Right (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1) |} - ~expected:[("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", 1)] - -(* - Big maps have three possible representations. Either as a list of key-value - pairs, as an identifier (int), or as a pair of identifier and overrides. - Example values: - - 1) { Elt "bar" True ; Elt "foo" False } - 2) 42 - 3) Pair 42 { Elt "foo" (Some False) } - *) - -(** Test tickets from empty big_map when passed by reference. *) -let test_tickets_in_empty_big_map_ref () = - assert_big_map_int_ticket_string_ref - ~loc:__LOC__ - ~pre_populated:[] - ~big_map_exp:(Printf.sprintf "%s") - [] - -(** Test tickets from non-empty big-map when passed by reference. - Here, tickets are scanned from the context. *) -let test_tickets_in_non_empty_big_map_ref () = - assert_big_map_int_ticket_string_ref - ~loc:__LOC__ - ~pre_populated: - [ - (1, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1|}); - (2, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 1|}); - (3, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 1|}); - ] - ~big_map_exp:(Printf.sprintf "%s") - [ - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "red", 1); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "green", 1); - ("KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq", "blue", 1); - ] - -(** Test tickets from empty big-map when passed as a pair of identifier - and overrides. Here, the scanned tickets are only contained in the overlay - why ticket-scanning fails. - - If we extend the ticket scanner function to support non-empty overlays - this test needs to be adapted. - *) -let test_tickets_overlay_in_empty_big_map_ref () = - assert_fail_non_empty_overlay_with_big_map_ref - ~loc:__LOC__ - ~pre_populated:[] - ~big_map_exp: - (Printf.sprintf - {|Pair %s { Elt 1 (Some (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1))}|}) - -(** Test tickets from non-empty big-map when passed as a pair of identifier - and overrides. The scanned tickets are contained in the context as well as - in the overlay. Since overlay is non-empty is non-empty, ticket scanning - fails. - - If we extend the ticket scanner function to support non-empty overlays - this test needs to be adapted - *) -let test_tickets_overlay_in_non_empty_in_big_map_ref () = - assert_fail_non_empty_overlay_with_big_map_ref - ~loc:__LOC__ - ~pre_populated: - [ - (1, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1|}); - (2, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 1|}); - (3, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "blue" 1|}); - ] - ~big_map_exp: - (Printf.sprintf - {| Pair - %s - { Elt 4 (Some (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "orange" 1))} - |}) - -(** Test tickets from non-empty big-map when passed as a pair of identifier - and overrides, and where the override replaces an existing ticket. - Ticket scanning fails due to non-empty overlay. - - If we extend the ticket scanner function to support non-empty overlays - this test needs to be adapted. - *) -let test_tickets_replace_overlay_in_non_empty_in_big_map_ref () = - assert_fail_non_empty_overlay_with_big_map_ref - ~loc:__LOC__ - ~pre_populated: - [(1, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1|})] - ~big_map_exp: - (Printf.sprintf - {| Pair - %s - { Elt 1 (Some (Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "green" 1))} - |}) - -(** Test tickets from non-empty big-map when passed as a pair of identifier - and overrides, and where the override removes an existing ticket. - Ticket scanning fails due to non-empty overlay. - - If we extend the ticket scanner function to support non-empty overlays - this test needs to be adapted. - *) -let test_tickets_remove_overlay_in_non_empty_in_big_map_ref () = - assert_fail_non_empty_overlay_with_big_map_ref - ~loc:__LOC__ - ~pre_populated: - [(1, {|Ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" string "red" 1|})] - ~big_map_exp:(Printf.sprintf {| Pair %s { Elt 1 None} |}) - -let tests = - [ - Tztest.tztest "tickets in unit ticket" `Quick test_tickets_in_unit_ticket; - Tztest.tztest "tickets in list" `Quick test_tickets_in_list; - Tztest.tztest - "tickets in list with zero amount" - `Quick - test_tickets_in_list_with_zero_amount; - Tztest.tztest "tickets in pair" `Quick test_tickets_in_pair; - Tztest.tztest - "tickets in pair with zero amount" - `Quick - test_tickets_in_pair_with_zero_amount; - Tztest.tztest "tickets in map" `Quick test_tickets_in_map; - Tztest.tztest - "tickets in map with zero amount" - `Quick - test_tickets_in_map_with_zero_amount; - Tztest.tztest "tickets in big map" `Quick test_tickets_in_big_map; - Tztest.tztest - "tickets in big map with include lazy set to false" - `Quick - test_tickets_in_big_map_strict_only; - Tztest.tztest - "tickets in list in big map" - `Quick - test_tickets_in_list_in_big_map; - Tztest.tztest - "tickets in a pair of big-map and list with include lazy set to false" - `Quick - test_tickets_in_pair_big_map_and_list_strict_only; - Tztest.tztest "tickets in or left" `Quick test_tickets_in_or_left; - Tztest.tztest - "tickets in or left with zero amount" - `Quick - test_tickets_in_or_left_with_zero_amount; - Tztest.tztest "tickets in or right" `Quick test_tickets_in_or_right; - Tztest.tztest - "tickets in empty big-map ref" - `Quick - test_tickets_overlay_in_empty_big_map_ref; - Tztest.tztest - "tickets in big-map ref" - `Quick - test_tickets_in_empty_big_map_ref; - Tztest.tztest - "tickets in non-empty big-map ref" - `Quick - test_tickets_in_non_empty_big_map_ref; - Tztest.tztest - "tickets in non-empty big-map ref with overlay" - `Quick - test_tickets_overlay_in_non_empty_in_big_map_ref; - Tztest.tztest - "tickets replace existing value from overlay" - `Quick - test_tickets_replace_overlay_in_non_empty_in_big_map_ref; - Tztest.tztest - "tickets remove existing value from overlay" - `Quick - test_tickets_remove_overlay_in_non_empty_in_big_map_ref; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket scanner", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_storage.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_storage.ml deleted file mode 100644 index 50cc03d814e9707ca18a440753e11bbdecb071be..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_ticket_storage.ml +++ /dev/null @@ -1,280 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Alpha_context.Ticket_balance) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_ticket_storage.ml - Subject: Ticket storage functions tested using the Ticket_balance module in Alpha_context. -*) - -open Protocol -open Alpha_context - -let make_context () = - let open Lwt_result_wrap_syntax in - let* block, _contract = Context.init1 () in - let* incr = Incremental.begin_construction block in - return (Incremental.alpha_ctxt incr) - -let hash_key ctxt ~ticketer ~ty ~contents ~owner = - let ticketer = Micheline.root @@ Expr.from_string ticketer in - let ty = Micheline.root @@ Expr.from_string ty in - let contents = Micheline.root @@ Expr.from_string contents in - let owner = Micheline.root @@ Expr.from_string owner in - Alpha_context.Ticket_hash.make ctxt ~ticketer ~ty ~contents ~owner - -let assert_balance ctxt ~loc key expected = - let open Lwt_result_wrap_syntax in - let*@ balance, _ = Ticket_balance.get_balance ctxt key in - match balance with - | Some b -> Assert.equal_int ~loc (Z.to_int b) expected - | None -> failwith "Expected balance %d" expected - -let assert_no_balance ctxt key = - let open Lwt_result_wrap_syntax in - let*@ balance, _ = Ticket_balance.get_balance ctxt key in - match balance with - | Some b -> failwith "Expected empty (none) balance but got %d" (Z.to_int b) - | None -> return_unit - -let adjust_balance ctxt key delta = - Ticket_balance.adjust_balance ctxt key ~delta:(Z.of_int delta) - -let assert_non_overlapping_keys ~loc ~ticketer1 ~ticketer2 ~contents1 ~contents2 - ~ty1 ~ty2 ~owner1 ~owner2 = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ k1, ctxt = - hash_key ctxt ~ticketer:ticketer1 ~ty:ty1 ~contents:contents1 ~owner:owner1 - in - let*?@ k2, _ctxt = - hash_key ctxt ~ticketer:ticketer2 ~ty:ty2 ~contents:contents2 ~owner:owner2 - in - Assert.not_equal - ~loc - Ticket_hash.equal - "Keys should not overlap" - Ticket_hash.pp - k1 - k2 - -let make_key ctxt content = - hash_key - ctxt - ~ticketer:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ty:"string" - ~contents:(Printf.sprintf {|"%s"|} content) - ~owner:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - -(** Test that key-hashes constructed from different ticketers don't overlap. *) -let test_non_overlapping_keys_ticketer () = - assert_non_overlapping_keys - ~loc:__LOC__ - ~ticketer1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ticketer2:{|"KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn"|} - ~ty1:"nat" - ~ty2:"int" - ~contents1:{|"1"|} - ~contents2:{|"1"|} - ~owner1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~owner2:{|"KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn"|} - -(** Test that key-hashes constructed from different contents don't overlap. *) -let test_non_overlapping_keys_contents () = - assert_non_overlapping_keys - ~loc:__LOC__ - ~ticketer1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ticketer2:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ty1:"string" - ~ty2:"string" - ~contents1:{|"red"|} - ~contents2:{|"blue"|} - ~owner1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~owner2:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - -(** Test that key-hashes constructed from different content-types don't overlap. *) -let test_non_overlapping_keys_type () = - assert_non_overlapping_keys - ~loc:__LOC__ - ~ticketer1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ticketer2:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ty1:"nat" - ~ty2:"int" - ~contents1:{|"1"|} - ~contents2:{|"1"|} - ~owner1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~owner2:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - -(** Test that key-hashes constructed from different owners don't overlap. *) -let test_non_overlapping_keys_owner () = - assert_non_overlapping_keys - ~loc:__LOC__ - ~ticketer1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ticketer2:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~ty1:"nat" - ~ty2:"int" - ~contents1:{|"1"|} - ~contents2:{|"1"|} - ~owner1:{|"KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq"|} - ~owner2:{|"KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn"|} - -(** Test that updating the ticket balance table has - the intended effect. - *) -let test_ticket_balance_single_update () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - let*@ _, ctxt = adjust_balance ctxt alice_red 1 in - assert_balance ctxt ~loc:__LOC__ alice_red 1 - -(** Test that updating the ticket-balance table with different keys - updates both entries. *) -let test_ticket_balance_different_owners () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - let*?@ alice_blue, ctxt = make_key ctxt "alice_blue" in - let*@ _, ctxt = adjust_balance ctxt alice_red 1 in - let*@ _, ctxt = adjust_balance ctxt alice_blue 1 in - let* () = assert_balance ctxt ~loc:__LOC__ alice_red 1 in - let* () = assert_balance ctxt ~loc:__LOC__ alice_blue 1 in - return_unit - -(** Test updating the same entry with multiple updates yields - the net result of all balance updates *) -let test_ticket_balance_multiple_updates () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - let*@ _, ctxt = adjust_balance ctxt alice_red 1 in - let*@ _, ctxt = adjust_balance ctxt alice_red 2 in - let*@ _, ctxt = adjust_balance ctxt alice_red (-1) in - assert_balance ctxt ~loc:__LOC__ alice_red 2 - -(** Test that with no updates to the table, no balance is present in - the table *) -let test_empty_balance () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - assert_no_balance ctxt alice_red - -(** Test that adding one entry with positive balance and then - updating with a negative balance also removes the entry *) -let test_empty_balance_after_update () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - let*@ _, ctxt = adjust_balance ctxt alice_red 1 in - let*@ _, ctxt = adjust_balance ctxt alice_red (-1) in - assert_no_balance ctxt alice_red - -(** Test that attempting to update an entry with a negative balance - results in an error. *) -let test_negative_balance () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - let*!@ res = adjust_balance ctxt alice_red (-1) in - Assert.proto_error ~loc:__LOC__ res (fun _err -> true) - -(** Test that positive storage spaces are returned for operations - resulting in extra storage space and negative for ones that frees up storage. - *) -let test_storage_space () = - let open Lwt_result_wrap_syntax in - let* ctxt = make_context () in - let*?@ alice_red, ctxt = make_key ctxt "alice_red" in - (* Space for adding an entry is 65 for the key plus 1 for the value. *) - let*@ space, ctxt = adjust_balance ctxt alice_red 1 in - let* () = Assert.equal_int ~loc:__LOC__ 66 (Z.to_int space) in - (* Adding one does not consume additional space. *) - let*@ space, ctxt = adjust_balance ctxt alice_red 1 in - let* () = Assert.equal_int ~loc:__LOC__ 0 (Z.to_int space) in - (* Adding a big balance costs extra. *) - let*@ space, ctxt = adjust_balance ctxt alice_red 1000 in - let* () = Assert.equal_int ~loc:__LOC__ 1 (Z.to_int space) in - (* Reset balance to zero should free up space. - The freed up space is 65 for the key + 2 for the value *) - let*@ b, ctxt = Ticket_balance.get_balance ctxt alice_red in - let*@ space, ctxt = - Ticket_balance.adjust_balance - ctxt - alice_red - ~delta:(Z.neg @@ Option.value ~default:Z.zero b) - in - let* () = Assert.equal_int ~loc:__LOC__ (-67) (Z.to_int space) in - (* Adjusting the space to 0 again should not free anything *) - let*@ space, ctxt = adjust_balance ctxt alice_red 0 in - let* () = Assert.equal_int ~loc:__LOC__ 0 (Z.to_int space) in - (* Adding a balance requiers extra space. *) - let*@ space, _ = adjust_balance ctxt alice_red 10 in - Assert.equal_int ~loc:__LOC__ 66 (Z.to_int space) - -let tests = - [ - Tztest.tztest - "no overlapping keys for ticketer" - `Quick - test_non_overlapping_keys_ticketer; - Tztest.tztest - "no overlapping keys for content" - `Quick - test_non_overlapping_keys_contents; - Tztest.tztest - "no overlapping keys for content type" - `Quick - test_non_overlapping_keys_type; - Tztest.tztest - "no overlapping keys for owner" - `Quick - test_non_overlapping_keys_owner; - Tztest.tztest - "ticket balance single update" - `Quick - test_ticket_balance_single_update; - Tztest.tztest "empty balance" `Quick test_empty_balance; - Tztest.tztest - "empty balance after update" - `Quick - test_empty_balance_after_update; - Tztest.tztest "negative balance" `Quick test_negative_balance; - Tztest.tztest - "ticket balance multiple updates" - `Quick - test_ticket_balance_multiple_updates; - Tztest.tztest - "ticket balance different owners" - `Quick - test_ticket_balance_different_owners; - Tztest.tztest "ticket storage space" `Quick test_storage_space; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("ticket storage", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_typechecking.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_typechecking.ml deleted file mode 100644 index ff85a1d45261d398b8b2b6960ddaef4965174174..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/michelson/test_typechecking.ml +++ /dev/null @@ -1,1019 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (type-checking) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/michelson/main.exe \ - -- --file test_typechecking.ml - Subject: Type-checking -*) - -open Protocol -open Alpha_context -open Micheline - -let context_init_with_sc_rollup_arith_enabled tup = - Context.init_with_constants_gen - tup - { - Context.default_test_constants with - consensus_threshold = 0; - sc_rollup = - {Context.default_test_constants.sc_rollup with arith_pvm_enable = true}; - } - -let sc_originate block contract parameters_ty = - let open Lwt_result_syntax in - let kind = Sc_rollup.Kind.Example_arith in - let* operation, rollup = - Sc_rollup_helpers.origination_op ~parameters_ty (B block) contract kind - in - let* incr = Incremental.begin_construction block in - let* incr = Incremental.add_operation incr operation in - let* block = Incremental.finalize_block incr in - return (block, rollup) - -(* Test for Script_ir_translator.parse_and_unparse_script_unaccounted on a - script declaring views. *) -let test_unparse_view () = - let open Lwt_result_wrap_syntax in - let dummy_contract = - "{parameter unit; storage unit; code { CAR; NIL operation; PAIR }; view \ - \"v0\" unit unit { DROP; UNIT }; view \"v1\" nat nat {CAR}}" - in - let contract_expr = Expr.from_string dummy_contract in - let storage_expr = Expr.from_string "Unit" in - let bef = Script.lazy_expr contract_expr |> Data_encoding.force_bytes in - let script = - Script.{code = lazy_expr contract_expr; storage = lazy_expr storage_expr} - in - let* b, _cs = Context.init3 () in - let* v = Incremental.begin_construction b in - let ctx = Incremental.alpha_ctxt v in - let*@ unparsed_script, _ctx = - Script_ir_translator.parse_and_unparse_script_unaccounted - ctx - ~legacy:true - ~allow_forged_tickets_in_storage:false - ~allow_forged_lazy_storage_id_in_storage:false - Readable - ~normalize_types:true - script - in - let aft = Data_encoding.force_bytes unparsed_script.code in - Alcotest.(check bytes) "didn't match" bef aft |> return - -let test_context () = - let open Lwt_result_syntax in - let* b, _cs = Context.init3 ~consensus_threshold:0 () in - let* v = Incremental.begin_construction b in - return (Incremental.alpha_ctxt v) - -let test_context_with_nat_nat_big_map () = - let open Lwt_result_wrap_syntax in - let* b, source = Context.init1 () in - let* operation, originated = - Op.contract_origination_hash (B b) source ~script:Op.dummy_script - in - let* b = Block.bake ~operation b in - let* v = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt v in - let*@ ctxt, id = Big_map.fresh ~temporary:false ctxt in - let nat_ty = Script_typed_ir.nat_t in - let*?@ nat_ty_node, ctxt = - Script_ir_unparser.unparse_ty ctxt ~loc:() nat_ty - in - let nat_ty_expr = Micheline.strip_locations nat_ty_node in - let alloc = Big_map.{key_type = nat_ty_expr; value_type = nat_ty_expr} in - let init = Lazy_storage.Alloc alloc in - let diffs = - [ - Lazy_storage.make - Lazy_storage.Kind.Big_map - id - (Update {init; updates = []}); - ] - in - let*@ ctxt = - Contract.update_script_storage ctxt originated nat_ty_expr (Some diffs) - in - return (ctxt, id) - -let read_file filename = - let ch = open_in filename in - let s = really_input_string ch (in_channel_length ch) in - close_in ch ; - s - -let path = project_root // Filename.dirname __FILE__ - -(** Check that the custom stack overflow exception is triggered when - it should be. *) -let test_typecheck_stack_overflow () = - let open Lwt_result_syntax in - let* ctxt = test_context () in - let storage = "Unit" in - let parameter = "Unit" in - let script = read_file (path // "contracts/big_interpreter_stack.tz") in - let*! result = - Contract_helpers.run_script ctxt script ~storage ~parameter () - in - match result with - | Ok _ -> Alcotest.fail "expected an error" - | Error lst - when List.mem - ~equal:( = ) - (Environment.Ecoproto_error - Script_tc_errors.Typechecking_too_many_recursive_calls) - lst -> - return_unit - | Error errs -> - Alcotest.failf "Unexpected error: %a" Error_monad.pp_print_trace errs - -(* NOTE: this test fails with an out-of-memory exception. *) -let _test_unparse_stack_overflow () = - let open Lwt_result_syntax in - let* ctxt = test_context () in - (* Meme *) - let enorme_et_seq n = - let rec aux n acc = aux (n - 1) @@ Micheline.Seq (0, [acc]) in - aux n (Micheline.Int (0, Z.zero)) - in - let*! result = - Script_ir_translator.(unparse_code ctxt Readable (enorme_et_seq 10_001)) - in - match result with - | Ok _ -> Alcotest.fail "expected an error" - | Error trace -> - let trace_string = - Format.asprintf "%a" Environment.Error_monad.pp_trace trace - in - let expect_id = "michelson_v1.unparsing_stack_overflow" in - let expect_descrfiption = - "Too many recursive calls were needed for unparsing" - in - if - Astring.String.is_infix ~affix:expect_id trace_string - && Astring.String.is_infix ~affix:expect_descrfiption trace_string - then return_unit - else - Alcotest.failf - "Unexpected error (%s) at %s" - trace_string - __LOC__ - return_unit - -let location = function - | Prim (loc, _, _, _) - | Int (loc, _) - | String (loc, _) - | Bytes (loc, _) - | Seq (loc, _) -> - loc - -let test_parse_ty (type exp expc) ctxt node - (expected : (exp, expc) Script_typed_ir.ty) = - let open Result_wrap_syntax in - let legacy = false in - let allow_lazy_storage = true in - let allow_operation = true in - let allow_contract = true in - let allow_ticket = true in - let@ result = - let* Script_typed_ir.Ex_ty actual, ctxt = - Script_ir_translator.parse_ty - ctxt - ~legacy - ~allow_lazy_storage - ~allow_operation - ~allow_contract - ~allow_ticket - node - in - let* eq, ctxt = - Gas_monad.run ctxt - @@ Script_ir_translator.ty_eq - ~error_details:(Informative (location node)) - actual - expected - in - let+ Eq = eq in - ctxt - in - result - -let test_parse_comb_type () = - let open Lwt_result_wrap_syntax in - let open Script in - let open Script_typed_ir in - let nat_prim = Prim (-1, T_nat, [], []) in - let nat_prim_a = Prim (-1, T_nat, [], ["%a"]) in - let nat_prim_b = Prim (-1, T_nat, [], ["%b"]) in - let nat_prim_c = Prim (-1, T_nat, [], ["%c"]) in - let nat_ty = nat_t in - let pair_prim l = Prim (-1, T_pair, l, []) in - let pair_ty ty1 ty2 = pair_t (-1) ty1 ty2 in - let pair_prim2 a b = pair_prim [a; b] in - let pair_nat_nat_prim = pair_prim2 nat_prim nat_prim in - let*?@ (Ty_ex_c pair_nat_nat_ty) = pair_ty nat_ty nat_ty in - let* ctxt = test_context () in - (* pair nat nat *) - let*? ctxt = test_parse_ty ctxt pair_nat_nat_prim pair_nat_nat_ty in - (* pair (pair nat nat) nat *) - let*?@ (Ty_ex_c pair_pair_nat_nat_nat_ty) = pair_ty pair_nat_nat_ty nat_ty in - let*? ctxt = - test_parse_ty - ctxt - (pair_prim2 pair_nat_nat_prim nat_prim) - pair_pair_nat_nat_nat_ty - in - (* pair nat (pair nat nat) *) - let*?@ (Ty_ex_c pair_nat_pair_nat_nat_ty) = pair_ty nat_ty pair_nat_nat_ty in - let*? ctxt = - test_parse_ty - ctxt - (pair_prim2 nat_prim pair_nat_nat_prim) - pair_nat_pair_nat_nat_ty - in - (* pair nat nat nat *) - let*?@ (Ty_ex_c pair_nat_nat_nat_ty) = pair_ty nat_ty pair_nat_nat_ty in - let*? ctxt = - test_parse_ty - ctxt - (pair_prim [nat_prim; nat_prim; nat_prim]) - pair_nat_nat_nat_ty - in - (* pair (nat %a) nat *) - let*?@ (Ty_ex_c pair_nat_a_nat_ty) = pair_t (-1) nat_ty nat_ty in - let*? ctxt = - test_parse_ty ctxt (pair_prim2 nat_prim_a nat_prim) pair_nat_a_nat_ty - in - (* pair nat (nat %b) *) - let*?@ (Ty_ex_c pair_nat_nat_b_ty) = pair_t (-1) nat_ty nat_ty in - let*? ctxt = - test_parse_ty ctxt (pair_prim2 nat_prim nat_prim_b) pair_nat_nat_b_ty - in - (* pair (nat %a) (nat %b) *) - let*?@ (Ty_ex_c pair_nat_a_nat_b_ty) = pair_t (-1) nat_ty nat_ty in - let*? ctxt = - test_parse_ty ctxt (pair_prim2 nat_prim_a nat_prim_b) pair_nat_a_nat_b_ty - in - (* pair (nat %a) (nat %b) (nat %c) *) - let*?@ (Ty_ex_c pair_nat_b_nat_c_ty) = pair_t (-1) nat_ty nat_ty in - let*?@ (Ty_ex_c pair_nat_a_nat_b_nat_c_ty) = - pair_t (-1) nat_ty pair_nat_b_nat_c_ty - in - let*? ctxt = - test_parse_ty - ctxt - (pair_prim [nat_prim_a; nat_prim_b; nat_prim_c]) - pair_nat_a_nat_b_nat_c_ty - in - (* pair (nat %a) (pair %b nat nat) *) - let*?@ (Ty_ex_c pair_b_nat_nat_ty) = pair_t (-1) nat_ty nat_ty in - let*?@ (Ty_ex_c pair_nat_a_pair_b_nat_nat_ty) = - pair_t (-1) nat_ty pair_b_nat_nat_ty - in - let*? (_ : context) = - test_parse_ty - ctxt - (pair_prim2 nat_prim_a (Prim (-1, T_pair, [nat_prim; nat_prim], ["%b"]))) - pair_nat_a_pair_b_nat_nat_ty - in - return_unit - -let test_unparse_ty loc ctxt expected ty = - let open Result_syntax in - let* actual, ctxt = Script_ir_unparser.unparse_ty ctxt ~loc:() ty in - if actual = expected then Ok ctxt - else Alcotest.failf "Unexpected error: %s" loc - -let test_unparse_comb_type () = - let open Lwt_result_wrap_syntax in - let open Script in - let open Script_typed_ir in - let nat_prim = Prim ((), T_nat, [], []) in - let nat_ty = nat_t in - let pair_prim l = Prim ((), T_pair, l, []) in - let pair_ty ty1 ty2 = pair_t (-1) ty1 ty2 in - let pair_prim2 a b = pair_prim [a; b] in - let pair_nat_nat_prim = pair_prim2 nat_prim nat_prim in - let*?@ (Ty_ex_c pair_nat_nat_ty) = pair_ty nat_ty nat_ty in - let* ctxt = test_context () in - (* pair nat nat *) - let*?@ ctxt = - test_unparse_ty __LOC__ ctxt pair_nat_nat_prim pair_nat_nat_ty - in - (* pair (pair nat nat) nat *) - let*?@ (Ty_ex_c pair_pair_nat_nat_nat_ty) = pair_ty pair_nat_nat_ty nat_ty in - let*?@ ctxt = - test_unparse_ty - __LOC__ - ctxt - (pair_prim2 pair_nat_nat_prim nat_prim) - pair_pair_nat_nat_nat_ty - in - (* pair nat nat nat *) - let*?@ (Ty_ex_c pair_nat_nat_nat_ty) = pair_ty nat_ty pair_nat_nat_ty in - let*?@ (_ : context) = - test_unparse_ty - __LOC__ - ctxt - (pair_prim [nat_prim; nat_prim; nat_prim]) - pair_nat_nat_nat_ty - in - return_unit - -let test_unparse_comparable_ty loc ctxt expected ty = - (* unparse_comparable_ty is not exported, the simplest way to call it is to - call parse_ty on a set type *) - let open Result_syntax in - let open Script_typed_ir in - let* set_ty_ty = set_t (-1) ty in - let* actual, ctxt = Script_ir_unparser.unparse_ty ctxt ~loc:() set_ty_ty in - if actual = Prim ((), T_set, [expected], []) then return ctxt - else Alcotest.failf "Unexpected error: %s" loc - -let test_unparse_comb_comparable_type () = - let open Lwt_result_wrap_syntax in - let open Script in - let open Script_typed_ir in - let nat_prim = Prim ((), T_nat, [], []) in - let nat_ty = nat_t in - let pair_prim l = Prim ((), T_pair, l, []) in - let pair_ty ty1 ty2 = comparable_pair_t (-1) ty1 ty2 in - let pair_prim2 a b = pair_prim [a; b] in - let pair_nat_nat_prim = pair_prim2 nat_prim nat_prim in - let*?@ pair_nat_nat_ty = pair_ty nat_ty nat_ty in - let* ctxt = test_context () in - (* pair nat nat *) - let*?@ ctxt = - test_unparse_comparable_ty __LOC__ ctxt pair_nat_nat_prim pair_nat_nat_ty - in - (* pair (pair nat nat) nat *) - let*?@ pair_pair_nat_nat_nat_ty = pair_ty pair_nat_nat_ty nat_ty in - let*?@ ctxt = - test_unparse_comparable_ty - __LOC__ - ctxt - (pair_prim2 pair_nat_nat_prim nat_prim) - pair_pair_nat_nat_nat_ty - in - (* pair nat nat nat *) - let*?@ pair_nat_nat_nat_ty = pair_ty nat_ty pair_nat_nat_ty in - let*?@ (_ : context) = - test_unparse_comparable_ty - __LOC__ - ctxt - (pair_prim [nat_prim; nat_prim; nat_prim]) - pair_nat_nat_nat_ty - in - return_unit - -let test_parse_data ?(equal = Stdlib.( = )) loc ctxt ty node expected = - let open Lwt_result_wrap_syntax in - let elab_conf = Script_ir_translator_config.make ~legacy:false () in - let allow_forged_tickets = true in - let allow_forged_lazy_storage_id = true in - let*@ actual, ctxt = - Script_ir_translator.parse_data - ctxt - ~elab_conf - ~allow_forged_tickets - ~allow_forged_lazy_storage_id - ty - node - in - if equal actual expected then return ctxt - else Alcotest.failf "Unexpected error: %s" loc - -let test_parse_data_fails loc ctxt ty node = - let open Lwt_result_wrap_syntax in - let elab_conf = Script_ir_translator_config.make ~legacy:false () in - let allow_forged_tickets = false in - let allow_forged_lazy_storage_id = false in - let*! result = - Script_ir_translator.parse_data - ctxt - ~elab_conf - ~allow_forged_tickets - ~allow_forged_lazy_storage_id - ty - node - in - match result with - | Ok _ -> Alcotest.failf "Unexpected typechecking success: %s" loc - | Error trace -> - let trace_string = - Format.asprintf "%a" Environment.Error_monad.pp_trace trace - in - let expect_id = "michelson_v1.invalid_constant" in - let expect_descrfiption = - "A data expression was invalid for its expected type." - in - if - Astring.String.is_infix ~affix:expect_id trace_string - && Astring.String.is_infix ~affix:expect_descrfiption trace_string - then return_unit - else - Alcotest.failf - "Unexpected error (%s) at %s" - trace_string - __LOC__ - return_unit - -let test_parse_comb_data () = - let open Lwt_result_wrap_syntax in - let open Script in - let open Script_typed_ir in - let z = Script_int.zero_n in - let z_prim = Micheline.Int (-1, Z.zero) in - let nat_ty = nat_t in - let pair_prim l = Prim (-1, D_Pair, l, []) in - let pair_ty ty1 ty2 = pair_t (-1) ty1 ty2 in - let*?@ (Ty_ex_c pair_nat_nat_ty) = pair_ty nat_ty nat_ty in - let pair_prim2 a b = pair_prim [a; b] in - let pair_z_z_prim = pair_prim2 z_prim z_prim in - let*?@ list_nat_ty = list_t (-1) nat_ty in - let*?@ big_map_nat_nat_ty = big_map_t (-1) nat_ty nat_ty in - let* ctxt, big_map_id = test_context_with_nat_nat_big_map () in - (* Pair 0 0 *) - let* ctxt = - test_parse_data __LOC__ ctxt pair_nat_nat_ty pair_z_z_prim (z, z) - in - (* {0; 0} *) - let* ctxt = - test_parse_data - __LOC__ - ctxt - pair_nat_nat_ty - (Micheline.Seq (-1, [z_prim; z_prim])) - (z, z) - in - (* Pair (Pair 0 0) 0 *) - let*?@ (Ty_ex_c pair_pair_nat_nat_nat_ty) = pair_ty pair_nat_nat_ty nat_ty in - let* ctxt = - test_parse_data - __LOC__ - ctxt - pair_pair_nat_nat_nat_ty - (pair_prim2 pair_z_z_prim z_prim) - ((z, z), z) - in - (* Pair 0 (Pair 0 0) *) - let*?@ (Ty_ex_c pair_nat_pair_nat_nat_ty) = pair_ty nat_ty pair_nat_nat_ty in - let* ctxt = - test_parse_data - __LOC__ - ctxt - pair_nat_pair_nat_nat_ty - (pair_prim2 z_prim pair_z_z_prim) - (z, (z, z)) - in - (* Pair 0 0 0 *) - let* ctxt = - test_parse_data - __LOC__ - ctxt - pair_nat_pair_nat_nat_ty - (pair_prim [z_prim; z_prim; z_prim]) - (z, (z, z)) - in - (* {0; 0; 0} *) - let* ctxt = - test_parse_data - __LOC__ - ctxt - pair_nat_pair_nat_nat_ty - (Micheline.Seq (-1, [z_prim; z_prim; z_prim])) - (z, (z, z)) - in - (* Should fail: {0} against pair nat (list nat) *) - let*?@ (Ty_ex_c pair_nat_list_nat_ty) = pair_ty nat_ty list_nat_ty in - let* () = - test_parse_data_fails - __LOC__ - ctxt - pair_nat_list_nat_ty - (Micheline.Seq (-1, [z_prim])) - in - (* Should fail: {0; 0; 0} against pair nat (list nat) *) - let* () = - test_parse_data_fails - __LOC__ - ctxt - pair_nat_list_nat_ty - (Micheline.Seq (-1, [z_prim; z_prim; z_prim])) - in - (* check Pair 0 (Pair 0 {}) against pair nat (big_map nat nat) - so that the following test fails for the good reason and not because - the big map doesn't exist - *) - let id_z = Big_map.Id.unparse_to_z big_map_id in - let id_prim = Int (-1, id_z) in - let expected_big_map = - let open Script_typed_ir in - let diff = {map = Big_map_overlay.empty; size = 0} in - Big_map {id = Some big_map_id; diff; key_type = nat_ty; value_type = nat_ty} - in - let ty_equal : - type a ac1 ac2. - (a, ac1) Script_typed_ir.ty -> (a, ac2) Script_typed_ir.ty -> bool = - fun ty1 ty2 -> - match Script_typed_ir.(is_comparable ty1, is_comparable ty2) with - | Yes, Yes -> ty1 = ty2 - | No, No -> ty1 = ty2 - | Yes, No -> assert false - | No, Yes -> assert false - (* - These last two cases can't happen because the comparable character of a - type is a function of its concrete type. - It is possible to write a function that proves it but it is not needed - in the protocol for the moment. - *) - in - let equal (nat1, Big_map big_map1) (nat2, Big_map big_map2) = - (* Custom equal needed because big maps contain boxed maps containing functional values *) - nat1 = nat2 && big_map1.id = big_map2.id - && big_map1.key_type = big_map2.key_type - && ty_equal big_map1.value_type big_map2.value_type - && big_map1.diff.size = big_map2.diff.size - && Big_map_overlay.bindings big_map1.diff.map - = Big_map_overlay.bindings big_map2.diff.map - in - let*?@ (Ty_ex_c pair_nat_big_map_nat_nat_ty) = - pair_ty nat_ty big_map_nat_nat_ty - in - let* ctxt = - test_parse_data - ~equal - __LOC__ - ctxt - pair_nat_big_map_nat_nat_ty - (pair_prim2 z_prim (pair_prim2 id_prim (Seq (-1, [])))) - (Script_int.zero_n, expected_big_map) - in - (* Should fail: Pair 0 0 {} against pair nat (big_map nat nat) *) - test_parse_data_fails - __LOC__ - ctxt - pair_nat_big_map_nat_nat_ty - (pair_prim [z_prim; id_prim; Seq (-1, [])]) - -let test_parse_address () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let* ctxt, _big_map_id = test_context_with_nat_nat_big_map () in - (* KT1% (empty entrypoint) *) - let*?@ kt1fake = - Contract.of_b58check "KT1FAKEFAKEFAKEFAKEFAKEFAKEFAKGGSE2x" - in - let* ctxt = - test_parse_data - __LOC__ - ctxt - address_t - (String (-1, "KT1FAKEFAKEFAKEFAKEFAKEFAKEFAKGGSE2x%")) - {destination = Contract kt1fake; entrypoint = Entrypoint.default} - in - (* tz1% (empty entrypoint) *) - let*?@ tz1fake = - Contract.of_b58check "tz1fakefakefakefakefakefakefakcphLA5" - in - let* ctxt = - test_parse_data - __LOC__ - ctxt - address_t - (String (-1, "tz1fakefakefakefakefakefakefakcphLA5%")) - {destination = Contract tz1fake; entrypoint = Entrypoint.default} - in - (* scr1% (empty entrypoint) *) - let*?@ scr1 = - Destination.of_b58check "sr1JPVatbbPoGp4vb6VfQ1jzEPMrYFcKq6VG" - in - let* ctxt = - test_parse_data - __LOC__ - ctxt - address_t - (String (-1, "sr1JPVatbbPoGp4vb6VfQ1jzEPMrYFcKq6VG")) - {destination = scr1; entrypoint = Entrypoint.default} - in - (* scr1% (default entrypoint) *) - let+ (_ctxt : context) = - test_parse_data - __LOC__ - ctxt - address_t - (String (-1, "sr1JPVatbbPoGp4vb6VfQ1jzEPMrYFcKq6VG%")) - {destination = scr1; entrypoint = Entrypoint.default} - in - () - -let test_unparse_data loc ctxt ty x ~expected_readable ~expected_optimized = - let open Lwt_result_wrap_syntax in - let*@ actual_readable, ctxt = - Script_ir_translator.unparse_data ctxt Script_ir_unparser.Readable ty x - in - let*@ ctxt = - if actual_readable = Micheline.strip_locations expected_readable then - return ctxt - else Alcotest.failf "Error in readable unparsing: %s" loc - in - let*@ actual_optimized, ctxt = - Script_ir_translator.unparse_data ctxt Script_ir_unparser.Optimized ty x - in - if actual_optimized = Micheline.strip_locations expected_optimized then - return ctxt - else Alcotest.failf "Error in optimized unparsing: %s" loc - -let test_unparse_comb_data () = - let open Lwt_result_wrap_syntax in - let open Script in - let open Script_typed_ir in - let z = Script_int.zero_n in - let z_prim = Micheline.Int (-1, Z.zero) in - let nat_ty = nat_t in - let pair_prim l = Prim (-1, D_Pair, l, []) in - let pair_ty ty1 ty2 = pair_t (-1) ty1 ty2 in - let*?@ (Ty_ex_c pair_nat_nat_ty) = pair_ty nat_ty nat_ty in - let pair_prim2 a b = pair_prim [a; b] in - let pair_z_z_prim = pair_prim2 z_prim z_prim in - let* ctxt = test_context () in - (* Pair 0 0 *) - let* ctxt = - test_unparse_data - __LOC__ - ctxt - pair_nat_nat_ty - (z, z) - ~expected_readable:pair_z_z_prim - ~expected_optimized:pair_z_z_prim - in - (* Pair (Pair 0 0) 0 *) - let*?@ (Ty_ex_c pair_pair_nat_nat_nat_ty) = pair_ty pair_nat_nat_ty nat_ty in - let* ctxt = - test_unparse_data - __LOC__ - ctxt - pair_pair_nat_nat_nat_ty - ((z, z), z) - ~expected_readable:(pair_prim2 pair_z_z_prim z_prim) - ~expected_optimized:(pair_prim2 pair_z_z_prim z_prim) - in - (* Readable: Pair 0 0 0; Optimized: Pair 0 (Pair 0 0) *) - let*?@ (Ty_ex_c pair_nat_pair_nat_nat_ty) = pair_ty nat_ty pair_nat_nat_ty in - let* ctxt = - test_unparse_data - __LOC__ - ctxt - pair_nat_pair_nat_nat_ty - (z, (z, z)) - ~expected_readable:(pair_prim [z_prim; z_prim; z_prim]) - ~expected_optimized:(pair_prim2 z_prim pair_z_z_prim) - in - (* Readable: Pair 0 0 0 0; Optimized: {0; 0; 0; 0} *) - let*?@ (Ty_ex_c pair_nat_pair_nat_pair_nat_nat_ty) = - pair_ty nat_ty pair_nat_pair_nat_nat_ty - in - let* (_ : context) = - test_unparse_data - __LOC__ - ctxt - pair_nat_pair_nat_pair_nat_nat_ty - (z, (z, (z, z))) - ~expected_readable:(pair_prim [z_prim; z_prim; z_prim; z_prim]) - ~expected_optimized:(Micheline.Seq (-1, [z_prim; z_prim; z_prim; z_prim])) - in - return_unit - -(* Generate all the possible syntaxes for pairs *) -let gen_pairs left right = - [Prim ((), Script.D_Pair, [left; right], []); Seq ((), [left; right])] - -(* Generate all the possible syntaxes for combs *) -let rec gen_combs leaf arity = - assert (arity >= 2) ; - if arity = 2 then gen_pairs leaf leaf - else - gen_combs leaf (arity - 1) - |> List.map (fun smaller -> - (match smaller with - | Prim (loc, Script.D_Pair, vs, []) -> - Prim (loc, Script.D_Pair, leaf :: vs, []) - | Seq (loc, vs) -> Seq (loc, leaf :: vs) - | _ -> assert false) - :: gen_pairs leaf smaller) - |> List.flatten - -(* Checks the optimality of the Optimized Micheline representation for combs *) -let test_optimal_comb () = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let leaf_ty = nat_t in - let leaf_mich = Int ((), Z.zero) in - let leaf_v = Script_int.zero_n in - let size_of_micheline mich = - let canonical = Micheline.strip_locations mich in - ( canonical, - Bytes.length - @@ Data_encoding.Binary.to_bytes_exn Script.expr_encoding canonical ) - in - let check_optimal_comb loc ctxt ty v arity = - let*@ unparsed, ctxt = - Script_ir_translator.unparse_data ctxt Script_ir_unparser.Optimized ty v - in - let unparsed_canonical, unparsed_size = - size_of_micheline (Micheline.root unparsed) - in - let*@ () = - List.iter_es (fun other_repr -> - let other_repr_canonical, other_repr_size = - size_of_micheline other_repr - in - if other_repr_size < unparsed_size then - Alcotest.failf - "At %s, for comb of arity %d, representation %a (size %d bytes) \ - is shorter than representation %a (size %d bytes) returned by \ - unparse_data in Optimized mode" - loc - arity - Michelson_v1_printer.print_expr - other_repr_canonical - other_repr_size - Michelson_v1_printer.print_expr - unparsed_canonical - unparsed_size - else return_unit) - @@ gen_combs leaf_mich arity - in - return ctxt - in - let pair_ty ty1 ty2 = pair_t (-1) ty1 ty2 in - let* ctxt = test_context () in - let*?@ (Ty_ex_c comb2_ty) = pair_ty leaf_ty leaf_ty in - let comb2_v = (leaf_v, leaf_v) in - let* ctxt = check_optimal_comb __LOC__ ctxt comb2_ty comb2_v 2 in - let*?@ (Ty_ex_c comb3_ty) = pair_ty leaf_ty comb2_ty in - let comb3_v = (leaf_v, comb2_v) in - let* ctxt = check_optimal_comb __LOC__ ctxt comb3_ty comb3_v 3 in - let*?@ (Ty_ex_c comb4_ty) = pair_ty leaf_ty comb3_ty in - let comb4_v = (leaf_v, comb3_v) in - let* ctxt = check_optimal_comb __LOC__ ctxt comb4_ty comb4_v 4 in - let*?@ (Ty_ex_c comb5_ty) = pair_ty leaf_ty comb4_ty in - let comb5_v = (leaf_v, comb4_v) in - let* (_ : context) = check_optimal_comb __LOC__ ctxt comb5_ty comb5_v 5 in - return_unit - -(* Check that UNPACK on contract is forbidden. - See https://gitlab.com/tezos/tezos/-/issues/301 for the motivation - behind this restriction. -*) -let test_contract_not_packable () = - let open Lwt_result_syntax in - let elab_conf = Script_ir_translator_config.make ~legacy:false () in - let contract_unit = - Prim (0, Script.T_contract, [Prim (0, T_unit, [], [])], []) - in - let* ctxt = test_context () in - (* Test that [contract_unit] is parsable *) - let* () = - match - Script_ir_translator.parse_any_ty ctxt ~legacy:false contract_unit - with - | Ok _ -> Lwt_result_syntax.return_unit - | Error _ -> Alcotest.failf "Could not parse (contract unit)" - in - (* Test that [contract_unit] is not packable *) - let* () = - match - Script_ir_translator.parse_packable_ty ctxt ~legacy:false contract_unit - with - | Ok _ -> - Alcotest.failf - "(contract unit) should not be packable, see \ - https://gitlab.com/tezos/tezos/-/issues/301" - | Error _ -> return_unit - in - (* Test that elaboration of the [UNPACK unit] instruction succeeds *) - let* () = - let*! result = - Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf - (Prim (0, I_UNPACK, [Prim (0, T_unit, [], [])], [])) - (Item_t (Script_typed_ir.bytes_t, Bot_t)) - in - match result with - | Ok _ -> return_unit - | Error _ -> Alcotest.failf "Could not parse UNPACK unit" - in - (* Test that elaboration of the [UNPACK (contract unit)] instruction fails *) - let*! result = - Script_ir_translator.parse_instr - Script_tc_context.data - ctxt - ~elab_conf - (Prim (0, I_UNPACK, [contract_unit], [])) - (Item_t (Script_typed_ir.bytes_t, Bot_t)) - in - match result with - | Ok _ -> - Alcotest.failf - "UNPACK (contract unit) should not be allowed, see \ - https://gitlab.com/tezos/tezos/-/issues/301" - | Error _ -> return_unit - -(* This test function is used to checks forbidden operations in views. *) -let test_forbidden_op_in_view op () = - let open Lwt_result_syntax in - let prefix = path // "contracts/forbidden_op_in_view_" in - let script = read_file (prefix ^ op ^ ".tz") in - let contract_expr = Expr.from_string script in - let* ctxt = test_context () in - let*! result = - Script_ir_translator.typecheck_code - ~legacy:false - ~show_types:false - ctxt - contract_expr - in - match result with - | Ok _ -> - Alcotest.failf - "%s should not be allowed in views, see \ - https://gitlab.com/tezos/tezos/-/issues/1922" - op - | Error _ -> return_unit - -(** Test [parse_contract_data] for rollup with unit type. *) -let test_parse_contract_data_for_unit_rollup () = - let open Lwt_result_wrap_syntax in - let* block, (contract, _) = context_init_with_sc_rollup_arith_enabled T2 in - let* block, rollup = sc_originate block contract "unit" in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let*@ _ctxt, typed_contract = - Script_ir_translator.parse_contract_data - ctxt - (-1) - Script_typed_ir.unit_t - (Destination.Sc_rollup rollup) - ~entrypoint:Entrypoint.default - in - let (Ty_ex_c Script_typed_ir.Unit_t) = - Script_typed_ir.Typed_contract.arg_ty typed_contract - in - let destination = Script_typed_ir.Typed_contract.destination typed_contract in - let entrypoint = Script_typed_ir.Typed_contract.entrypoint typed_contract in - (* Check that the destinations match. *) - let* () = - Assert.equal_string - ~loc:__LOC__ - (Destination.to_b58check destination) - (Sc_rollup.Address.to_b58check rollup) - in - (* Check that entrypoints match. *) - let* () = - Assert.equal_string ~loc:__LOC__ (Entrypoint.to_string entrypoint) "default" - in - return_unit - -(** Test that [parse_contract_data] for rollup with invalid type fails. *) -let test_parse_contract_data_for_rollup_with_invalid_type () = - let open Lwt_result_wrap_syntax in - let* block, (contract, _) = context_init_with_sc_rollup_arith_enabled T2 in - let* block, rollup = sc_originate block contract "string" in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let entrypoint = Entrypoint.of_string_strict_exn "add" in - let*!@ res = - Script_ir_translator.parse_contract_data - ctxt - (-1) - Script_typed_ir.unit_t - (Destination.Sc_rollup rollup) - ~entrypoint - in - Assert.proto_error - ~loc:__LOC__ - res - (( = ) (Script_tc_errors.No_such_entrypoint entrypoint)) - -let test_contract path ~ok ~ko () = - let open Lwt_result_syntax in - let contract = path in - let script = read_file contract in - let contract_expr = Expr.from_string script in - let* ctxt = test_context () in - let*! result = - Script_ir_translator.typecheck_code - ~legacy:false - ~show_types:false - ctxt - contract_expr - in - match result with Ok _ -> ok () | Error t -> ko t - -let test_contract_success path = - let open Lwt_result_syntax in - test_contract path ~ok:return ~ko:(fun t -> - Alcotest.failf "Unexpected error: %a" Environment.Error_monad.pp_trace t) - -let test_contract_failure path = - let open Lwt_result_syntax in - test_contract - path - ~ok:(fun () -> - Alcotest.failf - "Unexpected success: typechecking %s should have failed" - path) - ~ko:(fun _ -> return_unit) - -let tests = - [ - Tztest.tztest "unparse view" `Quick test_unparse_view; - Tztest.tztest - "typecheck stack overflow error" - `Quick - test_typecheck_stack_overflow; - Tztest.tztest "comb type parsing" `Quick test_parse_comb_type; - Tztest.tztest "comb type unparsing" `Quick test_unparse_comb_type; - Tztest.tztest - "comb comparable type unparsing" - `Quick - test_unparse_comb_comparable_type; - Tztest.tztest "comb data parsing" `Quick test_parse_comb_data; - Tztest.tztest "comb data unparsing" `Quick test_unparse_comb_data; - Tztest.tztest "optimal comb data unparsing" `Quick test_optimal_comb; - Tztest.tztest "parse address" `Quick test_parse_address; - Tztest.tztest - "unpackability of the contract type" - `Quick - test_contract_not_packable; - Tztest.tztest - "forbidden SELF in view" - `Quick - (test_forbidden_op_in_view "SELF"); - Tztest.tztest - "forbidden SET_DELEGATE in view" - `Quick - (test_forbidden_op_in_view "SET_DELEGATE"); - Tztest.tztest - "forbidden TRANSFER_TOKENS in view" - `Quick - (test_forbidden_op_in_view "TRANSFER_TOKENS"); - Tztest.tztest - "forbidden CREATE_CONTRACT in view" - `Quick - (test_forbidden_op_in_view "CREATE_CONTRACT"); - Tztest.tztest - "parse contract data for rollup" - `Quick - test_parse_contract_data_for_unit_rollup; - Tztest.tztest - "parse contract data for rollup with entrypoint invalid type" - `Quick - test_parse_contract_data_for_rollup_with_invalid_type; - Tztest.tztest - "lambda_rec instruction" - `Quick - (test_contract_success (path // "contracts/rec_fact.tz")); - Tztest.tztest - "lambda_rec instruction with apply" - `Quick - (test_contract_success (path // "contracts/rec_fact_apply.tz")); - Tztest.tztest - "lambda_rec with type error" - `Quick - (test_contract_failure (path // "contracts/fail_rec.tz")); - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("typechecking", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/dune b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/dune deleted file mode 100644 index 096c5204cb9e9ef4a34f40a73f76aaced1eb2ca0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/dune +++ /dev/null @@ -1,63 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name - src_proto_019_PtParisB_lib_protocol_test_integration_operations_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-alcotezt - octez-libs.base - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.client - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.base-test-helpers - octez-protocol-019-PtParisB-libs.plugin) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Octez_alcotezt - -open Tezos_base.TzPervasives - -open Tezos_protocol_019_PtParisB - -open Tezos_client_019_PtParisB - -open Tezos_019_PtParisB_test_helpers - -open Tezos_base_test_helpers - -open Tezos_protocol_plugin_019_PtParisB) - (modules - test_activation - test_combined_operations - test_failing_noop - test_origination - test_paid_storage_increase - test_reveal - test_sc_rollup_transfer - test_sc_rollup - test_transfer - test_voting - test_zk_rollup - test_transfer_ticket)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_integration_operations_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (deps (glob_files contracts/*)) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_activation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_activation.ml deleted file mode 100644 index b4c2680b423643c453aa82ed154b0eead6cbad89..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_activation.ml +++ /dev/null @@ -1,603 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (activation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_activation.ml - Subject: The activation operation creates an implicit contract from a - registered commitment present in the context. It is - parametrized by a public key hash (pkh) and a secret. - - The commitments are composed of : - - a blinded pkh that can be revealed by the secret ; - - an amount. - - The commitments and the secrets are generated from - /scripts/create_genesis/create_genesis.py and should be - coherent. -*) - -open Protocol -open Alpha_context -open Tez_helpers - -(* Generated commitments and secrets *) - -let commitments = - List.map - (fun (bpkh, a) -> - Commitment. - { - blinded_public_key_hash = Blinded_public_key_hash.of_b58check_exn bpkh; - amount = Tez.of_mutez_exn (Int64.of_string a); - }) - [ - ("btz1bRL4X5BWo2Fj4EsBdUwexXqgTf75uf1qa", "23932454669343"); - ("btz1SxjV1syBgftgKy721czKi3arVkVwYUFSv", "72954577464032"); - ("btz1LtoNCjiW23txBTenALaf5H6NKF1L3c1gw", "217487035428349"); - ("btz1SUd3mMhEBcWudrn8u361MVAec4WYCcFoy", "4092742372031"); - ("btz1MvBXf4orko1tsGmzkjLbpYSgnwUjEe81r", "17590039016550"); - ("btz1LoDZ3zsjgG3k3cqTpUMc9bsXbchu9qMXT", "26322312350555"); - ("btz1RMfq456hFV5AeDiZcQuZhoMv2dMpb9hpP", "244951387881443"); - ("btz1Y9roTh4A7PsMBkp8AgdVFrqUDNaBE59y1", "80065050465525"); - ("btz1Q1N2ePwhVw5ED3aaRVek6EBzYs1GDkSVD", "3569618927693"); - ("btz1VFFVsVMYHd5WfaDTAt92BeQYGK8Ri4eLy", "9034781424478"); - ] - -type secret_account = { - account : public_key_hash; - activation_code : Blinded_public_key_hash.activation_code; - amount : Tez.t; -} - -let secrets () = - (* Exported from proto_alpha client - TODO : remove when relocated to lib_crypto *) - let read_key mnemonic email password = - match Tezos_client_base.Bip39.of_words mnemonic with - | None -> assert false - | Some t -> - (* TODO: unicode normalization (NFKD)... *) - let passphrase = Bytes.(cat (of_string email) (of_string password)) in - let sk = Tezos_client_base.Bip39.to_seed ~passphrase t in - let sk = Bytes.sub sk 0 32 in - let sk : Signature.Secret_key.t = - Ed25519 - (Data_encoding.Binary.of_bytes_exn - Signature.Ed25519.Secret_key.encoding - sk) - in - let pk = Signature.Secret_key.to_public_key sk in - let pkh = Signature.Public_key.hash pk in - (pkh, pk, sk) - in - List.map - (fun (mnemonic, secret, amount, pkh, password, email) -> - let pkh', pk, sk = read_key mnemonic email password in - let pkh = Signature.Public_key_hash.of_b58check_exn pkh in - assert (Signature.Public_key_hash.equal pkh pkh') ; - let account = Account.{pkh; pk; sk} in - Account.add_account account ; - { - account = account.pkh; - activation_code = - Stdlib.Option.get - (Blinded_public_key_hash.activation_code_of_hex secret); - amount = - WithExceptions.Option.to_exn - ~none:(Invalid_argument "tez conversion") - (Tez.of_mutez (Int64.of_string amount)); - }) - [ - ( [ - "envelope"; - "hospital"; - "mind"; - "sunset"; - "cancel"; - "muscle"; - "leisure"; - "thumb"; - "wine"; - "market"; - "exit"; - "lucky"; - "style"; - "picnic"; - "success"; - ], - "0f39ed0b656509c2ecec4771712d9cddefe2afac", - "23932454669343", - "tz1MawerETND6bqJqx8GV3YHUrvMBCDasRBF", - "z0eZHQQGKt", - "cjgfoqmk.wpxnvnup@tezos.example.org" ); - ( [ - "flag"; - "quote"; - "will"; - "valley"; - "mouse"; - "chat"; - "hold"; - "prosper"; - "silk"; - "tent"; - "cruel"; - "cause"; - "demise"; - "bottom"; - "practice"; - ], - "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4", - "72954577464032", - "tz1X4maqF9tC1Yn4jULjHRAyzjAtc25Z68TX", - "MHErskWPE6", - "oklmcktr.ztljnpzc@tezos.example.org" ); - ( [ - "library"; - "away"; - "inside"; - "paper"; - "wise"; - "focus"; - "sweet"; - "expose"; - "require"; - "change"; - "stove"; - "planet"; - "zone"; - "reflect"; - "finger"; - ], - "411dfef031eeecc506de71c9df9f8e44297cf5ba", - "217487035428349", - "tz1SWBY7rWMutEuWS54Pt33MkzAS6eWkUuTc", - "0AO6BzQNfN", - "ctgnkvqm.kvtiybky@tezos.example.org" ); - ( [ - "cruel"; - "fluid"; - "damage"; - "demand"; - "mimic"; - "above"; - "village"; - "alpha"; - "vendor"; - "staff"; - "absent"; - "uniform"; - "fire"; - "asthma"; - "milk"; - ], - "08d7d355bc3391d12d140780b39717d9f46fcf87", - "4092742372031", - "tz1amUjiZaevaxQy5wKn4SSRvVoERCip3nZS", - "9kbZ7fR6im", - "bnyxxzqr.tdszcvqb@tezos.example.org" ); - ( [ - "opera"; - "divorce"; - "easy"; - "myself"; - "idea"; - "aim"; - "dash"; - "scout"; - "case"; - "resource"; - "vote"; - "humor"; - "ticket"; - "client"; - "edge"; - ], - "9b7cad042fba557618bdc4b62837c5f125b50e56", - "17590039016550", - "tz1Zaee3QBtD4ErY1SzqUvyYTrENrExu6yQM", - "suxT5H09yY", - "iilkhohu.otnyuvna@tezos.example.org" ); - ( [ - "token"; - "similar"; - "ginger"; - "tongue"; - "gun"; - "sort"; - "piano"; - "month"; - "hotel"; - "vote"; - "undo"; - "success"; - "hobby"; - "shell"; - "cart"; - ], - "124c0ca217f11ffc6c7b76a743d867c8932e5afd", - "26322312350555", - "tz1geDUUhfXK1EMj7VQdRjug1MoFe6gHWnCU", - "4odVdLykaa", - "kwhlglvr.slriitzy@tezos.example.org" ); - ( [ - "shield"; - "warrior"; - "gorilla"; - "birth"; - "steak"; - "neither"; - "feel"; - "only"; - "liberty"; - "float"; - "oven"; - "extend"; - "pulse"; - "suffer"; - "vapor"; - ], - "ac7a2125beea68caf5266a647f24dce9fea018a7", - "244951387881443", - "tz1h3nY7jcZciJgAwRhWcrEwqfVp7VQoffur", - "A6yeMqBFG8", - "lvrmlbyj.yczltcxn@tezos.example.org" ); - ( [ - "waste"; - "open"; - "scan"; - "tip"; - "subway"; - "dance"; - "rent"; - "copper"; - "garlic"; - "laundry"; - "defense"; - "clerk"; - "another"; - "staff"; - "liar"; - ], - "2b3e94be133a960fa0ef87f6c0922c19f9d87ca2", - "80065050465525", - "tz1VzL4Xrb3fL3ckvqCWy6bdGMzU2w9eoRqs", - "oVZqpq60sk", - "rfodmrha.zzdndvyk@tezos.example.org" ); - ( [ - "fiber"; - "next"; - "property"; - "cradle"; - "silk"; - "obey"; - "gossip"; - "push"; - "key"; - "second"; - "across"; - "minimum"; - "nice"; - "boil"; - "age"; - ], - "dac31640199f2babc157aadc0021cd71128ca9ea", - "3569618927693", - "tz1RUHg536oRKhPLFfttcB5gSWAhh4E9TWjX", - "FfytQTTVbu", - "owecikdy.gxnyttya@tezos.example.org" ); - ( [ - "print"; - "labor"; - "budget"; - "speak"; - "poem"; - "diet"; - "chunk"; - "eternal"; - "book"; - "saddle"; - "pioneer"; - "ankle"; - "happy"; - "only"; - "exclude"; - ], - "bb841227f250a066eb8429e56937ad504d7b34dd", - "9034781424478", - "tz1M1LFbgctcPWxstrao9aLr2ECW1fV4pH5u", - "zknAl3lrX2", - "ettilrvh.zsrqrbud@tezos.example.org" ); - ] - -(** Helper: Create a genesis block with predefined commitments, - accounts and balances. *) -let activation_init () = - let open Lwt_result_syntax in - let+ b, c = Context.init1 ~consensus_threshold:0 ~commitments () in - let ss = secrets () in - (b, c, ss) - -(** Verify the genesis block created by [activation_init] can be - baked. *) -let test_simple_init_with_commitments () = - let open Lwt_result_syntax in - let* blk, _contract, _secrets = activation_init () in - let* (_ : Block.t) = Block.bake blk in - return_unit - -(** A single activation *) -let test_single_activation () = - let open Lwt_result_syntax in - let* blk, _contract, secrets = activation_init () in - let ({account; activation_code; amount = expected_amount; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - (* Contract does not exist *) - let* () = - Assert.balance_is ~loc:__LOC__ (B blk) (Contract.Implicit account) Tez.zero - in - let* operation = Op.activation (B blk) account activation_code in - let* blk = Block.bake ~operation blk in - (* Contract does exist *) - Assert.balance_is - ~loc:__LOC__ - (B blk) - (Contract.Implicit account) - expected_amount - -(** 10 activations, one per bake. *) -let test_multi_activation_1 () = - let open Lwt_result_syntax in - let* blk, _contract, secrets = activation_init () in - let* (_ : Block.t) = - List.fold_left_es - (fun blk {account; activation_code; amount = expected_amount; _} -> - let* operation = Op.activation (B blk) account activation_code in - let* blk = Block.bake ~operation blk in - let+ () = - Assert.balance_is - ~loc:__LOC__ - (B blk) - (Contract.Implicit account) - expected_amount - in - blk) - blk - secrets - in - return_unit - -(** All of the 10 activations occur in one bake. *) -let test_multi_activation_2 () = - let open Lwt_result_syntax in - let* blk, _contract, secrets = activation_init () in - let* ops = - List.fold_left_es - (fun ops {account; activation_code; _} -> - let+ op = Op.activation (B blk) account activation_code in - op :: ops) - [] - secrets - in - let* blk = Block.bake ~operations:ops blk in - List.iter_es - (fun {account; amount = expected_amount; _} -> - (* Contract does exist *) - Assert.balance_is - ~loc:__LOC__ - (B blk) - (Contract.Implicit account) - expected_amount) - secrets - -(** Transfer with activated account. *) -let test_activation_and_transfer () = - let open Lwt_result_syntax in - let* blk, bootstrap_contract, secrets = activation_init () in - let ({account; activation_code; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - let first_contract = Contract.Implicit account in - let* operation = Op.activation (B blk) account activation_code in - let* blk = Block.bake ~operation blk in - let* amount = Context.Contract.balance (B blk) bootstrap_contract in - let half_amount = Tez_helpers.(amount /! 2L) in - let* activated_amount_before = - Context.Contract.balance (B blk) first_contract - in - let* operation = - Op.transaction (B blk) bootstrap_contract first_contract half_amount - in - let* blk = Block.bake ~operation blk in - Assert.balance_was_credited - ~loc:__LOC__ - (B blk) - (Contract.Implicit account) - activated_amount_before - half_amount - -(** Transfer to an unactivated account and then activating it. *) -let test_transfer_to_unactivated_then_activate () = - let open Lwt_result_syntax in - let* blk, bootstrap_contract, secrets = activation_init () in - let ({account; activation_code; amount} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - let unactivated_commitment_contract = Contract.Implicit account in - let* b_amount = Context.Contract.balance (B blk) bootstrap_contract in - let b_half_amount = b_amount /! 2L in - let* inc = Incremental.begin_construction blk in - let* op = - Op.transaction - (I inc) - bootstrap_contract - unactivated_commitment_contract - b_half_amount - in - let* inc = Incremental.add_operation inc op in - let* op' = Op.activation (I inc) account activation_code in - let* inc = Incremental.add_operation inc op' in - let* blk2 = Incremental.finalize_block inc in - Assert.balance_was_credited - ~loc:__LOC__ - (B blk2) - (Contract.Implicit account) - amount - b_half_amount - -(****************************************************************) -(* The following test scenarios are supposed to raise errors. *) -(****************************************************************) - -(** Invalid pkh activation: expected to fail as the context does not - contain any commitment. *) -let test_invalid_activation_with_no_commitments () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let secrets = secrets () in - let ({account; activation_code; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - let* operation = Op.activation (B blk) account activation_code in - let*! res = Block.bake ~operation blk in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_activation _ -> true - | _ -> false) - -(** Wrong activation: wrong secret given in the operation. *) -let test_invalid_activation_wrong_secret () = - let open Lwt_result_syntax in - let* blk, _contract, secrets = activation_init () in - let ({account; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth secrets 0 - in - let ({activation_code; _} as _second_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth secrets 1 - in - let* operation = Op.activation (B blk) account activation_code in - let*! res = Block.bake ~operation blk in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_activation _ -> true - | _ -> false) - -(** Invalid pkh activation : expected to fail as the context does not - contain an associated commitment. *) -let test_invalid_activation_inexistent_pkh () = - let open Lwt_result_syntax in - let* blk, _contract, secrets = activation_init () in - let ({activation_code; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - let inexistent_pkh = - Signature.Public_key_hash.of_b58check_exn - "tz1PeQHGKPWSpNoozvxgqLN9TFsj6rDqNV3o" - in - let* operation = Op.activation (B blk) inexistent_pkh activation_code in - let*! res = Block.bake ~operation blk in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Invalid_activation _ -> true - | _ -> false) - -(** Invalid pkh activation : expected to fail as the commitment has - already been claimed. *) -let test_invalid_double_activation () = - let open Lwt_result_syntax in - let* blk, _contract, secrets = activation_init () in - let ({account; activation_code; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - let* inc = Incremental.begin_construction blk in - let* op = Op.activation (I inc) account activation_code in - let* inc = Incremental.add_operation inc op in - let* op' = Op.activation (I inc) account activation_code in - let*! res = Incremental.add_operation inc op' in - Assert.proto_error ~loc:__LOC__ res (function - | Validate_errors.Anonymous.Conflicting_activation _ -> true - | _ -> false) - -(** Transfer from an unactivated commitment account. *) -let test_invalid_transfer_from_unactivated_account () = - let open Lwt_result_syntax in - let* blk, bootstrap_contract, secrets = activation_init () in - let ({account; _} as _first_one) = - WithExceptions.Option.get ~loc:__LOC__ @@ List.hd secrets - in - let unactivated_commitment_contract = Contract.Implicit account in - (* No activation *) - let* operation = - Op.transaction - (B blk) - unactivated_commitment_contract - bootstrap_contract - Tez.one - in - let*! res = Block.bake ~operation blk in - Assert.proto_error_with_info ~loc:__LOC__ res "Empty implicit contract" - -let tests = - [ - Tztest.tztest - "init with commitments" - `Quick - test_simple_init_with_commitments; - Tztest.tztest "single activation" `Quick test_single_activation; - Tztest.tztest "multi-activation one-by-one" `Quick test_multi_activation_1; - Tztest.tztest - "multi-activation all at a time" - `Quick - test_multi_activation_2; - Tztest.tztest "activation and transfer" `Quick test_activation_and_transfer; - Tztest.tztest - "transfer to unactivated account then activate" - `Quick - test_transfer_to_unactivated_then_activate; - Tztest.tztest - "invalid activation with no commitments" - `Quick - test_invalid_activation_with_no_commitments; - Tztest.tztest - "invalid activation with commitments" - `Quick - test_invalid_activation_inexistent_pkh; - Tztest.tztest - "invalid double activation" - `Quick - test_invalid_double_activation; - Tztest.tztest - "wrong activation code" - `Quick - test_invalid_activation_wrong_secret; - Tztest.tztest - "invalid transfer from unactivated account" - `Quick - test_invalid_transfer_from_unactivated_account; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("activation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_combined_operations.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_combined_operations.ml deleted file mode 100644 index aabab315dddb0e1474c5b070bb4f8d0a3042cbde..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_combined_operations.ml +++ /dev/null @@ -1,437 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (combined operations) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_combined_operations.ml - Subject: Multiple operations can be grouped in one ensuring their - deterministic application. - - Only manager operations are allowed in batches of more - than one operation. This file only tests batches where - all operations belong to the same manager. See - {!Test_host_operation} for tests involving multiple - managers. - - For single-manager batches, if an invalid operation is - present in this group of operations then the - previously applied operations are backtracked, leaving - the context unchanged, and the following operations - are skipped. Fees attributed to the operations are - collected by the baker nonetheless. - - There may be overlap with - [lib_protocol/test/integration/validate/test_validation_batch.ml]. -*) - -open Protocol -open Alpha_context -open Error_helpers - -let ten_tez = Tez_helpers.of_int 10 - -let gas_limit = Op.Custom_gas (Alpha_context.Gas.Arith.integral_of_int_exn 3000) - -(** Groups ten transactions between the same parties. *) -let test_multiple_transfers () = - let open Lwt_result_syntax in - let* blk, (c1, c2, c3) = Context.init3 () in - let* ops = - List.map_es - (fun _ -> Op.transaction ~gas_limit (B blk) c1 c2 Tez.one) - (1 -- 10) - in - let* operation = Op.combine_operations ~source:c1 (B blk) ops in - let baker_pkh = Context.Contract.pkh c3 in - let* inc = - Incremental.begin_construction ~policy:(By_account baker_pkh) blk - in - let* c1_old_balance = Context.Contract.balance (I inc) c1 in - let* c2_old_balance = Context.Contract.balance (I inc) c2 in - let* inc = Incremental.add_operation inc operation in - let* () = - Assert.balance_was_debited - ~loc:__LOC__ - (I inc) - c1 - c1_old_balance - (Tez_helpers.of_int 10) - in - let* () = - Assert.balance_was_credited - ~loc:__LOC__ - (I inc) - c2 - c2_old_balance - (Tez_helpers.of_int 10) - in - return_unit - -(** Groups ten delegated originations. *) -let test_multiple_origination_and_delegation () = - let open Lwt_result_syntax in - let* blk, (c1, c2) = Context.init2 () in - let n = 10 in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (B blk) - in - let delegate_pkh = Context.Contract.pkh c2 in - (* Deploy n smart contracts with dummy scripts from c1 *) - let* originations = - List.map_es - (fun i -> - Op.contract_origination - ~gas_limit - ~delegate:delegate_pkh - ~counter:(Manager_counter.Internal_for_tests.of_int i) - ~fee:Tez.zero - ~script:Op.dummy_script - ~credit:(Tez_helpers.of_int 10) - (B blk) - c1) - (1 -- n) - in - (* These computed originated contracts are not the ones really created *) - (* We will extract them from the tickets *) - let originations_operations, _ = List.split originations in - let* operation = - Op.combine_operations ~source:c1 (B blk) originations_operations - in - let* inc = Incremental.begin_construction blk in - let* c1_old_balance = Context.Contract.balance (I inc) c1 in - let* inc = Incremental.add_operation inc operation in - (* To retrieve the originated contracts, it is easier to extract them - from the tickets. Else, we could (could we ?) hash each combined - operation individually. *) - let tickets = Incremental.rev_tickets inc in - let open Apply_results in - let tickets = - List.fold_left - (fun acc -> function - | No_operation_metadata -> assert false - | Operation_metadata {contents} -> - to_list (Contents_result_list contents) @ acc) - [] - tickets - |> List.rev - in - let new_contracts = - List.map - (function - | Contents_result - (Manager_operation_result - { - operation_result = - Applied (Origination_result {originated_contracts = [h]; _}); - _; - }) -> - h - | _ -> assert false) - tickets - in - (* Previous balance - (Credit (n * 10tz) + Origination cost (n tz)) *) - let*? origination_burn = - Tez_helpers.(cost_per_byte *? Int64.of_int origination_size) - in - let*? origination_total_cost = - Tez_helpers.(origination_burn *? Int64.of_int n) - in - let*? t = Tez_helpers.( *? ) Op.dummy_script_cost 10L in - let*? t = Tez_helpers.( +? ) (Tez_helpers.of_int (10 * n)) t in - let*? total_cost = Tez_helpers.( +? ) origination_total_cost t in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I inc) c1 c1_old_balance total_cost - in - List.iter_es - (fun c -> - let c = Contract.Originated c in - Assert.balance_is ~loc:__LOC__ (I inc) c (Tez_helpers.of_int 10)) - new_contracts - -let expect_apply_failure = - let open Lwt_result_syntax in - function - | Environment.Ecoproto_error err :: _ -> - Assert.test_error_encodings err ; - let error_info = - Error_monad.find_info_of_error (Environment.wrap_tzerror err) - in - if error_info.title = "Balance too low" then return_unit - else failwith "unexpected error" - | _ -> failwith "balance too low should fail" - -(** Groups three operations, the middle one failing. - Checks that the receipt is consistent. - Variant without fees. *) -let test_failing_operation_in_the_middle () = - let open Lwt_result_syntax in - let* blk, (c1, c2) = Context.init2 () in - let* op1 = Op.transaction ~gas_limit ~fee:Tez.zero (B blk) c1 c2 Tez.one in - let* op2 = - Op.transaction ~gas_limit ~fee:Tez.zero (B blk) c1 c2 Tez_helpers.max_tez - in - let* op3 = Op.transaction ~gas_limit ~fee:Tez.zero (B blk) c1 c2 Tez.one in - let operations = [op1; op2; op3] in - let* operation = Op.combine_operations ~source:c1 (B blk) operations in - let* inc = Incremental.begin_construction blk in - let* c1_old_balance = Context.Contract.balance (I inc) c1 in - let* c2_old_balance = Context.Contract.balance (I inc) c2 in - let* inc = Incremental.add_operation ~expect_apply_failure inc operation in - let tickets = Incremental.rev_tickets inc in - let open Apply_results in - let tickets = - List.fold_left - (fun acc -> function - | No_operation_metadata -> assert false - | Operation_metadata {contents} -> - to_list (Contents_result_list contents) @ acc) - [] - tickets - in - (match tickets with - | Contents_result - (Manager_operation_result {operation_result = Backtracked _; _}) - :: Contents_result - (Manager_operation_result {operation_result = Failed (_, trace); _}) - :: Contents_result - (Manager_operation_result {operation_result = Skipped _; _}) - :: _ -> - let trace_string = - Format.asprintf "%a" Environment.Error_monad.pp_trace trace - in - let expect = - Format.asprintf "Balance of contract %a too low" Context.Contract.pp c1 - in - assert (Astring.String.is_infix ~affix:expect trace_string) - | _ -> assert false) ; - let* () = Assert.balance_is ~loc:__LOC__ (I inc) c1 c1_old_balance in - let* () = Assert.balance_is ~loc:__LOC__ (I inc) c2 c2_old_balance in - return_unit - -(** Groups three operations, the middle one failing. - Checks that the receipt is consistent. - Variant with fees, that should be spent even in case of failure. *) -let test_failing_operation_in_the_middle_with_fees () = - let open Lwt_result_syntax in - let* blk, (c1, c2) = Context.init2 () in - let* op1 = Op.transaction ~fee:Tez.one (B blk) c1 c2 Tez.one in - let* op2 = Op.transaction ~fee:Tez.one (B blk) c1 c2 Tez_helpers.max_tez in - let* op3 = Op.transaction ~fee:Tez.one (B blk) c1 c2 Tez.one in - let operations = [op1; op2; op3] in - let* operation = Op.combine_operations ~source:c1 (B blk) operations in - let* inc = Incremental.begin_construction blk in - let* c1_old_balance = Context.Contract.balance (I inc) c1 in - let* c2_old_balance = Context.Contract.balance (I inc) c2 in - let* inc = Incremental.add_operation ~expect_apply_failure inc operation in - let tickets = Incremental.rev_tickets inc in - let open Apply_results in - let tickets = - List.fold_left - (fun acc -> function - | No_operation_metadata -> assert false - | Operation_metadata {contents} -> - to_list (Contents_result_list contents) @ acc) - [] - tickets - in - (match tickets with - | Contents_result - (Manager_operation_result {operation_result = Backtracked _; _}) - :: Contents_result - (Manager_operation_result {operation_result = Failed (_, trace); _}) - :: Contents_result - (Manager_operation_result {operation_result = Skipped _; _}) - :: _ -> - let trace_string = - Format.asprintf "%a" Environment.Error_monad.pp_trace trace - in - let expect = - Format.asprintf "Balance of contract %a too low" Context.Contract.pp c1 - in - assert (Astring.String.is_infix ~affix:expect trace_string) - | _ -> assert false) ; - (* In the presence of a failure, all the fees are collected. Even for skipped operations. *) - let* () = - Assert.balance_was_debited - ~loc:__LOC__ - (I inc) - c1 - c1_old_balance - (Tez_helpers.of_int 3) - in - let* () = Assert.balance_is ~loc:__LOC__ (I inc) c2 c2_old_balance in - return_unit - -let test_wrong_signature_in_the_middle () = - let open Lwt_result_syntax in - let* blk, (c1, c2) = Context.init2 ~consensus_threshold:0 () in - let* op1 = Op.transaction ~gas_limit ~fee:Tez.one (B blk) c1 c2 Tez.one in - let* op2 = Op.transaction ~gas_limit ~fee:Tez.one (B blk) c2 c1 Tez.one in - (* Make legit transfers, performing reveals *) - let* b = Block.bake ~operations:[op1; op2] blk in - (* Make c2 reach counter 5 *) - let* operation = Op.transaction ~gas_limit ~fee:Tez.one (B b) c2 c1 Tez.one in - let* b = Block.bake ~operation b in - let* operation = Op.transaction ~gas_limit ~fee:Tez.one (B b) c2 c1 Tez.one in - let* b = Block.bake ~operation b in - let* operation = Op.transaction ~gas_limit ~fee:Tez.one (B b) c2 c1 Tez.one in - let* b = Block.bake ~operation b in - (* Cook transactions for actual test *) - let* op1 = Op.transaction ~gas_limit ~fee:Tez.one (B b) c1 c2 Tez.one in - let* op2 = Op.transaction ~gas_limit ~fee:Tez.one (B b) c1 c2 Tez.one in - let* op3 = Op.transaction ~gas_limit ~fee:Tez.one (B b) c1 c2 Tez.one in - let* spurious_operation = - Op.transaction ~gas_limit ~fee:Tez.one (B b) c2 c1 Tez.one - in - let operations = [op1; op2; op3] in - let* operation = - Op.combine_operations ~spurious_operation ~source:c1 (B b) operations - in - let* inc = Incremental.begin_construction b in - let* (_ : Incremental.t) = - let expect_failure = - expect_inconsistent_sources ~loc:__LOC__ ~first_source:c1 ~source:c2 - in - Incremental.add_operation ~expect_failure inc operation - in - return_unit - -let test_inconsistent_counters () = - let open Lwt_result_syntax in - let* blk, (c1, c2) = Context.init2 () in - let* op1 = Op.transaction ~gas_limit ~fee:Tez.one (B blk) c1 c2 Tez.one in - let* op2 = Op.transaction ~gas_limit ~fee:Tez.one (B blk) c2 c1 Tez.one in - (* Make legit transfers, performing reveals *) - let* b = Block.bake ~operations:[op1; op2] blk in - (* Now, counter c1 = counter c2 = 1, Op.transaction builds with counter + 1 *) - let* op1 = - Op.transaction - ~gas_limit - ~fee:Tez.one - (B b) - c1 - c2 - ~counter:(Manager_counter.Internal_for_tests.of_int 1) - Tez.one - in - let* op2 = - Op.transaction - ~gas_limit - ~fee:Tez.one - (B b) - c1 - c2 - ~counter:(Manager_counter.Internal_for_tests.of_int 2) - Tez.one - in - let* op2' = - Op.transaction - ~gas_limit - ~fee:Tez.one - (B b) - c1 - c2 - ~counter:(Manager_counter.Internal_for_tests.of_int 2) - (Tez.of_mutez_exn 5_000L) - in - let* op3 = - Op.transaction - ~gas_limit - ~fee:Tez.one - (B b) - c1 - c2 - ~counter:(Manager_counter.Internal_for_tests.of_int 3) - Tez.one - in - let* op4 = - Op.transaction - ~gas_limit - ~fee:Tez.one - (B b) - c1 - c2 - ~counter:(Manager_counter.Internal_for_tests.of_int 4) - Tez.one - in - (* Canari: Check counters are ok *) - let* op = Op.batch_operations ~source:c1 (B b) [op1; op2; op3; op4] in - let* inc = Incremental.begin_construction b in - let* (_ : Incremental.t) = Incremental.add_operation inc op in - (* Gap in counter in the following op *) - let* op = Op.batch_operations ~source:c1 (B b) [op1; op2; op4] in - let* (_ : Incremental.t) = - let expect_failure = - expect_inconsistent_counters_int - ~loc:__LOC__ - ~source:c1 - ~previous_counter:3 - ~counter:5 - in - Incremental.add_operation ~expect_failure inc op - in - (* Same counter used twice in the following op *) - let* op = Op.batch_operations ~source:c1 (B b) [op1; op2; op2'] in - let* (_ : Incremental.t) = - let expect_failure = - expect_inconsistent_counters_int - ~loc:__LOC__ - ~source:c1 - ~previous_counter:3 - ~counter:3 - in - Incremental.add_operation ~expect_failure inc op - in - return_unit - -let tests = - [ - Tztest.tztest "multiple transfers" `Quick test_multiple_transfers; - Tztest.tztest - "multiple originations and delegations" - `Quick - test_multiple_origination_and_delegation; - Tztest.tztest - "Failing operation in the middle" - `Quick - test_failing_operation_in_the_middle; - Tztest.tztest - "Failing operation in the middle (with fees)" - `Quick - test_failing_operation_in_the_middle_with_fees; - Tztest.tztest - "Failing operation (wrong manager in the middle of a pack)" - `Quick - test_wrong_signature_in_the_middle; - Tztest.tztest - "Inconsistent counters in batch" - `Quick - test_inconsistent_counters; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("combined", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_failing_noop.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_failing_noop.ml deleted file mode 100644 index b175bf25a454f11235892433650041e9e90319b2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_failing_noop.ml +++ /dev/null @@ -1,55 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Metastate AG *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_failing_noop.ml - Subject: The Failing_noop operation was added bearing in mind the - possibility for the end user to sign arbitrary bytes, - encapsulate in the operation, with the absolute garanty that - the signed bytes can't be used for something against the - user's will. The Failing_noop operation always fails when - applied. - *) - -(** try to apply a failing_noop and assert that the operation fails *) -let failing_noop_must_fail_when_injected () = - let open Lwt_result_syntax in - let* blk, contract = Context.init1 () in - let source = Context.Contract.pkh contract in - let* operation = Op.failing_noop (B blk) source "tezos" in - let*! res = Block.bake ~operation blk in - Assert.proto_error ~loc:__LOC__ res (function - | Protocol.Validate_errors.Failing_noop_error -> true - | _ -> false) - -let tests = - [Tztest.tztest "injection fails" `Quick failing_noop_must_fail_when_injected] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("failing_noop operation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_origination.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_origination.ml deleted file mode 100644 index 393701082a38ae4bc982b06107e635867b65db33..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_origination.ml +++ /dev/null @@ -1,360 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (origination) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_origination.ml - Subject: On originating contracts. -*) - -open Protocol -open Alpha_context -open Tez_helpers - -let ten_tez = of_int 10 - -(* The possible fees are: a given credit, an origination burn fee - (constants_repr.default.origination_burn = 257 mtez), a fee that is paid when - creating an originate contract. *) -let total_fees_for_origination ?(fee = Tez.zero) ?(credit = Tez.zero) b = - let open Lwt_result_syntax in - let* {parametric = {origination_size; cost_per_byte; _}; _} = - Context.get_constants (B b) - in - let*? origination_burn = cost_per_byte *? Int64.of_int origination_size in - let*? t = credit +? fee in - let*? t = origination_burn +? t in - let*? total_fee = Op.dummy_script_cost +? t in - return total_fee - -(* [test_origination_balances fee credit spendable delegatable] takes four - optional parameter: fee is the fee that pay if require to create an - originated contract; credit is the amount of tez that will send to this - contract; delegatable default is set to true meaning that this contract is - able to delegate. - - This function creates 2 contracts, one for originating (called source) and - one for baking; get the balance of the source contract, call the - origination operation to create a new originated contract from this contract - with all the possible fees; and check the balance before/after originated - operation valid. - - the source contract has payed all the fees - - the originated has been credited correctly. - Note that we need 2 contracts because in Tenderbake the baker receives the - fees instantaneously. So to see that the fees are subtracted, we need that - the bake is done by another delegated. *) -let test_origination_balances ~loc:_ ?(fee = Tez.zero) ?(credit = Tez.zero) () = - let open Lwt_result_syntax in - let* b, (source, contract_for_bake) = Context.init2 () in - let pkh_for_orig = Context.Contract.pkh source in - let pkh_for_bake = Context.Contract.pkh contract_for_bake in - let* operation, new_contract = - Op.contract_origination (B b) source ~fee ~credit ~script:Op.dummy_script - in - let* total_fee = total_fees_for_origination ~fee ~credit b in - let* b = Block.bake ~operation ~policy:(By_account pkh_for_bake) b in - (* check that after the block has been baked the contract for originating - was debited all the fees *) - let* deposits = Context.Delegate.current_frozen_deposits (B b) pkh_for_orig in - let*? total_fee_plus_deposits = total_fee +? deposits in - let* () = - Assert.balance_was_debited - ~loc:__LOC__ - (B b) - source - Account.default_initial_balance - total_fee_plus_deposits - in - (* check the balance of the originate contract is equal to credit *) - Assert.balance_is ~loc:__LOC__ (B b) new_contract credit - -(** [register_origination fee credit spendable delegatable] takes four - optional parameter: fee for the fee need to be paid if set to - create an originated contract; credit is the amount of tez that - send to this originated contract; spendable default is set to true - meaning that this contract is spendable; delegatable default is - set to true meaning that this contract is able to delegate. *) -let register_origination ?(fee = Tez.zero) ?(credit = Tez.zero) () = - let open Lwt_result_syntax in - let* b, (source, contract_for_bake) = Context.init2 () in - let source_pkh = Context.Contract.pkh source in - let pkh_for_bake = Context.Contract.pkh contract_for_bake in - let* operation, originated = - Op.contract_origination (B b) source ~fee ~credit ~script:Op.dummy_script - in - let* b = Block.bake ~operation ~policy:(By_account pkh_for_bake) b in - (* fee + credit were debited from source *) - let* total_fee = total_fees_for_origination ~fee ~credit b in - let* deposits = Context.Delegate.current_frozen_deposits (B b) source_pkh in - let*? total_fee_plus_deposits = total_fee +? deposits in - let* () = - Assert.balance_was_debited - ~loc:__LOC__ - (B b) - source - Account.default_initial_balance - total_fee_plus_deposits - in - (* originated contract has been credited *) - let+ () = - Assert.balance_was_credited ~loc:__LOC__ (B b) originated Tez.zero credit - in - (* TODO spendable or not and delegatable or not if relevant for some - test. Not the case at the moment, cf. uses of - register_origination *) - (b, source, originated) - -(******************************************************) -(* Tests *) -(******************************************************) - -(** Basic test. A contract is created as well as the newly originated - contract (called from origination operation). The balance - before/after are checked. *) -let test_balances_simple () = test_origination_balances ~loc:__LOC__ () - -(** Same as [balances_simple] but credits 10 tez to the originated - contract (no fees). *) -let test_balances_credit () = - test_origination_balances ~loc:__LOC__ ~credit:ten_tez () - -(** Same as [balances_credit] with 10 tez fees. *) -let test_balances_credit_fee () = - test_origination_balances ~loc:__LOC__ ~credit:(of_int 2) ~fee:ten_tez () - -(** Ask source contract to pay a fee when originating a contract. *) -let test_pay_fee () = - let open Lwt_result_syntax in - let* _b, _contract, _new_contract = - register_origination ~credit:(of_int 2) ~fee:ten_tez () - in - return_unit - -(******************************************************) -(** Errors *) - -(******************************************************) - -(** Create an originate contract where the contract does not have - enough tez to pay for the fee. *) -let test_not_tez_in_contract_to_pay_fee () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 ~consensus_threshold:0 () in - (* transfer everything but one tez from 1 to 2 and check balance of 1 *) - let* balance = Context.Contract.balance (B b) contract_1 in - let*? amount = balance -? Tez.one in - let* operation = Op.transaction (B b) contract_1 contract_2 amount in - let pkh1 = Context.Contract.pkh contract_1 in - let* b = Block.bake ~policy:(Excluding [pkh1]) ~operation b in - let* () = - Assert.balance_was_debited ~loc:__LOC__ (B b) contract_1 balance amount - in - (* use this source contract to create an originate contract where it requires - to pay a fee and add an amount of credit into this new contract *) - let* op, _ = - Op.contract_origination - (B b) - ~fee:ten_tez - ~credit:Tez.one - contract_1 - ~script:Op.dummy_script - in - let* inc = Incremental.begin_construction b in - let*! inc = Incremental.add_operation inc op in - Assert.proto_error_with_info ~loc:__LOC__ inc "Balance too low" - -(* Set the attester of the block as manager/delegate of the originated - account. *) -let register_contract_get_attester () = - let open Lwt_result_syntax in - let* b, contract = Context.init1 () in - let* inc = Incremental.begin_construction b in - let+ account_attester, _slots = Context.get_attester (I inc) in - (inc, contract, account_attester) - -(* Create multiple originated contracts and ask contract to pay the fee. *) -let n_originations n ?credit ?fee () = - let open Lwt_result_syntax in - List.fold_left_es - (fun new_contracts _ -> - let+ _b, _source, new_contract = register_origination ?fee ?credit () in - new_contract :: new_contracts) - [] - (1 -- n) - -(** Create 100 originations. *) -let test_multiple_originations () = - let open Lwt_result_syntax in - let* contracts = n_originations 100 ~credit:(of_int 2) ~fee:ten_tez () in - Assert.equal_int ~loc:__LOC__ (List.length contracts) 100 - -(** Cannot originate two contracts with the same context's counter. *) -let test_counter () = - let open Lwt_result_syntax in - let* b, contract = Context.init1 ~consensus_threshold:0 () in - let* op1, _ = - Op.contract_origination - (B b) - ~credit:Tez.one - contract - ~script:Op.dummy_script - in - let* op2, _ = - Op.contract_origination - (B b) - ~credit:Tez.one - contract - ~script:Op.dummy_script - in - let* b = Block.bake ~operation:op1 b in - let* inc = Incremental.begin_construction b in - let*! res = Incremental.add_operation inc op2 in - Assert.proto_error_with_info - ~loc:__LOC__ - res - "Invalid counter (already used) in a manager operation" - -let test_unparsable_script () = - let open Lwt_result_syntax in - let* b, contract = Context.init1 ~consensus_threshold:0 () in - let open Alpha_context in - (* Craft an ill-typed origination's contract. *) - let pkh = - match contract with Implicit pkh -> pkh | Originated _ -> assert false - in - let dummy_expr = - Script.lazy_expr - Environment.Micheline.(strip_locations (Int ((), Z.of_int 123))) - in - let script = Script.{code = dummy_expr; storage = dummy_expr} in - let origination = Origination {delegate = None; script; credit = Tez.one} in - let gas_limit = - Gas.Arith.integral_of_int_exn - (49_000 - + Michelson_v1_gas.Internal_for_tests.int_cost_of_manager_operation) - in - let op = - Contents_list - (Single - (Manager_operation - { - source = pkh; - fee = Tez.one; - counter = Manager_counter.Internal_for_tests.of_int 1; - operation = origination; - gas_limit; - storage_limit = Z.zero; - })) - in - let encoded_op = - Data_encoding.Binary.to_bytes_exn Operation.contents_list_encoding op - |> Bytes.to_string - in - let* account = Account.find pkh in - let ill_typed_op = - Data_encoding.Binary.of_string_exn - Operation.contents_list_encoding - encoded_op - |> Op.sign account.sk (Context.branch (B b)) - in - (* Ensure that the application fails with [Ill_typed_contract]. *) - let* i = Incremental.begin_construction b in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure:(function - | Environment.Ecoproto_error (Script_tc_errors.Ill_typed_contract _) - :: _ -> - return_unit - | trace -> - failwith - "Expected error trace [Ill_typed_contract], but got:@\n%a" - pp_print_trace - trace) - i - ill_typed_op - in - (* Craft an unparsable lazy expr. *) - let encoded_dummy_expr = - let b = - Data_encoding.Binary.to_bytes_exn Script.lazy_expr_encoding dummy_expr - in - assert (Hex.to_bytes_exn (`Hex "0000000300bb01") = b) ; - Bytes.to_string b - in - let unparsable_dummy_expr = - Hex.to_bytes_exn (`Hex "00000003ffffff") |> Bytes.to_string - in - let unparsable_operation = - let encoded_bad_op = - Re.( - replace_string - ~all:true - (compile (str encoded_dummy_expr)) - encoded_op - ~by:unparsable_dummy_expr) - in - Data_encoding.Binary.of_string_exn - Operation.contents_list_encoding - encoded_bad_op - |> Op.sign account.sk (Context.branch (B b)) - in - (* Ensure that the operation is valid but the application fails with - [Lazy_script_decode]. *) - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure:(function - | [Environment.Ecoproto_error Script.Lazy_script_decode] -> return_unit - | trace -> - failwith - "Expected error trace [Lazy_script_decode], but got:@\n%a" - pp_print_trace - trace) - i - unparsable_operation - in - return_unit - -(******************************************************) - -let tests = - [ - Tztest.tztest "balances_simple" `Quick test_balances_simple; - Tztest.tztest "balances_credit" `Quick test_balances_credit; - Tztest.tztest "balances_credit_fee" `Quick test_balances_credit_fee; - Tztest.tztest "pay_fee" `Quick test_pay_fee; - Tztest.tztest - "not enough tez in contract to pay fee" - `Quick - test_not_tez_in_contract_to_pay_fee; - Tztest.tztest "multiple originations" `Quick test_multiple_originations; - Tztest.tztest "counter" `Quick test_counter; - Tztest.tztest "unparsable script" `Quick test_unparsable_script; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("orgination", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_paid_storage_increase.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_paid_storage_increase.ml deleted file mode 100644 index ef243b832685fa3b1bc7a5d9945fc4ad1ca93301..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_paid_storage_increase.ml +++ /dev/null @@ -1,246 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (increase_paid_storage) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_paid_storage_increase.ml - Subject: On increasing a paid amount of contract storage. -*) - -open Protocol -open Alpha_context - -let ten_tez = Tez_helpers.of_int 10 - -let dummy_script = - "{parameter unit; storage unit; code { CAR ; NIL operation ; PAIR }}" - -let contract_originate block ?(script = dummy_script) - ?(storage = Expr.from_string "Unit") account = - let open Lwt_result_syntax in - let code = Expr.from_string script in - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - let source_contract = account in - let baker = Context.Contract.pkh account in - let* op, dst = - Op.contract_origination_hash (B block) source_contract ~fee:Tez.zero ~script - in - let* inc = - Incremental.begin_construction ~policy:Block.(By_account baker) block - in - let* inc = Incremental.add_operation inc op in - let+ b = Incremental.finalize_block inc in - (b, dst) - -(** [test_balances] runs a simple [increase_paid_storage] and verifies that the - source contract balance is correct and that the storage of the - destination contract has been increased by the right amount. *) -let test_balances ~amount = - let open Lwt_result_wrap_syntax in - let* b, source = Context.init1 () in - let* b, destination = contract_originate b source in - let* inc = Incremental.begin_construction b in - let* balance_before_op = Context.Contract.balance (I inc) source in - let contract_dst = Contract.Originated destination in - let*@ storage_before_op = - Contract.Internal_for_tests.paid_storage_space - (Incremental.alpha_ctxt inc) - contract_dst - in - let* op = - Op.increase_paid_storage ~fee:Tez.zero (I inc) ~source ~destination amount - in - let* inc = Incremental.add_operation inc op in - (* check that after the block has been baked, the source was debited of all - the burned tez *) - let* {parametric = {cost_per_byte; _}; _} = Context.get_constants (I inc) in - let burned_tez = Tez_helpers.(cost_per_byte *! Z.to_int64 amount) in - let* () = - Assert.balance_was_debited - ~loc:__LOC__ - (I inc) - source - balance_before_op - burned_tez - in - (* check that the storage has been increased by the right amount *) - let*@ storage = - Contract.Internal_for_tests.paid_storage_space - (Incremental.alpha_ctxt inc) - contract_dst - in - let storage_minus_amount = Z.sub storage amount in - Assert.equal_int - ~loc:__LOC__ - (Z.to_int storage_before_op) - (Z.to_int storage_minus_amount) - -(******************************************************) -(* Tests *) -(******************************************************) - -(** Basic test. We test balances in simple cases. *) -let test_balances_simple () = test_balances ~amount:(Z.of_int 100) - -(******************************************************) -(* Errors *) -(******************************************************) - -(** We test the operation when the amount given is null. *) -let test_null_amount () = - let open Lwt_result_syntax in - let*! result = test_balances ~amount:Z.zero in - Assert.proto_error ~loc:__LOC__ result (function - | Fees_storage.Negative_storage_input -> true - | _ -> false) - -(** We test the operation when the amount given is negative. *) -let test_negative_amount () = - let open Lwt_result_syntax in - let amount = Z.of_int (-10) in - let*! result = test_balances ~amount in - Assert.proto_error ~loc:__LOC__ result (function - | Fees_storage.Negative_storage_input -> true - | _ -> false) - -(** We create an implicit account with not enough tez to pay for the - storage increase. *) -let test_no_tez_to_pay () = - let open Lwt_result_syntax in - let* b, (source, baker, receiver) = Context.init3 ~consensus_threshold:0 () in - let* b, destination = contract_originate b source in - let pkh_for_bake = Context.Contract.pkh baker in - let* inc = - Incremental.begin_construction ~policy:Block.(By_account pkh_for_bake) b - in - let* {parametric = {cost_per_byte; _}; _} = Context.get_constants (I inc) in - let increase_amount = - Z.div (Z.of_int 2_000_000) (Z.of_int64 (Tez.to_mutez cost_per_byte)) - in - let* balance = Context.Contract.balance (I inc) source in - let*? tez_to_substract = Tez_helpers.(balance -? Tez.one) in - let* op = - Op.transaction (I inc) ~fee:Tez.zero source receiver tez_to_substract - in - let* inc = Incremental.add_operation inc op in - let* b = Incremental.finalize_block inc in - let* inc = - Incremental.begin_construction ~policy:Block.(By_account pkh_for_bake) b - in - let* op = - Op.increase_paid_storage (I inc) ~source ~destination increase_amount - in - let*! inc = Incremental.add_operation inc op in - Assert.proto_error ~loc:__LOC__ inc (function - | Fees_storage.Cannot_pay_storage_fee -> true - | _ -> false) - -(** To test when there is no smart contract at the address given. *) -let test_no_contract () = - let open Lwt_result_syntax in - let* b, source = Context.init1 () in - let* inc = Incremental.begin_construction b in - let destination = Contract_helpers.fake_KT1 in - let* op = Op.increase_paid_storage (I inc) ~source ~destination Z.zero in - let*! inc = Incremental.add_operation inc op in - Assert.proto_error ~loc:__LOC__ inc (function - | Raw_context.Storage_error (Missing_key (_, Raw_context.Get)) -> true - | _ -> false) - -(** To test if the increase in storage is effective. *) -let test_effectiveness () = - let open Lwt_result_syntax in - let* b, (source, _contract_source) = - Context.init2 ~consensus_threshold:0 () - in - let script = - "{parameter unit; storage int; code { CDR ; PUSH int 65536 ; MUL ; NIL \ - operation ; PAIR }}" - in - let storage = - Tezos_micheline.Micheline.strip_locations (Expr_common.int Z.one) - in - let* b, destination = contract_originate ~script ~storage b source in - let* inc = Incremental.begin_construction b in - (* We ensure that the transaction can't be made with a 0 burn cap. *) - let contract_dst = Contract.Originated destination in - let* op = - Op.transaction - ~storage_limit:Z.zero - ~fee:Tez.zero - (I inc) - source - contract_dst - Tez.zero - in - let*! inc_test = Incremental.add_operation inc op in - let* () = - Assert.proto_error ~loc:__LOC__ inc_test (function - | Fees.Operation_quota_exceeded -> true - | _ -> false) - in - let* b = Incremental.finalize_block inc in - let* inc = Incremental.begin_construction b in - let* op = - Op.increase_paid_storage - (I inc) - ~fee:Tez.zero - ~source - ~destination - (Z.of_int 10) - in - let* inc = Incremental.add_operation inc op in - let* b = Incremental.finalize_block inc in - let* inc = Incremental.begin_construction b in - (* We test the same transaction to see if increase_paid_storage worked. *) - let* op = - Op.transaction - ~storage_limit:Z.zero - ~fee:Tez.zero - (I inc) - source - contract_dst - Tez.zero - in - let+ (_inc : Incremental.t) = Incremental.add_operation inc op in - () - -let tests = - [ - Tztest.tztest "balances simple" `Quick test_balances_simple; - Tztest.tztest "null amount" `Quick test_null_amount; - Tztest.tztest "negative amount" `Quick test_negative_amount; - Tztest.tztest "not enough tez to pay" `Quick test_no_tez_to_pay; - Tztest.tztest "no contract to bump its paid storage" `Quick test_no_contract; - Tztest.tztest "effectiveness" `Quick test_effectiveness; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("paid storage increase", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_reveal.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_reveal.ml deleted file mode 100644 index ffd96c441d8ea49e8b8355460e22edf885ee30c3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_reveal.ml +++ /dev/null @@ -1,805 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2022 Nomadic Labs. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (revelation) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_reveal.ml - Subject: On the reveal operation. -*) - -(** Protocol integration tests for the [Reveal] operation. *) - -open Protocol -open Alpha_context -open Tez_helpers -open Error_helpers - -let ten_tez = of_int 10 - -let test_simple_reveal () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Alpha_context.Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then Stdlib.failwith "Unexpected revelation" - in - (* Reveal the contract *) - let* operation = Op.revelation (B blk) new_c.pk in - let* blk = Block.bake blk ~operation in - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if not is_revealed then Stdlib.failwith "New contract revelation failed." - -let test_empty_account_on_reveal () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Alpha_context.Contract.Implicit new_c.pkh in - let amount = Tez.one_mutez in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract amount in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expecting fresh pkh" - in - (* Reveal the contract *) - let* operation = Op.revelation ~fee:amount (B blk) new_c.pk in - let* inc = Incremental.begin_construction blk in - let expect_apply_failure = function - | [ - Environment.Ecoproto_error (Contract_storage.Empty_implicit_contract pkh); - ] - when pkh = new_c.pkh -> - return_unit - | _ -> assert false - in - let* inc = Incremental.add_operation ~expect_apply_failure inc operation in - let* balance = Context.Contract.balance (I inc) new_contract in - let* () = Assert.equal_tez ~loc:__LOC__ balance Tez.zero in - let+ is_revealed = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - if is_revealed then - Stdlib.failwith "Empty account still exists and is revealed." - -let test_not_enough_funds_for_reveal () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 () in - let new_c = Account.new_account () in - let new_contract = Alpha_context.Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one_mutez in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then Stdlib.failwith "Unexpected revelation" - in - (* Reveal the contract *) - let* operation = Op.revelation ~fee:Tez.fifty_cents (B blk) new_c.pk in - let*! res = Block.bake blk ~operation in - Assert.proto_error_with_info ~loc:__LOC__ res "Balance too low" - -let test_transfer_fees_emptying_after_reveal_batched () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 () in - let new_c = Account.new_account () in - let new_contract = Alpha_context.Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* inc = Incremental.begin_construction blk in - let* reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* tmp_inc = Incremental.add_operation inc reveal in - let* transaction = - Op.transaction ~fee:Tez.one (I tmp_inc) new_contract c Tez.one - in - let* op = - Op.batch_operations ~source:new_contract (I inc) [reveal; transaction] - in - let expect_apply_failure = function - | [ - Environment.Ecoproto_error (Contract_storage.Empty_implicit_contract pkh); - ] - when pkh = new_c.pkh -> - return_unit - | _ -> assert false - in - let* (_inc : Incremental.t) = - Incremental.add_operation ~expect_apply_failure inc op - in - return_unit - -(* We assert that the changes introduced in !5182, splitting the - application of Reveal operations into a pre-checking and - an application phase, do not allow to forge dishonest revelations. *) -let test_reveal_with_fake_account () = - let open Lwt_result_syntax in - let* blk, bootstrap = Context.init1 ~consensus_threshold:0 () in - (* Create two fresh, unrevealed, accounts a and b. *) - let account_a = Account.new_account () in - let a_pkh = account_a.pkh in - let a_contract = Contract.Implicit a_pkh in - let account_b = Account.new_account () in - let b_pkh = account_b.pkh in - let b_contract = Contract.Implicit b_pkh in - (* Assert a and b are fresh.*) - (* TODO tezos/tezos#2996 - - These preambles are too verbose and boilerplate. We should factor - out revealing fresh unrevealed accounts. *) - let* () = - when_ (Signature.Public_key_hash.equal a_pkh b_pkh) (fun () -> - failwith - "Expected different pkhs: got %a %a" - Signature.Public_key_hash.pp - a_pkh - Signature.Public_key_hash.pp - b_pkh) - in - let* oa = Op.transaction (B blk) bootstrap a_contract Tez.one in - let* ob = Op.transaction (B blk) bootstrap b_contract Tez.one in - let* batch = - Op.batch_operations - ~recompute_counters:true - ~source:bootstrap - (B blk) - [oa; ob] - in - let* b = Block.bake blk ~operation:batch in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) a_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) b_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - (* get initial balance of account_a *) - let* a_balance_before = Context.Contract.balance (B b) a_contract in - (* We will attempt to forge a reveal with a fake account that - impersonates account_a but uses account_b's public and secret - keys, e.g. - - fake_a = Account.{pkh = account_a.pkh; pk = account_b.pk; sk = - account_b.sk} - - and we will attempt to reveal the public key of b with a's - pkh. This operation should fail without updating account_a's - balance *) - let* operation = - Op.revelation ~fee:Tez.one_mutez ~forge_pkh:(Some a_pkh) (B b) account_b.pk - in - let* i = Incremental.begin_construction b in - let* i = - Incremental.add_operation - ~expect_failure:(function - | [ - Environment.Ecoproto_error - (Contract_manager_storage.Inconsistent_hash _); - ] -> - return_unit - | errs -> - failwith - "Expected an Contract_manager_storage.Inconsistent_hash error \ - but got %a" - Error_monad.pp_print_trace - errs) - i - operation - in - let* a_balance_after = Context.Contract.balance (I i) a_contract in - unless (Tez.equal a_balance_after a_balance_before) (fun () -> - failwith - "Balance of contract_a should have not changed: expected %atz, got %atz" - Tez.pp - a_balance_before - Tez.pp - a_balance_after) - -(* On the following test, we create an account a, fund it, reveal it, - and get its balance. Then we attempt to forge a reveal for another - account b, using a's pkh. *) -let test_reveal_with_fake_account_already_revealed () = - let open Lwt_result_syntax in - let* blk, bootstrap = Context.init1 ~consensus_threshold:0 () in - (* Create two fresh, unrevealed, accounts a and b. *) - let account_a = Account.new_account () in - let a_pkh = account_a.pkh in - let a_contract = Contract.Implicit a_pkh in - let account_b = Account.new_account () in - let b_pkh = account_b.pkh in - let b_contract = Contract.Implicit b_pkh in - (* Assert a and b are fresh.*) - (* TODO tezos/tezos#2996 - - These preambles are too verbose and boilerplate. We should factor - out revealing fresh unrevealed accounts. *) - let* () = - when_ (Signature.Public_key_hash.equal a_pkh b_pkh) (fun () -> - failwith - "Expected different pkhs: got %a %a" - Signature.Public_key_hash.pp - a_pkh - Signature.Public_key_hash.pp - b_pkh) - in - let* oa = Op.transaction (B blk) bootstrap a_contract Tez.one in - let* ob = Op.transaction (B blk) bootstrap b_contract Tez.one in - let* batch = - Op.batch_operations - ~recompute_counters:true - ~source:bootstrap - (B blk) - [oa; ob] - in - let* b = Block.bake blk ~operation:batch in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) a_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) b_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - (* We first reveal a in a block *) - let* operation = Op.revelation ~fee:Tez.one_mutez (B b) account_a.pk in - let* b = Block.bake ~operation b in - let* a_balance_before = Context.Contract.balance (B b) a_contract in - (* Reveal the public key of b while impersonating account_a. This - operation should fail without updating account_a's balance *) - let* operation = - Op.revelation ~fee:Tez.one_mutez ~forge_pkh:(Some a_pkh) (B b) account_b.pk - in - let* i = Incremental.begin_construction b in - let* i = - Incremental.add_operation - ~expect_failure:(function - | [ - Environment.Ecoproto_error - (Contract_manager_storage.Inconsistent_hash _); - ] -> - return_unit - | errs -> - failwith - "Expected a Previously_revealed_key error but got %a" - Error_monad.pp_print_trace - errs) - i - operation - in - let* a_balance_after = Context.Contract.balance (I i) a_contract in - unless (Tez.equal a_balance_after a_balance_before) (fun () -> - failwith - "Balance of contract_a should have not changed: expected %atz, got %atz" - Tez.pp - a_balance_before - Tez.pp - a_balance_after) - -(* cf: #2386 - - On tezos/tezos!5182 we have reverted the behaviour implemented by - tezos/tezos!587, which explicitly avoided marking reveal operations - as backtracked to reflect the fact that a reveal in a failing batch - did still take effect (cf #338). - - We test that backtracked reveals stay backtracked. *) -let test_backtracked_reveal_in_batch () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* inc = Incremental.begin_construction blk in - let* op_reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* op_transfer = - Op.transaction - ~force_reveal:false - ~fee:Tez.zero - (I inc) - new_contract - new_contract - (Tez.of_mutez_exn 1_000_001L) - in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (I inc) - [op_reveal; op_transfer] - in - let expect_apply_failure = function - | [ - Environment.Ecoproto_error (Contract_storage.Balance_too_low _); - Environment.Ecoproto_error (Tez_repr.Subtraction_underflow _); - ] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - let* inc = - Incremental.add_operation ~expect_apply_failure inc batched_operation - in - (* We assert the manager key is still unrevealed, as the batch has failed *) - let* revelead = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - when_ revelead (fun () -> - failwith "Unexpected contract revelation: reveal was expected to fail") - -(* Asserts that re-revealing an already revealed manager will make the - whole batch fail. *) -let test_already_revealed_manager_in_batch () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expecting fresh pkh" - in - (* Reveal the contract *) - let* operation = Op.revelation (B blk) new_c.pk in - let* blk = Block.bake blk ~operation in - (* We pack a correct batch of operations attempting to re-reveal the contract *) - let* inc = Incremental.begin_construction blk in - let* op_reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* op_transfer = - Op.transaction - ~force_reveal:false - ~fee:Tez.zero - (I inc) - new_contract - new_contract - (Tez.of_mutez_exn 1_000_001L) - in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (B blk) - [op_reveal; op_transfer] - in - let expect_apply_failure = function - | [ - Environment.Ecoproto_error - (Contract_manager_storage.Previously_revealed_key _); - ] -> - return_unit - | _ -> assert false - in - let* inc = - Incremental.add_operation ~expect_apply_failure inc batched_operation - in - (* We assert the manager key is still revealed. *) - let* revelead = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - unless revelead (fun () -> - Stdlib.failwith - "Unexpected unrevelation: failing batch shouldn't unreveal the manager") - -(* cf: #2386 - - We imitate the behaviour of - - https://tzkt.io/ooSocfx3xxzDo7eFyGu6ZDR1svzMrbaJtBikQanXXhwrqMuWfGz - - which provides evidence of a failing reveal with a gas exhaustion - error due to an incorrect gas limit of 0, which still takes effect - as witnessed by the subsequent (reveal-less) transfer - - https://tzkt.io/opBQQJQ5senPP5v8PfPFf4uVQqKRE5RVjbwx8uD4SqeRs2JGcVw - - This showcases a bad separation of concerns between pre-checking - and the application of manager operations per-se within - [Protocol.Apply.apply_operation]. The situation originated because - [precheck_manager_contents_lists] would reveal the manager by - calling [Protocol.Alpha_context.Contract.reveal_manager_key] before - [prepare_apply_manager_operation_content] has consumed the declared - gas. - - With !5182 we have fixed this situation by revealing the manager - contract at application time. The following test isolates the - failing reveal and asserts that the manager is not revealed after - the failing op. - - As of !5506, the reveal operation does not pass precheck - anyway. Unfortunately, this means that this test has lost some of - its original purpose. Fortunately, {!test_empty_account_on_reveal} - offers a similar scenario to what this test was supposed to do: a - reveal fails during application and we check that the contract is - not revealed afterward. *) -let test_no_reveal_when_gas_exhausted () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Fund the contract with a sufficient balance *) - let* operation = - Op.transaction (B blk) c new_contract (Tez.of_mutez_exn 1_000L) - in - (* Create the contract *) - let* blk = Block.bake blk ~operation in - (* Assert that the account has not been revealed yet *) - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - (* We craft a new (bad) reveal operation with a 0 gas_limit *) - let* op = Op.revelation ~fee:Tez.zero ~gas_limit:Zero (B blk) new_c.pk in - let* inc = Incremental.begin_construction blk in - (* The application of this operation is expected to fail with a - {! Protocol.Raw_context.Operation_quota_exceeded} error *) - let expect_failure = function - | [ - Environment.Ecoproto_error - Validate_errors.Manager.Insufficient_gas_for_manager; - Environment.Ecoproto_error Raw_context.Operation_quota_exceeded; - ] -> - return_unit - | _ -> assert false - in - let* inc = Incremental.add_operation ~expect_failure inc op in - (* We assert the manager key is still unrevealed, as the operation has failed *) - let* revelead = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - when_ revelead (fun () -> - failwith "Unexpected revelation: reveal operation failed") - -(* Fix #2774 - - We test that reveals can only succeed if they are placed at the - first position in a batch of manager operations, and that moreover - reveal operations occur uniquely in batches. - - - First, [test_reveal_incorrect_position_in_batch] asserts that a - [[transfer; reveal]] batch where a valid reveal follows another - valid op (different from a reveal, so here a transfer) fails with - an [Apply.Incorrect_reveal_position] error. - - - Second, we test a batch consisting of duplicate (potentially) - valid reveal operations. We assert the second reveal to fail again - with an [Apply.Incorrect_reveal_position] error, and for the first - reveal to be backtracked. - - - Then, we test batches with duplicate reveals which follow a - failing one and we assert again the second reveal fails skipped. We - do this for the 3 different reasons a well-placed reveal might fail - (as tested above): gas exhaustion, insolvency, and emptying the - balance while revealing. -*) -let test_reveal_incorrect_position_in_batch () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* inc = Incremental.begin_construction blk in - let* op_transfer = - Op.transaction - ~force_reveal:false - ~fee:Tez.zero - (I inc) - new_contract - new_contract - (Tez.of_mutez_exn 1L) - in - let* op_reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (I inc) - [op_transfer; op_reveal] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - let* inc = Incremental.add_operation ~expect_failure inc batched_operation in - (* We assert the manager key is still unrevealed, as the operation has failed *) - let* revelead = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - when_ revelead (fun () -> - failwith "Unexpected revelation: reveal operation was expected to fail") - -(* Test that a batch [reveal pk; reveal pk] where the first reveal - succeeds but the second one results in the second one failing, and - then first reveal being backtracked. *) -let test_duplicate_valid_reveals () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* inc = Incremental.begin_construction blk in - let* op_rev1 = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* op_rev2 = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (I inc) - [op_rev1; op_rev2] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - let* inc = Incremental.add_operation ~expect_failure inc batched_operation in - (* We assert the manager key is still unrevealed, as the operation has failed *) - let* revelead = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - when_ revelead (fun () -> - failwith "Unexpected contract revelation: backtracking expected") - -(* Test that a batch [failed_reveal pk; reveal pk] where the first - reveal fails with a gas exhaustion results in the second one - failing due to not being well-placed at the beginnning of the - batch. *) -let test_valid_reveal_after_gas_exhausted_one () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* inc = Incremental.begin_construction blk in - (* We first craft a (bad) reveal operation with a 0 gas_limit *) - let* bad_reveal = - Op.revelation ~fee:Tez.zero ~gas_limit:Zero (B blk) new_c.pk - in - (* While the second is a valid one *) - let* good_reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (I inc) - [bad_reveal; good_reveal] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - let* inc = Incremental.add_operation ~expect_failure inc batched_operation in - (* We assert the manager key is still unrevealed, as the batch has failed *) - let+ revealed = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - if revealed then - Stdlib.failwith "Unexpected contract revelation: no valid reveal in batch" - -(* Test that a batch [failed_reveal pk; reveal pk; transfer] where the - first reveal fails with insufficient funds results in the second - one failing due to not being well-placed at the beginnning of the - batch. We add the trailing transfer to ensure covering all branches - of `check_batch_tail_sanity` in `find_manager_public_key` when - calling {!Apply.check_manager_signature} to verify the manager's pk - while processing the second reveal. *) -let test_valid_reveal_after_insolvent_one () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract Tez.one in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then - Stdlib.failwith "Unexpected revelation: expected fresh pkh" - in - let* inc = Incremental.begin_construction blk in - (* We first craft an insolvent reveal operation *) - let* bad_reveal = Op.revelation ~fee:ten_tez (B blk) new_c.pk in - (* While the second is a free valid one *) - let* good_reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* transfer = Op.transaction ~fee:Tez.zero (I inc) new_contract c Tez.one in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (I inc) - [bad_reveal; good_reveal; transfer] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - let* inc = Incremental.add_operation ~expect_failure inc batched_operation in - (* We assert the manager key is still unrevealed, as the batch has failed *) - let+ revealed = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - if revealed then - Stdlib.failwith "Unexpected contract revelation: no valid reveal in batch" - -(* Test that a batch [failed_reveal pk; reveal pk] where the first - reveal fails with insufficient funds results in the second one - failing due to not being well-placed at the beginnning of the - batch. *) -let test_valid_reveal_after_emptying_balance () = - let open Lwt_result_syntax in - let* blk, c = Context.init1 ~consensus_threshold:0 () in - let new_c = Account.new_account () in - let new_contract = Contract.Implicit new_c.pkh in - let amount = Tez.one_mutez in - (* Create the contract *) - let* operation = Op.transaction (B blk) c new_contract amount in - let* blk = Block.bake blk ~operation in - let* () = - let+ is_revealed = - Context.Contract.is_manager_key_revealed (B blk) new_contract - in - if is_revealed then Stdlib.failwith "Unexpected revelation" - in - let* inc = Incremental.begin_construction blk in - (* Reveal the contract, spending all its balance in fees *) - let* bad_reveal = Op.revelation ~fee:amount (B blk) new_c.pk in - (* While the second is a free valid one *) - let* good_reveal = Op.revelation ~fee:Tez.zero (I inc) new_c.pk in - let* batched_operation = - Op.batch_operations - ~recompute_counters:true - ~source:new_contract - (I inc) - [bad_reveal; good_reveal] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - let* inc = Incremental.add_operation ~expect_failure inc batched_operation in - (* We assert the manager key is still unrevealed, as the batch has failed *) - let+ revealed = - Context.Contract.is_manager_key_revealed (I inc) new_contract - in - if revealed then - Stdlib.failwith "Unexpected contract revelation: no valid reveal in batch" - -let tests = - [ - Tztest.tztest "simple reveal" `Quick test_simple_reveal; - Tztest.tztest "empty account on reveal" `Quick test_empty_account_on_reveal; - Tztest.tztest - "not enough funds for reveal" - `Quick - test_not_enough_funds_for_reveal; - Tztest.tztest - "transfer fees emptying balance after reveal in batch" - `Quick - test_transfer_fees_emptying_after_reveal_batched; - Tztest.tztest - "cannot forge reveal with fake keys and signature" - `Quick - test_reveal_with_fake_account; - Tztest.tztest - "cannot re-reveal an account with fake keys and signature" - `Quick - test_reveal_with_fake_account_already_revealed; - Tztest.tztest - "a backtracked reveal in a batch doesn't take effect" - `Quick - test_backtracked_reveal_in_batch; - Tztest.tztest - "cannot re-reveal a manager in a batch" - `Quick - test_already_revealed_manager_in_batch; - Tztest.tztest - "do not reveal when gas exhausted" - `Quick - test_no_reveal_when_gas_exhausted; - Tztest.tztest - "incorrect reveal position in batch" - `Quick - test_reveal_incorrect_position_in_batch; - Tztest.tztest - "cannot duplicate valid reveals in batch" - `Quick - test_duplicate_valid_reveals; - Tztest.tztest - "cannot batch a good reveal after a gas-exhausted one" - `Quick - test_valid_reveal_after_gas_exhausted_one; - Tztest.tztest - "cannot batch a good reveal after an insolvent one" - `Quick - test_valid_reveal_after_insolvent_one; - Tztest.tztest - "cannot batch a good reveal after one emptying account" - `Quick - test_valid_reveal_after_emptying_balance; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("revelation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_sc_rollup.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_sc_rollup.ml deleted file mode 100644 index 257af9b272861e28694b75aec88a77851efda675..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_sc_rollup.ml +++ /dev/null @@ -1,3837 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Rollup layer 1 logic - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_sc_rollup.ml - Subject: Test smart contract rollup -*) - -open Protocol -open Alpha_context - -exception Sc_rollup_test_error of string - -let err x = Exn (Sc_rollup_test_error x) - -let assert_fails ~loc ?error m = - let open Lwt_result_syntax in - let*! res = m in - match res with - | Ok _ -> Stdlib.failwith "Expected failure" - | Error err_res -> ( - match (err_res, error) with - | Environment.Ecoproto_error err' :: _, Some err when err = err' -> - (* Matched exact error. *) - return_unit - | Environment.Ecoproto_error err' :: _, Some err -> - let msg = - Format.asprintf - "Expected error [%a] but got [%a] at location %s" - Environment.Error_monad.pp - err' - Environment.Error_monad.pp - err - loc - in - Stdlib.failwith msg - | _, Some _ -> - (* Expected a different error. *) - let msg = - Printf.sprintf "Expected a different error at location %s" loc - in - Stdlib.failwith msg - | _, None -> - (* Any error is ok. *) - return_unit) - -let assert_equal_z ~loc x y = - Assert.equal ~loc Z.equal "Compare Z.t" Z.pp_print x y - -let get_game_status_result incr = - match Incremental.rev_tickets incr with - | [] -> - Stdlib.failwith - "Failed to find an applied operation result in the metadata" - | operations -> ( - List.find_map - (function - | Apply_results.Operation_metadata - { - contents = - Single_result - (Manager_operation_result - {operation_result = Applied op; _}); - } -> ( - match op with - | Sc_rollup_refute_result {game_status; _} -> - Some (game_status, `Refute) - | Sc_rollup_timeout_result {game_status; _} -> - Some (game_status, `Timeout) - | _ -> None) - | _ -> None) - operations - |> function - | None -> - Stdlib.failwith - "No operation [Sc_rollup_refute_result] or \ - [Sc_rollup_timeout_result] found" - | Some x -> x) - -let assert_equal_game_status ?game_status actual_game_status = - let open Lwt_result_syntax in - match game_status with - | None -> return_unit - | Some game_status -> - if game_status = actual_game_status then return_unit - else - let msg = - Format.asprintf - "Expected game status [%a] but got [%a]" - Sc_rollup.Game.pp_status - game_status - Sc_rollup.Game.pp_status - actual_game_status - in - Stdlib.failwith msg - -let assert_game_exists incr rollup game_index ~exists = - let open Lwt_result_wrap_syntax in - let ctxt = Incremental.alpha_ctxt incr in - let*@ _ctxt, game_opt = - Sc_rollup.Refutation_storage.find_game ctxt rollup game_index - in - match game_opt with - | Some _ when exists -> return_unit - | Some _ -> Stdlib.failwith "Found game but expected no game." - | None when not exists -> return_unit - | None -> Stdlib.failwith "No game game but expected one." - -let assert_refute_result ?game_status incr rollup game_index = - let open Lwt_result_syntax in - let* () = assert_game_exists incr rollup game_index ~exists:false in - let actual_game_status, op_type = get_game_status_result incr in - assert (op_type = `Refute) ; - assert_equal_game_status ?game_status actual_game_status - -let assert_timeout_result ?game_status incr rollup game_index = - let open Lwt_result_syntax in - let* () = assert_game_exists incr rollup game_index ~exists:false in - let actual_game_status, op_type = get_game_status_result incr in - assert (op_type = `Timeout) ; - assert_equal_game_status ?game_status actual_game_status - -let bake_timeout_period ?timeout_period_in_blocks block = - let open Lwt_result_syntax in - let* timeout_period_in_blocks = - match timeout_period_in_blocks with - | Some v -> return v - | None -> - let* constants = Context.get_constants (B block) in - let Constants.Parametric.{timeout_period_in_blocks; _} = - constants.parametric.sc_rollup - in - return timeout_period_in_blocks - in - Block.bake_n timeout_period_in_blocks block - -(** [context_init tup] initializes a context and returns the created - context and contracts. *) -let context_init ?commitment_period_in_blocks - ?(sc_rollup_challenge_window_in_blocks = 10) - ?sc_rollup_max_active_outbox_levels ?(timeout_period_in_blocks = 10) - ?hard_gas_limit_per_operation ?hard_gas_limit_per_block tup = - Context.init_with_constants_gen - tup - { - Context.default_test_constants with - consensus_threshold = 0; - hard_gas_limit_per_operation = - Option.value - hard_gas_limit_per_operation - ~default:Context.default_test_constants.hard_gas_limit_per_operation; - hard_gas_limit_per_block = - Option.value - hard_gas_limit_per_block - ~default:Context.default_test_constants.hard_gas_limit_per_block; - sc_rollup = - { - Context.default_test_constants.sc_rollup with - arith_pvm_enable = true; - private_enable = true; - challenge_window_in_blocks = sc_rollup_challenge_window_in_blocks; - max_active_outbox_levels = - Option.value - ~default: - Context.default_test_constants.sc_rollup - .max_active_outbox_levels - sc_rollup_max_active_outbox_levels; - commitment_period_in_blocks = - Option.value - ~default: - Context.default_test_constants.sc_rollup - .commitment_period_in_blocks - commitment_period_in_blocks; - timeout_period_in_blocks; - }; - } - -(** [test_disable_arith_pvm_feature_flag ()] tries to originate a Arith smart - rollup when the Arith PVM feature flag is deactivated and checks that it - fails. *) -let test_disable_arith_pvm_feature_flag () = - let open Lwt_result_syntax in - let* b, contract = Context.init1 ~sc_rollup_arith_pvm_enable:false () in - let* i = Incremental.begin_construction b in - let kind = Sc_rollup.Kind.Example_arith in - let* op, _ = Sc_rollup_helpers.origination_op (B b) contract kind in - let expect_failure = function - | Environment.Ecoproto_error - (Validate_errors.Manager.Sc_rollup_arith_pvm_disabled as e) - :: _ -> - Assert.test_error_encodings e ; - return_unit - | _ -> failwith "It should have failed with [Sc_rollup_arith_pvm_disabled]" - in - let* (_ : Incremental.t) = Incremental.add_operation ~expect_failure i op in - return_unit - -(** [test_disable_riscv_pvm_feature_flag ()] tries to originate a Riscv smart - rollup when the Riscv PVM feature flag is deactivated and checks that it - fails. *) -let test_disable_riscv_pvm_feature_flag () = - let open Lwt_result_syntax in - let* b, contract = Context.init1 ~sc_rollup_riscv_pvm_enable:false () in - let* i = Incremental.begin_construction b in - let kind = Sc_rollup.Kind.Riscv in - let* op, _ = Sc_rollup_helpers.origination_op (B b) contract kind in - let expect_failure = function - | Environment.Ecoproto_error - (Validate_errors.Manager.Sc_rollup_riscv_pvm_disabled as e) - :: _ -> - Assert.test_error_encodings e ; - return_unit - | _ -> failwith "It should have failed with [Sc_rollup_riscv_pvm_disabled]" - in - let* (_ : Incremental.t) = Incremental.add_operation ~expect_failure i op in - return_unit - -(** Initializes the context and originates a SCORU. *) -let sc_originate ?boot_sector ?parameters_ty ?whitelist block contract = - let open Lwt_result_syntax in - let kind = Sc_rollup.Kind.Example_arith in - let* operation, rollup = - Sc_rollup_helpers.origination_op - ?boot_sector - ?parameters_ty - ?whitelist - (B block) - contract - kind - in - let* block = Block.bake ~operation block in - return (block, rollup) - -(** Initializes the context and originates a SCORU. *) -let init_and_originate ?boot_sector ?parameters_ty ?commitment_period_in_blocks - ?sc_rollup_challenge_window_in_blocks tup = - let open Lwt_result_syntax in - let* block, contracts = - context_init - ?commitment_period_in_blocks - ?sc_rollup_challenge_window_in_blocks - tup - in - let contract = Context.tup_hd tup contracts in - let* block, rollup = - sc_originate ?boot_sector ?parameters_ty block contract - in - return (block, contracts, rollup) - -let number_of_ticks_exn n = - match Sc_rollup.Number_of_ticks.of_value n with - | Some x -> x - | None -> Stdlib.failwith "Bad Number_of_ticks" - -let next_inbox_level ?predecessor ctxt rollup = - let open Lwt_result_syntax in - let* genesis_info = Context.Sc_rollup.genesis_info ctxt rollup in - let+ constants = Context.get_constants ctxt in - let commitment_freq = - constants.parametric.sc_rollup.commitment_period_in_blocks - in - let pred_level = - Option.fold - ~none:genesis_info.level - ~some:(fun pred -> pred.Sc_rollup.Commitment.inbox_level) - predecessor - in - Raw_level.Internal_for_tests.add pred_level commitment_freq - -let dummy_commitment ?predecessor ?compressed_state ?(number_of_ticks = 3000L) - ?inbox_level ctxt rollup = - let open Lwt_result_syntax in - let* genesis_info = Context.Sc_rollup.genesis_info ctxt rollup in - let predecessor_hash = - match predecessor with - | Some pred -> Sc_rollup.Commitment.hash_uncarbonated pred - | None -> genesis_info.commitment_hash - in - let* compressed_state = - match compressed_state with - | None -> - let* {compressed_state; _} = - Context.Sc_rollup.commitment ctxt rollup predecessor_hash - in - return compressed_state - | Some compressed_state -> return compressed_state - in - let* inbox_level = - match inbox_level with - | Some inbox_level -> return inbox_level - | None -> next_inbox_level ?predecessor ctxt rollup - in - return - Sc_rollup.Commitment. - { - predecessor = predecessor_hash; - inbox_level; - number_of_ticks = number_of_ticks_exn number_of_ticks; - compressed_state; - } - -(* Bakes blocks to satisfy requirement of next_commitment.inbox_level <= current_level *) -let bake_blocks_until_next_inbox_level ?predecessor block rollup = - let open Lwt_result_syntax in - let* next_level = next_inbox_level ?predecessor (B block) rollup in - Block.bake_until_level next_level block - -let bake_blocks_until_inbox_level block commitment = - Block.bake_until_level commitment.Sc_rollup.Commitment.inbox_level block - -let publish_op_and_dummy_commitment ~sender ?compressed_state ?predecessor - rollup block = - let open Lwt_result_syntax in - let compressed_state = - Option.map - (fun s -> - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string [s])) - compressed_state - in - let* commitment = - dummy_commitment ?compressed_state ?predecessor (B block) rollup - in - let* publish = Op.sc_rollup_publish (B block) sender rollup commitment in - return (publish, commitment) - -(* Verify that parameters and unparsed parameters match. *) -let verify_params ctxt ~parameters_ty ~parameters ~unparsed_parameters = - let open Lwt_result_wrap_syntax in - let show exp = Expr.to_string @@ exp in - let unparse ctxt parameters = - Script_ir_translator.unparse_data - ctxt - Script_ir_unparser.Optimized - parameters_ty - parameters - in - let*@ unparsed_parameters, ctxt = - (* Make sure we can parse the unparsed-parameters with the given parameters - type. *) - let* parsed_unparsed_parameters, ctxt = - Script_ir_translator.parse_data - ctxt - ~elab_conf:Script_ir_translator_config.(make ~legacy:true ()) - ~allow_forged_tickets:true - ~allow_forged_lazy_storage_id:true - parameters_ty - (Environment.Micheline.root unparsed_parameters) - in - (* Un-parse again to get back to Micheline. *) - unparse ctxt parsed_unparsed_parameters - in - (* Un-parse the parsed parameters. *) - let*@ expected_unparsed_parameters, _ctxt = unparse ctxt parameters in - (* Verify that both version match. *) - Assert.equal_string - ~loc:__LOC__ - (show unparsed_parameters) - (show expected_unparsed_parameters) - -(* Verify that the given list of transactions and transaction operations match. - Also checks each transaction operation for type mismatches etc. *) -let verify_execute_outbox_message_operations ctxt rollup ~loc ~operations - ~expected_transactions = - let open Lwt_result_wrap_syntax in - let* incr = - Context.( - match ctxt with - | I incr -> return incr - | B block -> Incremental.begin_construction block) - in - let alpha_ctxt = Incremental.alpha_ctxt incr in - let validate_and_extract_operation_params ctxt op = - match op with - | Script_typed_ir.Internal_operation - { - sender = op_sender; - operation = - Transaction_to_smart_contract - { - destination; - amount; - entrypoint; - location = _; - parameters_ty; - parameters; - unparsed_parameters; - }; - nonce = _; - } -> - (* Check that the parameters match. *) - let* () = - verify_params ctxt ~parameters_ty ~parameters ~unparsed_parameters - in - let* () = - (* Check that the senders match. *) - Assert.equal_string - ~loc - (Destination.to_b58check (Sc_rollup rollup)) - (Destination.to_b58check op_sender) - in - (* Assert that the amount is 0. *) - let* () = Assert.equal_tez ~loc amount Tez.zero in - (* Load the arg-type and entrypoints of the destination script. *) - let* ( Script_ir_translator.Ex_script (Script {arg_type; entrypoints; _}), - ctxt ) = - let*@ ctxt, _cache_key, cached = Script_cache.find ctxt destination in - match cached with - | Some (_script, ex_script) -> return (ex_script, ctxt) - | None -> failwith "Could not load script at %s" loc - in - (* Find the script parameters ty of the script. *) - let*?@ entrypoint_res, ctxt = - Gas_monad.run - ctxt - (Script_ir_translator.find_entrypoint - ~error_details:(Informative ()) - arg_type - entrypoints - entrypoint) - in - let*?@ (Ex_ty_cstr {ty = script_parameters_ty; _}) = entrypoint_res in - (* Check that the script parameters type matches the one from the - transaction. *) - let*?@ ctxt = - let open Result_syntax in - let* eq, ctxt = - Gas_monad.run - ctxt - (Script_ir_translator.ty_eq - ~error_details:(Informative (-1)) - script_parameters_ty - parameters_ty) - in - let+ Eq = eq in - ctxt - in - return (ctxt, (destination, entrypoint, unparsed_parameters)) - | _ -> - failwith - "Expected an internal transaction operation to a smart-contract, \ - called from %s" - loc - in - let* _alpha_ctxt, operations_data = - List.fold_left_map_es - validate_and_extract_operation_params - alpha_ctxt - operations - in - let compare_data (d1, e1, p1) (d2, e2, p2) = - Contract_hash.equal d1 d2 - && Entrypoint_repr.(e1 = e2) - && String.equal (Expr.to_string p1) (Expr.to_string p2) - in - let pp_data fmt (d, e, p) = - Format.fprintf - fmt - "(%a, %a, %s)" - Contract_hash.pp - d - Entrypoint_repr.pp - e - (Expr.to_string p) - in - let transactions_data = - let data_of_transaction (contract, entrypoint, params) = - let params = Expr.from_string params in - (contract, entrypoint, params) - in - List.map data_of_transaction expected_transactions - in - Assert.assert_equal_list - ~loc - compare_data - "Compare operations data" - pp_data - operations_data - transactions_data - -let verify_whitelist ~loc ~expected_whitelist rollup ctxt = - let open Lwt_result_syntax in - let* found_whitelist = Context.Sc_rollup.whitelist ctxt rollup in - let sort_whitelist = - Option.map (List.sort Signature.Public_key_hash.compare) - in - let found_sorted = sort_whitelist found_whitelist in - let expected_sorted = sort_whitelist expected_whitelist in - Assert.(assert_equal_list_opt ~loc Signature.Public_key_hash.equal) - "whitelist" - Signature.Public_key_hash.pp - expected_sorted - found_sorted - -(* Helper functions to create output used for executing outbox messages. *) -let make_output ~outbox_level ~message_index message = - let outbox_level = Raw_level.of_int32_exn (Int32.of_int outbox_level) in - let message_index = Z.of_int message_index in - Sc_rollup.{outbox_level; message_index; message} - -let make_transaction_output ~outbox_level ~message_index transactions = - let transactions = - List.map - (fun (destination, entrypoint, parameters) -> - let unparsed_parameters = Expr.from_string parameters in - {Sc_rollup.Outbox.Message.unparsed_parameters; destination; entrypoint}) - transactions - in - let message = - Sc_rollup.Outbox.Message.Atomic_transaction_batch {transactions} - in - make_output ~outbox_level ~message_index message - -let make_whitelist_update_output ~outbox_level ~message_index - (whitelist_opt : Sc_rollup.Whitelist.t option) = - make_output ~outbox_level ~message_index - @@ Sc_rollup.Outbox.Message.Whitelist_update whitelist_opt - -let string_ticket_token ticketer content = - let open Lwt_result_wrap_syntax in - let contents = - Result.value_f ~default:(fun _ -> assert false) - @@ Script_string.of_string content - in - let*?@ ticketer = Contract.of_b58check ticketer in - return - (Ticket_token.Ex_token - {ticketer; contents_type = Script_typed_ir.string_t; contents}) - -let originate_contract block ~script ~baker ~storage ~source_contract = - let open Lwt_result_syntax in - let* contract, _, block = - Contract_helpers.originate_contract_from_string_hash - ~script - ~storage - ~source_contract - ~baker - block - in - return (contract, block) - -let hash_commitment commitment = - Sc_rollup.Commitment.hash_uncarbonated commitment - -let publish_commitment source rollup block commitment = - let open Lwt_result_syntax in - let* block = bake_blocks_until_inbox_level block commitment in - let* operation = Op.sc_rollup_publish (B block) source rollup commitment in - Block.bake ~operation block - -let publish_commitments block source rollup commitments = - List.fold_left_es (publish_commitment source rollup) block commitments - -let cement_commitment ?challenge_window_in_blocks block rollup staker = - let open Lwt_result_syntax in - let* challenge_window_in_blocks = - match challenge_window_in_blocks with - | Some x -> return x - | None -> - let* constants = Context.get_constants (B block) in - return constants.parametric.sc_rollup.challenge_window_in_blocks - in - let* block = Block.bake_n challenge_window_in_blocks block in - let* cement = Op.sc_rollup_cement (B block) staker rollup in - Block.bake ~operation:cement block - -let cement_commitments ?challenge_window_in_blocks block rollup staker hashes = - (* [hashes] is useful to know the number of commitments we expect to cement. *) - List.fold_left_es - (fun block _hash -> - cement_commitment ?challenge_window_in_blocks block rollup staker) - block - hashes - -let publish_and_cement_commitment block ~originator rollup commitment = - let open Lwt_result_wrap_syntax in - let* block = publish_commitment originator rollup block commitment in - let* constants = Context.get_constants (B block) in - let* block = - Block.bake_n constants.parametric.sc_rollup.challenge_window_in_blocks block - in - let hash = hash_commitment commitment in - let* cement_op = Op.sc_rollup_cement (B block) originator rollup in - let* block = Block.bake ~operation:cement_op block in - return (hash, block) - -let publish_and_cement_commitments block ~originator rollup commitments = - let open Lwt_result_syntax in - List.fold_left_es - (fun block commitment -> - let* _hash, block = - publish_and_cement_commitment block ~originator rollup commitment - in - return block) - block - commitments - -let publish_and_cement_dummy_commitment block ~originator rollup = - let open Lwt_result_syntax in - let* commitment = dummy_commitment (B block) rollup in - publish_and_cement_commitment block ~originator rollup commitment - -(* Publishes repeated cemented commitments until a commitment with - [inbox_level >= min_inbox_level] is found (such a commitment - is also published and cemented). *) -let publish_commitments_until_min_inbox_level block rollup ~originator - ~min_inbox_level ~cemented_commitment_hash ~cemented_commitment = - let rec aux block hash ({Sc_rollup.Commitment.inbox_level; _} as commitment) = - let open Lwt_result_syntax in - let level = Raw_level.to_int32 inbox_level in - if level >= Int32.of_int min_inbox_level then return (hash, block) - else - let* commitment = - dummy_commitment ~predecessor:commitment (B block) rollup - in - let* hash, block = - publish_and_cement_commitment block ~originator rollup commitment - in - aux block hash commitment - in - aux block cemented_commitment_hash cemented_commitment - -let adjust_ticket_token_balance_of_rollup block rollup ticket_token ~delta = - let open Lwt_result_syntax in - let* incr = Incremental.begin_construction block in - let alpha_ctxt = Incremental.alpha_ctxt incr in - let* hash, alpha_ctxt = - Ticket_helpers.adjust_ticket_token_balance - alpha_ctxt - (Destination.Sc_rollup rollup) - ticket_token - ~delta - in - let incr = Incremental.set_alpha_ctxt incr alpha_ctxt in - let* block = Incremental.finalize_block incr in - return (hash, block) - -(** A version of execute outbox message that output ignores proof validation. *) -let execute_outbox_message_without_proof_validation block rollup - ~cemented_commitment outbox_message = - let open Lwt_result_wrap_syntax in - let* incr = Incremental.begin_construction block in - let*@ res, alpha_ctxt = - Sc_rollup_operations.Internal_for_tests.execute_outbox_message - (Incremental.alpha_ctxt incr) - ~validate_and_decode_output_proof:(fun ctxt - ~cemented_commitment:_ - _rollup - ~output_proof:_ -> - return (outbox_message, ctxt)) - rollup - ~cemented_commitment - ~output_proof:"Not used" - in - let incr = Incremental.set_alpha_ctxt incr alpha_ctxt in - let* block = Incremental.finalize_block incr in - return (res, block) - -let execute_outbox_message block ~originator rollup ~output_proof - ~commitment_hash = - let open Lwt_result_syntax in - let* batch_op = - Op.sc_rollup_execute_outbox_message - (B block) - originator - rollup - commitment_hash - ~output_proof - in - Block.bake ~operation:batch_op block - -let assert_ticket_token_balance ~loc ctxt token owner expected = - let open Lwt_result_wrap_syntax in - let* incr = - Context.( - match ctxt with - | I incr -> return incr - | B block -> Incremental.begin_construction block) - in - let alpha_ctxt = Incremental.alpha_ctxt incr in - let*@ balance, _ = - let* key_hash, ctxt = - Ticket_balance_key.of_ex_token alpha_ctxt ~owner token - in - Ticket_balance.get_balance ctxt key_hash - in - match (balance, expected) with - | Some b, Some e -> Assert.equal_int ~loc (Z.to_int b) e - | Some b, None -> - failwith "%s: Expected no balance but got some %d" loc (Z.to_int b) - | None, Some b -> failwith "%s: Expected balance %d but got none" loc b - | None, None -> return_unit - -(** Assert that the computation fails with the given message. *) -let assert_fails_with ~__LOC__ k expected_err = - let open Lwt_result_syntax in - let*! res = k in - Assert.proto_error ~loc:__LOC__ res (( = ) expected_err) - -let verify_can_publish_commit ~__LOC__ ~succeed rollup account block = - let open Lwt_result_syntax in - let* dummy_commitment = dummy_commitment (B block) rollup in - let block_res = publish_commitment account rollup block dummy_commitment in - if succeed then - let* _block = block_res in - return_unit - else - assert_fails_with - ~__LOC__ - block_res - Sc_rollup_errors.Sc_rollup_staker_not_in_whitelist - -type balances = {liquid : Tez.t; frozen : Tez.t} - -let balances ctxt contract = - let open Lwt_result_syntax in - let* liquid = Context.Contract.balance ctxt contract in - let* frozen = Context.Contract.frozen_bonds ctxt contract in - return {liquid; frozen} - -let check_balances_evolution bal_before {liquid; frozen} ~action = - let open Lwt_result_wrap_syntax in - let* {liquid = expected_liquid; frozen = expected_frozen} = - match action with - | `Freeze amount -> - let*?@ liquid = Tez.( -? ) bal_before.liquid amount in - let*?@ frozen = Tez.( +? ) bal_before.frozen amount in - return {liquid; frozen} - | `Unfreeze amount -> - let*?@ liquid = Tez.( +? ) bal_before.liquid amount in - let*?@ frozen = Tez.( -? ) bal_before.frozen amount in - return {liquid; frozen} - in - let* () = Assert.equal_tez ~loc:__LOC__ expected_liquid liquid in - let* () = Assert.equal_tez ~loc:__LOC__ expected_frozen frozen in - return_unit - -(* Generates a list of cemented dummy commitments. *) -let gen_commitments ctxt rollup ~predecessor ~num_commitments = - let open Lwt_result_syntax in - let* constants = Context.get_constants ctxt in - let delta = constants.parametric.sc_rollup.commitment_period_in_blocks in - let rec aux predecessor n acc = - if n <= 0 then return (List.rev acc) - else - let inbox_level = - Raw_level.Internal_for_tests.add - predecessor.Sc_rollup.Commitment.inbox_level - delta - in - let* commitment = - dummy_commitment - ~predecessor - ~inbox_level - ~compressed_state:predecessor.compressed_state - ctxt - rollup - in - let hash = Sc_rollup.Commitment.hash_uncarbonated commitment in - aux commitment (n - 1) ((commitment, hash) :: acc) - in - aux predecessor num_commitments [] - -let attempt_to_recover_bond ?policy block contract ?staker rollup = - let open Lwt_result_syntax in - (* Recover its own bond by default. *) - let staker = - match staker with - | Some staker -> staker - | None -> Account.pkh_of_contract_exn contract - in - let* recover_bond_op = - Op.sc_rollup_recover_bond (B block) contract rollup staker - in - Block.bake ?policy ~operation:recover_bond_op block - -let recover_bond_not_lcc block contract rollup = - assert_fails_with - ~__LOC__ - (attempt_to_recover_bond block contract rollup) - Sc_rollup_errors.Sc_rollup_not_staked_on_lcc_or_ancestor - -let recover_bond_not_staked block contract rollup = - assert_fails_with - ~__LOC__ - (attempt_to_recover_bond block contract rollup) - Sc_rollup_errors.Sc_rollup_not_staked - -let recover_bond_with_success ?policy block contract rollup = - let open Lwt_result_syntax in - let* bal_before = balances (B block) contract in - let* b = attempt_to_recover_bond ?policy block contract rollup in - let* bal_after = balances (B b) contract in - let* constants = Context.get_constants (B b) in - let* () = - check_balances_evolution - bal_before - bal_after - ~action:(`Unfreeze constants.parametric.sc_rollup.stake_amount) - in - return b - -(** [test_publish_cement_and_recover_bond] creates a rollup, publishes a - commitment and then [challenge_window_in_blocks] blocks later cements - that commitment. - The comitter tries to withdraw stake before and after cementing. Only the - second attempt is expected to succeed. *) -let test_publish_cement_and_recover_bond () = - let open Lwt_result_wrap_syntax in - let* block, contracts, rollup = init_and_originate Context.T2 in - let _, contract = contracts in - let* block = bake_blocks_until_next_inbox_level block rollup in - (* not staked yet *) - let* () = recover_bond_not_staked block contract rollup in - let* c = dummy_commitment (B block) rollup in - let* operation = Op.sc_rollup_publish (B block) contract rollup c in - let* b = Block.bake ~operation block in - let* constants = Context.get_constants (B b) in - let* b = - Block.bake_n constants.parametric.sc_rollup.challenge_window_in_blocks b - in - (* stake not on LCC *) - let* () = recover_bond_not_lcc b contract rollup in - let* cement_op = Op.sc_rollup_cement (B b) contract rollup in - let* b = Block.bake ~operation:cement_op b in - (* recover bond should succeed *) - let* b = - recover_bond_with_success - (* We forbid the stake owner from baker to correctly check the - unfrozen amount below. *) - ~policy:(Excluding [Account.pkh_of_contract_exn contract]) - b - contract - rollup - in - (* not staked anymore *) - let* () = recover_bond_not_staked b contract rollup in - return_unit - -(** [test_publish_fails_on_double_stake] creates a rollup and then - publishes two different commitments with the same staker. We check - that the second publish fails. *) -let test_publish_fails_on_double_stake () = - let open Lwt_result_syntax in - let* block, contracts, rollup = init_and_originate Context.T2 in - let* block = bake_blocks_until_next_inbox_level block rollup in - let _, contract = contracts in - let* commitment1 = dummy_commitment (B block) rollup in - let commitment2 = - {commitment1 with number_of_ticks = number_of_ticks_exn 3001L} - in - let* operation1 = - Op.sc_rollup_publish (B block) contract rollup commitment1 - in - let* block = Block.bake ~operation:operation1 block in - let* operation2 = - Op.sc_rollup_publish (B block) contract rollup commitment2 - in - assert_fails_with - ~__LOC__ - (Block.bake ~operation:operation2 block) - Sc_rollup_errors.Sc_rollup_staker_double_stake - -(** [test_cement_fails_on_conflict] creates a rollup and then publishes - two different commitments. It waits 20 blocks and then attempts to - cement one of the commitments; it checks that this fails because the - commitment is contested. *) -let test_cement_fails_on_conflict () = - let open Lwt_result_wrap_syntax in - let* b, contracts, rollup = init_and_originate Context.T3 in - let* b = bake_blocks_until_next_inbox_level b rollup in - let _, contract1, contract2 = contracts in - let* commitment1 = dummy_commitment (B b) rollup in - let commitment2 = - {commitment1 with number_of_ticks = number_of_ticks_exn 3001L} - in - let* operation1 = Op.sc_rollup_publish (B b) contract1 rollup commitment1 in - let* b = Block.bake ~operation:operation1 b in - let* operation2 = Op.sc_rollup_publish (B b) contract2 rollup commitment2 in - let* b = Block.bake ~operation:operation2 b in - let* constants = Context.get_constants (B b) in - let* b = - Block.bake_n constants.parametric.sc_rollup.challenge_window_in_blocks b - in - let* cement_op = Op.sc_rollup_cement (B b) contract1 rollup in - let block_res = Block.bake ~operation:cement_op b in - assert_fails_with ~__LOC__ block_res Sc_rollup_errors.Sc_rollup_disputed - -let commit_and_cement_after_n_bloc ?expected_error b contract rollup n = - let open Lwt_result_wrap_syntax in - let* b = bake_blocks_until_next_inbox_level b rollup in - let* commitment = dummy_commitment (B b) rollup in - let* operation = Op.sc_rollup_publish (B b) contract rollup commitment in - let* b = Block.bake ~operation b in - (* This pattern would add an additional block, so we decrement [n] by one. *) - let* b = Block.bake_n (n - 1) b in - let* cement_op = Op.sc_rollup_cement (B b) contract rollup in - let block = Block.bake ~operation:cement_op b in - match expected_error with - | Some error -> assert_fails_with ~__LOC__ block error - | None -> - let* _block = block in - return_unit - -(** [test_challenge_window_period_boundaries] checks that cementing a commitment - without waiting for the whole challenge window period fails. Whereas, - succeeds when the period is over. *) -let test_challenge_window_period_boundaries () = - let commitment_period_in_blocks = 10 in - let sc_rollup_challenge_window_in_blocks = 10 in - let open Lwt_result_syntax in - let* block, contract, rollup = - init_and_originate - ~commitment_period_in_blocks - ~sc_rollup_challenge_window_in_blocks - Context.T1 - in - (* Should fail because the waiting period is not strictly greater than the - challenge window period. *) - let* () = - let*? current_level = Context.get_level (B block) in - let level_of_cement_submit = - Int32.to_int (Raw_level.to_int32 current_level) - + commitment_period_in_blocks + sc_rollup_challenge_window_in_blocks - |> Int32.of_int |> Raw_level_repr.of_int32_exn - in - let min_level = Raw_level_repr.succ level_of_cement_submit in - commit_and_cement_after_n_bloc - ~expected_error: - (Sc_rollup_errors.Sc_rollup_commitment_too_recent - {current_level = level_of_cement_submit; min_level}) - block - contract - rollup - (sc_rollup_challenge_window_in_blocks - 1) - in - (* Succeeds because the challenge period is over. *) - let* () = - commit_and_cement_after_n_bloc - block - contract - rollup - sc_rollup_challenge_window_in_blocks - in - return_unit - -(** Test originating with bad type. *) -let test_originating_with_invalid_types () = - let open Lwt_result_syntax in - let* block, (contract, _, _) = context_init Context.T3 in - let assert_fails_for_type parameters_ty = - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_operations.Sc_rollup_invalid_parameters_type - (sc_originate block contract ~parameters_ty) - in - (* Following types fail at validation time. *) - let* () = - [ - "mutez"; - "big_map string nat"; - "sapling_state 2"; - "sapling_transaction 2"; - "lambda string nat"; - "or (nat %deposit) (string %name)"; - ] - |> List.iter_es assert_fails_for_type - in - (* Operation fails with a different error as it's not "passable". *) - assert_fails - ~loc:__LOC__ - (sc_originate block contract ~parameters_ty:"operation") - -let assert_equal_expr ~loc e1 e2 = - let s1 = Format.asprintf "%a" Michelson_v1_printer.print_expr e1 in - let s2 = Format.asprintf "%a" Michelson_v1_printer.print_expr e2 in - Assert.equal_string ~loc s1 s2 - -let test_originating_with_valid_type () = - let open Lwt_result_wrap_syntax in - let* block, contract = context_init Context.T1 in - let assert_parameters_ty parameters_ty = - let* block, rollup = sc_originate block contract ~parameters_ty in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let*@ expr, _ctxt = Sc_rollup.parameters_type ctxt rollup in - let expr = WithExceptions.Option.get ~loc:__LOC__ expr in - let*?@ expr, _ctxt = - Script.force_decode_in_context - ~consume_deserialization_gas:When_needed - ctxt - expr - in - assert_equal_expr ~loc:__LOC__ (Expr.from_string parameters_ty) expr - in - [ - "unit"; - "int"; - "nat"; - "signature"; - "string"; - "bytes"; - "key_hash"; - "key"; - "timestamp"; - "address"; - "bls12_381_fr"; - "bls12_381_g1"; - "bls12_381_g2"; - "bool"; - "never"; - "chain_id"; - "ticket string"; - "set nat"; - "option (ticket string)"; - "list nat"; - "pair nat unit"; - "or nat string"; - "map string int"; - "map (option (pair nat string)) (list (ticket nat))"; - ] - |> List.iter_es assert_parameters_ty - -(* A contract that receives a pair of nat and a ticket and stores the ticket - with previously stored tickets. *) -let ticket_receiver = - {| - { parameter (pair nat (ticket string)); - storage (list (ticket string)); - code { UNPAIR; # [(nat, ticket) ; list] - CDR; # [ticket ; list] - CONS; # [ticket :: list] - NIL operation ; # [[] ; ticket :: list] - PAIR; # [([], ticket :: list)] - } - } - |} - -(* A contract that receives a string. *) -let string_receiver = - {| - { parameter string; - storage string; - code { CDR ; NIL operation; PAIR } } - |} - -(* A contract that receives a mutez. *) -let mutez_receiver = - {| - { parameter mutez; - storage mutez; - code { CDR ; NIL operation; PAIR } } - |} - -let test_single_transaction_batch () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* ticket_receiver, block = - originate_contract - block - ~script:ticket_receiver - ~storage:"{}" - ~source_contract:originator - ~baker - in - (* Ticket-token with content "red". *) - let* red_token = - string_ticket_token "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - (* Create an atomic batch message. *) - let transactions = - [ - ( ticket_receiver, - Entrypoint.default, - {|Pair 42 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1)|} ); - ] - in - let output = - make_transaction_output ~outbox_level:0 ~message_index:0 transactions - in - (* Set up the balance so that the self contract owns one ticket. *) - let* _ticket_hash, block = - adjust_ticket_token_balance_of_rollup block rollup red_token ~delta:Z.one - in - let* Sc_rollup_operations.{operations; _}, block = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output - in - (* Confirm that each transaction maps to one operation. *) - let* () = - verify_execute_outbox_message_operations - ~loc:__LOC__ - (B block) - rollup - ~operations - ~expected_transactions:transactions - in - (* Verify that the balance has moved to ticket-receiver. *) - let* () = - assert_ticket_token_balance - ~loc:__LOC__ - (B block) - red_token - (Destination.Sc_rollup rollup) - None - in - assert_ticket_token_balance - ~loc:__LOC__ - (B block) - red_token - (Destination.Contract (Originated ticket_receiver)) - (Some 1) - -(** Test that checks that an outbox message can be executed against all stored - cemented commitments but not against an outdated one. *) -let test_older_cemented_commitment () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* ticket_receiver, block = - originate_contract - block - ~script:ticket_receiver - ~storage:"{}" - ~source_contract:originator - ~baker - in - (* Ticket-token with content "red". *) - let* red_token = - string_ticket_token "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" - in - let verify_outbox_message_execution block cemented_commitment = - (* Set up the balance so that the self contract owns one ticket. *) - let* _ticket_hash, block = - adjust_ticket_token_balance_of_rollup block rollup red_token ~delta:Z.one - in - (* Create an atomic batch message. *) - let transactions = - [ - ( ticket_receiver, - Entrypoint.default, - {|Pair 42 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1)|} ); - ] - in - let output = - make_transaction_output ~outbox_level:0 ~message_index:0 transactions - in - let* Sc_rollup_operations.{operations; _}, block = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output - in - (* Confirm that each transaction maps to one operation. *) - let* () = - verify_execute_outbox_message_operations - ~loc:__LOC__ - (B block) - rollup - ~operations - ~expected_transactions:transactions - in - (* Verify that the balance has moved to ticket-receiver. *) - let* () = - assert_ticket_token_balance - ~loc:__LOC__ - (B block) - red_token - (Destination.Sc_rollup rollup) - None - in - assert_ticket_token_balance - ~loc:__LOC__ - (B block) - red_token - (Destination.Contract (Originated ticket_receiver)) - (Some 1) - in - let* max_num_stored_cemented_commitments = - let* constants = Context.get_constants (B block) in - return - constants.parametric.sc_rollup.max_number_of_stored_cemented_commitments - in - (* Publish and cement a commitment. *) - let* first_commitment_hash, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - let* first_commitment = - Context.Sc_rollup.commitment (B block) rollup first_commitment_hash - in - (* Generate a list of commitments that exceed the maximum number of stored - ones by one. *) - let* commitments_and_hashes = - gen_commitments - (B block) - rollup - ~predecessor:first_commitment - ~num_commitments:(max_num_stored_cemented_commitments + 1) - in - let commitments, commitment_hashes = List.split commitments_and_hashes in - let* block = - publish_and_cement_commitments block ~originator rollup commitments - in - (* FIXME: https://gitlab.com/tezos/tezos/-/issues/4469 - The test actually do not test the good "too old" commitment. *) - let commitment_hashes = first_commitment_hash :: commitment_hashes in - match commitment_hashes with - | too_old_commitment :: stored_hashes -> - (* Executing outbox message for the old non-stored commitment should fail. *) - let* () = - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_operations.Sc_rollup_invalid_last_cemented_commitment - (verify_outbox_message_execution block too_old_commitment) - in - (* Executing outbox message for the recent ones should succeed. *) - List.iter_es (verify_outbox_message_execution block) stored_hashes - | _ -> failwith "Expected non-empty list of commitment hashes." - -let test_multi_transaction_batch () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* ticket_receiver, block = - originate_contract - block - ~script:ticket_receiver - ~storage:"{}" - ~source_contract:originator - ~baker - in - (* Originate a contract that accepts a string as input. *) - let* string_receiver, block = - originate_contract - block - ~script:string_receiver - ~storage:{|""|} - ~source_contract:originator - ~baker - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - (* Ticket-token with content "red". *) - let* red_token = - string_ticket_token "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" - in - let transactions = - [ - (* A transaction to the ticket-receiver contract. *) - ( ticket_receiver, - Entrypoint.default, - {|Pair 1 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 4)|} ); - (* Another transaction to the ticket-receiver contract. *) - ( ticket_receiver, - Entrypoint.default, - {|Pair 2 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 6)|} ); - (* A transaction to the string-receiver contract. *) - (string_receiver, Entrypoint.default, {|"Hello"|}); - (* Another transaction to the string-receiver contract. *) - (string_receiver, Entrypoint.default, {|"Hello again"|}); - ] - in - (* Create an atomic batch message. *) - let output = - make_transaction_output ~outbox_level:0 ~message_index:0 transactions - in - (* Set up the balance so that the rollup owns 10 units of red tokens. *) - let* _ticket_hash, block = - adjust_ticket_token_balance_of_rollup - block - rollup - red_token - ~delta:(Z.of_int 10) - in - let* Sc_rollup_operations.{operations; _}, block = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output - in - (* Confirm that each transaction maps to one operation. *) - let* () = - verify_execute_outbox_message_operations - ~loc:__LOC__ - (B block) - rollup - ~operations - ~expected_transactions:transactions - in - (* Verify that the balance has moved to ticket-receiver. *) - let* () = - assert_ticket_token_balance - ~loc:__LOC__ - (B block) - red_token - (Destination.Sc_rollup rollup) - None - in - assert_ticket_token_balance - ~loc:__LOC__ - (B block) - red_token - (Destination.Contract (Originated ticket_receiver)) - (Some 10) - -(** Test that executing an L2 to L1 transaction that involves an invalid - parameter (mutez) fails. *) -let test_transaction_with_invalid_type () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - let* mutez_receiver, block = - originate_contract - block - ~script:mutez_receiver - ~storage:"0" - ~source_contract:originator - ~baker - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - let transactions = [(mutez_receiver, Entrypoint.default, "12")] in - (* Create an atomic batch message. *) - let output = - make_transaction_output ~outbox_level:0 ~message_index:1 transactions - in - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_operations.Sc_rollup_invalid_parameters_type - (execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output) - -(** Test that executing the same outbox message for the same twice fails. *) -let test_execute_message_twice () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* string_receiver, block = - originate_contract - block - ~script:string_receiver - ~storage:{|""|} - ~source_contract:originator - ~baker - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - (* Create an atomic batch message. *) - let transactions = [(string_receiver, Entrypoint.default, {|"Hello"|})] in - let output = - make_transaction_output ~outbox_level:0 ~message_index:1 transactions - in - (* Execute the message once - should succeed. *) - let* Sc_rollup_operations.{operations; _}, block = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output - in - (* Confirm that each transaction maps to one operation. *) - let* () = - verify_execute_outbox_message_operations - ~loc:__LOC__ - (B block) - rollup - ~operations - ~expected_transactions:transactions - in - (* Execute the same message again should fail. *) - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_errors.Sc_rollup_outbox_message_already_applied - (execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output) - -(** Verifies that it is not possible to execute the same message twice from - different commitments. *) -let test_execute_message_twice_different_cemented_commitments () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* string_receiver, block = - originate_contract - block - ~script:string_receiver - ~storage:{|""|} - ~source_contract:originator - ~baker - in - (* Publish and cement a commitment. *) - let* first_cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - let* predecessor = - Context.Sc_rollup.commitment (B block) rollup first_cemented_commitment - in - let* commitment = dummy_commitment ~predecessor (B block) rollup in - let* second_cemented_commitment, block = - publish_and_cement_commitment block ~originator rollup commitment - in - (* Create an atomic batch message. *) - let transactions = [(string_receiver, Entrypoint.default, {|"Hello"|})] in - let output = - make_transaction_output ~outbox_level:0 ~message_index:1 transactions - in - (* Execute the message once - should succeed. *) - let* Sc_rollup_operations.{operations; _}, block = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment:first_cemented_commitment - output - in - (* Confirm that each transaction maps to one operation. *) - let* () = - verify_execute_outbox_message_operations - ~loc:__LOC__ - (B block) - rollup - ~operations - ~expected_transactions:transactions - in - (* Execute the same message again should fail. *) - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_errors.Sc_rollup_outbox_message_already_applied - (execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment:second_cemented_commitment - output) - -let test_zero_amount_ticket () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* ticket_receiver, block = - originate_contract - block - ~script:ticket_receiver - ~storage:"{}" - ~source_contract:originator - ~baker - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - (* Create an atomic batch message. *) - let transactions = - [ - ( ticket_receiver, - Entrypoint.default, - {|Pair 42 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 0)|} ); - ] - in - let output = - make_transaction_output ~outbox_level:0 ~message_index:0 transactions - in - let*! result = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment - output - in - match result with - | Error e -> - if - Option.is_some - @@ List.find - (function - | Environment.Ecoproto_error - Script_tc_errors.Forbidden_zero_ticket_quantity -> - true - | _ -> false) - e - then return_unit - else Stdlib.failwith "Expected failure" - | Ok _ -> Stdlib.failwith "Expected failure" - -(* Check that executing an outbox message fails when the inclusion proof in - invalid. *) -let test_invalid_output_proof () = - let open Lwt_result_syntax in - let* block, originator = context_init Context.T1 in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_operations.Sc_rollup_invalid_output_proof - (execute_outbox_message - block - rollup - ~originator - ~output_proof:"No good" - ~commitment_hash:cemented_commitment) - -let test_execute_message_override_applied_messages_slot () = - let open Lwt_result_syntax in - (* Since we will create more blocks than the [max_active_outbox_levels] - parametric constant, we initialize it with a small enough value. *) - let* block, (baker, originator) = - context_init - ~sc_rollup_max_active_outbox_levels:100l - ~commitment_period_in_blocks:50 - Context.T2 - in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* string_receiver, block = - originate_contract - block - ~script:string_receiver - ~storage:{|""|} - ~source_contract:originator - ~baker - in - let* constants = Context.get_constants (B block) in - let max_active_levels = - constants.parametric.sc_rollup.max_active_outbox_levels |> Int32.to_int - in - let execute_message incr ~outbox_level ~message_index - ~cemented_commitment_hash = - let transactions = [(string_receiver, Entrypoint.default, {|"Hello"|})] in - let output = - make_transaction_output ~outbox_level ~message_index transactions - in - let* ( Sc_rollup_operations. - { - operations = _; - ticket_receipt = _; - whitelist_update = _; - paid_storage_size_diff; - }, - incr ) = - execute_outbox_message_without_proof_validation - incr - rollup - ~cemented_commitment:cemented_commitment_hash - output - in - return (paid_storage_size_diff, incr) - in - let* cemented_commitment = dummy_commitment (B block) rollup in - let* cemented_commitment_hash, block = - publish_and_cement_commitment block rollup ~originator cemented_commitment - in - (* Execute a message. *) - let* _, block = - execute_message - block - ~outbox_level:0 - ~message_index:0 - ~cemented_commitment_hash - in - (* Publish a bunch of commitments until the inbox level of the lcc is greater - than [max_active_levels]. *) - let* cemented_commitment_hash, block = - publish_commitments_until_min_inbox_level - block - rollup - ~originator - ~min_inbox_level:(max_active_levels + 10) - ~cemented_commitment_hash - ~cemented_commitment - in - (* Execute the message again but at [max_active_levels] outbox-level. *) - let* paid_storage_size_diff, incr = - execute_message - block - ~outbox_level:max_active_levels - ~message_index:1 - ~cemented_commitment_hash - in - (* Since bitset has already been created for the slot, there should be no - extra storage space. *) - let* () = assert_equal_z ~loc:__LOC__ paid_storage_size_diff Z.zero in - (* Execute a message at index 99. *) - let* paid_storage_size_diff, incr = - execute_message - incr - ~outbox_level:max_active_levels - ~message_index:99 - ~cemented_commitment_hash - in - (* A message at slot 99 is now recorded which expands the size of the bitset. - We therefore see an increase in size. - *) - let* () = assert_equal_z ~loc:__LOC__ paid_storage_size_diff (Z.of_int 14) in - (* Execute at index 98. *) - let* paid_storage_size_diff, incr = - execute_message - incr - ~outbox_level:max_active_levels - ~message_index:98 - ~cemented_commitment_hash - in - (* The bitset is not expanded so we don't pay anything. *) - let* () = assert_equal_z ~loc:__LOC__ paid_storage_size_diff Z.zero in - (* If we now try to record a message at level 0 it should fail since it - expired. *) - let* () = - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_operations.Sc_rollup_invalid_outbox_level - (execute_message - incr - ~outbox_level:0 - ~message_index:0 - ~cemented_commitment_hash) - in - let* _paid_storage_size_diff, _incr = - execute_message - incr - ~outbox_level:(max_active_levels + 5) - ~message_index:0 - ~cemented_commitment_hash - in - (* This should fail even if no message exists for the corresponding slot. - The reason is that outbox-level is smaller than the minimum level: - [last-cemented-commitment-level - max-active-levels]. - *) - let* () = - assert_fails - ~loc:__LOC__ - ~error:Sc_rollup_operations.Sc_rollup_invalid_outbox_level - (execute_message - incr - ~outbox_level:1 - ~message_index:0 - ~cemented_commitment_hash) - in - return_unit - -(** Test that a transaction fails if it attempts to transfer more tickets than - allowed. *) -let test_insufficient_ticket_balances () = - let open Lwt_result_syntax in - let* block, (baker, originator) = context_init Context.T2 in - let baker = Context.Contract.pkh baker in - (* Originate a rollup that accepts a list of string tickets as input. *) - let* block, rollup = - sc_originate block originator ~parameters_ty:"list (ticket string)" - in - (* Originate a contract that accepts a pair of nat and ticket string input. *) - let* ticket_receiver, block = - originate_contract - block - ~script:ticket_receiver - ~storage:"{}" - ~source_contract:originator - ~baker - in - (* Originate a contract that accepts a string as input. *) - let* string_receiver, block = - originate_contract - block - ~script:string_receiver - ~storage:{|""|} - ~source_contract:originator - ~baker - in - (* Publish and cement a commitment. *) - let* cemented_commitment, block = - publish_and_cement_dummy_commitment block ~originator rollup - in - (* Ticket-token with content "red". *) - let* red_token = - string_ticket_token "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" - in - let transactions = - [ - (* A transaction to the ticket-receiver contract. *) - ( ticket_receiver, - Entrypoint.default, - {|Pair 1 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 4)|} ); - (* Another transaction to the ticket-receiver contract. *) - ( ticket_receiver, - Entrypoint.default, - {|Pair 2 (Pair "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 6)|} ); - (* A transaction to the string-receiver contract. *) - (string_receiver, Entrypoint.default, {|"Hello"|}); - (* Another transaction to the string-receiver contract. *) - (string_receiver, Entrypoint.default, {|"Hello again"|}); - ] - in - (* Create an atomic batch message. *) - let output = - make_transaction_output ~outbox_level:0 ~message_index:0 transactions - in - (* Set up the balance so that the rollup owns 7 units of red tokens. - This is insufficient wrt the set of transactions above. - *) - let* ticket_hash, incr = - adjust_ticket_token_balance_of_rollup - block - rollup - red_token - ~delta:(Z.of_int 7) - in - (* Executing the batch fails because the rollup only has 7 units of tickets - but attempts to transfer 10 units. *) - assert_fails - ~loc:__LOC__ - ~error: - (Ticket_balance.Negative_ticket_balance - {key = ticket_hash; balance = Z.of_int (-3)}) - (execute_outbox_message_without_proof_validation - incr - rollup - ~cemented_commitment - output) - -let test_inbox_max_number_of_messages_per_level () = - let open Lwt_result_syntax in - let* block, (account1, account2) = - (* set sort of unlimited gas or we are going to hit gas exhaustion. *) - context_init - ~hard_gas_limit_per_operation:(Gas.Arith.integral_of_int_exn 100_000_000) - ~hard_gas_limit_per_block: - (Gas.Arith.integral_of_int_exn Int.(max_int / 1000)) - Context.T2 - in - (* we need to bake block because we are at the migration level and there is an additional msg in the inbox *) - let* block = Block.bake block in - let max_number_of_messages_per_level = - Constants.sc_rollup_max_number_of_messages_per_level - in - let* incr = Incremental.begin_construction block in - (* This just one message below the limit *) - let messages = - List.repeat (Z.to_int max_number_of_messages_per_level) "foo" - in - let* op = - Op.sc_rollup_add_messages ~gas_limit:Max (I incr) account1 messages - in - let* incr = Incremental.add_operation ~check_size:false incr op in - (* This break the limit *) - let* op = Op.sc_rollup_add_messages (I incr) account2 ["foo"] in - let* (_incr : Incremental.t) = - let expect_apply_failure = function - | Environment.Ecoproto_error - (Sc_rollup_inbox_repr.Inbox_level_reached_messages_limit as e) - :: _ -> - Assert.test_error_encodings e ; - return_unit - | _ -> - failwith - "It should have failed with [Inbox_level_reached_messages_limit]" - in - - Incremental.add_operation ~expect_apply_failure incr op - in - return_unit - -let add_publish ~rollup block account commitment = - let open Lwt_result_syntax in - let* block = bake_blocks_until_inbox_level block commitment in - let* publish = Op.sc_rollup_publish (B block) account rollup commitment in - Block.bake ~operation:publish block - -(** [test_number_of_parallel_games_bounded] checks that one cannot - play an arbitrary number of games. *) -let test_number_of_parallel_games_bounded () = - let open Lwt_result_syntax in - let max_number_of_parallel_games = - Context.default_test_constants.sc_rollup.max_number_of_parallel_games - in - let nb_accounts = max_number_of_parallel_games + 2 in - let* block, accounts = - context_init - ~sc_rollup_challenge_window_in_blocks:100 - ~hard_gas_limit_per_block:(Gas.Arith.integral_of_int_exn 1_000_000_000) - (Context.TList nb_accounts) - in - let* block, rollup = sc_originate block (Stdlib.List.hd accounts) in - let* dummy_commitment = dummy_commitment (B block) rollup in - - let commitments = - List.mapi - (fun i _ -> - { - dummy_commitment with - number_of_ticks = number_of_ticks_exn (Int64.of_int (i + 1)); - }) - accounts - in - let* block = - List.fold_left2_es - ~when_different_lengths:[] - (fun block account commitment -> - add_publish ~rollup block account commitment) - block - accounts - commitments - in - let staker, opponents = - match accounts with - | staker :: opponents -> (staker, opponents) - | [] -> - (* Because [max_number_of_parallel_games] is strictly positive. *) - assert false - in - let staker_commitment, opponents_commitments = - match commitments with - | staker_commitment :: opponents_commitments -> - (staker_commitment, opponents_commitments) - | [] -> - (* Because [max_number_of_parallel_games] is strictly positive. *) - assert false - in - let expect_apply_failure = function - | Environment.Ecoproto_error - (Sc_rollup_errors.Sc_rollup_max_number_of_parallel_games_reached - xstaker) - :: _ -> - assert ( - Signature.Public_key_hash.( - xstaker = Account.pkh_of_contract_exn staker)) ; - return_unit - | _ -> - failwith - "It should have failed with \ - [Sc_rollup_max_number_of_parallel_games_reached]" - in - let* incr = Incremental.begin_construction block in - let* _block, _counter = - List.fold_left2_es - ~when_different_lengths:[] - (fun (block, counter) opponent opponent_commitment -> - let addr = Account.pkh_of_contract_exn staker in - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = hash_commitment opponent_commitment; - opponent_commitment_hash = hash_commitment staker_commitment; - } - in - let* op = - Op.sc_rollup_refute (I block) opponent rollup addr refutation - in - let* incr = - if counter = max_number_of_parallel_games then - Incremental.add_operation ~expect_apply_failure block op - else Incremental.add_operation block op - in - return (incr, counter + 1)) - (incr, 0) - opponents - opponents_commitments - in - return_unit - -(** [test_timeout] test multiple cases of the timeout logic. -- Test to timeout a player before it's allowed and fails. -- Test that the timeout left by player decreases as expected. -- Test another account can timeout a late player. -*) -let test_timeout () = - let open Lwt_result_syntax in - let* block, (account1, account2, account3) = context_init Context.T3 in - let pkh1 = Account.pkh_of_contract_exn account1 in - let pkh2 = Account.pkh_of_contract_exn account2 in - let* block, rollup = sc_originate block account1 in - let* constants = Context.get_constants (B block) in - let Constants.Parametric.{timeout_period_in_blocks; _} = - constants.parametric.sc_rollup - in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - let* dummy_commitment = dummy_commitment (B block) rollup in - let commitment1 = - { - dummy_commitment with - number_of_ticks = number_of_ticks_exn 4L; - compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["first"]); - } - in - let commitment2 = - { - dummy_commitment with - number_of_ticks = number_of_ticks_exn 4L; - compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["second"]); - } - in - - let* block = add_publish ~rollup block account1 commitment1 in - let* block = add_publish ~rollup block account2 commitment2 in - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated commitment1; - opponent_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated commitment2; - } - in - let* start_game_op = - Op.sc_rollup_refute (B block) account1 rollup pkh2 refutation - in - let* block = Block.bake ~operation:start_game_op block in - let* block = Block.bake_n (timeout_period_in_blocks - 1) block in - let game_index = Sc_rollup.Game.Index.make pkh1 pkh2 in - (* Testing to send a timeout before it's allowed. There is one block left - before timeout is allowed, that is, the current block. *) - let* () = - let blocks_left = 0l in - let* timeout = Op.sc_rollup_timeout (B block) account3 rollup game_index in - let block_res = Block.bake ~operation:timeout block in - assert_fails_with - ~__LOC__ - block_res - (Sc_rollup_errors.Sc_rollup_timeout_level_not_reached (blocks_left, pkh1)) - in - let* refute = - let tick = - WithExceptions.Option.get ~loc:__LOC__ (Sc_rollup.Tick.of_int 0) - in - let* {compressed_state; _} = - Context.Sc_rollup.commitment (B block) rollup genesis_info.commitment_hash - in - let first_chunk = - Sc_rollup.Dissection_chunk.{state_hash = Some compressed_state; tick} - in - let* rest = - List.init_es ~when_negative_length:[] 4 (fun i -> - let state_hash = None in - let tick = - WithExceptions.Option.get - ~loc:__LOC__ - (Sc_rollup.Tick.of_int (i + 1)) - in - return Sc_rollup.Dissection_chunk.{state_hash; tick}) - in - let step = Sc_rollup.Game.Dissection (first_chunk :: rest) in - let refutation = Sc_rollup.Game.(Move {choice = tick; step}) in - Op.sc_rollup_refute (B block) account1 rollup pkh2 refutation - in - let* block = Block.bake ~operation:refute block in - let* pkh1_timeout, pkh2_timeout = - let+ timeout = Context.Sc_rollup.timeout (B block) rollup pkh1 pkh2 in - let timeout = WithExceptions.Option.get ~loc:__LOC__ timeout in - if game_index.alice = pkh1 then (timeout.alice, timeout.bob) - else (timeout.bob, timeout.alice) - in - let* () = Assert.equal_int ~loc:__LOC__ pkh1_timeout 0 in - let* () = - Assert.equal_int ~loc:__LOC__ pkh2_timeout timeout_period_in_blocks - in - let* block = Block.bake_n timeout_period_in_blocks block in - let* timeout = Op.sc_rollup_timeout (B block) account3 rollup game_index in - let* incr = Incremental.begin_construction block in - let* incr = Incremental.add_operation incr timeout in - let expected_game_status : Sc_rollup.Game.status = - Ended (Loser {reason = Timeout; loser = pkh2}) - in - assert_timeout_result ~game_status:expected_game_status incr rollup game_index - -let start_game block rollup (first_player, commitment1) (pkh2, commitment2) = - let open Lwt_result_syntax in - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated commitment1; - opponent_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated commitment2; - } - in - let* start_game_op = - Op.sc_rollup_refute (B block) first_player rollup pkh2 refutation - in - Block.bake ~operation:start_game_op block - -let create_conflicting_commitment block rollup first_player second_player = - let open Lwt_result_syntax in - let compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["first"]) - in - let* commitment1 = - dummy_commitment ~compressed_state ~number_of_ticks:1L (B block) rollup - in - let compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["second"]) - in - let* commitment2 = - dummy_commitment ~compressed_state ~number_of_ticks:1L (B block) rollup - in - let* block = add_publish ~rollup block first_player commitment1 in - let* block = add_publish ~rollup block second_player commitment2 in - return (block, commitment1, commitment2) - -let create_conflict block rollup ~first_player ~second_player = - let open Lwt_result_syntax in - let pkh2 = Account.pkh_of_contract_exn second_player in - let* block, commitment1, commitment2 = - create_conflicting_commitment block rollup first_player second_player - in - let* block = - start_game block rollup (first_player, commitment1) (pkh2, commitment2) - in - return block - -let init_with_conflict () = - let open Lwt_result_syntax in - let* block, (account1, account2) = context_init Context.T2 in - let pkh1 = Account.pkh_of_contract_exn account1 in - let pkh2 = Account.pkh_of_contract_exn account2 in - let* block, rollup = sc_originate block account1 in - let* block = - create_conflict block rollup ~first_player:account1 ~second_player:account2 - in - return (block, (account1, pkh1), (account2, pkh2), rollup) - -module Arith_pvm = Sc_rollup_helpers.Arith_pvm - -let dumb_proof ~choice = - let open Lwt_result_wrap_syntax in - let context_arith_pvm = Arith_pvm.make_empty_context () in - let empty = Arith_pvm.make_empty_state () in - let*! arith_state = Arith_pvm.initial_state ~empty in - let*! arith_state = Arith_pvm.install_boot_sector arith_state "" in - let input = Sc_rollup_helpers.make_external_input "c4c4" in - let*@ pvm_step = - Arith_pvm.produce_proof - context_arith_pvm - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - (Some input) - arith_state - in - let pvm_step = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Sc_rollup.Proof.serialize_pvm_step ~pvm:(module Arith_pvm) pvm_step - in - let inbox_proof = - Sc_rollup.Proof.Inbox_proof - { - level = Raw_level.root; - message_counter = Z.zero; - proof = - Sc_rollup.Inbox.Internal_for_tests.serialized_proof_of_string - "dummy proof"; - } - in - let proof = Sc_rollup.Proof.{pvm_step; input_proof = Some inbox_proof} in - return Sc_rollup.Game.(Move {choice; step = Proof proof}) - -(** Test that two invalid proofs from the two players lead to a draw - in the refutation game. *) -let test_draw_with_two_invalid_moves () = - let open Lwt_result_syntax in - let* block, (p1, p1_pkh), (p2, p2_pkh), rollup = init_with_conflict () in - - (* Player1 will play an invalid final move. *) - let* block = - let* p1_refutation = - let choice = Sc_rollup.Tick.initial in - dumb_proof ~choice - in - let* p1_final_move_op = - Op.sc_rollup_refute (B block) p1 rollup p2_pkh p1_refutation - in - Block.bake ~operation:p1_final_move_op block - in - - (* Get the frozen bonds for the two players before the draw. *) - let* frozen_bonds_p1 = Context.Contract.frozen_bonds (B block) p1 in - let* frozen_bonds_p2 = Context.Contract.frozen_bonds (B block) p2 in - - (* Player2 will also send an invalid final move. *) - let* incr = - let* p2_refutation = - let choice = Sc_rollup.Tick.initial in - dumb_proof ~choice - in - let* p2_final_move_op = - Op.sc_rollup_refute (B block) p2 rollup p1_pkh p2_refutation - in - let* incr = Incremental.begin_construction block in - Incremental.add_operation incr p2_final_move_op - in - - (* As both players played invalid moves, the game ends in a draw. *) - let expected_game_status : Sc_rollup.Game.status = Ended Draw in - let* () = - assert_refute_result - ~game_status:expected_game_status - incr - rollup - (Sc_rollup.Game.Index.make p1_pkh p2_pkh) - in - - (* The two players should have been slashed. *) - let* constants = Context.get_constants (I incr) in - let stake_amount = constants.parametric.sc_rollup.stake_amount in - let* () = - Assert.frozen_bonds_was_debited - ~loc:__LOC__ - (I incr) - p1 - frozen_bonds_p1 - stake_amount - in - let* () = - Assert.frozen_bonds_was_debited - ~loc:__LOC__ - (I incr) - p2 - frozen_bonds_p2 - stake_amount - in - return_unit - -let play_conflict_until_draw block (p1, p1_pkh) p2_pkh rollup = - let open Lwt_result_syntax in - (* Player1 will play an invalid final move. *) - let* block = - let* p1_refutation = - let choice = Sc_rollup.Tick.initial in - dumb_proof ~choice - in - - let* p1_final_move_op = - Op.sc_rollup_refute (B block) p1 rollup p2_pkh p1_refutation - in - Block.bake ~operation:p1_final_move_op block - in - - (* Player2 will not play and it will be timeout. *) - let* incr = - let* block = bake_timeout_period block in - let game_index = Sc_rollup.Game.Index.make p1_pkh p2_pkh in - let* timeout = Op.sc_rollup_timeout (B block) p1 rollup game_index in - let* incr = Incremental.begin_construction block in - Incremental.add_operation incr timeout - in - - (* As the player1 played an invalid move, the timeout is counted - as an invalid one too. The game ends in a draw. *) - let expected_game_status : Sc_rollup.Game.status = Ended Draw in - let* () = - assert_timeout_result - ~game_status:expected_game_status - incr - rollup - (Sc_rollup.Game.Index.make p1_pkh p2_pkh) - in - Incremental.finalize_block incr - -let play_conflict_with_timeout block (p1, p1_pkh) p2_pkh rollup = - let open Lwt_result_syntax in - (* Player1 will not play and it will be timeout. *) - let game_index = Sc_rollup.Game.Index.make p1_pkh p2_pkh in - let* incr = - let* block = bake_timeout_period block in - let* timeout = Op.sc_rollup_timeout (B block) p1 rollup game_index in - let* incr = Incremental.begin_construction block in - Incremental.add_operation incr timeout - in - (* The game ends with p2 as a winner. *) - let expected_game_status : Sc_rollup.Game.status = - Ended (Loser {reason = Timeout; loser = p1_pkh}) - in - let* () = - assert_timeout_result - ~game_status:expected_game_status - incr - rollup - game_index - in - let* () = assert_game_exists incr rollup game_index ~exists:false in - Incremental.finalize_block incr - -(** Test that timeout a player during the final move ends the game if - the other player played. *) -let test_timeout_during_final_move () = - let open Lwt_result_syntax in - let* block, (p1, p1_pkh), (_p2, p2_pkh), rollup = init_with_conflict () in - let* _block = play_conflict_until_draw block (p1, p1_pkh) p2_pkh rollup in - return_unit - -(** Test that timeout a player during the final move ends the game if - the other player played. *) -let test_draw_with_parallel_game () = - let open Lwt_result_syntax in - let* block, (account1, account2, account3) = context_init Context.T3 in - let pkh1 = Account.pkh_of_contract_exn account1 in - let pkh2 = Account.pkh_of_contract_exn account2 in - let pkh3 = Account.pkh_of_contract_exn account3 in - let* block, rollup = sc_originate block account1 in - let compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["first"]) - in - let* commitment1 = - dummy_commitment ~compressed_state ~number_of_ticks:1L (B block) rollup - in - let compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["second"]) - in - let* commitment2 = - dummy_commitment ~compressed_state ~number_of_ticks:1L (B block) rollup - in - let compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["third"]) - in - let* commitment3 = - dummy_commitment ~compressed_state ~number_of_ticks:1L (B block) rollup - in - let* block = add_publish ~rollup block account1 commitment1 in - let* block = add_publish ~rollup block account2 commitment2 in - let* block = add_publish ~rollup block account3 commitment3 in - let* block = - start_game block rollup (account1, commitment1) (pkh2, commitment2) - in - let* block = - start_game block rollup (account3, commitment3) (pkh2, commitment2) - in - let* block = - start_game block rollup (account3, commitment3) (pkh1, commitment1) - in - let* block = play_conflict_with_timeout block (account1, pkh1) pkh2 rollup in - let* block = play_conflict_with_timeout block (account3, pkh3) pkh2 rollup in - - (* [pkh1] and [pkh3] were both slashed, any move in their game will - result in a draw. *) - let* incr = Incremental.begin_construction block in - let* incr = - let* refutation = - let choice = Sc_rollup.Tick.initial in - dumb_proof ~choice - in - let* final_move_op = - Op.sc_rollup_refute (B block) account3 rollup pkh1 refutation - in - Incremental.add_operation incr final_move_op - in - let expected_game_status : Sc_rollup.Game.status = Ended Draw in - let game_index = Sc_rollup.Game.Index.make pkh1 pkh3 in - let* () = - assert_refute_result - ~game_status:expected_game_status - incr - rollup - game_index - in - let* () = assert_game_exists incr rollup game_index ~exists:false in - return_unit - -(** Test that playing a dissection during a final move is rejected. *) -let test_dissection_during_final_move () = - let open Lwt_result_syntax in - let* block, (p1, p1_pkh), (p2, p2_pkh), rollup = init_with_conflict () in - - (* Player1 will play an invalid final move. *) - let* block = - let* p1_refutation = - let choice = Sc_rollup.Tick.initial in - dumb_proof ~choice - in - - let* p1_final_move_op = - Op.sc_rollup_refute (B block) p1 rollup p2_pkh p1_refutation - in - Block.bake ~operation:p1_final_move_op block - in - - (* Player2 will play a dissection. *) - let dumb_dissection = - let choice = Sc_rollup.Tick.initial in - Sc_rollup.Game.(Move {choice; step = Dissection []}) - in - let* p2_op = Op.sc_rollup_refute (B block) p2 rollup p1_pkh dumb_dissection in - (* Dissecting is no longer accepted. *) - let block_res = Block.bake ~operation:p2_op block in - assert_fails_with - ~__LOC__ - block_res - Sc_rollup_game_repr.Dissecting_during_final_move - -let init_arith_state ~boot_sector = - let open Lwt_syntax in - let context = Arith_pvm.make_empty_context () in - let empty = Arith_pvm.make_empty_state () in - let* state = Arith_pvm.initial_state ~empty in - let* state = Arith_pvm.install_boot_sector state boot_sector in - return (context, state) - -(** [make_arith_state ?boot_sector metadata] initializes an arith PVM - waiting to read its first input, after evaluating the boot sector - and the [metadata]. - - [boot_sector] defaults to [""]. -*) -let make_arith_state ?(boot_sector = "") metadata = - let open Lwt_syntax in - let* context, state = init_arith_state ~boot_sector in - let* state_hash1 = Arith_pvm.state_hash state in - - (* 1. We evaluate the boot sector. *) - let* input_required = - Arith_pvm.is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - assert (input_required = Sc_rollup.No_input_required) ; - let* state = Arith_pvm.eval state in - let* state_hash2 = Arith_pvm.state_hash state in - (* 2. The state now needs the metadata. *) - let* input_required = - Arith_pvm.is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - assert (input_required = Sc_rollup.Needs_reveal Reveal_metadata) ; - (* 3. We feed the state with the metadata. *) - let input = Sc_rollup.(Reveal (Metadata metadata)) in - let* state = Arith_pvm.set_input input state in - let* state_hash3 = Arith_pvm.state_hash state in - let* input_required = - Arith_pvm.is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - assert (input_required = Sc_rollup.Initial) ; - - return (context, state, state_hash1, state_hash2, state_hash3) - -let make_set_input_refutation context state input input_proof = - let open Lwt_syntax in - let* proof = - Arith_pvm.produce_proof - context - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - (Some input) - state - in - let pvm_step = WithExceptions.Result.get_ok ~loc:__LOC__ proof in - let pvm_step = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Sc_rollup.Proof.serialize_pvm_step ~pvm:(module Arith_pvm) pvm_step - in - let choice = Sc_rollup.Tick.(next initial) in - let step : Sc_rollup.Game.step = - Proof {pvm_step; input_proof = Some input_proof} - in - return Sc_rollup.Game.(Move {choice; step}) - -(** [test_refute_set_input p1_info p2_info make_state_before] creates - a refutation game where the final tick refuted is a [set_input] - step. It uses [p1_info] (and respectively [p2_info]) to create - the input (and the input proof) executed. [make_state_before] - initializes the context and the state before the divergence - between the two players. - - The first player will be expected to win the game. *) -let test_refute_set_input - (p1_info : - Sc_rollup.t -> - Sc_rollup.Commitment.genesis_info -> - Sc_rollup.input * Sc_rollup.Proof.input_proof) p2_info - (make_state_before : - Sc_rollup.t -> - Sc_rollup.Commitment.genesis_info -> - (Arith_pvm.context * Arith_pvm.state) tzresult Lwt.t) = - let open Lwt_result_syntax in - let* block, (p1, p2) = context_init Context.T2 in - let pkh1 = Account.pkh_of_contract_exn p1 in - let pkh2 = Account.pkh_of_contract_exn p2 in - let* block, rollup = sc_originate block p1 in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - let* genesis_commitment = - Context.Sc_rollup.commitment (B block) rollup genesis_info.commitment_hash - in - - let p1_input, p1_input_proof = p1_info rollup genesis_info in - let p2_input, p2_input_proof = p2_info rollup genesis_info in - let* context, prior_state = make_state_before rollup genesis_info in - - let post_commitment_from_set_input block account input = - let* inbox_level = next_inbox_level (B block) rollup in - let*! state_hash1 = Arith_pvm.state_hash prior_state in - let*! state = Arith_pvm.set_input input prior_state in - let*! state_hash2 = Arith_pvm.state_hash state in - let commitment : Sc_rollup.Commitment.t = - { - predecessor = genesis_info.commitment_hash; - inbox_level; - number_of_ticks = number_of_ticks_exn 2L; - compressed_state = state_hash2; - } - in - let* block = add_publish ~rollup block account commitment in - return (commitment, block, state, state_hash1, state_hash2) - in - - let* commitment1, block, _state, state_hash1, p1_state_hash2 = - post_commitment_from_set_input block p1 p1_input - in - let* commitment2, block, _, _, _ = - post_commitment_from_set_input block p2 p2_input - in - - (* [p1] starts a game. - - The dissection is: - 0 -> predecessor state hash - 1 -> state just before the [set_input] - 2 -> tick in conflict with different evaluations of [set_input] - *) - let* start_game_op = - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated commitment1; - opponent_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated commitment2; - } - in - Op.sc_rollup_refute (B block) p1 rollup pkh2 refutation - in - let* dissection_op = - let dissection : Sc_rollup.Game.refutation = - let choice = Sc_rollup.Tick.initial in - let step : Sc_rollup.Game.step = - let zero = Sc_rollup.Tick.initial in - let one = Sc_rollup.Tick.next zero in - let two = Sc_rollup.Tick.next one in - Dissection - [ - {tick = zero; state_hash = Some genesis_commitment.compressed_state}; - {tick = one; state_hash = Some state_hash1}; - {tick = two; state_hash = Some p1_state_hash2}; - ] - in - Move {choice; step} - in - Op.sc_rollup_refute (B block) p1 rollup pkh2 dissection - in - let* p1_moves = - Op.batch_operations - ~recompute_counters:true - ~source:p1 - (B block) - [start_game_op; dissection_op] - in - let* block = Block.bake ~operation:p1_moves block in - - (* [p2] plays its [set_input], he is expected to play an invalid one. *) - let* p2_final_move_op = - let*! proof = - make_set_input_refutation context prior_state p2_input p2_input_proof - in - Op.sc_rollup_refute (B block) p2 rollup pkh1 proof - in - (* [p1] plays it [set_input] too. *) - let* p1_final_move_op = - let*! proof = - make_set_input_refutation context prior_state p1_input p1_input_proof - in - Op.sc_rollup_refute (B block) p1 rollup pkh2 proof - in - let* incr = Incremental.begin_construction block in - let* incr = Incremental.add_operation incr p2_final_move_op in - let* incr = Incremental.add_operation incr p1_final_move_op in - let expected_game_status : Sc_rollup.Game.status = - Ended (Loser {reason = Conflict_resolved; loser = pkh2}) - in - assert_refute_result - ~game_status:expected_game_status - incr - rollup - (Sc_rollup.Game.Index.make pkh1 pkh2) - -let test_refute_invalid_metadata () = - let open Lwt_result_syntax in - let p1_info rollup (genesis_info : Sc_rollup.Commitment.genesis_info) = - let metadata = - Sc_rollup.Metadata. - {address = rollup; origination_level = genesis_info.level} - in - Sc_rollup.(Reveal (Metadata metadata), Proof.Reveal_proof Metadata_proof) - in - let p2_info rollup _genesis_info = - let invalid_metadata = - Sc_rollup.Metadata. - {address = rollup; origination_level = Raw_level.of_int32_exn 42l} - in - Sc_rollup. - (Reveal (Metadata invalid_metadata), Proof.Reveal_proof Metadata_proof) - in - let make_state_before _rollup _genesis_info = - let*! context, state = init_arith_state ~boot_sector:"" in - let*! state = Arith_pvm.eval state in - return (context, state) - in - test_refute_set_input p1_info p2_info make_state_before - -(** [arith_state_before_reveal metadata hash] initializes an arith PVM waiting - for the data associated to [hash] to be revealed. - - Starts by creating a state with {!make_arith_state}, then triggers the - [Needs_reveal] state through an external message annoucing the [hash]. -*) -let arith_state_before_reveal metadata hash = - let open Lwt_result_syntax in - let*! context, state, _, _, _ = make_arith_state metadata in - let input = - Sc_rollup_helpers.make_external_input - ~inbox_level:Raw_level.root - ~message_counter:Z.zero - ("hash:" ^ hash) - in - let*! state = Arith_pvm.set_input input state in - let rec eval_until_needs_reveal state = - let*! input_request = - Arith_pvm.is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - match input_request with - | Needs_reveal _ -> return state - | _ -> - let*! state = Arith_pvm.eval state in - eval_until_needs_reveal state - in - let* state = eval_until_needs_reveal state in - return (context, state) - -let test_refute_invalid_reveal () = - let data = String.make Constants_repr.sc_rollup_message_size_limit 'f' in - let invalid_data = "foo" in - let hash = - Sc_rollup_reveal_hash.(hash_string ~scheme:Blake2B [data] |> to_hex) - in - let p1_info _rollup _genesis_info = - Sc_rollup.(Reveal (Raw_data data), Proof.Reveal_proof (Raw_data_proof data)) - in - let p2_info _rollup _genesis_info = - Sc_rollup. - ( Reveal (Raw_data invalid_data), - Proof.Reveal_proof (Raw_data_proof invalid_data) ) - in - let make_state_before rollup - (genesis_info : Sc_rollup.Commitment.genesis_info) = - let metadata = - Sc_rollup.Metadata. - {address = rollup; origination_level = genesis_info.level} - in - arith_state_before_reveal metadata hash - in - test_refute_set_input p1_info p2_info make_state_before - -let full_history_inbox (genesis_predecessor_timestamp, genesis_predecessor) - all_external_messages = - let open Sc_rollup_helpers in - let payloads_per_levels = - List.map - (fun (pred_info, level, external_messages) -> - wrap_messages ~pred_info level external_messages) - all_external_messages - in - Sc_rollup_helpers.Node_inbox.construct_inbox - ~genesis_predecessor_timestamp - ~genesis_predecessor - payloads_per_levels - -let input_included ~snapshot ~full_history_inbox (l, n) = - let open Lwt_result_wrap_syntax in - let open Sc_rollup_helpers in - let Sc_rollup_helpers.Node_inbox.{payloads_histories; history; inbox} = - full_history_inbox - in - let history_proof = Sc_rollup.Inbox.old_levels_messages inbox in - (* Create an inclusion proof of the inbox message at [(l, n)]. *) - let*@ proof, _ = - Sc_rollup.Inbox.produce_proof - ~get_payloads_history:(get_payloads_history payloads_histories) - ~get_history:(get_history history) - history_proof - (l, n) - in - let*?@ inbox_message_verified = - Sc_rollup.Inbox.verify_proof (l, n) snapshot proof - in - return - @@ Option.map - (fun inbox_message -> Sc_rollup.Inbox_message inbox_message) - inbox_message_verified - -(** Test that the protocol adds a [SOL], [Info_per_level] and [EOL] for each - Tezos level, even if no messages are added to the inbox. *) -let test_automatically_added_internal_messages () = - let open Lwt_result_syntax in - let assert_input_included ~__LOC__ ~snapshot ~full_history_inbox (l, n) input - = - let* input_verified = input_included ~snapshot ~full_history_inbox (l, n) in - Assert.equal - ~loc:__LOC__ - (Option.equal Sc_rollup.input_equal) - "Input found with the proof is different from input provided" - (fun ppf v -> - match v with - | None -> Format.pp_print_string ppf "None" - | Some v -> Sc_rollup.pp_input ppf v) - input_verified - input - in - - let assert_sol ~snapshot ~full_history_inbox ~inbox_level = - let sol = Sc_rollup_helpers.make_sol ~inbox_level in - assert_input_included - ~snapshot - ~full_history_inbox - (inbox_level, Z.zero) - (Some sol) - in - - let assert_ipl ~snapshot ~full_history_inbox ~level_info ~inbox_level = - let predecessor_timestamp, predecessor = level_info in - let info_per_level = - Sc_rollup_helpers.make_info_per_level - ~inbox_level - ~predecessor_timestamp - ~predecessor - in - assert_input_included - ~snapshot - ~full_history_inbox - (inbox_level, Z.one) - (Some info_per_level) - in - - let assert_protocol_migration ~snapshot ~full_history_inbox ~inbox_level = - let protocol_migration = - Sc_rollup_helpers.make_protocol_migration ~inbox_level - in - assert_input_included - ~snapshot - ~full_history_inbox - (inbox_level, Z.(succ one)) - (Some protocol_migration) - in - - let assert_eol ~snapshot ~full_history_inbox ~inbox_level ~message_counter = - let eol = Sc_rollup_helpers.make_eol ~inbox_level ~message_counter in - assert_input_included - ~snapshot - ~full_history_inbox - (inbox_level, message_counter) - (Some eol) - in - - let assert_no_message ~snapshot ~full_history_inbox ~inbox_level - ~message_counter = - assert_input_included - ~snapshot - ~full_history_inbox - (inbox_level, message_counter) - None - in - - let info_per_block (block : Block.t) = - (block.header.shell.timestamp, block.hash) - in - - (* Create the first block. *) - let* block, account = context_init Context.T1 in - - let level_zero_info = - ( Time.Protocol.epoch, - Block_hash.of_b58check_exn - "BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU" ) - in - - let level_one_info = info_per_block block in - (* Bake a second block. *) - let* block = Block.bake block in - - let level_two_info = info_per_block block in - (* Bake a third block where a message is added. *) - let* operation = Op.sc_rollup_add_messages (B block) account ["foo"] in - let* block = Block.bake ~operation block in - - let* inbox = Context.Sc_rollup.inbox (B block) in - let snapshot = Sc_rollup.Inbox.take_snapshot inbox in - - let level_zero = Raw_level.of_int32_exn 0l in - let level_one = Raw_level.of_int32_exn 1l in - let level_two = Raw_level.of_int32_exn 2l in - let*? ({inbox; _} as full_history_inbox) = - full_history_inbox - level_zero_info - [(level_one_info, level_one, []); (level_two_info, level_two, ["foo"])] - in - - (* Assertions about level 0. *) - let* () = - assert_sol ~__LOC__ ~snapshot ~full_history_inbox ~inbox_level:level_zero - in - let* () = - assert_ipl - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_zero - ~level_info:level_zero_info - in - let* () = - assert_protocol_migration - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_zero - in - let* () = - assert_eol - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_zero - ~message_counter:(Z.of_int 3) - in - - (* Assertions about level 1. *) - let* () = - assert_sol ~__LOC__ ~snapshot ~full_history_inbox ~inbox_level:level_one - in - let* () = - assert_ipl - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_one - ~level_info:level_one_info - in - let* () = - assert_protocol_migration - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_zero - in - let* () = - assert_eol - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_one - ~message_counter:(Z.of_int 3) - in - - (* Assertions about level 2. *) - let* () = - assert_sol ~__LOC__ ~snapshot ~full_history_inbox ~inbox_level:level_two - in - let* () = - assert_ipl - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_two - ~level_info:level_two_info - in - let* () = - assert_eol - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_two - ~message_counter:(Z.of_int 3) - in - let* () = - assert_no_message - ~__LOC__ - ~snapshot - ~full_history_inbox - ~inbox_level:level_two - ~message_counter:(Z.of_int 4) - in - - (* Assert the computed inbox and protocol's inbox are equal. *) - let history_proof = Sc_rollup.Inbox.old_levels_messages inbox in - Assert.equal - ~loc:__LOC__ - Sc_rollup.Inbox.equal_history_proof - "Computed and protocol inboxes aren't equal" - Sc_rollup.Inbox.pp_history_proof - snapshot - history_proof - -(** With [Start_of_level] and [End_of_level] inbox messages in each inbox level, - it's impossible to give a valid commitment with 0 ticks. *) -let test_zero_tick_commitment_fails () = - let open Lwt_result_syntax in - let* block, contract, rollup = init_and_originate Context.T1 in - let* commitment = dummy_commitment (B block) rollup in - let commitment = {commitment with number_of_ticks = number_of_ticks_exn 0L} in - let* publish_commitment = - Op.sc_rollup_publish (B block) contract rollup commitment - in - let block_res = Block.bake ~operation:publish_commitment block in - assert_fails_with - ~__LOC__ - block_res - Sc_rollup_errors.Sc_rollup_zero_tick_commitment - -(** [test_curfew] creates a rollup, publishes two conflicting - commitments. Branches are expected to continue (commitment are able to be - published). Tries to publish another commitment at the same initial - `inbox_level` after [challenge_window_in_blocks - 1] and after - [challenge_window_in_blocks] blocks. Only the first attempt is expected to - succeed. *) -let test_curfew () = - let open Lwt_result_syntax in - let* block, (account1, account2, account3), rollup = - (* sc_rollup_challenge_window_in_blocks should be at least commitment period *) - init_and_originate ~sc_rollup_challenge_window_in_blocks:112 Context.T3 - in - let* constants = Context.get_constants (B block) in - let challenge_window = - constants.parametric.sc_rollup.challenge_window_in_blocks - in - let* publish1, commitment1 = - publish_op_and_dummy_commitment - ~sender:account1 - ~compressed_state:"first" - rollup - block - in - let* publish2, commitment2 = - publish_op_and_dummy_commitment - ~sender:account2 - ~compressed_state:"second" - rollup - block - in - let* block = bake_blocks_until_inbox_level block commitment1 in - let* block = Block.bake ~operations:[publish1; publish2] block in - let* block = Block.bake_n (challenge_window - 1) block in - - let* publish11, commitment11 = - publish_op_and_dummy_commitment - ~sender:account1 - ~predecessor:commitment1 - rollup - block - in - let* publish21, commitment21 = - publish_op_and_dummy_commitment - ~sender:account2 - ~predecessor:commitment2 - rollup - block - in - let* publish3, _commitment3 = - publish_op_and_dummy_commitment - ~sender:account3 - ~compressed_state:"third" - rollup - block - in - let* block = bake_blocks_until_inbox_level block commitment11 in - let* block = Block.bake ~operations:[publish11; publish21; publish3] block in - let* publish111, commitment111 = - publish_op_and_dummy_commitment - ~sender:account1 - ~predecessor:commitment11 - rollup - block - in - let* publish211, _commitment211 = - publish_op_and_dummy_commitment - ~sender:account2 - ~predecessor:commitment21 - rollup - block - in - let* publish4, _commitment4 = - publish_op_and_dummy_commitment - ~sender:account3 - ~compressed_state:"fourth" - rollup - block - in - let* block = bake_blocks_until_inbox_level block commitment111 in - let* incr = Incremental.begin_construction block in - let* incr = Incremental.add_operation incr publish111 in - let* incr = Incremental.add_operation incr publish211 in - let expect_apply_failure = function - | Environment.Ecoproto_error - (Sc_rollup_errors.Sc_rollup_commitment_past_curfew as e) - :: _ -> - Assert.test_error_encodings e ; - return_unit - | _ -> - failwith "It should have failed with [Sc_rollup_commitment_past_curfew]" - in - let* _incr = Incremental.add_operation ~expect_apply_failure incr publish4 in - return_unit - -(** [test_curfew_period_is_started_only_after_first_publication checks that - publishing the first commitment of a given [inbox_level] after - [inbox_level + challenge_window] is still possible. *) -let test_curfew_period_is_started_only_after_first_publication () = - let open Lwt_result_syntax in - let* block, account1, rollup = init_and_originate Context.T1 in - let* constants = Context.get_constants (B block) in - let challenge_window = - constants.parametric.sc_rollup.challenge_window_in_blocks - in - let commitment_period = - constants.parametric.sc_rollup.commitment_period_in_blocks - in - let* block = Block.bake_n commitment_period block in - let* block = Block.bake_n challenge_window block in - let* commitment = dummy_commitment (B block) rollup in - let* operation = Op.sc_rollup_publish (B block) account1 rollup commitment in - let* _block = Block.bake ~operation block in - return_unit - -let test_offline_staker_does_not_prevent_cementation () = - let open Lwt_result_syntax in - let* ctxt, contracts, rollup = init_and_originate Context.T2 in - let contract1, contract2 = contracts in - let* ctxt = bake_blocks_until_next_inbox_level ctxt rollup in - (* A publishes a commitment on C1. *) - let* commitment1 = dummy_commitment (B ctxt) rollup in - let* operation = Op.sc_rollup_publish (B ctxt) contract1 rollup commitment1 in - let* b = Block.bake ~operation ctxt in - - (* We cement C1. *) - let* constants = Context.get_constants (B b) in - let* b = - Block.bake_n constants.parametric.sc_rollup.challenge_window_in_blocks b - in - let* cement_op = Op.sc_rollup_cement (B b) contract1 rollup in - let* b = Block.bake ~operation:cement_op b in - - (* A now goes offline, B takes over. *) - let* commitment2 = dummy_commitment ~predecessor:commitment1 (B b) rollup in - let* operation2 = - Op.sc_rollup_publish (B ctxt) contract2 rollup commitment2 - in - let* b = bake_blocks_until_inbox_level b commitment2 in - let* b = Block.bake ~operation:operation2 b in - - (* We cement C2. *) - let* constants = Context.get_constants (B b) in - let* b = - Block.bake_n constants.parametric.sc_rollup.challenge_window_in_blocks b - in - let* cement_op = Op.sc_rollup_cement (B b) contract2 rollup in - let* _b = Block.bake ~operation:cement_op b in - return_unit - -let init_with_4_conflicts () = - let open Lwt_result_syntax in - let dumb_compressed_state s = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string [s]) - in - let* block, players = context_init (Context.TList 4) in - let pA, pB, pC, pD = - match players with - | [pA; pB; pC; pD] -> (pA, pB, pC, pD) - | _ -> assert false - in - let pA_pkh = Account.pkh_of_contract_exn pA in - let pB_pkh = Account.pkh_of_contract_exn pB in - let pC_pkh = Account.pkh_of_contract_exn pC in - let pD_pkh = Account.pkh_of_contract_exn pD in - let* block, rollup = sc_originate block pA in - - (* The four players stake on a conflicting commitment. *) - let* pA_commitment = - dummy_commitment - ~number_of_ticks:1L - ~compressed_state:(dumb_compressed_state "A") - (B block) - rollup - in - let* pB_commitment = - dummy_commitment - ~number_of_ticks:1L - ~compressed_state:(dumb_compressed_state "B") - (B block) - rollup - in - let* pC_commitment = - dummy_commitment - ~number_of_ticks:1L - ~compressed_state:(dumb_compressed_state "C") - (B block) - rollup - in - let* pD_commitment = - dummy_commitment - ~number_of_ticks:1L - ~compressed_state:(dumb_compressed_state "D") - (B block) - rollup - in - let* block = - List.fold_left_es - (fun block (player, commitment) -> - add_publish ~rollup block player commitment) - block - [ - (pA, pA_commitment); - (pB, pB_commitment); - (pC, pC_commitment); - (pD, pD_commitment); - ] - in - return (block, rollup, (pA, pA_pkh), (pB, pB_pkh), (pC, pC_pkh), (pD, pD_pkh)) - -let start_refutation_game_op block rollup (p1, p1_pkh) p2_pkh = - let open Lwt_result_wrap_syntax in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let*@ (p1_point, p2_point), _ctxt = - Sc_rollup.Refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - p1_pkh - p2_pkh - in - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = p1_point.hash; - opponent_commitment_hash = p2_point.hash; - } - in - Op.sc_rollup_refute (B block) p1 rollup p2_pkh refutation - -(** Test that when A plays against B, C, D and if A losts the game against - one of them, the others can win against A for free. *) -let test_winner_by_forfeit () = - let open Lwt_result_syntax in - let* block, rollup, (pA, pA_pkh), (pB, pB_pkh), (pC, pC_pkh), (pD, pD_pkh) = - init_with_4_conflicts () - in - - (* Refutation game starts: A against B, C and D. *) - (* A starts against B and D so it can be timeouted. *) - let* pA_against_pB_op = - start_refutation_game_op block rollup (pA, pA_pkh) pB_pkh - in - let* pA_against_pD_op = - start_refutation_game_op block rollup (pA, pA_pkh) pD_pkh - in - let* pA_op = - Op.batch_operations - ~recompute_counters:true - ~source:pA - (B block) - [pA_against_pB_op; pA_against_pD_op] - in - (* C starts against A so it can win through a move. *) - let* pC_against_pA_op = - start_refutation_game_op block rollup (pC, pC_pkh) pA_pkh - in - let* block = Block.bake block ~operations:[pA_op; pC_against_pA_op] in - let* block = bake_timeout_period block in - - (* B timeouts A. *) - let game_index = Sc_rollup.Game.Index.make pA_pkh pB_pkh in - let* pB_timeout = Op.sc_rollup_timeout (B block) pB rollup game_index in - let* block = Block.bake block ~operation:pB_timeout in - - (* C sends a dumb move but A was already slashed. *) - let dumb_dissection = - let choice = Sc_rollup.Tick.initial in - Sc_rollup.Game.(Move {choice; step = Dissection []}) - in - let* pC_move = - Op.sc_rollup_refute (B block) pC rollup pA_pkh dumb_dissection - in - - (* D timeouts A. *) - let game_index = Sc_rollup.Game.Index.make pA_pkh pD_pkh in - let* pD_timeout = Op.sc_rollup_timeout (B block) pD rollup game_index in - - (* Both operation fails with [Unknown staker], because pA was removed when - it lost against B. *) - let* _block = Block.bake ~operations:[pC_move; pD_timeout] block in - return_unit - -(** Test the same property as in {!test_winner_by_forfeit} but where two - players slashed eachother with a draw. *) -let test_winner_by_forfeit_with_draw () = - let open Lwt_result_syntax in - let* block, rollup, (pA, pA_pkh), (pB, pB_pkh), (pC, pC_pkh), (_pD, _pD_pkh) = - init_with_4_conflicts () - in - let* constants = Context.get_constants (B block) in - let Constants.Parametric.{timeout_period_in_blocks; stake_amount; _} = - constants.parametric.sc_rollup - in - - (* A and B starts a refutation game against C. *) - let* pA_against_pC_op = - start_refutation_game_op block rollup (pA, pA_pkh) pC_pkh - in - let* pB_against_pC_op = - start_refutation_game_op block rollup (pB, pB_pkh) pC_pkh - in - - let* block = Block.bake block ~operation:pA_against_pC_op in - let* block = Block.bake block ~operation:pB_against_pC_op in - - (* A starts a refutation against B. *) - let* frozen_bonds_pA = Context.Contract.frozen_bonds (B block) pA in - let* frozen_bonds_pB = Context.Contract.frozen_bonds (B block) pB in - let* pA_against_pB_op = - start_refutation_game_op block rollup (pA, pA_pkh) pB_pkh - in - let* block = Block.bake block ~operation:pA_against_pB_op in - - (* A and B will both make an invalid move and ends up in a draw. *) - let* dumb_move = - let choice = Sc_rollup.Tick.initial in - dumb_proof ~choice - in - let* pA_dumb_move_op = - Op.sc_rollup_refute (B block) pA rollup pB_pkh dumb_move - in - let* block = Block.bake block ~operation:pA_dumb_move_op in - let* pB_dumb_move_op = - Op.sc_rollup_refute (B block) pB rollup pA_pkh dumb_move - in - let* block = Block.bake block ~operation:pB_dumb_move_op in - - (* Assert the draw by checking the frozen bonds. *) - let* () = - Assert.frozen_bonds_was_debited - ~loc:__LOC__ - (B block) - pA - frozen_bonds_pA - stake_amount - in - let* () = - Assert.frozen_bonds_was_debited - ~loc:__LOC__ - (B block) - pB - frozen_bonds_pB - stake_amount - in - - (* Now C will win the game against A and B with a timeout. *) - let* block = bake_timeout_period ~timeout_period_in_blocks block in - - (* C timeouts A. *) - let game_index = Sc_rollup.Game.Index.make pC_pkh pA_pkh in - let* pC_timeout_pA = Op.sc_rollup_timeout (B block) pC rollup game_index in - let* block = Block.bake block ~operation:pC_timeout_pA in - - (* C timeouts B. *) - let game_index = Sc_rollup.Game.Index.make pC_pkh pB_pkh in - let* pC_timeout_pB = Op.sc_rollup_timeout (B block) pC rollup game_index in - let* _block = Block.bake block ~operation:pC_timeout_pB in - - return_unit - -let test_conflict_point_on_a_branch () = - let open Lwt_result_wrap_syntax in - let* block, (pA, pB), rollup = - init_and_originate ~sc_rollup_challenge_window_in_blocks:1000 Context.T2 - in - let pA_pkh = Account.pkh_of_contract_exn pA in - let pB_pkh = Account.pkh_of_contract_exn pB in - (* pA stakes on a whole branch. *) - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - let* predecessor = - Context.Sc_rollup.commitment (B block) rollup genesis_info.commitment_hash - in - let* commitments_and_hashes = - gen_commitments (B block) rollup ~predecessor ~num_commitments:10 - in - let commitments, _ = List.split commitments_and_hashes in - let* block = publish_commitments block pA rollup commitments in - (* pB stakes on only one commitment. *) - let pA_commitment, pB_commitment = - let commitment = Stdlib.List.nth commitments 8 in - ( commitment, - { - commitment with - compressed_state = - Sc_rollup.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["foo"]); - } ) - in - let* block = publish_commitments block pB rollup [pB_commitment] in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let*@ ( ( {commitment = _; hash = conflict_pA_hash}, - {commitment = _; hash = conflict_pB_hash} ), - _ctxt ) = - Sc_rollup.Refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - pA_pkh - pB_pkh - in - let pA_hash = hash_commitment pA_commitment in - let pB_hash = hash_commitment pB_commitment in - let expected_conflict = - Sc_rollup.Commitment.Hash.( - equal conflict_pA_hash pA_hash && equal conflict_pB_hash pB_hash) - in - Assert.equal_bool ~loc:__LOC__ true expected_conflict - -let test_agreeing_stakers_cannot_play () = - let open Lwt_result_syntax in - let* block, (pA, pB), rollup = - init_and_originate ~sc_rollup_challenge_window_in_blocks:1009 Context.T2 - in - let pB_pkh = Account.pkh_of_contract_exn pB in - (* pA stakes on a whole branch. *) - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - let* predecessor = - Context.Sc_rollup.commitment (B block) rollup genesis_info.commitment_hash - in - let* commitments_and_hashes = - gen_commitments (B block) rollup ~predecessor ~num_commitments:10 - in - let commitments, _ = List.split commitments_and_hashes in - let* block = publish_commitments block pA rollup commitments in - let* block = publish_commitments block pB rollup commitments in - let _, agreed_commitment_hash = - WithExceptions.Option.get ~loc:__LOC__ - @@ List.last_opt commitments_and_hashes - in - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = agreed_commitment_hash; - opponent_commitment_hash = agreed_commitment_hash; - } - in - let* operation = Op.sc_rollup_refute (B block) pA rollup pB_pkh refutation in - let block_res = Block.bake ~operation block in - assert_fails_with ~__LOC__ block_res Sc_rollup_errors.Sc_rollup_no_conflict - -let test_start_game_on_cemented_commitment () = - let open Lwt_result_syntax in - let* block, (pA, pB), rollup = - init_and_originate ~sc_rollup_challenge_window_in_blocks:1009 Context.T2 - in - let* constants = Context.get_constants (B block) in - let pA_pkh = Account.pkh_of_contract_exn pA in - let pB_pkh = Account.pkh_of_contract_exn pB in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - let* predecessor = - Context.Sc_rollup.commitment (B block) rollup genesis_info.commitment_hash - in - let* commitments_and_hashes = - gen_commitments (B block) rollup ~predecessor ~num_commitments:10 - in - (* pA and pB publishes and cements 10 commitments. *) - let commitments, hashes = List.split commitments_and_hashes in - let* block = publish_commitments block pA rollup commitments in - let* block = publish_commitments block pB rollup commitments in - let* block = - cement_commitments - ~challenge_window_in_blocks: - constants.parametric.sc_rollup.challenge_window_in_blocks - block - rollup - pA - hashes - in - - (* We now check that pA and pB cannot start a refutation against on - cemented commitments. *) - List.iter_es - (fun hash -> - (* The refutation game checks that [pA] stakes on [hash] and - [pB] on [hash]. As the storage keeps in the storage only - the metadata for active commitments, any game started on a cemented - commitment will fail with " not staked on ". *) - let refutation = - Sc_rollup.Game.Start - {player_commitment_hash = hash; opponent_commitment_hash = hash} - in - let* pA_against_pB = - Op.sc_rollup_refute (B block) pA rollup pB_pkh refutation - in - let* pB_against_pA = - Op.sc_rollup_refute (B block) pB rollup pA_pkh refutation - in - (* Even if there is no conflict, the refutation game will reject - it before that. This test behaves as a regression test to prevent - to break this property. *) - let wrong_staker_error pkh = - Sc_rollup_errors.Sc_rollup_wrong_staker_for_conflict_commitment - (pkh, hash) - in - let* () = - let block_res = Block.bake ~operation:pA_against_pB block in - assert_fails_with ~__LOC__ block_res (wrong_staker_error pA_pkh) - in - let* () = - let block_res = Block.bake ~operation:pB_against_pA block in - assert_fails_with ~__LOC__ block_res (wrong_staker_error pB_pkh) - in - return_unit) - hashes - -let test_origination_fails_with_empty_whitelist () = - let open Lwt_result_syntax in - let* b, contract = - Context.init1 - ~sc_rollup_arith_pvm_enable:true - ~sc_rollup_private_enable:true - () - in - let kind = Sc_rollup.Kind.Example_arith in - let* operation, _rollup = - Sc_rollup_helpers.origination_op (B b) contract kind ~whitelist:[] - in - let*! b = Block.bake ~operation b in - Assert.proto_error_with_info - ~loc:__LOC__ - b - "Invalid whitelist: whitelist cannot be empty" - -let test_private_rollup_can_be_deactivated () = - let open Lwt_result_syntax in - let* b, contract = - Context.init1 - ~sc_rollup_arith_pvm_enable:true - ~sc_rollup_private_enable:false - () - in - let kind = Sc_rollup.Kind.Example_arith in - let* operation, _rollup = - Sc_rollup_helpers.origination_op (B b) contract kind ~whitelist:[] - in - let*! b = Block.bake ~operation b in - Assert.proto_error_with_info - ~loc:__LOC__ - b - "Invalid whitelist: must be None when the feature is deactivated" - -let test_private_rollup_publish_succeeds_with_whitelisted_staker () = - let open Lwt_result_syntax in - let* b, contract = - Context.init1 - ~sc_rollup_arith_pvm_enable:true - ~sc_rollup_private_enable:true - () - in - let kind = Sc_rollup.Kind.Example_arith in - let staker_pkh = Account.pkh_of_contract_exn contract in - let* operation, rollup = - Sc_rollup_helpers.origination_op (B b) contract kind ~whitelist:[staker_pkh] - in - let* b = Block.bake ~operation b in - let* commitment = dummy_commitment (B b) rollup in - let* operation = Op.sc_rollup_publish (B b) contract rollup commitment in - let*! _b = Block.bake ~operation b in - return_unit - -let test_private_rollup_publish_fails_with_non_whitelisted_staker () = - let open Lwt_result_syntax in - let* b, (contract1, contract2) = - Context.init2 - ~sc_rollup_arith_pvm_enable:true - ~sc_rollup_private_enable:true - () - in - let kind = Sc_rollup.Kind.Example_arith in - let* operation, rollup = - Sc_rollup_helpers.origination_op - (B b) - contract1 - kind - ~whitelist:[Context.Contract.pkh contract2] - in - let* b = Block.bake ~operation b in - let* commitment = dummy_commitment (B b) rollup in - let* operation = Op.sc_rollup_publish (B b) contract1 rollup commitment in - let*! b = Block.bake ~operation b in - let* () = - Assert.proto_error - ~loc:__LOC__ - b - (( = ) Sc_rollup_errors.Sc_rollup_staker_not_in_whitelist) - in - return_unit - -let test_private_rollup_whitelist_cannot_contain_key_duplication () = - let open Lwt_result_syntax in - let* block, (account1, account2) = context_init Context.T2 in - let account2_pkh = Account.pkh_of_contract_exn account2 in - let originate_with_whitelist ~whitelist block = - sc_originate ?whitelist block account1 - in - let whitelist = Some [account2_pkh; account2_pkh] in - let block_rollup_res = originate_with_whitelist ~whitelist block in - assert_fails_with - ~__LOC__ - block_rollup_res - Sc_rollup_errors.Sc_rollup_duplicated_key_in_whitelist - -let update_whitelist ?(message_index = 1) - ~(genesis_info : Sc_rollup.Commitment.genesis_info) block rollup - updated_whitelist = - let open Lwt_result_syntax in - let output = - make_whitelist_update_output - ~outbox_level:Raw_level.(Int32.to_int @@ to_int32 @@ genesis_info.level) - ~message_index - updated_whitelist - in - let* _res, block = - execute_outbox_message_without_proof_validation - block - rollup - ~cemented_commitment:genesis_info.commitment_hash - output - in - return block - -let verify_whitelist ~__LOC__ block rollup expected_whitelist = - verify_whitelist ~loc:__LOC__ rollup (B block) ~expected_whitelist - -let verify_can_publish_commit_accounts block rollup accounts = - Tezos_base.TzPervasives.List.iter_es - (fun (account, succeed) -> - verify_can_publish_commit ~__LOC__ ~succeed rollup account block) - accounts - -let test_check_initial_whitelist () = - let open Lwt_result_syntax in - let* block, (account1, account2, account3) = context_init Context.T3 in - let account1_pkh = Account.pkh_of_contract_exn account1 in - let whitelist = Some [account1_pkh] in - let* block, rollup = sc_originate ?whitelist block account1 in - (* check initial whitelist *) - let* () = verify_whitelist ~__LOC__ block rollup whitelist in - verify_can_publish_commit_accounts - block - rollup - [(account1, true); (account2, false); (account3, false)] - -let test_whitelist_update_duplicated_keys () = - let open Lwt_result_syntax in - let* block, (account1, account2) = context_init Context.T2 in - let account1_pkh = Account.pkh_of_contract_exn account1 in - let account2_pkh = Account.pkh_of_contract_exn account2 in - let whitelist = Some [account1_pkh] in - let* block, rollup = sc_originate ?whitelist block account1 in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - (* replace whitelist with twice the same keys fails *) - let updated_whitelist = Some [account2_pkh; account2_pkh] in - let block_rollup_res = - update_whitelist ~genesis_info block rollup updated_whitelist - in - assert_fails_with - ~__LOC__ - block_rollup_res - Sc_rollup_errors.Sc_rollup_duplicated_key_in_whitelist - -let test_whitelist_update_empty_list () = - let open Lwt_result_syntax in - let* block, account = context_init Context.T1 in - let account_pkh = Account.pkh_of_contract_exn account in - let whitelist = Some [account_pkh] in - let* block, rollup = sc_originate ?whitelist block account in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - (* update to empty list fails *) - let updated_whitelist = Some [] in - let block_res = - update_whitelist ~genesis_info block rollup updated_whitelist - in - assert_fails_with - ~__LOC__ - block_res - Sc_rollup_errors.Sc_rollup_empty_whitelist - -let test_whitelist_update_two_keys () = - let open Lwt_result_syntax in - let* block, (account1, account2, account3) = context_init Context.T3 in - let account1_pkh = Account.pkh_of_contract_exn account1 in - let account2_pkh = Account.pkh_of_contract_exn account2 in - let account3_pkh = Account.pkh_of_contract_exn account3 in - let whitelist = Some [account1_pkh] in - let* block, rollup = sc_originate ?whitelist block account1 in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - - (* replace whitelist with two keys succeed *) - let updated_whitelist = Some [account2_pkh; account3_pkh] in - let* block = update_whitelist ~genesis_info block rollup updated_whitelist in - let* () = verify_whitelist ~__LOC__ block rollup updated_whitelist in - verify_can_publish_commit_accounts - block - rollup - [(account1, false); (account2, true); (account3, true)] - -let test_whitelist_update_make_rollup_public () = - let open Lwt_result_syntax in - let* block, (account1, account2, account3) = context_init Context.T3 in - let account1_pkh = Account.pkh_of_contract_exn account1 in - let account2_pkh = Account.pkh_of_contract_exn account2 in - let account3_pkh = Account.pkh_of_contract_exn account3 in - let whitelist = Some [account1_pkh] in - let* block, rollup = sc_originate ?whitelist block account1 in - let* genesis_info = Context.Sc_rollup.genesis_info (B block) rollup in - - let* block = - (* replace whitelist with two keys succeed *) - let updated_whitelist = Some [account2_pkh; account3_pkh] in - let* block = - update_whitelist ~genesis_info block rollup updated_whitelist - in - let* () = verify_whitelist ~__LOC__ block rollup updated_whitelist in - let* () = - verify_can_publish_commit_accounts - block - rollup - [(account1, false); (account2, true); (account3, true)] - in - return block - in - (* second update succeed and make the rollup public *) - let updated_whitelist = None in - let* block = - update_whitelist - ~genesis_info - ~message_index:2 - block - rollup - updated_whitelist - in - let* () = verify_whitelist ~__LOC__ block rollup updated_whitelist in - let* () = - verify_can_publish_commit_accounts - block - rollup - [(account1, true); (account2, true); (account3, true)] - in - return_unit - -let tests = - [ - Tztest.tztest - "check effect of disabled arith pvm flag" - `Quick - test_disable_arith_pvm_feature_flag; - Tztest.tztest - "check effect of disabled RISC-V pvm flag" - `Quick - test_disable_riscv_pvm_feature_flag; - Tztest.tztest - "can publish a commit, cement it and withdraw stake" - `Quick - test_publish_cement_and_recover_bond; - Tztest.tztest - "publish will fail if staker is double staking" - `Quick - test_publish_fails_on_double_stake; - Tztest.tztest - "cement will fail if commitment is contested" - `Quick - test_cement_fails_on_conflict; - Tztest.tztest - "check the challenge window period boundaries" - `Quick - test_challenge_window_period_boundaries; - Tztest.tztest - "originating with invalid types" - `Quick - test_originating_with_invalid_types; - Tztest.tztest - "originating with valid type" - `Quick - test_originating_with_valid_type; - Tztest.tztest - "single transaction atomic batch" - `Quick - test_single_transaction_batch; - Tztest.tztest - "execute outbox message against older cemented commitment" - `Quick - test_older_cemented_commitment; - Tztest.tztest - "multi-transaction atomic batch" - `Quick - test_multi_transaction_batch; - Tztest.tztest - "transaction with invalid type" - `Quick - test_transaction_with_invalid_type; - Tztest.tztest "execute same message twice" `Quick test_execute_message_twice; - Tztest.tztest - "execute same message twice against different cemented commitments" - `Quick - test_execute_message_twice_different_cemented_commitments; - Tztest.tztest - "transaction with zero amount ticket" - `Quick - test_zero_amount_ticket; - Tztest.tztest "invalid output proof" `Quick test_invalid_output_proof; - Tztest.tztest - "outbox message that overrides an old slot" - `Quick - test_execute_message_override_applied_messages_slot; - Tztest.tztest - "insufficient ticket balances" - `Quick - test_insufficient_ticket_balances; - Tztest.tztest - "inbox max number of messages per inbox level" - `Quick - test_inbox_max_number_of_messages_per_level; - Tztest.tztest - "a player can't timeout another player before timeout period and related \ - timeout value." - `Quick - test_timeout; - Tztest.tztest - "a player cannot play more than max_number_of_parallel_games games in \ - parallel." - `Quick - test_number_of_parallel_games_bounded; - Tztest.tztest - "Two invalid final moves end the game in a draw situation" - `Quick - test_draw_with_two_invalid_moves; - Tztest.tztest - "Timeout during the final move can end the game in a draw situation" - `Quick - test_timeout_during_final_move; - Tztest.tztest - "Multiple draw in parallel game are valid" - `Quick - test_draw_with_parallel_game; - Tztest.tztest - "Cannot play a dissection when the final move has started" - `Quick - test_dissection_during_final_move; - Tztest.tztest - "Invalid metadata initialization can be refuted" - `Quick - test_refute_invalid_metadata; - Tztest.tztest - "Invalid reveal can be refuted" - `Quick - test_refute_invalid_reveal; - Tztest.tztest - "SOL/Info_per_level/EOL are added in the inbox" - `Quick - test_automatically_added_internal_messages; - Tztest.tztest - "0-tick commitments are forbidden" - `Quick - test_zero_tick_commitment_fails; - Tztest.tztest "the curfew functionality" `Quick test_curfew; - Tztest.tztest - "a commitment can be published after the inbox_level + challenge window \ - is passed." - `Quick - test_curfew_period_is_started_only_after_first_publication; - Tztest.tztest - "An offline staker should not prevent cementation" - `Quick - test_offline_staker_does_not_prevent_cementation; - Tztest.tztest "win refutation game by forfeit" `Quick test_winner_by_forfeit; - Tztest.tztest - "win refutation game by forfeit with draw" - `Quick - test_winner_by_forfeit_with_draw; - Tztest.tztest - "cannot start a game with agreeing stakers" - `Quick - test_agreeing_stakers_cannot_play; - Tztest.tztest - "find conflict point with incomplete branch" - `Quick - test_conflict_point_on_a_branch; - Tztest.tztest - "cannot start a game on a cemented commitment" - `Quick - test_start_game_on_cemented_commitment; - Tztest.tztest - "Origination fails with empty whitelist" - `Quick - test_origination_fails_with_empty_whitelist; - Tztest.tztest - "Origination can be deactivated" - `Quick - test_private_rollup_can_be_deactivated; - Tztest.tztest - "Submit a commitment with a whitelisted staker" - `Quick - test_private_rollup_publish_succeeds_with_whitelisted_staker; - Tztest.tztest - "Submit a commitment with a non-whitelisted staker" - `Quick - test_private_rollup_publish_fails_with_non_whitelisted_staker; - Tztest.tztest - "Originate a rollup with duplicated key in the whitelist fails" - `Quick - test_private_rollup_whitelist_cannot_contain_key_duplication; - Tztest.tztest "Check initial whitelist" `Quick test_check_initial_whitelist; - Tztest.tztest - "Update the whitelist with duplicated keys" - `Quick - test_whitelist_update_duplicated_keys; - Tztest.tztest - "Update the whitelist with an empty list" - `Quick - test_whitelist_update_empty_list; - Tztest.tztest - "Update the whitelist with two distinct keys" - `Quick - test_whitelist_update_two_keys; - Tztest.tztest - "Update the whitelist to make the rollup public" - `Quick - test_whitelist_update_make_rollup_public; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_sc_rollup_transfer.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_sc_rollup_transfer.ml deleted file mode 100644 index 74ce0af6faa1d223ddd8e6b6321d3e79405671a1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_sc_rollup_transfer.ml +++ /dev/null @@ -1,430 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Sc rollup L1/L2 communication - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_sc_rollup_transfer.ml - Subject: Test transfers from Michelson to smart contract rollups -*) - -open Protocol -open Alpha_context - -(* Helpers *) - -exception Unexpected_error - -let check_proto_error ~loc ~exp f trace = - let open Lwt_result_syntax in - let*? proto_trace = - List.map_e - (function - | Environment.Ecoproto_error e -> Ok e - | e -> - error_with - "At %s, expected protocol error %s, got non-protocol error %a in \ - trace %a" - loc - exp - Error_monad.pp - e - Error_monad.pp_print_trace - trace) - trace - in - try f proto_trace - with Unexpected_error -> - failwith - "At %s, expected error %s, got %a" - loc - exp - Error_monad.pp_print_trace - trace - -let sc_originate = Test_sc_rollup.sc_originate - -(* A contract with four entrypoints: - - [transfer_non_zero] takes a [contract int] and attempts to transfer with a - non-zero amount to it. Expected to fail. - - - [transfer_int] takes a [contract int] and transfers an int to it. Expected - to succeed. - - - [transfer_zero_ticket] takes a [contract (ticket string)] and transfers a - zero-amount ticket to it. Expected to fail. - - - [transfer_ticket] takes a [contract (ticket string)] and transfers a - ticket to it. Expected to succeed. -*) -let contract_originate block account = - let script = - {| - parameter (or (contract %transfer_non_zero int) - (or (contract %transfer_int int) - (or (contract %transfer_zero_ticket (ticket string)) - (or (contract %transfer_ticket (ticket string)) - never)))); - storage unit; - code { - UNPAIR; - IF_LEFT { - # transfer_non_zero - PUSH mutez 1; - PUSH int 42; - TRANSFER_TOKENS; - } { - IF_LEFT { - # transfer_int - PUSH mutez 0; - PUSH int 42; - TRANSFER_TOKENS; - } { - IF_LEFT { - # transfer_zero_ticket - PUSH mutez 0; - PUSH nat 0; - PUSH string "ticket payload"; - TICKET; - ASSERT_SOME; - TRANSFER_TOKENS; - } { - IF_LEFT { - # transfer ticket - PUSH mutez 0; - PUSH nat 137; - PUSH string "G"; - TICKET; - ASSERT_SOME; - TRANSFER_TOKENS; - } { - NEVER - } - } - } - }; - NIL operation; - SWAP; - CONS; - PAIR } -|} - in - Contract_helpers.originate_contract_from_string_hash - ~baker:(Context.Contract.pkh account) - ~source_contract:account - ~script - ~storage:"Unit" - block - -let context_init parameters_ty = - let open Lwt_result_syntax in - let* b, c = Test_sc_rollup.context_init T1 in - let* contract, _script, b = contract_originate b c in - let* b, rollup = sc_originate b c ~parameters_ty in - return (b, c, contract, rollup) - -let transfer ?expect_apply_failure b ~from ~to_ ~param ~entrypoint = - let open Lwt_result_syntax in - let parameters = Script.lazy_expr (Expr.from_string param) in - let* op = - Op.transaction - (B b) - from - (Contract.Originated to_) - Tez.zero - ~parameters - ~entrypoint:(Entrypoint.of_string_strict_exn entrypoint) - ~gas_limit:High - in - let* inc = Incremental.begin_construction b in - let* inc = Incremental.add_operation ?expect_apply_failure inc op in - Incremental.finalize_block inc - -(* Tests *) - -(* Test parsing a [contract] with a badly formatted sr1 address. *) -let test_transfer_to_bad_sc_rollup_address () = - let open Lwt_result_syntax in - let* b, c, contract, _rollup = context_init "unit" in - let not_an_sc_rollup_address = {|"sr1Fq8fPi2NjhWUXtcXBggbL6zFjZctDamso"|} in - let* (_b : Block.t) = - transfer - b - ~from:c - ~to_:contract - ~param:not_an_sc_rollup_address - ~entrypoint:"transfer_non_zero" - ~expect_apply_failure: - (check_proto_error ~loc:__LOC__ ~exp:"Invalid_destination_b58check" - @@ function - | [ - Script_interpreter.Bad_contract_parameter _; - Script_tc_errors.Invalid_constant (_loc, _expr, ty); - Destination_repr.Invalid_destination_b58check _; - ] -> - Assert.equal_string - ~loc:__LOC__ - "(contract int)" - (Expr.to_string ty) - | _ -> raise Unexpected_error) - in - return_unit - -(* Now, the address is well-formatted but the rollup does not exist. *) -let test_transfer_to_unknown_sc_rollup_address () = - let open Lwt_result_syntax in - let* b, c, contract, _rollup = context_init "unit" in - let unknown_sc_rollup_address = {|"sr1Fq8fPi2NjhWUXtcXBggbL6zFjZctGkmso"|} in - let* (_b : Block.t) = - transfer - b - ~from:c - ~to_:contract - ~param:unknown_sc_rollup_address - ~entrypoint:"transfer_non_zero" - ~expect_apply_failure: - (check_proto_error ~loc:__LOC__ ~exp:"Sc_rollup_does_not_exist" - @@ function - | [ - Script_interpreter.Bad_contract_parameter _; - Script_tc_errors.Invalid_constant _; - Sc_rollup_errors.Sc_rollup_does_not_exist _; - ] -> - return_unit - | _ -> raise Unexpected_error) - in - return_unit - -(* Now, let's originate an sc rollup, use its address but with a wrong type. *) -let test_transfer_to_wrongly_typed_sc_rollup () = - let open Lwt_result_syntax in - let* b, c, contract, rollup = context_init "unit" in - let param = Format.sprintf "%S" (Sc_rollup.Address.to_b58check rollup) in - let* (_b : Block.t) = - transfer - b - ~from:c - ~to_:contract - ~param - ~entrypoint:"transfer_non_zero" - ~expect_apply_failure: - (check_proto_error ~loc:__LOC__ ~exp:"Inconsistent_types" @@ function - | [ - Script_interpreter.Bad_contract_parameter _; - Script_tc_errors.Invalid_constant _; - Script_tc_errors.Inconsistent_types _; - Script_tc_errors.Inconsistent_types _; - ] -> - return_unit - | _ -> raise Unexpected_error) - in - return_unit - -(* Use the correct type but with a non-zero amount. *) -let test_transfer_non_zero_amount () = - let open Lwt_result_syntax in - let* b, c, contract, rollup = context_init "int" in - let param = Format.sprintf "%S" (Sc_rollup.Address.to_b58check rollup) in - let* (_b : Block.t) = - transfer - b - ~from:c - ~to_:contract - ~param - ~entrypoint:"transfer_non_zero" - ~expect_apply_failure: - (check_proto_error ~loc:__LOC__ ~exp:"Rollup_invalid_transaction_amount" - @@ function - | [ - Script_interpreter.Runtime_contract_error _; - Script_interpreter_defs.Rollup_invalid_transaction_amount; - ] -> - return_unit - | _ -> raise Unexpected_error) - in - return_unit - -(* Use the correct type through an entrypoint but with a non-zero amount. *) -let test_transfer_non_zero_amount_via_entrypoint () = - let open Lwt_result_syntax in - let* b, c, contract, rollup = context_init "int" in - let param = Format.sprintf "%S" (Sc_rollup.Address.to_b58check rollup) in - let* (_b : Block.t) = - transfer - b - ~from:c - ~to_:contract - ~param - ~entrypoint:"transfer_non_zero" - ~expect_apply_failure: - (check_proto_error ~loc:__LOC__ ~exp:"Rollup_invalid_transaction_amount" - @@ function - | [ - Script_interpreter.Runtime_contract_error _; - Script_interpreter_defs.Rollup_invalid_transaction_amount; - ] -> - return_unit - | _ -> raise Unexpected_error) - in - return_unit - -(* Now, transfer with a zero-amount and check that the inbox has been updated correctly. *) -let test_transfer_works () = - let open Lwt_result_wrap_syntax in - let* b, c, contract, rollup = context_init "int" in - let* inbox_before = Context.Sc_rollup.inbox (B b) in - let* expected_inbox_after = - let* inc = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt inc in - let payload = Expr.from_string "42" in - let*@ ctxt = - Sc_rollup.Inbox.add_deposit - ctxt - ~destination:rollup - ~payload - ~sender:contract - ~source:(Context.Contract.pkh c) - in - let incr = Incremental.set_alpha_ctxt inc ctxt in - let* block = Incremental.finalize_block incr in - let* expected_inbox_after = Context.Sc_rollup.inbox (B block) in - return expected_inbox_after - in - let param = Format.sprintf "%S" (Sc_rollup.Address.to_b58check rollup) in - let* b = transfer b ~from:c ~to_:contract ~param ~entrypoint:"transfer_int" in - let* inbox_after = Context.Sc_rollup.inbox (B b) in - let* () = - Assert.not_equal_with_encoding - ~loc:__LOC__ - Sc_rollup.Inbox.encoding - inbox_before - inbox_after - in - Assert.equal_with_encoding - ~loc:__LOC__ - Sc_rollup.Inbox.encoding - inbox_after - expected_inbox_after - -(* Transfer of zero-amount ticket fails. *) -let test_transfer_zero_amount_ticket () = - let open Lwt_result_syntax in - let* b, c, contract, rollup = context_init "ticket string" in - let param = Format.sprintf "%S" (Sc_rollup.Address.to_b58check rollup) in - let* (_b : Block.t) = - transfer - b - ~from:c - ~to_:contract - ~param - ~entrypoint:"transfer_zero_ticket" - ~expect_apply_failure: - (check_proto_error ~loc:__LOC__ ~exp:"Script_rejected" @@ function - | [ - Script_interpreter.Runtime_contract_error _; - Script_interpreter.Reject _; - ] -> - return_unit - | _ -> raise Unexpected_error) - in - return_unit - -(* Transfer of a non-zero-amount ticket works and the balance table is correctly updated. *) -let test_transfer_non_zero_amount_ticket () = - let open Lwt_result_wrap_syntax in - let* b, c, contract, rollup = context_init "ticket string" in - let param = Format.sprintf "%S" (Sc_rollup.Address.to_b58check rollup) in - let* b = - transfer b ~from:c ~to_:contract ~param ~entrypoint:"transfer_ticket" - in - let* ticket_key_for_contract, ticket_key_for_rollup, ctxt = - let* ticket_token = - Ticket_helpers.string_ticket_token - (Contract_hash.to_b58check contract) - "G" - in - let* inc = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt inc in - let*@ ticket_key_for_contract, ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Contract (Originated contract)) - ticket_token - in - let*@ ticket_key_for_rollup, _ctxt = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Destination.Sc_rollup rollup) - ticket_token - in - return (ticket_key_for_contract, ticket_key_for_rollup, ctxt) - in - (* The rollup is the owner of the tickets *) - let* () = - Ticket_helpers.assert_balance - ctxt - ~loc:__LOC__ - ticket_key_for_rollup - (Some 137) - in - (* The contract didn't retain any ticket in the operation *) - let* () = - Ticket_helpers.assert_balance ctxt ~loc:__LOC__ ticket_key_for_contract None - in - return_unit - -let tests = - [ - Tztest.tztest - "Transfer to a bad sc rollup address" - `Quick - test_transfer_to_bad_sc_rollup_address; - Tztest.tztest - "Transfer to an unknown rollup address" - `Quick - test_transfer_to_unknown_sc_rollup_address; - Tztest.tztest - "Transfer with a wrong type" - `Quick - test_transfer_to_wrongly_typed_sc_rollup; - Tztest.tztest - "Transfer with a non-zero amount" - `Quick - test_transfer_non_zero_amount_via_entrypoint; - Tztest.tztest "Transfer works" `Quick test_transfer_works; - Tztest.tztest - "Transfer of zero-amount ticket" - `Quick - test_transfer_zero_amount_ticket; - Tztest.tztest - "Transfer of non-zero-amount ticket" - `Quick - test_transfer_non_zero_amount_ticket; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup transfer", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_transfer.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_transfer.ml deleted file mode 100644 index 3dd1b929a1d0daeea9f937255cc6fb471f2c7e43..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_transfer.ml +++ /dev/null @@ -1,979 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (transfer) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_transfer.ml - Subject: Quantities transfer between contracts. -*) - -open Protocol -open Alpha_context -open Tez_helpers -open Transfers - -(*********************************************************************) -(* Utility functions *) -(*********************************************************************) - -(** - [transfer_to_itself_and_check_balances b fee contract amount] - this function takes a block, an optional parameter fee, - a contract that is a source and a destination contract, - and an amount of tez that one wants to transfer. - - 1- Transfer the amount of tez (w/wo transfer fee) from/to a contract itself. - - 2- Check the equivalent of the balance of the contract before - and after transfer. - - This function returns a pair: - - a block that added the valid transaction - - an valid transaction *) -let transfer_to_itself_and_check_balances ~loc ?policy b ?(fee = Tez.zero) - contract amount = - let open Lwt_result_syntax in - let* bal = Context.Contract.balance (B b) contract in - let* operation = Op.transaction (B b) ~fee contract contract amount in - let* b = Block.bake ?policy ~operation b in - let+ () = Assert.balance_was_debited ~loc (B b) contract bal fee in - (b, operation) - -let ten_tez = of_int 10 - -(*********************************************************************) -(* Tests *) -(*********************************************************************) - -(** Compute a fraction of 2/[n] of the balance of [contract] *) -let two_over_n_of_balance ctxt contract n = - let open Lwt_result_syntax in - let* balance = Context.Contract.balance ctxt contract in - let res = balance /! n in - let res = res *? 2L in - Lwt.return res - -(********************) -(** Single transfer *) - -(********************) - -let single_transfer ?fee ?expect_apply_failure amount = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 () in - let* b = Incremental.begin_construction b in - let* b, _ = - transfer_and_check_balances - ~loc:__LOC__ - ?fee - ?expect_apply_failure - b - contract_1 - contract_2 - amount - in - let* (_ : Block.t) = Incremental.finalize_block b in - return_unit - -(** Single transfer without fee. *) -let test_block_with_a_single_transfer () = single_transfer Tez.one - -(** Single transfer with fee. *) -let test_block_with_a_single_transfer_with_fee () = - single_transfer ~fee:Tez.one Tez.one - -(** Single transfer without fee. *) -let test_transfer_zero_tez () = - let open Lwt_result_syntax in - let expect_apply_failure = function - | Environment.Ecoproto_error (Apply.Empty_transaction _ as err) :: _ -> - Assert.test_error_encodings err ; - return_unit - | _ -> failwith "Empty transaction should fail" - in - single_transfer ~expect_apply_failure Tez.zero - -(** Transfer zero tez from an implicit contract. *) -let test_transfer_zero_implicit () = - let open Lwt_result_syntax in - let* b, dest = Context.init1 () in - let account = Account.new_account () in - let* i = Incremental.begin_construction b in - let src = Contract.Implicit account.Account.pkh in - let* op = Op.transaction (I i) src dest Tez.zero in - let*! res = Incremental.add_operation i op in - Assert.proto_error ~loc:__LOC__ res (function - | Contract_storage.Empty_implicit_contract _ as err -> - Assert.test_error_encodings err ; - true - | _ -> false) - -(** Transfer to originated contract. *) -let test_transfer_to_originate_with_fee () = - let open Lwt_result_syntax in - let* b, contract = Context.init1 ~consensus_threshold:0 () in - let* fee = two_over_n_of_balance (B b) contract 10L in - (* originated contract, paying a fee to originated this contract *) - let* operation, new_contract = - Op.contract_origination (B b) ~fee:ten_tez contract ~script:Op.dummy_script - in - let* b = Block.bake ~operation b in - let* amount = two_over_n_of_balance (B b) contract 3L in - let* i = Incremental.begin_construction b in - let* i, _ = - transfer_and_check_balances ~loc:__LOC__ i ~fee contract new_contract amount - in - let* (_ : Block.t) = Incremental.finalize_block i in - return_unit - -(** Transfer from balance. *) -let test_transfer_amount_of_contract_balance () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 () in - let pkh1 = Context.Contract.pkh contract_1 in - (* given that contract_1 no longer has a sufficient balance to bake, - make sure it cannot be chosen as baker *) - let* b = Incremental.begin_construction b ~policy:(Block.Excluding [pkh1]) in - (* get the balance of the source contract *) - let* balance = Context.Contract.balance (I b) contract_1 in - (* transfer all the tez inside contract 1 *) - let* b, _ = - transfer_and_check_balances ~loc:__LOC__ b contract_1 contract_2 balance - in - let* (_ : Block.t) = Incremental.finalize_block b in - return_unit - -(** Transfer to oneself. *) -let test_transfers_to_self () = - let open Lwt_result_syntax in - let* b, (contract, _) = Context.init2 ~consensus_threshold:0 () in - let* amount = two_over_n_of_balance (B b) contract 3L in - let pkh1 = Context.Contract.pkh contract in - let* b, _ = - transfer_to_itself_and_check_balances - ~loc:__LOC__ - ~policy:(Block.Excluding [pkh1]) - b - contract - amount - in - let* fee = two_over_n_of_balance (B b) contract 5L in - let* _, _ = - transfer_to_itself_and_check_balances - ~loc:__LOC__ - b - ~policy:(Block.Excluding [pkh1]) - ~fee - contract - ten_tez - in - return_unit - -(** Forgot to add the valid transaction into the block. *) -let test_missing_transaction () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 ~consensus_threshold:0 () in - (* given that contract_1 no longer has a sufficient balance to bake, - make sure it cannot be chosen as baker *) - let pkh1 = Context.Contract.pkh contract_1 in - let* i = Incremental.begin_construction b ~policy:(Block.Excluding [pkh1]) in - let* amount = two_over_n_of_balance (B b) contract_1 6L in - (* Do the transfer 3 times from source contract to destination contract *) - let* i = n_transactions 3 i contract_1 contract_2 amount in - (* do the fourth transfer from source contract to destination contract *) - let* (_ : packed_operation) = - Op.transaction (I i) contract_1 contract_2 amount - in - let* (_ : Block.t) = Incremental.finalize_block i in - return_unit - -(** Transfer zero tez to an implicit contract, with fee equals balance of src. *) -let test_transfer_zero_implicit_with_bal_src_as_fee () = - let open Lwt_result_syntax in - let* b, dest = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let src_pkh = account.Account.pkh in - let src = Contract.Implicit src_pkh in - let* operation = - Op.transaction ~force_reveal:true (B b) dest src (Tez.of_mutez_exn 100L) - in - let* b = Block.bake ~operation b in - let* bal_src = Context.Contract.balance (B b) src in - let* () = Assert.equal_tez ~loc:__LOC__ bal_src (Tez.of_mutez_exn 100L) in - let* op = - Op.transaction ~force_reveal:true (B b) ~fee:bal_src src dest Tez.zero - in - (* Transferring zero tez should result in an application failure as - the implicit contract has been depleted. *) - let expect_apply_failure = function - | [ - Environment.Ecoproto_error (Contract_storage.Empty_implicit_contract pkh); - ] - when pkh = src_pkh -> - return_unit - | _ -> assert false - in - let* i = Incremental.begin_construction b in - let* inc = Incremental.add_operation ~expect_apply_failure i op in - let* balance = Context.Contract.balance (I inc) src in - (* We assert that the failing operation was included and that the - fees were taken, effectively depleting the contract. *) - let* () = Assert.equal_tez ~loc:__LOC__ balance Tez.zero in - (* Empty contracts should be unrevealed *) - let* revelead = Context.Contract.is_manager_key_revealed (I inc) src in - when_ revelead (fun () -> - Stdlib.failwith "Empty account still exists and is revealed.") - -(** Transfer zero tez to an originated contract, with fee equals balance of src. *) -let test_transfer_zero_to_originated_with_bal_src_as_fee () = - let open Lwt_result_syntax in - let* b, dest = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let src = Contract.Implicit account.Account.pkh in - let* operation = Op.transaction (B b) dest src (Tez.of_mutez_exn 100L) in - let* b = Block.bake ~operation b in - let* operation, new_contract = - Op.contract_origination (B b) dest ~script:Op.dummy_script - in - let* b = Block.bake ~operation b in - let* bal_src = Context.Contract.balance (B b) src in - let* operation = Op.revelation (B b) ~fee:Tez.zero account.pk in - let* b = Block.bake ~operation b in - let* operation = - Op.transaction (B b) ~fee:bal_src src new_contract Tez.zero - in - let* () = Assert.equal_tez ~loc:__LOC__ bal_src (Tez.of_mutez_exn 100L) in - let* (_ : Block.t) = Block.bake ~operation b in - return_unit - -(** Transfer one tez to an implicit contract, with fee equals balance of src. *) -let test_transfer_one_to_implicit_with_bal_src_as_fee () = - let open Lwt_result_syntax in - let* b, dest = Context.init1 ~consensus_threshold:0 () in - let account = Account.new_account () in - let src = Contract.Implicit account.Account.pkh in - let* operation = Op.transaction (B b) dest src (Tez.of_mutez_exn 100L) in - let* b = Block.bake ~operation b in - let* bal_src = Context.Contract.balance (B b) src in - let* () = Assert.equal_tez ~loc:__LOC__ bal_src (Tez.of_mutez_exn 100L) in - let* operation = Op.revelation (B b) ~fee:Tez.zero account.pk in - let* b = Block.bake ~operation b in - let* op = Op.transaction (B b) ~fee:bal_src src dest Tez.one in - let* i = Incremental.begin_construction b in - let* (_ : Incremental.t) = - Incremental.add_operation i op ~expect_apply_failure:(function - | Environment.Ecoproto_error (Contract_storage.Balance_too_low _ as err) - :: _ -> - Assert.test_error_encodings err ; - return_unit - | t -> failwith "Unexpected error: %a" Error_monad.pp_print_trace t) - in - return_unit - -(********************) -(* The following tests are for different kind of contracts: - - implicit to implicit - - implicit to originated - - originated to implicit - - originated to originated *) - -(********************) - -(** Implicit to Implicit. *) -let test_transfer_from_implicit_to_implicit_contract () = - let open Lwt_result_syntax in - let* b, bootstrap_contract = Context.init1 ~consensus_threshold:0 () in - let account_a = Account.new_account () in - let account_b = Account.new_account () in - let src = Contract.Implicit account_a.Account.pkh in - let* amount1 = two_over_n_of_balance (B b) bootstrap_contract 3L in - let* fee1 = two_over_n_of_balance (B b) bootstrap_contract 10L in - let* i = Incremental.begin_construction b in - let* i, _ = - transfer_and_check_balances - ~with_burn:true - ~loc:__LOC__ - ~fee:fee1 - i - bootstrap_contract - src - amount1 - in - let* b = Incremental.finalize_block i in - let* i = Incremental.begin_construction b in - (* Create an implicit contract as a destination contract. *) - let dest = Contract.Implicit account_b.pkh in - let* amount2 = two_over_n_of_balance (I i) bootstrap_contract 4L in - let* fee2 = two_over_n_of_balance (I i) bootstrap_contract 10L in - (* Transfer from implicit contract to another implicit contract. *) - let* b, _ = - transfer_and_check_balances - ~with_burn:true - ~loc:__LOC__ - ~fee:fee2 - i - src - dest - amount2 - in - let* (_ : Block.t) = Incremental.finalize_block b in - return_unit - -(** Implicit to originated. *) -let test_transfer_from_implicit_to_originated_contract () = - let open Lwt_result_syntax in - let* b, bootstrap_contract = Context.init1 ~consensus_threshold:0 () in - let contract = bootstrap_contract in - let account = Account.new_account () in - let src = Contract.Implicit account.Account.pkh in - let* amount1 = two_over_n_of_balance (B b) bootstrap_contract 3L in - let* i = Incremental.begin_construction b in - (* transfer the money to implicit contract *) - let* i, _ = - transfer_and_check_balances - ~with_burn:true - ~loc:__LOC__ - i - bootstrap_contract - src - amount1 - in - let* b = Incremental.finalize_block i in - let* i = Incremental.begin_construction b in - (* originated contract *) - let* operation, new_contract = - Op.contract_origination - ~force_reveal:true - (I i) - contract - ~script:Op.dummy_script - in - let* i = Incremental.add_operation i operation in - let* amount2 = two_over_n_of_balance (I i) bootstrap_contract 4L in - (* transfer from implicit contract to originated contract *) - let* i, _ = - transfer_and_check_balances ~loc:__LOC__ i src new_contract amount2 - in - let* (_ : Block.t) = Incremental.finalize_block i in - return_unit - -(********************) -(* Slow tests case *) - -(********************) - -let multiple_transfer n ?fee amount = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 ~consensus_threshold:0 () in - let* b = Incremental.begin_construction b in - let* b = n_transactions n b ?fee contract_1 contract_2 amount in - let* (_ : Block.t) = Incremental.finalize_block b in - return_unit - -(** 1- Create a block with two contracts; - 2- Apply 100 transfers. -*) -let test_block_with_multiple_transfers () = multiple_transfer 99 (of_int 1000) - -(** 1- Create a block with two contracts; - 2- Apply 100 transfers with 10tz fee. *) -let test_block_with_multiple_transfers_pay_fee () = - multiple_transfer 10 ~fee:ten_tez (of_int 1000) - -(* TODO : increase the number of operations and add a `Slow tag to it in `tests` *) - -(** 1- Create a block with 8 contracts; - 2- Apply multiple transfers without fees; - 3- Apply multiple transfers with fees. *) -let test_block_with_multiple_transfers_with_without_fee () = - let open Lwt_result_syntax in - let* b, contracts = Context.init_n ~consensus_threshold:0 8 () in - let contracts = Array.of_list contracts in - let* b = Incremental.begin_construction b in - let hundred = of_int 100 in - let ten = of_int 10 in - let twenty = of_int 20 in - let* b = n_transactions 10 b contracts.(0) contracts.(1) Tez.one in - let* b = n_transactions 30 b contracts.(1) contracts.(2) hundred in - let* b = n_transactions 30 b contracts.(1) contracts.(3) hundred in - let* b = n_transactions 30 b contracts.(4) contracts.(3) hundred in - let* b = n_transactions 20 b contracts.(0) contracts.(1) hundred in - let* b = n_transactions 10 b contracts.(1) contracts.(3) hundred in - let* b = n_transactions 10 b contracts.(1) contracts.(3) hundred in - let* b = n_transactions 20 ~fee:ten b contracts.(3) contracts.(4) ten in - let* b = n_transactions 10 ~fee:twenty b contracts.(4) contracts.(5) ten in - let* b = n_transactions 70 ~fee:twenty b contracts.(6) contracts.(0) twenty in - let* b = - n_transactions 550 ~fee:twenty b contracts.(6) contracts.(4) twenty - in - let* b = n_transactions 50 ~fee:ten b contracts.(7) contracts.(5) twenty in - let* b = n_transactions 30 ~fee:ten b contracts.(0) contracts.(7) hundred in - let* b = n_transactions 20 ~fee:ten b contracts.(1) contracts.(0) twenty in - let* (_ : Block.t) = Incremental.finalize_block b in - return_unit - -(** Build a chain that has 10 blocks. *) -let test_build_a_chain () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 ~consensus_threshold:0 () in - let ten = of_int 10 in - let* (_ : Block.t) = - List.fold_left_es - (fun b _ -> - let* b = Incremental.begin_construction b in - let* b, _ = - transfer_and_check_balances ~loc:__LOC__ b contract_1 contract_2 ten - in - Incremental.finalize_block b) - b - (1 -- 10) - in - return_unit - -(*********************************************************************) -(* Expected error test cases *) -(*********************************************************************) - -(** Transferring zero tez is forbidden in implicit contract. *) -let test_empty_implicit () = - let open Lwt_result_syntax in - let* b, dest = Context.init1 () in - let account = Account.new_account () in - let src = Contract.Implicit account.Account.pkh in - let* amount = two_over_n_of_balance (B b) dest 3L in - (* Transfer zero tez from an implicit contract. *) - let* op = Op.transaction (B b) src dest amount in - let* incr = Incremental.begin_construction b in - let*! res = Incremental.add_operation incr op in - Assert.proto_error ~loc:__LOC__ res (function - | Contract_storage.Empty_implicit_contract _ as err -> - Assert.test_error_encodings err ; - true - | _ -> false) - -(** Balance is too low to transfer. *) -let test_balance_too_low fee () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 ~consensus_threshold:0 () in - let* balance1 = Context.Contract.balance (B b) contract_1 in - let* balance2 = Context.Contract.balance (B b) contract_2 in - (* transfer the amount of tez that is bigger than the balance in the source contract *) - let* op = Op.transaction ~fee (B b) contract_1 contract_2 max_tez in - let expect_failure = function - | Environment.Ecoproto_error (Contract_storage.Balance_too_low _ as err) - :: _ -> - Assert.test_error_encodings err ; - return_unit - | t -> failwith "Unexpected error: %a" Error_monad.pp_print_trace t - in - let* i = Incremental.begin_construction b in - if fee > balance1 then - (* The fee is higher than the balance, so the operation validation - fails with the [Balance_too_low] error. *) - let* (_res : Incremental.t) = - Incremental.add_operation ~expect_failure i op - in - return_unit - else - (* The fee is smaller than or equal to the balance, so the - operation is successfully validated and its fees are - taken. However, since the amount to transfer exceeds the - balance, the application has no further effects and the - operation is marked with the [Balance_too_low] error. *) - let* i = - Incremental.add_operation ~expect_apply_failure:expect_failure i op - in - (* contract_1 loses the fees *) - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) contract_1 balance1 fee - in - (* contract_2 is not credited *) - Assert.balance_was_credited ~loc:__LOC__ (I i) contract_2 balance2 Tez.zero - -(** 1- Create a block, and three contracts; - 2- Add a transfer that at the end the balance of a contract is - zero into this block; - 3- Add another transfer that send tez from a zero balance contract; - 4- Catch the expected error: Balance_too_low. *) -let test_balance_too_low_two_transfers fee () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2, contract_3) = - Context.init3 ~consensus_threshold:0 () - in - let* i = Incremental.begin_construction b in - let* balance = Context.Contract.balance (I i) contract_1 in - let res = balance /! 3L in - let*? two_third_of_balance = res *? 2L in - let* i, _ = - transfer_and_check_balances - ~loc:__LOC__ - i - contract_1 - contract_2 - two_third_of_balance - in - let* b = Incremental.finalize_block i in - let* balance1 = Context.Contract.balance (B b) contract_1 in - let* balance3 = Context.Contract.balance (B b) contract_3 in - let* operation = - Op.transaction ~fee (B b) contract_1 contract_3 two_third_of_balance - in - let expect_apply_failure = function - | Environment.Ecoproto_error (Contract_storage.Balance_too_low _ as err) - :: _ -> - Assert.test_error_encodings err ; - return_unit - | t -> failwith "Unexpected error: %a" Error_monad.pp_print_trace t - in - let* i = Incremental.begin_construction b in - let* i = Incremental.add_operation ~expect_apply_failure i operation in - (* contract_1 loses the fees *) - let* () = - Assert.balance_was_debited ~loc:__LOC__ (I i) contract_1 balance1 fee - in - (* contract_3 is not credited *) - Assert.balance_was_credited ~loc:__LOC__ (I i) contract_3 balance3 Tez.zero - -(** The counter is already used for the previous operation. *) -let invalid_counter () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 ~consensus_threshold:0 () in - let* op1 = Op.transaction (B b) contract_1 contract_2 Tez.one in - let* op2 = Op.transaction (B b) contract_1 contract_2 Tez.one in - let* b = Block.bake ~operation:op1 b in - let* i = Incremental.begin_construction b in - let*! b = Incremental.add_operation i op2 in - Assert.proto_error ~loc:__LOC__ b (function - | Contract_storage.Counter_in_the_past _ as err -> - Assert.test_error_encodings err ; - true - | _ -> false) - -(** Same as before but through a different way to perform this - error. *) -let test_add_the_same_operation_twice () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 () in - let* i = Incremental.begin_construction b in - let* i, op_transfer = - transfer_and_check_balances ~loc:__LOC__ i contract_1 contract_2 ten_tez - in - let* b = Incremental.finalize_block i in - let* i = Incremental.begin_construction b in - let* (_ : packed_operation) = - Op.transaction (I i) contract_1 contract_2 ten_tez - in - let*! b = Incremental.add_operation i op_transfer in - Assert.proto_error ~loc:__LOC__ b (function - | Contract_storage.Counter_in_the_past _ as err -> - Assert.test_error_encodings err ; - true - | _ -> false) - -(** The counter is in the future *) -let invalid_counter_in_the_future () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 () in - let* b = Incremental.begin_construction b in - let* cpt = Context.Contract.counter (I b) contract_1 in - let counter = Manager_counter.Internal_for_tests.add cpt 10 in - let* op = Op.transaction (I b) contract_1 contract_2 Tez.one ~counter in - let*! b = Incremental.add_operation b op in - Assert.proto_error ~loc:__LOC__ b (function - | Contract_storage.Counter_in_the_future _ as err -> - Assert.test_error_encodings err ; - true - | _ -> false) - -(** Check ownership. *) -let test_ownership_sender () = - let open Lwt_result_syntax in - let* b, (contract_1, contract_2) = Context.init2 () in - let* b = Incremental.begin_construction b in - (* get the manager of the contract_1 as a sender *) - let* manager = Context.Contract.manager (I b) contract_1 in - let imcontract_1 = Alpha_context.Contract.Implicit manager.pkh in - let* b, _ = - transfer_and_check_balances ~loc:__LOC__ b imcontract_1 contract_2 Tez.one - in - let* (_ : Block.t) = Incremental.finalize_block b in - return_unit - -(*********************************************************************) -(* Random transfer *) - -(* Return a pair of minimum and maximum random number. *) -let random_range (min, max) = - let interv = max - min + 1 in - let init = - Random.self_init () ; - Random.int interv + min - in - init - -(* Return a random contract. *) -let random_contract contract_array = - let i = Random.int (Array.length contract_array) in - contract_array.(i) - -(** Transfer by randomly choose amount 10 contracts, and randomly - choose the amount in the source contract. *) -let test_random_transfer () = - let open Lwt_result_syntax in - let* b, contracts = Context.init_n 10 () in - let contracts = Array.of_list contracts in - let source = random_contract contracts in - let dest = random_contract contracts in - let source_pkh = Context.Contract.pkh source in - (* given that source may not have a sufficient balance for the transfer + to bake, - make sure it cannot be chosen as baker *) - let* amount = Context.Contract.balance (B b) source in - if source = dest then - let* _, _ = - transfer_to_itself_and_check_balances - ~loc:__LOC__ - ~policy:(Block.Excluding [source_pkh]) - b - source - amount - in - return_unit - else - let* i = - Incremental.begin_construction ~policy:(Block.Excluding [source_pkh]) b - in - let* _, _ = transfer_and_check_balances ~loc:__LOC__ i source dest amount in - return_unit - -(** Transfer random transactions. *) -let test_random_multi_transactions () = - let n = random_range (1, 100) in - multiple_transfer n (of_int 100) - -(*********************************************************************) - -let test_bad_entrypoint () = - let open Lwt_result_syntax in - let* b, _c = Context.init1 () in - let* v = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt v in - let storage = "Unit" in - let parameter = "Unit" in - let entrypoint = Entrypoint.of_string_strict_exn "bad entrypoint" in - (* bad entrypoint *) - let*! result = - Contract_helpers.run_script - ctxt - "{parameter unit; storage unit; code { CAR; NIL operation; PAIR }}" - ~entrypoint - ~storage - ~parameter - () - in - match result with - | Ok _ -> Alcotest.fail "expected error" - | Error lst - when List.mem - ~equal:( = ) - (Environment.Ecoproto_error - (Script_tc_errors.No_such_entrypoint entrypoint)) - lst -> - return_unit - | Error errs -> - Alcotest.failf "Unexpected error: %a" Error_monad.pp_print_trace errs - -let test_bad_parameter () = - let open Lwt_result_syntax in - let* b, _c = Context.init1 () in - let* v = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt v in - let storage = "Unit" in - let parameter = "1" in - (* bad parameter *) - let*! result = - Contract_helpers.run_script - ctxt - "{parameter unit; storage unit; code { CAR; NIL operation; PAIR }}" - ~storage - ~parameter - () - in - match result with - | Ok _ -> Alcotest.fail "expected error" - | Error lst - when List.mem - ~equal:( = ) - (Environment.Ecoproto_error - (Script_interpreter.Bad_contract_parameter - (Contract.Originated Contract_helpers.default_self))) - lst -> - return_unit - | Error errs -> - Alcotest.failf "Unexpected error: %a" Error_monad.pp_print_trace errs - -let transfer_to_itself_with_no_such_entrypoint () = - let open Lwt_result_syntax in - let entrypoint = Entrypoint.of_string_strict_exn "bad entrypoint" in - let* b, addr = Context.init1 () in - let* i = Incremental.begin_construction b in - let* transaction = Op.transaction (B b) addr addr Tez.one ~entrypoint in - let expect_apply_failure = function - | Environment.Ecoproto_error (Script_tc_errors.No_such_entrypoint _ as e) - :: _ -> - Assert.test_error_encodings e ; - return_unit - | _ -> failwith "no such entrypoint should fail" - in - let* (_res : Incremental.t) = - Incremental.add_operation ~expect_apply_failure i transaction - in - return_unit - -(** Originates a contract with a [script] and an initial [credit] and - [storage]. *) -let contract_originate ~baker ~block ~script ~credit ~storage ~source = - let open Lwt_result_syntax in - let code = Expr.from_string script in - let script = - Alpha_context.Script.{code = lazy_expr code; storage = lazy_expr storage} - in - let* op, dst = - Op.contract_origination_hash (B block) source ~fee:Tez.zero ~script ~credit - in - let+ state = - Block.bake ~policy:Block.(By_account baker) ~operations:[op] block - in - (state, dst) - -(** Runs a transaction from a [source] to a [destination]. *) -let transfer ?force_reveal ?parameters ~baker ~block ~source ~destination amount - = - let open Lwt_result_syntax in - let* operation = - Op.transaction - ?force_reveal - ?parameters - ~fee:Tez.zero - (B block) - source - destination - amount - in - Block.bake ~policy:Block.(By_account baker) ~operations:[operation] block - -(** The script of a contract that transfers its balance to the caller, and - stores the parameter of the call. *) -let script = - {| { parameter string ; - storage string ; - code { - CAR ; - SOURCE ; - CONTRACT unit ; - ASSERT_SOME ; - BALANCE ; - UNIT ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } -} |} - -(** The tested scenarios are the following : - - - originate a contract with the above [script] and no initial balance, - call it from an account short of sufficient funds to cover storage fees, - and check that this indeed fails. - - - originate a contract with the above [script] and sufficient balance to - cover storage fees of a subsequent call, call the originated contract from - an account short of sufficient funds to cover storage fees, as expected, - this succeeds since the caller receives the originated contract's initial - balance. *) -let test_storage_fees_and_internal_operation () = - let open Lwt_result_syntax in - let* initial_block, contract = Context.init1 ~consensus_threshold:0 () in - let null_string = Expr.from_string "\"\"" in - let caller = Account.new_account () in - (* Initialize a caller account. *) - let* initial_block = - transfer - ~block:initial_block - ~baker:(Context.Contract.pkh contract) - ~source:contract - ~destination:(Contract.Implicit caller.pkh) - Tez.one_mutez - in - (* [originate_and_call] first, originates a contract with an empty string as - initial storage, and an initial credit of [initial_amount]. And then, calls - the originated contract from [caller] with a parameter that allocates - additional storage. *) - let originate_and_call ~initial_block ~initial_amount = - let* block, contract_hash = - contract_originate - ~block:initial_block - ~baker:(Context.Contract.pkh contract) - ~script - ~source:contract - ~credit:initial_amount - ~storage:null_string - in - let random_string = Expr.from_string "\"Abracadabra\"" in - transfer - ~force_reveal:true - ~parameters:(Alpha_context.Script.lazy_expr random_string) - ~block - ~baker:(Context.Contract.pkh contract) - ~source:(Contract.Implicit caller.pkh) - ~destination:(Contract.Originated contract_hash) - Tez.zero - in - (* Ensure failure when the initial balance of the originated contract is not - sufficient to pay storage fees. *) - let*! res = originate_and_call ~initial_block ~initial_amount:Tez.one_mutez in - let* () = - Assert.proto_error_with_info ~loc:__LOC__ res "Cannot pay storage fee" - in - (* Ensure success when the initial balance of the originated contract is - sufficient to pay storage fees. *) - let+ (_ : Block.t) = - originate_and_call ~initial_block ~initial_amount:Tez.one_cent - in - () - -let tests = - [ - (* single transfer *) - Tztest.tztest "single transfer" `Quick test_block_with_a_single_transfer; - Tztest.tztest - "single transfer with fee" - `Quick - test_block_with_a_single_transfer_with_fee; - (* transfer zero tez *) - Tztest.tztest "single transfer zero tez" `Quick test_transfer_zero_tez; - Tztest.tztest - "transfer zero tez from implicit contract" - `Quick - test_transfer_zero_implicit; - Tztest.tztest - "transfer zero tez to an implicit contract with balance of src as fee" - `Quick - test_transfer_zero_implicit_with_bal_src_as_fee; - (* transfer to originated contract *) - Tztest.tztest - "transfer to originated contract paying transaction fee" - `Quick - test_transfer_to_originate_with_fee; - Tztest.tztest - "transfer zero tez to an originated contract with balance of src as fee" - `Quick - test_transfer_zero_to_originated_with_bal_src_as_fee; - (* transfer by the balance of contract *) - Tztest.tztest - "transfer the amount from source contract balance" - `Quick - test_transfer_amount_of_contract_balance; - (* transfer to itself *) - Tztest.tztest "transfers to itself" `Quick test_transfers_to_self; - (* missing operation *) - Tztest.tztest "missing transaction" `Quick test_missing_transaction; - (* transfer from/to implicit/originated contracts*) - Tztest.tztest - "transfer from an implicit to implicit contract" - `Quick - test_transfer_from_implicit_to_implicit_contract; - Tztest.tztest - "transfer from an implicit to an originated contract" - `Quick - test_transfer_from_implicit_to_originated_contract; - (* Slow tests *) - Tztest.tztest - "block with multiple transfers" - `Slow - test_block_with_multiple_transfers; - (* TODO increase the number of transaction times *) - Tztest.tztest - "block with multiple transfer paying fee" - `Slow - test_block_with_multiple_transfers_pay_fee; - Tztest.tztest - "block with multiple transfer without paying fee" - `Slow - test_block_with_multiple_transfers_with_without_fee; - (* build the chain *) - Tztest.tztest "build a chain" `Quick test_build_a_chain; - (* Erroneous *) - Tztest.tztest "empty implicit" `Quick test_empty_implicit; - Tztest.tztest - "balance too low - transfer zero" - `Quick - (test_balance_too_low Tez.zero); - Tztest.tztest "balance too low" `Quick (test_balance_too_low Tez.one); - Tztest.tztest - "balance too low (max fee)" - `Quick - (test_balance_too_low max_tez); - Tztest.tztest - "balance too low with two transfers - transfer zero" - `Quick - (test_balance_too_low_two_transfers Tez.zero); - Tztest.tztest - "balance too low with two transfers" - `Quick - (test_balance_too_low_two_transfers Tez.one); - Tztest.tztest - "transfer one tez to an implicit contract with balance of src as fee" - `Quick - test_transfer_one_to_implicit_with_bal_src_as_fee; - Tztest.tztest "invalid_counter" `Quick invalid_counter; - Tztest.tztest - "add the same operation twice" - `Quick - test_add_the_same_operation_twice; - Tztest.tztest - "invalid_counter_in_the_future" - `Quick - invalid_counter_in_the_future; - Tztest.tztest "ownership sender" `Quick test_ownership_sender; - (* Random tests *) - Tztest.tztest "random transfer" `Quick test_random_transfer; - Tztest.tztest "random multi transfer" `Quick test_random_multi_transactions; - Tztest.tztest "bad entrypoint" `Quick test_bad_entrypoint; - Tztest.tztest "bad parameter" `Quick test_bad_parameter; - Tztest.tztest - "no such entrypoint" - `Quick - transfer_to_itself_with_no_such_entrypoint; - Tztest.tztest - "storage fees after contract call and allocation" - `Quick - test_storage_fees_and_internal_operation; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("transfer", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_transfer_ticket.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_transfer_ticket.ml deleted file mode 100644 index f639b4cc95869022b4a1781d8ae819258dd39ace..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_transfer_ticket.ml +++ /dev/null @@ -1,346 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Transfer_ticket logic - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_transfer_ticket.ml - Subject: Test ticket transfers -*) - -open Protocol -open Alpha_context -open Tezos_micheline - -(* In this test, a ticketer contract mints and transfers a ticket to an implicit account, - who further transfers it to another implicit account. - The ticket balance is inspected for correctness. -*) -let test_mint_deposit_withdraw_implicit_transfer () = - let open Lwt_result_wrap_syntax in - let* block, (account, another_account) = - Context.init2 ~consensus_threshold:0 () - in - let baker = Context.Contract.pkh account in - let* ticketer, _, block = - Contract_helpers.originate_contract_from_string - ~script: - {| - parameter (pair nat nat address) ; - storage unit ; - code { CAR ; - UNPAIR 3 ; - DIG 2 ; - CONTRACT (ticket nat) ; - ASSERT_SOME ; - # contract : nat %ct : nat %qty - PUSH mutez 0 ; - # tez : contract : nat %ct : nat %qty - DIG 3 ; - # nat %qty : tez : contract : nat %ct - DIG 3 ; - # nat %ct : nat %qty : tez : contract - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - UNIT ; - SWAP ; - PAIR } - |} - ~storage:"Unit" - ~source_contract:account - ~baker - block - in - let contents = 42 in - let* block = - let* operation = - Op.transaction - (B block) - ~entrypoint:Entrypoint.default - ~parameters: - (Expr_common.( - pair_n [int (Z.of_int contents); int (Z.of_int 1); address account]) - |> Micheline.strip_locations |> Script.lazy_expr) - ~fee:Tez.one - account - ticketer - (Tez.of_mutez_exn 0L) - in - Block.bake ~operation block - in - let ty = Expr.from_string "nat" in - let* block = - let* operation = - Op.transfer_ticket - (B block) - ~entrypoint:Entrypoint.default - ~source:account - ~ty:(Script.lazy_expr ty) - ~contents: - (Script.lazy_expr @@ Expr.from_string @@ string_of_int contents) - ~amount: - (WithExceptions.Option.get ~loc:__LOC__ - @@ Ticket_amount.of_zint @@ Z.of_int 1) - ~destination:another_account - ~ticketer - in - Block.bake ~operation block - in - let make_ex_token ctxt ~ticketer ~ty ~content = - let*?@ Script_ir_translator.Ex_comparable_ty cty, ctxt = - Script_ir_translator.parse_comparable_ty ctxt @@ Micheline.root ty - in - let*@ contents, ctxt = - Script_ir_translator.parse_comparable_data ctxt cty - @@ Micheline.root content - in - return - (Ticket_token.Ex_token {contents_type = cty; ticketer; contents}, ctxt) - in - let* ctxt = - let+ result = Incremental.begin_construction block in - Incremental.alpha_ctxt result - in - let* token, ctxt = - make_ex_token - ctxt - ~ticketer - ~ty - ~content:(Expr.from_string @@ string_of_int contents) - in - let*@ key, ctxt = - Ticket_balance_key.of_ex_token ctxt ~owner:(Contract another_account) token - in - let*@ amount, _ = Ticket_balance.get_balance ctxt key in - match amount with - | Some amount -> Assert.equal_int ~loc:__LOC__ (Z.to_int amount) 1 - | _ -> return_unit - -(* In this test, a ticketer contract is called to mint and send a ticket - to an implicit account and a contract. Both destinations are given - in a `contract (ticket nat)` value. - Transfer should be possible since the target contract has the right - parameter type under the given entrypoint. -*) -let test_contract_as_ticket_transfer_destination () = - let open Lwt_result_wrap_syntax in - let* block, (account, another_account) = - Context.init2 ~consensus_threshold:0 () - in - let baker = Context.Contract.pkh account in - let* ticketer, _, block = - Contract_helpers.originate_contract_from_string - ~script: - {| - parameter (pair (contract (ticket nat)) nat nat) ; - storage unit ; - code { CAR ; - UNPAIR 3 ; - # contract (ticket nat) : nat %ct : nat %qty - PUSH mutez 0 ; - # tez : contract (ticket nat) : nat %ct : nat %qty - DIG 3 ; - # nat %qty : tez : contract (ticket nat) : nat %ct - DIG 3 ; - # nat %ct : nat %qty : tez : contract (ticket nat) - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - UNIT ; - SWAP ; - PAIR } - |} - ~storage:"Unit" - ~source_contract:account - ~baker - block - in - let* bag, _, block = - Contract_helpers.originate_contract_from_string - ~script: - {| - parameter (or (ticket %save nat) (address %send)); - storage (list (ticket nat)); - code { UNPAIR ; - IF_LEFT - { CONS ; NIL operation ; PAIR } - { SWAP ; - IF_CONS - { DIG 2 ; - CONTRACT %ticket (ticket nat) ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } - { PUSH string "no ticket to send" ; FAILWITH }}} - |} - ~storage:"{}" - ~source_contract:account - ~baker - block - in - let contents = 42 in - let* block = - let* operation = - Op.transaction - (B block) - ~entrypoint:Entrypoint.default - ~parameters: - (Expr_common.( - pair_n - [ - string - (Destination.(to_b58check (Contract account)) - ^ Entrypoint.(to_address_suffix default)); - int (Z.of_int contents); - int (Z.of_int 1); - ]) - |> Micheline.strip_locations |> Script.lazy_expr) - ~fee:Tez.one - account - ticketer - (Tez.of_mutez_exn 0L) - in - Block.bake ~operation block - in - let ty = Expr.from_string "nat" in - let* block = - let* operation = - Op.transfer_ticket - (B block) - ~entrypoint:Entrypoint.default - ~source:account - ~ty:(Script.lazy_expr ty) - ~contents: - (Script.lazy_expr @@ Expr.from_string @@ string_of_int contents) - ~amount: - (WithExceptions.Option.get ~loc:__LOC__ - @@ Ticket_amount.of_zint @@ Z.of_int 1) - ~destination:another_account - ~ticketer - in - Block.bake ~operation block - in - let make_ex_token ctxt ~ticketer ~ty ~content = - let*?@ Script_ir_translator.Ex_comparable_ty cty, ctxt = - Script_ir_translator.parse_comparable_ty ctxt @@ Micheline.root ty - in - let*@ contents, ctxt = - Script_ir_translator.parse_comparable_data ctxt cty - @@ Micheline.root content - in - return - (Ticket_token.Ex_token {contents_type = cty; ticketer; contents}, ctxt) - in - let* ctxt = - let+ result = Incremental.begin_construction block in - Incremental.alpha_ctxt result - in - let* token, ctxt = - make_ex_token - ctxt - ~ticketer - ~ty - ~content:(Expr.from_string @@ string_of_int contents) - in - let*@ key, ctxt = - Ticket_balance_key.of_ex_token ctxt ~owner:(Contract another_account) token - in - let*@ amount, _ = Ticket_balance.get_balance ctxt key in - let* () = - match amount with - | Some amount -> Assert.equal_int ~loc:__LOC__ (Z.to_int amount) 1 - | _ -> return_unit - in - let* block = - let* operation = - Op.transaction - (B block) - ~entrypoint:Entrypoint.default - ~parameters: - (Expr_common.( - pair_n - [ - string - (Destination.(to_b58check (Contract bag)) - ^ Entrypoint.( - to_address_suffix @@ of_string_strict_exn "save")); - int (Z.of_int contents); - int (Z.of_int 1); - ]) - |> Micheline.strip_locations |> Script.lazy_expr) - ~fee:Tez.one - account - ticketer - (Tez.of_mutez_exn 0L) - in - Block.bake ~operation block - in - let* ctxt = - let+ result = Incremental.begin_construction block in - Incremental.alpha_ctxt result - in - let* token, ctxt = - make_ex_token - ctxt - ~ticketer - ~ty - ~content:(Expr.from_string @@ string_of_int contents) - in - let*@ key, ctxt = - Ticket_balance_key.of_ex_token ctxt ~owner:(Contract bag) token - in - let*@ amount, _ = Ticket_balance.get_balance ctxt key in - match amount with - | Some amount -> Assert.equal_int ~loc:__LOC__ (Z.to_int amount) 1 - | _ -> return_unit - -let tests = - [ - Tztest.tztest - "ticket transfer operations" - `Quick - test_mint_deposit_withdraw_implicit_transfer; - Tztest.tztest - "'contract (ticket cty)' as transfer destination" - `Quick - test_contract_as_ticket_transfer_destination; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("transfer ticket", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_voting.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_voting.ml deleted file mode 100644 index 435aab0314a67f51223c40cb2bb6be5194f75bee..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_voting.ml +++ /dev/null @@ -1,2269 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* Copyright (c) 2022 Trili Tech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (voting) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_voting.ml - Subject: On the voting process. - -*) - -open Protocol -open Alpha_context - -(** {2 Constants and ratios used in voting} - - percent_mul denotes the percent multiplier - initial_participation is 7000 that is, 7/10 * percent_mul - the participation EMA ratio pr_ema_weight / den = 7 / 10 - the participation ratio pr_num / den = 2 / 10 - note: we use the same denominator for both participation EMA and participation rate. - supermajority rate is s_num / s_den = 8 / 10 *) -let percent_mul = 100_00 - -let den = 10 - -let initial_participation_num = 7 - -let initial_participation = initial_participation_num * percent_mul / den - -let pr_ema_weight = 8 - -let pr_num = den - pr_ema_weight - -let s_num = 8 - -let s_den = 10 - -let qr_min_num = 2 - -let qr_max_num = 7 - -let expected_qr_num participation_ema = - let participation_ema = Int32.to_int participation_ema in - let participation_ema = participation_ema * den / percent_mul in - Float.( - of_int qr_min_num - +. of_int participation_ema - *. (of_int qr_max_num -. of_int qr_min_num) - /. of_int den) - -(* Protocol_hash.zero is "PrihK96nBAFSxVL1GLJTVhu9YnzkMFiBeuJRPA8NwuZVZCE1L6i" *) -let protos = - Array.map - (fun s -> Protocol_hash.of_b58check_exn s) - [| - "ProtoALphaALphaALphaALphaALphaALphaALpha61322gcLUGH"; - "ProtoALphaALphaALphaALphaALphaALphaALphabc2a7ebx6WB"; - "ProtoALphaALphaALphaALphaALphaALphaALpha84efbeiF6cm"; - "ProtoALphaALphaALphaALphaALphaALphaALpha91249Z65tWS"; - "ProtoALphaALphaALphaALphaALphaALphaALpha537f5h25LnN"; - "ProtoALphaALphaALphaALphaALphaALphaALpha5c8fefgDYkr"; - "ProtoALphaALphaALphaALphaALphaALphaALpha3f31feSSarC"; - "ProtoALphaALphaALphaALphaALphaALphaALphabe31ahnkxSC"; - "ProtoALphaALphaALphaALphaALphaALphaALphabab3bgRb7zQ"; - "ProtoALphaALphaALphaALphaALphaALphaALphaf8d39cctbpk"; - "ProtoALphaALphaALphaALphaALphaALphaALpha3b981byuYxD"; - "ProtoALphaALphaALphaALphaALphaALphaALphaa116bccYowi"; - "ProtoALphaALphaALphaALphaALphaALphaALphacce68eHqboj"; - "ProtoALphaALphaALphaALphaALphaALphaALpha225c7YrWwR7"; - "ProtoALphaALphaALphaALphaALphaALphaALpha58743cJL6FG"; - "ProtoALphaALphaALphaALphaALphaALphaALphac91bcdvmJFR"; - "ProtoALphaALphaALphaALphaALphaALphaALpha1faaadhV7oW"; - "ProtoALphaALphaALphaALphaALphaALphaALpha98232gD94QJ"; - "ProtoALphaALphaALphaALphaALphaALphaALpha9d1d8cijvAh"; - "ProtoALphaALphaALphaALphaALphaALphaALphaeec52dKF6Gx"; - "ProtoALphaALphaALphaALphaALphaALphaALpha841f2cQqajX"; - |] - -(** {2 Helper functions} *) - -let assert_period_kinds expected_kinds kind loc = - let open Lwt_result_syntax in - if - List.exists - (fun expected_kind -> Stdlib.(expected_kind = kind)) - expected_kinds - then return_unit - else - Alcotest.failf - "%s - Unexpected voting period kind - expected %a, got %a" - loc - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") - Voting_period.pp_kind) - expected_kinds - Voting_period.pp_kind - kind - -let assert_period_kind expected_kind = assert_period_kinds [expected_kind] - -let assert_period_index expected_index index loc = - let open Lwt_result_syntax in - if expected_index = index then return_unit - else - Alcotest.failf - "%s - Unexpected voting period index - expected %ld, got %ld" - loc - expected_index - index - -let assert_period_position expected_position position loc = - let open Lwt_result_syntax in - if position = expected_position then return_unit - else - Alcotest.failf - "%s - Unexpected voting period position blocks - expected %ld, got %ld" - loc - expected_position - position - -let assert_period_remaining expected_remaining remaining loc = - let open Lwt_result_syntax in - if remaining = expected_remaining then return_unit - else - Alcotest.failf - "%s - Unexpected voting period remaining blocks - expected %ld, got %ld" - loc - expected_remaining - remaining - -let assert_period ?expected_kind ?expected_kinds ?expected_index - ?expected_position ?expected_remaining b loc = - let open Lwt_result_syntax in - let* {voting_period; position; remaining} = - Context.Vote.get_current_period (B b) - in - let* () = - match (expected_kind, expected_kinds) with - | None, None -> return_unit - | Some expected_kind, None -> - assert_period_kind expected_kind voting_period.kind loc - | None, Some expected_kinds -> - assert_period_kinds expected_kinds voting_period.kind loc - | Some _, Some _ -> - invalid_arg - "assert_period: arguments expected_kind and expected_kinds should \ - not both be provided." - in - let* () = - match expected_index with - | Some expected_index -> - assert_period_index expected_index voting_period.index loc - | None -> return_unit - in - let* () = - match expected_position with - | Some expected_position -> - assert_period_position expected_position position loc - | None -> return_unit - in - match expected_remaining with - | Some expected_remaining -> - assert_period_remaining expected_remaining remaining loc - | None -> return_unit - -let assert_ballots expected_ballots b loc = - let open Lwt_result_syntax in - let* ballots = Context.Vote.get_ballots (B b) in - Assert.equal - ~loc - Vote.equal_ballots - "Unexpected ballots" - Vote.pp_ballots - ballots - expected_ballots - -let assert_empty_ballots b loc = - let open Lwt_result_syntax in - let* () = assert_ballots Vote.ballots_zero b loc in - let* l = Context.Vote.get_ballot_list (B b) in - match l with - | [] -> return_unit - | _ -> failwith "%s - Unexpected ballot list" loc - -let mk_contracts_from_pkh pkh_list = - List.map (fun c -> Contract.Implicit c) pkh_list - -(* get the list of delegates and the list of their voting power from listings *) -let get_delegates_and_power_from_listings b = - let open Lwt_result_syntax in - let+ l = Context.Vote.get_listings (B b) in - (mk_contracts_from_pkh (List.map fst l), List.map snd l) - -(* compute the voting power of each delegate *) -let get_power b delegates loc = - let open Lwt_result_syntax in - List.map_es - (fun delegate -> - let pkh = Context.Contract.pkh delegate in - let* info = Context.Delegate.voting_info (B b) pkh in - match info.voting_power with - | None -> failwith "%s - Missing delegate" loc - | Some power -> return power) - delegates - -(* Checks that the listings are populated *) -let assert_listings_not_empty b ~loc = - let open Lwt_result_syntax in - let* l = Context.Vote.get_listings (B b) in - match l with - | [] -> failwith "Unexpected empty listings (%s)" loc - | _ -> return_unit - -let equal_delegate_info a b = - Option.equal Int64.equal a.Vote.voting_power b.Vote.voting_power - && Option.equal Vote.equal_ballot a.current_ballot b.current_ballot - && List.equal - Protocol_hash.equal - (List.sort Protocol_hash.compare a.current_proposals) - (List.sort Protocol_hash.compare b.current_proposals) - && Int.equal a.remaining_proposals b.remaining_proposals - -let assert_equal_info ~loc a b = - Assert.equal - ~loc - equal_delegate_info - "delegate_info" - Vote.pp_delegate_info - a - b - -let bake_until_first_block_of_next_period ?policy b = - let open Lwt_result_syntax in - let* {remaining; _} = Context.Vote.get_current_period (B b) in - Block.bake_n ?policy Int32.(add remaining one |> to_int) b - -let context_init_tup tup ?(blocks_per_cycle = 4l) = - (* Note that some of these tests assume (more or less) that the - accounts remain active during a voting period, which roughly - translates to the following condition being assumed to hold: - `blocks_per_voting_period <= consensus_rights_delay * blocks_per_cycle.` - We also set baking and attesting rewards to zero in order to - ease accounting of exact baker stake. *) - Context.init_gen - tup - ~blocks_per_cycle - ~cycles_per_voting_period:1l - ~consensus_threshold:0 - ~issuance_weights: - { - base_total_issued_per_minute = Tez.zero; - attesting_reward_weight = 1; - baking_reward_bonus_weight = 1; - baking_reward_fixed_portion_weight = 1; - seed_nonce_revelation_tip_weight = 1; - vdf_revelation_tip_weight = 1; - } - ~nonce_revelation_threshold:2l - -(** [context_init n ()] returns [(block, contracts)] where [block] is - an initial block with [n] bootstrap accounts, and [contracts] is - the list of associated implicit contracts. - - See {!context_init_tup} and {!Context.init_gen} for optional - arguments. *) -let context_init n = context_init_tup (Context.TList n) - -(** [context_init1 ()] returns [(block, contract)] where [block] is an - initial block with one bootstrap account, and [contract] is the - associated implicit contract. *) -let context_init1 = context_init_tup Context.T1 - -(** [context_init2 ()] returns [(block, contracts)] where [block] is - an initial block with two bootstrap accounts, and [contracts] is - the pair of associated implicit contracts. *) -let context_init2 = context_init_tup Context.T2 - -(** Call {!context_init2}, then inject a Proposals operation and bake - blocks in order to move on to an Exploration period. Return a - block, a delegate (distinct from the one who submitted the - Proposals), and the current proposal. *) -let context_init_exploration ?(proposal = protos.(0)) ?blocks_per_cycle () = - let open Lwt_result_syntax in - let* block, (proposer, other_delegate) = context_init2 ?blocks_per_cycle () in - let* operation = Op.proposals (B block) proposer [proposal] in - let* block = Block.bake block ~operation in - let* block = bake_until_first_block_of_next_period block in - let* () = assert_period ~expected_kind:Exploration block __LOC__ in - return (block, other_delegate, proposal) - -let append_loc ~caller_loc loc = - Format.sprintf "%s@.Called from %s" loc caller_loc - -(** {3 Expected protocol errors} *) - -let wrong_error expected_error_name actual_error_trace loc = - failwith - "%s:@,Expected error trace [%s], but got:@,%a" - loc - expected_error_name - Error_monad.pp_print_trace - actual_error_trace - -let missing_signature loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error Operation.Missing_signature] -> return_unit - | err -> wrong_error "Missing_signature" err loc - -let invalid_signature loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error Operation.Invalid_signature] -> return_unit - | err -> wrong_error "Invalid_signature" err loc - -open Validate_errors.Voting - -let wrong_voting_period_index ~current_index ~op_index loc = function - | [ - Environment.Ecoproto_error (Wrong_voting_period_index {expected; provided}); - ] -> - let open Lwt_result_syntax in - let make_loc = append_loc ~caller_loc:loc in - let* () = - Assert.equal_int32 ~loc:(make_loc __LOC__) expected current_index - in - Assert.equal_int32 ~loc:(make_loc __LOC__) provided op_index - | err -> wrong_error "Wrong_voting_period_index" err loc - -let wrong_voting_period_kind loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error (Wrong_voting_period_kind _)] -> return_unit - | err -> wrong_error "Wrong_voting_period_kind" err loc - -let proposals_from_unregistered_delegate loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error (Proposals_from_unregistered_delegate _)] -> - return_unit - | err -> wrong_error "Proposals_from_unregistered_delegate" err loc - -let ballot_from_unregistered_delegate loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error (Ballot_from_unregistered_delegate _)] -> - return_unit - | err -> wrong_error "Ballot_from_unregistered_delegate" err loc - -let source_not_in_vote_listings loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error Source_not_in_vote_listings] -> return_unit - | err -> wrong_error "Source_not_in_vote_listings" err loc - -let empty_proposals loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error Empty_proposals] -> return_unit - | err -> wrong_error "Empty_proposals" err loc - -let proposals_contain_duplicate duplicate_proposal loc = function - | [Environment.Ecoproto_error (Proposals_contain_duplicate {proposal})] -> - Assert.equal_protocol_hash - ~loc:(append_loc ~caller_loc:loc __LOC__) - proposal - duplicate_proposal - | err -> wrong_error "Proposals_contain_duplicate" err loc - -let too_many_proposals loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error (Too_many_proposals _)] -> return_unit - | err -> wrong_error "Too_many_proposals" err loc - -let already_proposed already_proposed_proposal loc = function - | [Environment.Ecoproto_error (Already_proposed {proposal; _})] -> - Assert.equal_protocol_hash - ~loc:(append_loc ~caller_loc:loc __LOC__) - proposal - already_proposed_proposal - | err -> wrong_error "Already_proposed" err loc - -let conflicting_proposals loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error (Conflicting_proposals _)] -> return_unit - | err -> wrong_error "Conflicting_proposals" err loc - -let ballot_for_wrong_proposal ~current_proposal ~op_proposal loc = function - | [ - Environment.Ecoproto_error (Ballot_for_wrong_proposal {current; submitted}); - ] -> - let open Lwt_result_syntax in - let* () = - Assert.equal_protocol_hash - ~loc:(append_loc ~caller_loc:loc __LOC__) - current_proposal - current - in - Assert.equal_protocol_hash - ~loc:(append_loc ~caller_loc:loc __LOC__) - op_proposal - submitted - | err -> wrong_error "Ballot_for_wrong_proposal" err loc - -let already_submitted_a_ballot loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error Already_submitted_a_ballot] -> return_unit - | err -> wrong_error "Already_submitted_a_ballot" err loc - -let conflicting_ballot loc = - let open Lwt_result_syntax in - function - | [Environment.Ecoproto_error (Conflicting_ballot _)] -> return_unit - | err -> wrong_error "Conflicting_ballot" err loc - -let assert_validate_proposals_fails ~expected_error ~proposer ~proposals ?period - block loc = - let open Lwt_result_syntax in - let* operation = Op.proposals (B block) proposer ?period proposals in - Incremental.assert_validate_operation_fails - (expected_error loc) - operation - block - -let assert_validate_ballot_fails ~expected_error ~voter ~proposal ~ballot - ?period block loc = - let open Lwt_result_syntax in - let* operation = Op.ballot (B block) voter ?period proposal ballot in - Incremental.assert_validate_operation_fails - (expected_error loc) - operation - block - -(** {2 Scenarized tests} *) - -(** A normal and successful vote sequence. *) -let test_successful_vote num_delegates () = - let open Lwt_result_syntax in - let open Alpha_context in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / num_delegates)) in - let* b, (_ : Contract.t list) = - context_init ~min_proposal_quorum num_delegates () - in - (* no ballots in proposal period *) - let* () = assert_empty_ballots b __LOC__ in - (* Last baked block is first block of period Proposal *) - let* () = - assert_period - ~expected_kind:Proposal - ~expected_index:0l - ~expected_position:0l - b - __LOC__ - in - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* participation EMA starts at initial_participation *) - let* v = Context.Vote.get_participation_ema b in - let* () = - Assert.equal_int ~loc:__LOC__ initial_participation (Int32.to_int v) - in - (* listings must be populated in proposal period *) - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* beginning of proposal, denoted by _p1; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p1, power_p1 = get_delegates_and_power_from_listings b in - (* no proposals at the beginning of proposal period *) - let* ps = Context.Vote.get_proposals (B b) in - let* () = - if Environment.Protocol_hash.Map.is_empty ps then return_unit - else failwith "%s - Unexpected proposals" __LOC__ - in - (* no current proposal during proposal period *) - let* () = - let* proposal = Context.Vote.get_current_proposal (B b) in - match proposal with - | None -> return_unit - | Some _ -> failwith "%s - Unexpected proposal" __LOC__ - in - let del1 = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates_p1 0 - in - let del2 = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates_p1 1 - in - let pkh1 = Context.Contract.pkh del1 in - let pkh2 = Context.Contract.pkh del2 in - let pow1 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth power_p1 0 in - let pow2 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth power_p1 1 in - let props = - List.map (fun i -> protos.(i)) (2 -- Constants.max_proposals_per_delegate) - in - let* ops1 = Op.proposals (B b) del1 (Protocol_hash.zero :: props) in - let* ops2 = Op.proposals (B b) del2 [Protocol_hash.zero] in - let* b = Block.bake ~operations:[ops1; ops2] b in - let* info1 = Context.Delegate.voting_info (B b) pkh1 in - let* info2 = Context.Delegate.voting_info (B b) pkh2 in - let* () = - assert_equal_info - ~loc:__LOC__ - info1 - { - voting_power = Some pow1; - current_ballot = None; - current_proposals = Protocol_hash.zero :: props; - remaining_proposals = 0; - } - in - let* () = - assert_equal_info - ~loc:__LOC__ - info2 - { - voting_power = Some pow2; - current_ballot = None; - current_proposals = [Protocol_hash.zero]; - remaining_proposals = Constants.max_proposals_per_delegate - 1; - } - in - (* proposals are now populated *) - let* ps = Context.Vote.get_proposals (B b) in - (* correctly count the double proposal for zero *) - let* () = - let weight = - Int64.add - (WithExceptions.Option.get ~loc:__LOC__ @@ List.nth power_p1 0) - (WithExceptions.Option.get ~loc:__LOC__ @@ List.nth power_p1 1) - in - match Environment.Protocol_hash.(Map.find zero ps) with - | Some v -> - if v = weight then return_unit - else failwith "%s - Wrong count %Ld is not %Ld" __LOC__ v weight - | None -> failwith "%s - Missing proposal" __LOC__ - in - (* proposing more than maximum_proposals fails *) - let* () = - assert_validate_proposals_fails - ~expected_error:too_many_proposals - ~proposer:del1 - ~proposals:(Protocol_hash.zero :: props) - b - __LOC__ - in - (* proposing less than one proposal fails *) - let* () = - assert_validate_proposals_fails - ~expected_error:empty_proposals - ~proposer:del1 - ~proposals:[] - b - __LOC__ - in - (* first block of exploration period *) - let* b = bake_until_first_block_of_next_period b in - (* next block is first block of exploration *) - let* () = - assert_period ~expected_kind:Exploration ~expected_index:1l b __LOC__ - in - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* listings must be populated in proposal period before moving to exploration period *) - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* beginning of exploration period, denoted by _p2; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p2, power_p2 = get_delegates_and_power_from_listings b in - (* no proposals during exploration period *) - let* ps = Context.Vote.get_proposals (B b) in - let* () = - if Environment.Protocol_hash.Map.is_empty ps then return_unit - else failwith "%s - Unexpected proposals" __LOC__ - in - (* current proposal must be set during exploration period *) - let* () = - let* v_opt = Context.Vote.get_current_proposal (B b) in - match v_opt with - | Some v -> - if Protocol_hash.(equal zero v) then return_unit - else failwith "%s - Wrong proposal" __LOC__ - | None -> failwith "%s - Missing proposal" __LOC__ - in - (* unanimous vote: all delegates --active when p2 started-- vote *) - let* operations = - List.map_es - (fun del -> Op.ballot (B b) del Protocol_hash.zero Vote.Yay) - delegates_p2 - in - let* b = Block.bake ~operations b in - let* info1 = Context.Delegate.voting_info (B b) pkh1 in - let* () = - assert_equal_info - ~loc:__LOC__ - info1 - { - voting_power = Some pow1; - current_ballot = Some Yay; - current_proposals = []; - remaining_proposals = 0; - } - in - (* Submitting a second ballot for [del1] fails (indeed, [del1] - belongs to [delegates_p2], so they have already sent a ballot - during the unanimous vote right above). *) - let* () = - assert_validate_ballot_fails - ~expected_error:already_submitted_a_ballot - ~voter:del1 - ~proposal:Protocol_hash.zero - ~ballot:Vote.Nay - b - __LOC__ - in - (* Allocate votes from weight of active delegates *) - List.fold_left (fun acc v -> Int64.(add v acc)) 0L power_p2 - |> fun power_sum -> - (* # of Yay in ballots matches votes of the delegates *) - let* () = - assert_ballots Vote.{yay = power_sum; nay = 0L; pass = 0L} b __LOC__ - in - (* One Yay ballot per delegate *) - let* () = - let* l_opt = Context.Vote.get_ballot_list (B b) in - match l_opt with - | [] -> failwith "%s - Unexpected empty ballot list" __LOC__ - | l -> - List.iter_es - (fun delegate -> - let pkh = Context.Contract.pkh delegate in - match List.find_opt (fun (del, _) -> del = pkh) l with - | None -> failwith "%s - Missing delegate" __LOC__ - | Some (_, Vote.Yay) -> return_unit - | Some _ -> failwith "%s - Wrong ballot" __LOC__) - delegates_p2 - in - (* skip to cooldown period *) - let* b = bake_until_first_block_of_next_period b in - let* () = - assert_period ~expected_index:2l ~expected_kind:Cooldown b __LOC__ - in - (* no ballots in cooldown period *) - let* () = assert_empty_ballots b __LOC__ in - (* listings must be populated in cooldown period before moving to promotion_vote period *) - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* skip to promotion period *) - let* b = bake_until_first_block_of_next_period b in - let* () = - assert_period ~expected_kind:Promotion ~expected_index:3l b __LOC__ - in - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* period 3 *) - (* listings must be populated in promotion period *) - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* beginning of promotion period, denoted by _p4; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p4, power_p4 = get_delegates_and_power_from_listings b in - (* no proposals during promotion period *) - let* ps = Context.Vote.get_proposals (B b) in - let* () = - if Environment.Protocol_hash.Map.is_empty ps then return_unit - else failwith "%s - Unexpected proposals" __LOC__ - in - (* current proposal must be set during promotion period *) - let* () = - let* v_opt = Context.Vote.get_current_proposal (B b) in - match v_opt with - | Some v -> - if Protocol_hash.(equal zero v) then return_unit - else failwith "%s - Wrong proposal" __LOC__ - | None -> failwith "%s - Missing proposal" __LOC__ - in - (* unanimous vote: all delegates --active when p4 started-- vote *) - let* operations = - List.map_es - (fun del -> Op.ballot (B b) del Protocol_hash.zero Vote.Yay) - delegates_p4 - in - let* b = Block.bake ~operations b in - List.fold_left (fun acc v -> Int64.(add v acc)) 0L power_p4 - |> fun power_sum -> - (* # of Yays in ballots matches voting power of the delegate *) - let* () = - assert_ballots Vote.{yay = power_sum; nay = 0L; pass = 0L} b __LOC__ - in - (* One Yay ballot per delegate *) - let* () = - let* l_opt = Context.Vote.get_ballot_list (B b) in - match l_opt with - | [] -> failwith "%s - Unexpected empty ballot list" __LOC__ - | l -> - List.iter_es - (fun delegate -> - let pkh = Context.Contract.pkh delegate in - match List.find_opt (fun (del, _) -> del = pkh) l with - | None -> failwith "%s - Missing delegate" __LOC__ - | Some (_, Vote.Yay) -> return_unit - | Some _ -> failwith "%s - Wrong ballot" __LOC__) - delegates_p4 - in - (* skip to end of promotion period and activation*) - let* b = bake_until_first_block_of_next_period b in - let* () = - assert_period ~expected_kind:Adoption ~expected_index:4l b __LOC__ - in - (* skip to end of Adoption period and bake 1 more to activate *) - let* b = bake_until_first_block_of_next_period b in - let* () = - assert_period ~expected_kind:Proposal ~expected_index:5l b __LOC__ - in - let* () = assert_listings_not_empty b ~loc:__LOC__ in - (* zero is the new protocol (before the vote this value is unset) *) - let*! p = Context.Vote.get_protocol b in - let* () = - Assert.equal - ~loc:__LOC__ - Protocol_hash.equal - "Unexpected proposal" - Protocol_hash.pp - p - Protocol_hash.zero - in - return_unit - -(* given a list of active delegates, - return the first k active delegates with which one can have quorum, that is: - their voting power divided by the total voting power is bigger than pr_ema_weight/den *) -let get_smallest_prefix_voters_for_quorum active_delegates active_power - participation_ema = - let expected_quorum = expected_qr_num participation_ema in - List.fold_left (fun acc v -> Int64.(add v acc)) 0L active_power - |> fun active_power_sum -> - let rec loop delegates power sum selected = - match (delegates, power) with - | [], [] -> selected - | del :: delegates, del_power :: power -> - if - den * sum - < Float.to_int (expected_quorum *. Int64.to_float active_power_sum) - then - loop delegates power (sum + Int64.to_int del_power) (del :: selected) - else selected - | _, _ -> [] - in - loop active_delegates active_power 0 [] - -let get_expected_participation_ema power voter_power old_participation_ema = - (* formula to compute the updated participation_ema *) - let get_updated_participation_ema old_participation_ema participation = - ((pr_ema_weight * Int32.to_int old_participation_ema) - + (pr_num * participation)) - / den - in - List.fold_left (fun acc v -> Int64.(add v acc)) 0L power |> fun power_sum -> - List.fold_left (fun acc v -> Int64.(add v acc)) 0L voter_power - |> fun voter_power_sum -> - let participation = - Int64.(to_int (div (mul voter_power_sum (of_int percent_mul)) power_sum)) - in - get_updated_participation_ema old_participation_ema participation - -(** If not enough quorum - -- get_updated_participation_ema < pr_ema_weight/den -- - in exploration, go back to proposal period. *) -let test_not_enough_quorum_in_exploration num_delegates () = - let open Lwt_result_syntax in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / num_delegates)) in - let* b, delegates = context_init ~min_proposal_quorum num_delegates () in - (* proposal period *) - let open Alpha_context in - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - let proposer = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 - in - let* operation = Op.proposals (B b) proposer [Protocol_hash.zero] in - let* b = Block.bake ~operation b in - (* skip to exploration period *) - let* b = bake_until_first_block_of_next_period b in - (* we moved to an exploration period with one proposal *) - let* () = assert_period ~expected_kind:Exploration b __LOC__ in - let* initial_participation_ema = Context.Vote.get_participation_ema b in - (* beginning of exploration period, denoted by _p2; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p2, power_p2 = get_delegates_and_power_from_listings b in - let* participation_ema = Context.Vote.get_participation_ema b in - get_smallest_prefix_voters_for_quorum delegates_p2 power_p2 participation_ema - |> fun voters -> - (* take the first two voters out so there cannot be quorum *) - let voters_without_quorum = - WithExceptions.Option.get ~loc:__LOC__ @@ List.tl voters - in - let* voters_power_in_exploration = - get_power b voters_without_quorum __LOC__ - in - (* all voters_without_quorum vote, for yays; - no nays, so supermajority is satisfied *) - let* operations = - List.map_es - (fun del -> Op.ballot (B b) del Protocol_hash.zero Vote.Yay) - voters_without_quorum - in - let* b = Block.bake ~operations b in - (* bake to next period *) - let* b = bake_until_first_block_of_next_period b in - (* we move back to the proposal period because not enough quorum *) - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - (* check participation_ema update *) - get_expected_participation_ema - power_p2 - voters_power_in_exploration - initial_participation_ema - |> fun expected_participation_ema -> - let* new_participation_ema = Context.Vote.get_participation_ema b in - (* assert the formula to calculate participation_ema is correct *) - let* () = - Assert.equal_int - ~loc:__LOC__ - expected_participation_ema - (Int32.to_int new_participation_ema) - in - return_unit - -(** If not enough quorum - -- get_updated_participation_ema < pr_ema_weight/den -- - In promotion period, go back to proposal period. *) -let test_not_enough_quorum_in_promotion num_delegates () = - let open Lwt_result_syntax in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / num_delegates)) in - let* b, delegates = context_init ~min_proposal_quorum num_delegates () in - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - let proposer = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 - in - let* operation = Op.proposals (B b) proposer [Protocol_hash.zero] in - let* b = Block.bake ~operation b in - (* skip to exploration period *) - let* b = bake_until_first_block_of_next_period b in - (* we moved to an exploration period with one proposal *) - let* () = assert_period ~expected_kind:Exploration b __LOC__ in - (* beginning of exploration period, denoted by _p2; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p2, power_p2 = get_delegates_and_power_from_listings b in - let* participation_ema = Context.Vote.get_participation_ema b in - get_smallest_prefix_voters_for_quorum delegates_p2 power_p2 participation_ema - |> fun voters -> - let open Alpha_context in - (* all voters vote, for yays; - no nays, so supermajority is satisfied *) - let* operations = - List.map_es - (fun del -> Op.ballot (B b) del Protocol_hash.zero Vote.Yay) - voters - in - let* b = Block.bake ~operations b in - (* skip to first block cooldown period *) - let* b = bake_until_first_block_of_next_period b in - (* we move to cooldown because we have supermajority and enough quorum *) - let* () = assert_period ~expected_kind:Cooldown b __LOC__ in - (* skip to first block of promotion period *) - let* b = bake_until_first_block_of_next_period b in - let* () = - assert_period ~expected_kind:Promotion b __LOC__ - (* let* b = bake_until_first_block_of_next_period ~offset:1l b - * in assert_period ~expected_kind:Promotion b __LOC__ *) - in - let* initial_participation_ema = Context.Vote.get_participation_ema b in - (* beginning of promotion period, denoted by _p4; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p4, power_p4 = get_delegates_and_power_from_listings b in - let* participation_ema = Context.Vote.get_participation_ema b in - get_smallest_prefix_voters_for_quorum delegates_p4 power_p4 participation_ema - |> fun voters -> - (* take the first voter out so there cannot be quorum *) - let voters_without_quorum = - WithExceptions.Option.get ~loc:__LOC__ @@ List.tl voters - in - let* voter_power = get_power b voters_without_quorum __LOC__ in - (* all voters_without_quorum vote, for yays; - no nays, so supermajority is satisfied *) - let* operations = - List.map_es - (fun del -> Op.ballot (B b) del Protocol_hash.zero Vote.Yay) - voters_without_quorum - in - let* b = Block.bake ~operations b in - (* skip to end of promotion period *) - let* b = bake_until_first_block_of_next_period b in - get_expected_participation_ema power_p4 voter_power initial_participation_ema - |> fun expected_participation_ema -> - let* new_participation_ema = Context.Vote.get_participation_ema b in - (* assert the formula to calculate participation_ema is correct *) - let* () = - Assert.equal_int - ~loc:__LOC__ - expected_participation_ema - (Int32.to_int new_participation_ema) - in - (* we move back to the proposal period because not enough quorum *) - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - let* () = assert_listings_not_empty b ~loc:__LOC__ in - return_unit - -(** Assume the initial balance of accounts allocated by Context.init_n is at - least 4 times the value of the minimal_stake constant. *) -let test_supermajority_in_proposal there_is_a_winner () = - let open Lwt_result_syntax in - let min_proposal_quorum = 0l in - let initial_balance = 1L in - let* b, delegates = - context_init - ~min_proposal_quorum - ~bootstrap_balances:[initial_balance; initial_balance; initial_balance] - 10 - () - in - let* { - parametric = - { - minimal_stake; - minimal_frozen_stake; - adaptive_issuance = {autostaking_enable; _}; - _; - }; - _; - } = - Context.get_constants (B b) - in - let del1 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 in - let del2 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 1 in - let del3 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 2 in - let pkhs = - List.map (fun del -> Context.Contract.pkh del) [del1; del2; del3] - in - let policy = Block.Excluding pkhs in - let* op1 = - Op.transaction - (B b) - (WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 3) - del1 - minimal_stake - in - let* op2 = - Op.transaction - (B b) - (WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 4) - del2 - minimal_stake - in - let*? bal3 = - if there_is_a_winner then Tez_helpers.( *? ) minimal_stake 3L - else - let open Result_syntax in - let* t = Tez_helpers.( *? ) minimal_stake 2L in - Tez_helpers.( +? ) (Tez_helpers.of_mutez initial_balance) t - in - let* op3 = - Op.transaction - (B b) - (WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 5) - del3 - bal3 - in - let* staking_ops = - if autostaking_enable then return_nil - else - let* op4 = - Adaptive_issuance_helpers.stake (B b) del1 minimal_frozen_stake - in - let* op5 = - Adaptive_issuance_helpers.stake (B b) del2 minimal_frozen_stake - in - let* op6 = - Adaptive_issuance_helpers.stake (B b) del3 minimal_frozen_stake - in - return [op4; op5; op6] - in - let* b = Block.bake ~policy ~operations:([op1; op2; op3] @ staking_ops) b in - let* b = bake_until_first_block_of_next_period ~policy b in - (* make the proposals *) - let* ops1 = Op.proposals (B b) del1 [protos.(0)] in - let* ops2 = Op.proposals (B b) del2 [protos.(0)] in - let* ops3 = Op.proposals (B b) del3 [protos.(1)] in - let* b = Block.bake ~policy ~operations:[ops1; ops2; ops3] b in - let* b = bake_until_first_block_of_next_period ~policy b in - (* we remain in the proposal period when there is no winner, - otherwise we move to the exploration period *) - let* () = - if there_is_a_winner then assert_period ~expected_kind:Exploration b __LOC__ - else assert_period ~expected_kind:Proposal b __LOC__ - in - return_unit - -(** After one voting period, if [has_quorum] then the period kind must - have been the cooldown vote. Otherwise, it should have remained in - place in the proposal period. *) -let test_quorum_in_proposal has_quorum () = - let open Lwt_result_syntax in - let total_tokens = 32_000_000_000_000L in - let half_tokens = Int64.div total_tokens 2L in - let* b, delegates = - context_init ~bootstrap_balances:[1L; half_tokens; half_tokens] 3 () - in - let* { - parametric = - {min_proposal_quorum; adaptive_issuance = {autostaking_enable; _}; _}; - _; - } = - Context.get_constants (B b) - in - let del1 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 in - let del2 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 1 in - let pkhs = List.map (fun del -> Context.Contract.pkh del) [del1; del2] in - let policy = Block.Excluding pkhs in - let quorum = - if has_quorum then Int64.of_int32 min_proposal_quorum - else Int64.(sub (of_int32 min_proposal_quorum) 10L) - in - let bal = - Int64.(div (mul total_tokens quorum) 100_00L) |> Tez_helpers.of_mutez - in - let* op2 = Op.transaction (B b) del2 del1 bal in - let* b = Block.bake ~policy ~operation:op2 b in - let* b = - if autostaking_enable then return b - else - let* stake = Adaptive_issuance_helpers.stake (B b) del1 bal in - Block.bake ~policy ~operation:stake b - in - let* b = bake_until_first_block_of_next_period b in - (* make the proposal *) - let* operation = Op.proposals (B b) del1 [protos.(0)] in - let* b = Block.bake ~policy ~operation b in - let* b = bake_until_first_block_of_next_period b in - (* we remain in the proposal period when there is no quorum, - otherwise we move to the cooldown vote period *) - let* () = - if has_quorum then assert_period ~expected_kind:Exploration b __LOC__ - else assert_period ~expected_kind:Proposal b __LOC__ - in - return_unit - -(** If a supermajority is reached, then the voting period must be - reached. Otherwise, it remains in proposal period. *) -let test_supermajority_in_exploration supermajority () = - let open Lwt_result_syntax in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / 100)) in - let* b, delegates = context_init ~min_proposal_quorum 100 () in - let del1 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 in - let proposal = protos.(0) in - let* operation = Op.proposals (B b) del1 [proposal] in - let* b = Block.bake ~operation b in - let* b = bake_until_first_block_of_next_period b in - (* move to exploration *) - let* () = assert_period ~expected_kind:Exploration b __LOC__ in - (* assert our proposal won *) - let* () = - let* v_opt = Context.Vote.get_current_proposal (B b) in - match v_opt with - | Some v -> - if Protocol_hash.(equal proposal v) then return_unit - else failwith "%s - Wrong proposal" __LOC__ - | None -> failwith "%s - Missing proposal" __LOC__ - in - (* beginning of exploration period, denoted by _p2; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p2, _power_p2 = get_delegates_and_power_from_listings b in - (* supermajority means [num_yays / (num_yays + num_nays) >= s_num / s_den], - which is equivalent with [num_yays >= num_nays * s_num / (s_den - s_num)] *) - let num_delegates = List.length delegates_p2 in - let num_nays = num_delegates / 5 in - (* any smaller number will do as well *) - let num_yays = num_nays * s_num / (s_den - s_num) in - (* majority/minority vote depending on the [supermajority] parameter *) - let num_yays = if supermajority then num_yays else num_yays - 1 in - let open Alpha_context in - let nays_delegates, rest = List.split_n num_nays delegates_p2 in - let yays_delegates, _ = List.split_n num_yays rest in - let* operations_yays = - List.map_es - (fun del -> Op.ballot (B b) del proposal Vote.Yay) - yays_delegates - in - let* operations_nays = - List.map_es - (fun del -> Op.ballot (B b) del proposal Vote.Nay) - nays_delegates - in - let operations = operations_yays @ operations_nays in - let* b = Block.bake ~operations b in - let* b = bake_until_first_block_of_next_period b in - let* () = - if supermajority then assert_period ~expected_kind:Cooldown b __LOC__ - else assert_period ~expected_kind:Proposal b __LOC__ - in - return_unit - -(** Test also how the selection scales: all delegates propose max - proposals. *) -let test_no_winning_proposal num_delegates () = - let open Lwt_result_syntax in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / num_delegates)) in - let* b, _ = context_init ~min_proposal_quorum num_delegates () in - (* beginning of proposal, denoted by _p1; - take a snapshot of the active delegates and their voting power from listings *) - let* delegates_p1, _power_p1 = get_delegates_and_power_from_listings b in - let open Alpha_context in - let props = - List.map (fun i -> protos.(i)) (1 -- Constants.max_proposals_per_delegate) - in - (* all delegates active in p1 propose the same proposals *) - let* operations = - List.map_es (fun del -> Op.proposals (B b) del props) delegates_p1 - in - let* b = Block.bake ~operations b in - (* skip to exploration period *) - let* b = bake_until_first_block_of_next_period b in - (* we stay in the same proposal period because no winning proposal *) - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - return_unit - -(** Vote to pass with maximum possible participation_ema (100%), it is - sufficient for the vote quorum to be equal or greater than the - maximum quorum cap. *) -let test_quorum_capped_maximum num_delegates () = - let open Lwt_result_syntax in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / num_delegates)) in - let* b, delegates = context_init ~min_proposal_quorum num_delegates () in - (* set the participation EMA to 100% *) - let*! b = Context.Vote.set_participation_ema b 100_00l in - let* {parametric = {quorum_max; _}; _} = Context.get_constants (B b) in - (* proposal period *) - let open Alpha_context in - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - (* propose a new protocol *) - let protocol = Protocol_hash.zero in - let proposer = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 - in - let* operation = Op.proposals (B b) proposer [protocol] in - let* b = Block.bake ~operation b in - (* skip to exploration period *) - let* b = bake_until_first_block_of_next_period b in - (* we moved to an exploration period with one proposal *) - let* () = assert_period ~expected_kind:Exploration b __LOC__ in - (* take percentage of the delegates equal or greater than quorum_max *) - let minimum_to_pass = - Float.of_int (List.length delegates) - *. Int32.(to_float quorum_max) - /. 100_00. - |> Float.ceil |> Float.to_int - in - let voters = List.take_n minimum_to_pass delegates in - (* all voters vote for yays; no nays, so supermajority is satisfied *) - let* operations = - List.map_es (fun del -> Op.ballot (B b) del protocol Vote.Yay) voters - in - let* b = Block.bake ~operations b in - (* skip to next period *) - let* b = bake_until_first_block_of_next_period b in - (* expect to move to cooldown because we have supermajority and enough quorum *) - assert_period ~expected_kind:Cooldown b __LOC__ - -(** Vote to pass with minimum possible participation_ema (0%), it is - sufficient for the vote quorum to be equal or greater than the - minimum quorum cap. *) -let test_quorum_capped_minimum num_delegates () = - let open Lwt_result_syntax in - let min_proposal_quorum = Int32.(of_int @@ (100_00 / num_delegates)) in - let* b, delegates = context_init ~min_proposal_quorum num_delegates () in - (* set the participation EMA to 0% *) - let*! b = Context.Vote.set_participation_ema b 0l in - let* {parametric = {quorum_min; _}; _} = Context.get_constants (B b) in - (* proposal period *) - let open Alpha_context in - let* () = assert_period ~expected_kind:Proposal b __LOC__ in - (* propose a new protocol *) - let protocol = Protocol_hash.zero in - let proposer = - WithExceptions.Option.get ~loc:__LOC__ @@ List.nth delegates 0 - in - let* operation = Op.proposals (B b) proposer [protocol] in - let* b = Block.bake ~operation b in - (* skip to exploration period *) - let* b = bake_until_first_block_of_next_period b in - (* we moved to an exploration period with one proposal *) - let* () = assert_period ~expected_kind:Exploration b __LOC__ in - (* take percentage of the delegates equal or greater than quorum_min *) - let minimum_to_pass = - Float.of_int (List.length delegates) - *. Int32.(to_float quorum_min) - /. 100_00. - |> Float.ceil |> Float.to_int - in - let voters = List.take_n minimum_to_pass delegates in - (* all voters vote for yays; no nays, so supermajority is satisfied *) - let* operations = - List.map_es (fun del -> Op.ballot (B b) del protocol Vote.Yay) voters - in - let* b = Block.bake ~operations b in - (* skip to next period *) - let* b = bake_until_first_block_of_next_period b in - (* expect to move to cooldown because we have supermajority and enough quorum *) - assert_period ~expected_kind:Cooldown b __LOC__ - -(* gets the voting power *) -let get_voting_power block pkhash = - let ctxt = Context.B block in - Context.get_voting_power ctxt pkhash - -(** Test that the voting power changes if the balance between bakers changes - and the blockchain moves to the next voting period. It also checks that - the total voting power coincides with the addition of the voting powers - of bakers *) -let test_voting_power_updated_each_voting_period () = - let open Lwt_result_syntax in - let init_bal1 = 80_000_000_000L in - let init_bal2 = 48_000_000_000L in - let init_bal3 = 40_000_000_000L in - (* Create three accounts with different amounts *) - let* genesis, contracts = - context_init ~bootstrap_balances:[init_bal1; init_bal2; init_bal3] 3 () - in - let con1 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth contracts 0 in - let con2 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth contracts 1 in - let con3 = WithExceptions.Option.get ~loc:__LOC__ @@ List.nth contracts 2 in - (* Get the key hashes of the bakers *) - let baker1 = Context.Contract.pkh con1 in - let baker2 = Context.Contract.pkh con2 in - let baker3 = Context.Contract.pkh con3 in - (* Retrieve balance of con1 *) - let open Tez_helpers in - let* balance1 = Context.Contract.balance (B genesis) con1 in - let* frozen_deposits1 = - Context.Delegate.current_frozen_deposits (B genesis) baker1 - in - let*? full_balance1 = balance1 +? frozen_deposits1 in - let* () = Assert.equal_tez ~loc:__LOC__ full_balance1 (of_mutez init_bal1) in - (* Retrieve balance of con2 *) - let* balance2 = Context.Contract.balance (B genesis) con2 in - let* frozen_deposits2 = - Context.Delegate.current_frozen_deposits (B genesis) baker2 - in - let*? full_balance2 = balance2 +? frozen_deposits2 in - let* () = Assert.equal_tez ~loc:__LOC__ full_balance2 (of_mutez init_bal2) in - (* Retrieve balance of con3 *) - let* balance3 = Context.Contract.balance (B genesis) con3 in - let* frozen_deposits3 = - Context.Delegate.current_frozen_deposits (B genesis) baker3 - in - let*? full_balance3 = balance3 +? frozen_deposits3 in - let* () = Assert.equal_tez ~loc:__LOC__ full_balance3 (of_mutez init_bal3) in - (* Auxiliary assert_voting_power *) - let assert_voting_power ~loc n block baker = - let* voting_power = get_voting_power block baker in - Assert.equal_int64 ~loc n voting_power - in - (* Auxiliary assert_total_voting_power *) - let assert_total_voting_power ~loc n block = - let* total_voting_power = Context.get_total_voting_power (B block) in - Assert.equal_int64 ~loc n total_voting_power - in - let expected_power_of_baker_1 = Tez.to_mutez full_balance1 in - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_1 genesis baker1 - in - let expected_power_of_baker_2 = Tez.to_mutez full_balance2 in - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_2 genesis baker2 - in - (* Assert total voting power *) - let expected_power_of_baker_3 = Tez.to_mutez full_balance3 in - let* () = - assert_total_voting_power - ~loc:__LOC__ - Int64.( - add - (add expected_power_of_baker_1 expected_power_of_baker_2) - expected_power_of_baker_3) - genesis - in - (* Create policy that excludes baker1 and baker2 from baking *) - let policy = Block.Excluding [baker1; baker2] in - (* Transfer 30,000 tez from baker1 to baker2 *) - let amount = Tez.of_mutez_exn 30_000_000_000L in - let* operation = Op.transaction (B genesis) con1 con2 amount in - (* Bake the block containing the transaction *) - let* block = Block.bake ~policy ~operation genesis in - (* Retrieve balance of con1 *) - let* balance1 = Context.Contract.balance (B block) con1 in - (* Assert balance has changed by deducing the amount *) - let*? balance1_after_deducing_amount = of_mutez init_bal1 -? amount in - let* frozen_deposit1 = - Context.Delegate.current_frozen_deposits (B block) baker1 - in - let* () = - let*? t = balance1_after_deducing_amount -? frozen_deposit1 in - Assert.equal_tez ~loc:__LOC__ balance1 t - in - (* Retrieve balance of con2 *) - let* balance2 = Context.Contract.balance (B block) con2 in - (* Assert balance has changed by adding amount *) - let*? balance2_after_adding_amount = of_mutez init_bal2 +? amount in - let* frozen_deposit2 = - Context.Delegate.current_frozen_deposits (B block) baker2 - in - let* () = - let*? t = balance2_after_adding_amount -? frozen_deposit2 in - Assert.equal_tez ~loc:__LOC__ balance2 t - in - let* block = Block.bake ~policy block in - (* Assert voting power (and total) remains the same before next voting period *) - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_1 block baker1 - in - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_2 block baker2 - in - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_3 block baker3 - in - let* () = - assert_total_voting_power - ~loc:__LOC__ - Int64.( - add - (add expected_power_of_baker_1 expected_power_of_baker_2) - expected_power_of_baker_3) - block - in - let* block = bake_until_first_block_of_next_period block in - (* Assert voting power of baker1 has decreased by [amount] *) - let expected_power_of_baker_1 = - Int64.sub expected_power_of_baker_1 (Tez.to_mutez amount) - in - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_1 block baker1 - in - (* Assert voting power of baker2 has increased by [amount] *) - let expected_power_of_baker_2 = - Int64.add expected_power_of_baker_2 (Tez.to_mutez amount) - in - let* () = - assert_voting_power ~loc:__LOC__ expected_power_of_baker_2 block baker2 - in - (* Retrieve voting power of baker3 *) - let* power = get_voting_power block baker3 in - let power_of_baker_3 = power in - (* Assert total voting power *) - assert_total_voting_power - ~loc:__LOC__ - Int64.( - add - (add expected_power_of_baker_1 expected_power_of_baker_2) - power_of_baker_3) - block - -let test_voting_period_pp () = - let vp = - Voting_period_repr. - { - index = Int32.of_int 123; - kind = Proposal; - start_position = Int32.of_int 321; - } - in - Assert.equal - ~loc:__LOC__ - ( = ) - "Unexpected pretty printing of voting period" - Format.pp_print_string - (Format.asprintf "%a" Voting_period_repr.pp vp) - "index: 123, kind:proposal, start_position: 321" - -(** {2 Validity tests} - - For each vote operation (Proposals and Ballot), we define a serie - of negative tests and a positive test. - - Negative tests target errors that can occur during - application. They check that the appropriate error is triggered. - - If the operation is valid, then its application must succeed when - it is baked into a block. Positive tests observe the effects of the - operation application by comparing the states before and after the - block. *) - -(** {3 Proposal -- Negative tests} *) - -(** Test that a Proposals operation fails when it is unsigned. *) -let test_proposals_missing_signature () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let* contents = Op.proposals_contents (B block) proposer [protos.(0)] in - let op = Op.pack_operation (B block) None contents in - Incremental.assert_validate_operation_fails - (missing_signature __LOC__) - op - block - -(** Test that a Proposals operation fails when its signature is invalid. *) -let test_proposals_invalid_signature () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let* contents = Op.proposals_contents (B block) proposer [protos.(0)] in - let op = Op.pack_operation (B block) (Some Signature.zero) contents in - Incremental.assert_validate_operation_fails - (invalid_signature __LOC__) - op - block - -(** Test that a Proposals operation fails when the period index - provided in the operation is not the current voting period index. *) -let test_proposals_wrong_voting_period_index () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let* current_period = Context.Vote.get_current_period (B block) in - let current_index = current_period.voting_period.index in - let op_index = Int32.succ current_index in - assert_validate_proposals_fails - ~expected_error:(wrong_voting_period_index ~current_index ~op_index) - ~proposer - ~proposals:[Protocol_hash.zero] - ~period:op_index - block - __LOC__ - -(** Test that a Proposals operation fails when it occurs in a - non-Proposal voting period. *) -let test_proposals_wrong_voting_period_kind () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let proposal = protos.(0) in - let assert_proposals_fails_with_unexpected_proposal = - assert_validate_proposals_fails - ~expected_error:wrong_voting_period_kind - ~proposer - ~proposals:[proposal] - in - (* End the initial Proposals period with a submitted - proposal, to move on to an Exploration period. *) - let* operation = Op.proposals (B block) proposer [proposal] in - let* block = Block.bake block ~operation in - let* block = bake_until_first_block_of_next_period block in - (* Proposals during Exploration. *) - let* () = assert_period ~expected_kind:Exploration block __LOC__ in - let* () = assert_proposals_fails_with_unexpected_proposal block __LOC__ in - (* End the Exploration period with enough votes to move on to a - Cooldown period. *) - let* operation = Op.ballot (B block) proposer proposal Vote.Yay in - let* block = Block.bake ~operation block in - let* block = bake_until_first_block_of_next_period block in - (* Proposals during Cooldown. *) - let* () = assert_period ~expected_kind:Cooldown block __LOC__ in - let* () = assert_proposals_fails_with_unexpected_proposal block __LOC__ in - (* Proposals during Promotion. *) - let* block = bake_until_first_block_of_next_period block in - let* () = assert_period ~expected_kind:Promotion block __LOC__ in - let* () = assert_proposals_fails_with_unexpected_proposal block __LOC__ in - (* End the Promotion period with enough votes to move on to an - Adoption period. *) - let* operation = Op.ballot (B block) proposer proposal Vote.Yay in - let* block = Block.bake ~operation block in - let* block = bake_until_first_block_of_next_period block in - (* Proposals during Adoption. *) - let* () = assert_period ~expected_kind:Adoption block __LOC__ in - assert_proposals_fails_with_unexpected_proposal block __LOC__ - -(** Test that a Proposals operation fails when the proposer is not in - the vote listings (with the same error, no matter how far the - source is from being a delegate with voting rights). *) -let test_proposals_source_not_in_vote_listings () = - let open Lwt_result_syntax in - (* The chosen [blocks_per_cycle] is an arbitrary value that we will - not reach with the blocks baked in this test. *) - let* block, funder = context_init1 ~blocks_per_cycle:10l () in - let fresh_account = Account.new_account () in - let proposer = Contract.Implicit fresh_account.pkh in - let assert_fails_with_unregistered_delegate block = - assert_validate_proposals_fails - ~expected_error:proposals_from_unregistered_delegate - ~proposer - ~proposals:[Protocol_hash.zero] - block - in - let assert_fails_with_source_not_in_vote_listings block = - assert_validate_proposals_fails - ~expected_error:source_not_in_vote_listings - ~proposer - ~proposals:[Protocol_hash.zero] - block - in - (* Fail when the source has no contract in the storage. *) - let* () = assert_fails_with_unregistered_delegate block __LOC__ in - let* operation = Op.transaction (B block) funder proposer Tez.one in - let* block = Block.bake block ~operation in - (* Fail when the contract's public key is unreavealed. *) - let* () = assert_fails_with_unregistered_delegate block __LOC__ in - let* operation = Op.revelation (B block) fresh_account.pk in - let* block = Block.bake block ~operation in - (* Fail when the source is not a delegate. *) - let* () = assert_fails_with_unregistered_delegate block __LOC__ in - let* operation = Op.delegation (B block) proposer (Some fresh_account.pkh) in - let* block = Block.bake block ~operation in - (* Fail when the source is a delegate, but not yet in the vote listings. *) - assert_fails_with_source_not_in_vote_listings block __LOC__ - -(** Test that a Proposals operation fails when its proposal list is - empty. *) -let test_empty_proposals () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - assert_validate_proposals_fails - ~expected_error:empty_proposals - ~proposer - ~proposals:[] - block - __LOC__ - -(** Test that a Proposals operation fails when its proposal list - contains multiple occurrences of the same proposal. *) -let test_proposals_contain_duplicate () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - assert_validate_proposals_fails - ~expected_error:(proposals_contain_duplicate protos.(1)) - ~proposer - ~proposals:[protos.(0); protos.(1); protos.(2); protos.(1); protos.(3)] - block - __LOC__ - -(** Test that a Proposals operation fails when it would make the total - count of proposals submitted by the proposer exceed the - [max_proposals_per_delegate] protocol constant. *) -let test_too_many_proposals () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - assert (Array.length protos >= Constants.max_proposals_per_delegate + 1) ; - let proposals = - List.map (Array.get protos) (1 -- Constants.max_proposals_per_delegate) - in - let* operation = Op.proposals (B block) proposer proposals in - let* block = Block.bake block ~operation in - assert_validate_proposals_fails - ~expected_error:too_many_proposals - ~proposer - ~proposals:[protos.(0)] - block - __LOC__ - -(** Test that a Proposals operation fails when one of its proposals has - already been submitted by the same proposer in an earlier block. *) -let test_already_proposed () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let* operation = Op.proposals (B block) proposer [protos.(0); protos.(1)] in - let* block = Block.bake block ~operation in - (* The [proposer] cannot submit protocol [0] again. *) - let* () = - assert_validate_proposals_fails - ~expected_error:(already_proposed protos.(0)) - ~proposer - ~proposals:[protos.(0)] - block - __LOC__ - in - (* The [proposer] cannot submit protocol [1] again, even among other - new proposals. *) - let* () = - assert_validate_proposals_fails - ~expected_error:(already_proposed protos.(1)) - ~proposer - ~proposals:[protos.(2); protos.(1); protos.(3)] - block - __LOC__ - in - (* The initial [operation] cannot be replayed. *) - let* () = - Incremental.assert_validate_operation_fails - (already_proposed protos.(0) __LOC__) - operation - block - in - let* block = bake_until_first_block_of_next_period block in - Incremental.assert_validate_operation_fails - (wrong_voting_period_index ~current_index:1l ~op_index:0l __LOC__) - operation - block - -(** Test that a Proposals operation fails when it would make the total - count of proposals submitted by the proposer exceed the - [max_proposals_per_delegate] protocol constant, because of - previously validated operations in the current block/mempool. *) -let test_conflict_too_many_proposals () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let n_proposals_in_previous_blocks = 5 in - assert (Array.length protos >= Constants.max_proposals_per_delegate + 1) ; - let proposals_in_previous_blocks = - List.map (Array.get protos) (1 -- n_proposals_in_previous_blocks) - in - let* operation = - Op.proposals (B block) proposer proposals_in_previous_blocks - in - let* block = Block.bake block ~operation in - let* current_block_state = Incremental.begin_construction block in - let proposals_in_current_block = - List.map - (Array.get protos) - (n_proposals_in_previous_blocks + 1 - -- Constants.max_proposals_per_delegate) - in - let* op_in_current_block = - Op.proposals (B block) proposer proposals_in_current_block - in - let* current_block_state = - Incremental.validate_operation current_block_state op_in_current_block - in - let* op = Op.proposals (B block) proposer [protos.(0)] in - let* (_i : Incremental.t) = - Incremental.validate_operation - ~expect_failure:(conflicting_proposals __LOC__) - current_block_state - op - in - return_unit - -(** Test that a Proposals operation fails when its source has already - submitted a Proposals operation in the current block/mempool. *) -let test_conflicting_proposal () = - let open Lwt_result_syntax in - let* block, proposer = context_init1 () in - let proposal = protos.(0) in - let* current_block_state = Incremental.begin_construction block in - let* op_in_current_block = Op.proposals (B block) proposer [proposal] in - let* current_block_state = - Incremental.validate_operation current_block_state op_in_current_block - in - let* op = Op.proposals (B block) proposer [proposal] in - let* (_i : Incremental.t) = - Incremental.validate_operation - ~expect_failure:(conflicting_proposals __LOC__) - current_block_state - op - in - let proposal' = protos.(1) in - let* op' = Op.proposals (B block) proposer [proposal'] in - let* (_i : Incremental.t) = - Incremental.validate_operation - ~expect_failure:(conflicting_proposals __LOC__) - current_block_state - op' - in - return_unit - -(** {3 Proposals -- Positive test} - - A Proposals operation is valid when: - - - its source is a registered delegate and belongs to the voting - listings, - - - the current voting period is a Proposal period and has the same - index as the period provided in the operation, - - - its list of proposals is not empty, - - - it won't make the total proposal count of the proposer exceed - the [max_proposals_per_delegate] protocol constant, and - - - its signature is valid. - - We can observe the successful application of the Proposals - operation from a pre-state to a post-state as follows: - - - the proposal count of the proposer has been incremented by the - number of proposals in the operation, - - - the operation proposals have been added to the recorded - proposals of the proposer, and - - - the total weight supporting each of the proposals has been - incremented by the voting power of the proposer. *) - -let observe_proposals pre_state post_state op caller_loc = - let open Lwt_result_syntax in - let make_loc = append_loc ~caller_loc in - let* (Proposals {source; period; proposals}) = - let (Operation_data {contents; _}) = op.protocol_data in - match contents with - | Single (Proposals _ as contents) -> return contents - | _ -> failwith "%s - Expected a Proposals operation" (make_loc __LOC__) - in - - (* Validity conditions *) - let proposals_num = List.length proposals in - let* () = Assert.not_equal_int ~loc:(make_loc __LOC__) 0 proposals_num in - let* () = - assert_period ~expected_kind:Proposal pre_state (make_loc __LOC__) - in - let* pre_period = Context.Vote.get_current_period (B pre_state) in - let* () = - Assert.equal_int32 - ~loc:(make_loc __LOC__) - period - pre_period.voting_period.index - in - let* del = - Context.Contract.delegate (B pre_state) (Contract.Implicit source) - in - let* () = Assert.equal_pkh ~loc:(make_loc __LOC__) source del in - let* dels, _powers = get_delegates_and_power_from_listings pre_state in - assert (List.mem ~equal:Contract.equal (Contract.Implicit source) dels) ; - let* pre_voting_infos = Context.Delegate.voting_info (B pre_state) source in - let* () = - Assert.not_equal_int - ~loc:(make_loc __LOC__) - 0 - pre_voting_infos.remaining_proposals - in - let* () = - Assert.leq_int - ~loc:(make_loc __LOC__) - proposals_num - pre_voting_infos.remaining_proposals - in - - (* Observations *) - (* Check [voting_info] update. *) - let* post_voting_infos = Context.Delegate.voting_info (B post_state) source in - let* () = - Assert.equal_int - ~loc:(make_loc __LOC__) - post_voting_infos.remaining_proposals - (pre_voting_infos.remaining_proposals - proposals_num) - in - assert ( - List.for_all - (fun a -> Stdlib.List.mem a post_voting_infos.current_proposals) - proposals) ; - (* Check [Storage.Vote.Proposals_count] update. *) - let* proposal_count_pre = - Context.Vote.get_delegate_proposal_count (B pre_state) source - in - let* proposal_count_post = - Context.Vote.get_delegate_proposal_count (B post_state) source - in - let* () = - Assert.equal_int - ~loc:(make_loc __LOC__) - (proposal_count_pre + proposals_num) - proposal_count_post - in - (* Check the update of the total weight of supporters for each proposal. *) - let* proposal_weights_pre = Context.Vote.get_proposals (B pre_state) in - let* proposal_weights_post = Context.Vote.get_proposals (B post_state) in - let* source_power = - Assert.get_some ~loc:(make_loc __LOC__) pre_voting_infos.voting_power - in - List.iter_es - (fun proposal -> - let weight_pre = - Environment.Protocol_hash.Map.find proposal proposal_weights_pre - |> Option.value ~default:Int64.zero - in - let* weight_post = - Assert.get_some - ~loc:(make_loc __LOC__) - (Environment.Protocol_hash.Map.find proposal proposal_weights_post) - in - Assert.equal_int64 - ~loc:(make_loc __LOC__) - weight_post - (Int64.add weight_pre source_power)) - proposals - -let test_too_many_proposals_in_one_operation () = - let open Lwt_result_syntax in - let* b0, proposer0 = context_init1 () in - let protos = Array.to_list protos in - Lwt.catch - (fun () -> - let* (_ : packed_operation) = Op.proposals (B b0) proposer0 protos in - failwith - "Encoding of proposals operation with too many proposals should fail") - (function - | Data_encoding.Binary.(Write_error List_invalid_length) -> return_unit - | exn -> Lwt.reraise exn) - -(* Bake blocks with various valid Proposals operations, and observe - that their effects are correctly applied. *) -let test_valid_proposals () = - let open Lwt_result_syntax in - (* We use a higher [blocks_per_cycle] than the - {!default_blocks_per_cycle} (which is [4l]), so that we can bake - each operation in a separate block without reaching the end of - the voting cycle. *) - let* b0, (proposer0, proposer1) = context_init2 ~blocks_per_cycle:10l () in - let* op0 = Op.proposals (B b0) proposer0 [protos.(0)] in - let* b1 = Block.bake b0 ~operation:op0 in - let* () = observe_proposals b0 b1 op0 __LOC__ in - let* op1 = - Op.proposals (B b1) proposer0 [protos.(1); protos.(2); protos.(3)] - in - let* b2 = Block.bake b1 ~operation:op1 in - let* () = observe_proposals b1 b2 op1 __LOC__ in - let* op2 = - Op.proposals - (B b2) - proposer1 - [protos.(0); protos.(2); protos.(4); protos.(5)] - in - let* b3 = Block.bake b2 ~operation:op2 in - let* () = observe_proposals b2 b3 op2 __LOC__ in - let* op3 = Op.proposals (B b3) proposer0 [protos.(5); protos.(6)] in - let* b4 = Block.bake b3 ~operation:op3 in - observe_proposals b3 b4 op3 __LOC__ - -(** {3 Ballot -- Negative tests} *) - -(** Test that a Ballot operation fails when it is unsigned. *) -let test_ballot_missing_signature () = - let open Lwt_result_syntax in - let* block, voter, proposal = context_init_exploration () in - let* contents = Op.ballot_contents (B block) voter proposal Vote.Yay in - let op = Op.pack_operation (B block) None contents in - Incremental.assert_validate_operation_fails - (missing_signature __LOC__) - op - block - -(** Test that a Ballot operation fails when its signature is invalid. *) -let test_ballot_invalid_signature () = - let open Lwt_result_syntax in - let* block, voter, proposal = context_init_exploration () in - let* contents = Op.ballot_contents (B block) voter proposal Vote.Yay in - let op = Op.pack_operation (B block) (Some Signature.zero) contents in - Incremental.assert_validate_operation_fails - (invalid_signature __LOC__) - op - block - -(** Test that a Ballot operation fails when the period index provided - in the operation is not the current voting period index. *) -let test_ballot_wrong_voting_period_index () = - let open Lwt_result_syntax in - let* block, voter = context_init1 () in - let* current_period = Context.Vote.get_current_period (B block) in - let current_index = current_period.voting_period.index in - let op_index = Int32.succ current_index in - assert_validate_ballot_fails - ~expected_error:(wrong_voting_period_index ~current_index ~op_index) - ~voter - ~proposal:protos.(0) - ~ballot:Vote.Yay - ~period:op_index - block - __LOC__ - -(** Test that a Ballot operation fails when it occurs outside of an - Exploration or Promotion voting period. *) -let test_ballot_wrong_voting_period_kind () = - let open Lwt_result_syntax in - let* block, voter = context_init1 () in - let proposal = protos.(0) in - let assert_ballot_fails_with_unexpected_ballot = - assert_validate_ballot_fails - ~expected_error:wrong_voting_period_kind - ~voter - ~proposal - ~ballot:Vote.Nay - in - (* Ballot during Proposals. *) - let* () = assert_period ~expected_kind:Proposal block __LOC__ in - let* () = assert_ballot_fails_with_unexpected_ballot block __LOC__ in - (* End the Proposals period with a submitted proposal, to move on to - an Exploration period. *) - let* operation = Op.proposals (B block) voter [proposal] in - let* block = Block.bake block ~operation in - let* block = bake_until_first_block_of_next_period block in - (* End the Exploration period with enough votes to move on to a - Cooldown period. *) - let* operation = Op.ballot (B block) voter proposal Vote.Yay in - let* block = Block.bake block ~operation in - let* block = bake_until_first_block_of_next_period block in - (* Ballot during Cooldown. *) - let* () = assert_period ~expected_kind:Cooldown block __LOC__ in - let* () = assert_ballot_fails_with_unexpected_ballot block __LOC__ in - (* End the Cooldown period, then end the Promotion period with - enough votes to move on to an Adoption period. *) - let* block = bake_until_first_block_of_next_period block in - let* operation = Op.ballot (B block) voter proposal Vote.Yay in - let* block = Block.bake ~operation block in - let* block = bake_until_first_block_of_next_period block in - (* Ballot during Adoption. *) - let* () = assert_period ~expected_kind:Adoption block __LOC__ in - assert_ballot_fails_with_unexpected_ballot block __LOC__ - -(** Test that a Ballot operation fails when its proposal is not the - current proposal. *) -let test_ballot_for_wrong_proposal () = - let open Lwt_result_syntax in - let* block, voter, current_proposal = - context_init_exploration ~proposal:protos.(0) () - in - let op_proposal = protos.(1) in - assert_validate_ballot_fails - ~expected_error:(ballot_for_wrong_proposal ~current_proposal ~op_proposal) - ~voter - ~proposal:op_proposal - ~ballot:Vote.Yay - block - __LOC__ - -(** Test that a Ballot operation fails when its source has already - submitted a Ballot. *) -let test_already_submitted_a_ballot () = - let open Lwt_result_syntax in - let* block, voter, proposal = context_init_exploration () in - let* operation = Op.ballot (B block) voter proposal Vote.Yay in - let* block = Block.bake ~operation block in - assert_validate_ballot_fails - ~expected_error:already_submitted_a_ballot - ~voter - ~proposal - ~ballot:Vote.Nay - block - __LOC__ - -(** Test that a Ballot operation fails when its source is not in the - vote listings (with the same error, no matter how far the source is - from being a delegate with voting rights). *) -let test_ballot_source_not_in_vote_listings () = - let open Lwt_result_syntax in - let* block, funder, proposal = - (* The chosen [blocks_per_cycle] is an arbitrary value that we - will not reach with the blocks baked in this test. *) - context_init_exploration ~blocks_per_cycle:10l () - in - let fresh_account = Account.new_account () in - let voter = Contract.Implicit fresh_account.pkh in - let assert_fails_with_source_not_in_vote_listings block = - assert_validate_ballot_fails - ~expected_error:source_not_in_vote_listings - ~voter - ~proposal - ~ballot:Vote.Yay - block - in - let assert_fails_with_unregistered_delegate block = - assert_validate_ballot_fails - ~expected_error:ballot_from_unregistered_delegate - ~voter - ~proposal - ~ballot:Vote.Yay - block - in - (* Fail when the source has no contract in the storage. *) - let* () = assert_fails_with_unregistered_delegate block __LOC__ in - let* operation = Op.transaction (B block) funder voter Tez.one in - let* block = Block.bake block ~operation in - (* Fail when the contract's public key is unreavealed. *) - let* () = assert_fails_with_unregistered_delegate block __LOC__ in - let* operation = Op.revelation (B block) fresh_account.pk in - let* block = Block.bake block ~operation in - (* Fail when the source is not a delegate. *) - let* () = assert_fails_with_unregistered_delegate block __LOC__ in - let* operation = Op.delegation (B block) voter (Some fresh_account.pkh) in - let* block = Block.bake block ~operation in - (* Fail when the source is a delegate, but not yet in the vote listings. *) - assert_fails_with_source_not_in_vote_listings block __LOC__ - -(** Test that a Ballot operation fails when its source has already - submitted a Ballot in a previously validated operation of the - current block. *) -let test_conflicting_ballot () = - let open Lwt_result_syntax in - let* block, voter, proposal = context_init_exploration () in - let* current_block_state = Incremental.begin_construction block in - let* op_in_current_block = Op.ballot (B block) voter proposal Vote.Yay in - let* current_block_state = - Incremental.validate_operation current_block_state op_in_current_block - in - let* op = Op.ballot (B block) voter proposal Vote.Nay in - let* (_i : Incremental.t) = - Incremental.validate_operation - ~expect_failure:(conflicting_ballot __LOC__) - current_block_state - op - in - return_unit - -(** {3 Ballot -- Positive test} - - A Ballot operation is valid when: - - - its source is a registered delegate and belongs to the voting - listings, - - - the current voting period is an Exploration or Promotion period, - and has the same index as the period provided in the operation, - - - its proposal is the current proposal in the context, - - - the voter had submitted no ballot in the current voting period - yet, and - - - its signature is valid. - - We can observe the successful application of a Ballot operation by - checking that: - - - the ballot has been recorded for the voter in the post-state, - and - - - the score of the ballot's vote (yay/nay/pass) has been - incremented by the voting power of the source. *) - -let observe_ballot pre_state post_state op caller_loc = - let open Lwt_result_syntax in - let make_loc = append_loc ~caller_loc in - let* (Ballot {source; period; proposal; ballot}) = - let (Operation_data {contents; _}) = op.protocol_data in - match contents with - | Single (Ballot _ as contents) -> return contents - | _ -> failwith "%s - Expected a Ballot operation" (make_loc __LOC__) - in - (* Validity conditions *) - let* () = - assert_period - ~expected_kinds:[Exploration; Promotion] - pre_state - (make_loc __LOC__) - in - let* pre_period = Context.Vote.get_current_period (B pre_state) in - let* () = - Assert.equal_int32 - ~loc:(make_loc __LOC__) - period - pre_period.voting_period.index - in - let* del = - Context.Contract.delegate (B pre_state) (Contract.Implicit source) - in - let* () = Assert.equal_pkh ~loc:(make_loc __LOC__) source del in - let* dels, _powers = get_delegates_and_power_from_listings pre_state in - assert (List.mem ~equal:Contract.equal (Contract.Implicit source) dels) ; - let* pre_voting_infos = Context.Delegate.voting_info (B pre_state) source in - let* () = - Assert.is_none - ~loc:(make_loc __LOC__) - ~pp:(fun fmt _ -> Format.fprintf fmt "Voter already has a ballot.@.") - pre_voting_infos.current_ballot - in - let* current_proposal = Context.Vote.get_current_proposal (B pre_state) in - let* current_proposal = - Assert.get_some ~loc:(make_loc __LOC__) current_proposal - in - assert (Protocol_hash.equal proposal current_proposal) ; - (* Observations *) - let* post_voting_infos = Context.Delegate.voting_info (B post_state) source in - let* recorded_ballot = - Assert.get_some ~loc:(make_loc __LOC__) post_voting_infos.current_ballot - in - let* () = - Assert.equal - ~loc:(make_loc __LOC__) - Vote.equal_ballot - "Wrong ballot recorded" - Vote.pp_ballot - ballot - recorded_ballot - in - let* ballots_pre = Context.Vote.get_ballots (B pre_state) in - let* source_power = - Assert.get_some ~loc:(make_loc __LOC__) pre_voting_infos.voting_power - in - let expected_ballots_post = - match ballot with - | Yay -> {ballots_pre with yay = Int64.add ballots_pre.yay source_power} - | Nay -> {ballots_pre with nay = Int64.add ballots_pre.nay source_power} - | Pass -> {ballots_pre with pass = Int64.add ballots_pre.pass source_power} - in - assert_ballots expected_ballots_post post_state (make_loc __LOC__) - -let test_valid_ballot () = - let open Lwt_result_syntax in - (* The chosen [blocks_per_cycle] is an arbitrary value that we will - not reach with the blocks baked in this test. *) - let* block, delegates = context_init ~blocks_per_cycle:10l 4 () in - let* proposer, voter1, voter2, voter3 = - match delegates with - | [a; b; c; d] -> return (a, b, c, d) - | _ -> failwith "%s@,[context_init n] should return [n] delegates" __LOC__ - in - let proposal = protos.(0) in - let* operation = Op.proposals (B block) proposer [proposal] in - let* block = Block.bake block ~operation in - let* b0 = bake_until_first_block_of_next_period block in - let* operation = Op.ballot (B b0) voter1 proposal Vote.Yay in - let* b1 = Block.bake b0 ~operation in - let* () = observe_ballot b0 b1 operation __LOC__ in - let* operation = Op.ballot (B b1) voter2 proposal Vote.Nay in - let* b2 = Block.bake b1 ~operation in - let* () = observe_ballot b1 b2 operation __LOC__ in - let* operation = Op.ballot (B b2) voter3 proposal Vote.Pass in - let* b3 = Block.bake b2 ~operation in - observe_ballot b2 b3 operation __LOC__ - -let tests = - [ - (* Scenarized tests *) - Tztest.tztest "voting successful_vote" `Quick (test_successful_vote 137); - Tztest.tztest - "voting cooldown, not enough quorum" - `Quick - (test_not_enough_quorum_in_exploration 245); - Tztest.tztest - "voting promotion, not enough quorum" - `Quick - (test_not_enough_quorum_in_promotion 432); - Tztest.tztest - "voting proposal, with supermajority" - `Quick - (test_supermajority_in_proposal true); - Tztest.tztest - "voting proposal, without supermajority" - `Quick - (test_supermajority_in_proposal false); - Tztest.tztest - "voting proposal, with quorum" - `Quick - (test_quorum_in_proposal true); - Tztest.tztest - "voting proposal, without quorum" - `Quick - (test_quorum_in_proposal false); - Tztest.tztest - "voting cooldown, with supermajority" - `Quick - (test_supermajority_in_exploration true); - Tztest.tztest - "voting cooldown, without supermajority" - `Quick - (test_supermajority_in_exploration false); - Tztest.tztest - "voting proposal, no winning proposal" - `Quick - (test_no_winning_proposal 400); - Tztest.tztest - "voting quorum, quorum capped maximum" - `Quick - (test_quorum_capped_maximum 400); - Tztest.tztest - "voting quorum, quorum capped minimum" - `Quick - (test_quorum_capped_minimum 401); - Tztest.tztest - "voting power updated in each voting period" - `Quick - test_voting_power_updated_each_voting_period; - Tztest.tztest "voting period pretty print" `Quick test_voting_period_pp; - (* Validity tests on Proposals *) - Tztest.tztest - "Proposals missing signature" - `Quick - test_proposals_missing_signature; - Tztest.tztest - "Proposals invalid signature" - `Quick - test_proposals_invalid_signature; - Tztest.tztest - "Proposals wrong voting period index" - `Quick - test_proposals_wrong_voting_period_index; - Tztest.tztest - "Proposals wrong voting period kind" - `Quick - test_proposals_wrong_voting_period_kind; - Tztest.tztest - "Proposals source not in vote listings" - `Quick - test_proposals_source_not_in_vote_listings; - Tztest.tztest "Empty proposals" `Quick test_empty_proposals; - Tztest.tztest - "Proposals contain a duplicate proposal" - `Quick - test_proposals_contain_duplicate; - Tztest.tztest - "Too many proposals (over one operation)" - `Quick - test_too_many_proposals_in_one_operation; - Tztest.tztest - "Too many proposals (over two operations)" - `Quick - test_too_many_proposals; - Tztest.tztest - "A proposal had already been proposed" - `Quick - test_already_proposed; - Tztest.tztest - "Conflict: too many proposals in current block/mempool" - `Quick - test_conflict_too_many_proposals; - Tztest.tztest - "Conflicting proposals in current block/mempool" - `Quick - test_conflicting_proposal; - Tztest.tztest "Valid Proposals operations" `Quick test_valid_proposals; - (* Validity tests on Ballot *) - Tztest.tztest - "Ballot missing signature" - `Quick - test_ballot_missing_signature; - Tztest.tztest - "Ballot invalid signature" - `Quick - test_ballot_invalid_signature; - Tztest.tztest - "Ballot wrong voting period index" - `Quick - test_ballot_wrong_voting_period_index; - Tztest.tztest - "Ballot wrong voting period kind" - `Quick - test_ballot_wrong_voting_period_kind; - Tztest.tztest - "Ballot for wrong proposal" - `Quick - test_ballot_for_wrong_proposal; - Tztest.tztest - "Delegate has already submitted a ballot" - `Quick - test_already_submitted_a_ballot; - Tztest.tztest - "Ballot source not in vote listings" - `Quick - test_ballot_source_not_in_vote_listings; - Tztest.tztest - "Conflicting ballot in current block/mempool" - `Quick - test_conflicting_ballot; - Tztest.tztest "Valid Ballot operations" `Quick test_valid_ballot; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("voting", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_zk_rollup.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_zk_rollup.ml deleted file mode 100644 index 2ed43aa0b2094a8ae3673bf7f8f06fac3dee5d50..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/operations/test_zk_rollup.ml +++ /dev/null @@ -1,1294 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Rollup layer 1 logic - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/operations/main.exe \ - -- --file test_zk_rollup.ml - Subject: Test zk rollup -*) - -open Protocol -open Alpha_context - -exception Zk_rollup_test_error of string - -(* Number of operations in each private batch *) -let batch_size = 10 - -module Operator = Dummy_zk_rollup.Operator (struct - let batch_size = batch_size -end) - -(* Operation with payload = 1 *) -let true_op l1_dst rollup_id = - Zk_rollup.Operation. - { - op_code = 0; - price = Operator.Internal_for_tests.true_op.price; - l1_dst; - rollup_id; - payload = [|Bls12_381.Fr.one|]; - } - -let of_plonk_smap s = Zk_rollup.Account.SMap.of_seq @@ Kzg.SMap.to_seq s - -(* Operation with payload = 0 *) -let false_op l1_dst rollup_id = - {(true_op l1_dst rollup_id) with payload = [|Bls12_381.Fr.zero|]} - -(** [check_proto_error_f f t] checks that the first error of [t] - satisfies the boolean function [f]. *) -let check_proto_error_f f t = - let open Lwt_result_syntax in - match t with - | Environment.Ecoproto_error e :: _ when f e -> - Assert.test_error_encodings e ; - return_unit - | _ -> failwith "Unexpected error: %a" Error_monad.pp_print_trace t - -(** [check_proto_error e t] checks that the first error of [t] - equals [e]. *) -let check_proto_error e t = check_proto_error_f (( = ) e) t - -(* Check that originating a ZKRU fails when the feature flag is disabled. *) -let test_disable_feature_flag () = - let open Lwt_result_syntax in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let* b, contract = - Context.init_with_constants1 - { - Context.default_test_constants with - zk_rollup = - {Context.default_test_constants.zk_rollup with enable = false}; - } - in - let* i = Incremental.begin_construction b in - let* op, _zk_rollup = - Op.zk_rollup_origination - (I i) - contract - ~public_parameters - ~circuits_info:(of_plonk_smap Operator.circuits) - ~init_state:Operator.init_state - ~nb_ops:1 - in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_failure: - (check_proto_error Validate_errors.Manager.Zk_rollup_feature_disabled) - i - op - in - return_unit - -(** [context_init n] initializes a context for testing in which the - [zk_rollup_enable] constant is set to true. It returns the created - context and [n] contracts. *) -let context_init = - Context.init_with_constants_n - { - Context.default_test_constants with - zk_rollup = {Context.default_test_constants.zk_rollup with enable = true}; - consensus_threshold = 0; - } - -(* Check that the expected origination fees are paid. *) -let test_origination_fees () = - let open Lwt_result_syntax in - let* ctxt, contracts = context_init 1 in - let* constants = Context.get_constants (B ctxt) in - let contract = Stdlib.List.hd contracts in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let expected_size = - let origination_size = constants.parametric.zk_rollup.origination_size in - let init_account = - Zk_rollup.Account. - { - static = - { - public_parameters; - state_length = 1; - circuits_info = of_plonk_smap Operator.circuits; - nb_ops = 1; - }; - dynamic = - { - state = Operator.init_state; - paid_l2_operations_storage_space = Z.of_int origination_size; - used_l2_operations_storage_space = Z.zero; - }; - } - in - let init_pl = Zk_rollup.(Empty {next_index = 0L}) in - origination_size + Zk_rollup.Address.size - + Data_encoding.Binary.length Zk_rollup.Account.encoding init_account - + Data_encoding.Binary.length Zk_rollup.pending_list_encoding init_pl - in - let expected_fees = - Tez_helpers.( - constants.parametric.cost_per_byte *! Int64.of_int expected_size) - in - let* operation, _rollup = - Op.zk_rollup_origination - (B ctxt) - contract - ~public_parameters - ~circuits_info:(of_plonk_smap Operator.circuits) - ~init_state:Operator.init_state - ~nb_ops:1 - in - let* balance_before = Context.Contract.balance (B ctxt) contract in - let* i = Incremental.begin_construction ctxt in - let* i = Incremental.add_operation i operation in - Assert.balance_was_debited - ~loc:__LOC__ - (I i) - contract - balance_before - expected_fees - -let test_origination_negative_nb_ops () = - let open Lwt_result_syntax in - let* ctxt, contracts = context_init 1 in - let contract = Stdlib.List.hd contracts in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let* operation, _rollup = - Op.zk_rollup_origination - (B ctxt) - contract - ~public_parameters - ~circuits_info:(of_plonk_smap Operator.circuits) - ~init_state:Operator.init_state - ~nb_ops:(-1) - in - let* i = Incremental.begin_construction ctxt in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup_apply.Zk_rollup_negative_nb_ops) - i - operation - in - return_unit - -(** Initializes the context and originates a ZKRU. *) -let init_and_originate n = - let open Lwt_result_syntax in - let* ctxt, contracts = context_init n in - let contract = Stdlib.List.hd contracts in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let* operation, rollup = - Op.zk_rollup_origination - (B ctxt) - contract - ~public_parameters - ~circuits_info:(of_plonk_smap Operator.circuits) - ~init_state:Operator.init_state - ~nb_ops:1 - in - let* b = Block.bake ~operation ctxt in - return (b, contracts, rollup) - -let no_ticket op = (op, None) - -(* Checks that originating two ZK rollups leads to different - rollup addresses. *) -let test_originate_two_rollups () = - let open Lwt_result_syntax in - let* ctxt, contracts, zk_rollup1 = init_and_originate 1 in - let contract = Stdlib.List.hd contracts in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let* operation, zk_rollup2 = - Op.zk_rollup_origination - (B ctxt) - contract - ~public_parameters - ~circuits_info:(of_plonk_smap Operator.circuits) - ~init_state:Operator.init_state - ~nb_ops:1 - in - let* (_b : Block.t) = Block.bake ~operation ctxt in - assert (zk_rollup1 <> zk_rollup2) ; - return_unit - -(* Initializes the context and originates a ZKRU with [n_pending] - operations. *) -let init_with_pending ?(n_pending = 1) n = - let open Lwt_result_syntax in - let* ctxt, contracts, zk_rollup = init_and_originate n in - let contract = Stdlib.List.hd contracts in - let pkh = match contract with Implicit pkh -> pkh | _ -> assert false in - let* operation = - Op.zk_rollup_publish - (B ctxt) - contract - ~zk_rollup - ~ops: - (Stdlib.List.init n_pending (fun i -> - no_ticket - @@ - if i mod 2 = 0 then false_op pkh zk_rollup - else true_op pkh zk_rollup)) - in - let* b = Block.bake ~operation ctxt in - return (b, contracts, zk_rollup, pkh) - -(* Test for an invalid append: - The operation being appended has an invalid op code. -*) -let test_append_out_of_range_op_code () = - let open Lwt_result_syntax in - let* ctxt, contracts, zk_rollup = init_and_originate 1 in - let contract = Stdlib.List.hd contracts in - let pkh = match contract with Implicit pkh -> pkh | _ -> assert false in - let l2_op = false_op pkh zk_rollup in - let* i = Incremental.begin_construction ctxt in - let* operation = - Op.zk_rollup_publish - (I i) - contract - ~zk_rollup - ~ops:[no_ticket {l2_op with op_code = 1}] - in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error (Zk_rollup_storage.Zk_rollup_invalid_op_code 1)) - i - operation - in - return_unit - -(* Test for an invalid append: - The operation being appended through an external op has positive price. -*) -let test_append_external_deposit () = - let open Lwt_result_syntax in - let* ctxt, contracts, zk_rollup = init_and_originate 1 in - let contract = Stdlib.List.hd contracts in - let pkh = match contract with Implicit pkh -> pkh | _ -> assert false in - let l2_op = false_op pkh zk_rollup in - let* i = Incremental.begin_construction ctxt in - let* operation = - Op.zk_rollup_publish - (I i) - contract - ~zk_rollup - ~ops: - [no_ticket {l2_op with price = {l2_op.price with amount = Z.of_int 10}}] - in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Deposit_as_external) - i - operation - in - return_unit - -(* ------------------------- TESTS WITH TICKETS ------------------------- *) - -(** [make_ticket_key ty contents ticketer zk_rollup] computes the ticket hash - of the ticket containing [contents] of type [ty], crafted by [ticketer] and - owned by [zk_rollup]. *) -let make_ticket_key ctxt ~ty ~contents ~ticketer zk_rollup = - let open Lwt_result_wrap_syntax in - let* incr = - match ctxt with - | Context.B block -> Incremental.begin_construction block - | Context.I incr -> return incr - in - let ctxt = Incremental.alpha_ctxt incr in - let*?@ Ex_comparable_ty contents_type, ctxt = - Script_ir_translator.parse_comparable_ty ctxt ty - in - let*@ contents, ctxt = - Script_ir_translator.parse_comparable_data ctxt contents_type contents - in - let+@ ticket_key, _ = - Ticket_balance_key.of_ex_token - ctxt - ~owner:(Zk_rollup zk_rollup) - (Ticket_token.Ex_token {ticketer; contents_type; contents}) - in - ticket_key - -module Make_ticket (T : sig - val ty_str : string - - type contents - - type contents_type - - val contents_type : contents_type Script_typed_ir.comparable_ty - - val contents_to_micheline : contents -> contents_type - - val contents_to_string : contents -> string -end) (C : sig - val contents : T.contents -end) = -struct - include T - include C - - let ty = Expr.from_string ty_str - - let ex_token ~ticketer = - Ticket_token.Ex_token - {ticketer; contents_type; contents = contents_to_micheline contents} - - let contents_string = contents_to_string contents - - let contents_expr = Expr.from_string contents_string - - let ticket_hash ctxt ~ticketer ~zk_rollup = - make_ticket_key - ctxt - ~ty:(Tezos_micheline.Micheline.root ty) - ~contents:(Tezos_micheline.Micheline.root contents_expr) - ~ticketer - zk_rollup - - let zkru_ticket ~ticketer : Zk_rollup.Ticket.t = - Zk_rollup.Ticket.{contents = contents_expr; ty; ticketer} - - let init_deposit_contract amount block account = - let script = - Format.asprintf - {| parameter (pair address bytes); - storage unit; - code { - # cast the address to contract type - CAR; - UNPAIR; - CONTRACT %%deposit (pair (ticket %s) bytes); - ASSERT_SOME; - SWAP; - PUSH mutez 0; - SWAP; - # create a ticket - PUSH nat %a; - PUSH %s %s; - TICKET; - ASSERT_SOME; - PAIR ; - TRANSFER_TOKENS; - PUSH unit Unit; - NIL operation; - DIG 2 ; - CONS; - PAIR } |} - ty_str - Z.pp_print - amount - ty_str - contents_string - in - Contract_helpers.originate_contract_from_string - ~baker:(Context.Contract.pkh account) - ~source_contract:account - ~script - ~storage:"Unit" - block - - let deposit_op ~block ~zk_rollup ~(zk_op : Zk_rollup.Operation.t) ~account - ~deposit_contract = - let zk_op_literal = - let bytes = - Data_encoding.Binary.to_bytes_exn Zk_rollup.Operation.encoding zk_op - in - let (`Hex hex) = Hex.of_bytes bytes in - "0x" ^ String.uppercase_ascii hex - in - Op.transaction - (B block) - ~entrypoint:Entrypoint.default - ~parameters: - (Script.lazy_expr @@ Expr.from_string - @@ Printf.sprintf - {| Pair %S %s |} - (Zk_rollup.Address.to_b58check zk_rollup) - zk_op_literal) - ~fee:Tez.one - account - deposit_contract - (Tez.of_mutez_exn 0L) - - (** Return an operation to originate a contract that will deposit [amount] - tickets with l2 operation [op] on [zk_rollup] *) - let init_deposit ~block ~amount ~zk_op ~zk_rollup ~account = - let open Lwt_result_syntax in - let* deposit_contract, _script, block = - init_deposit_contract amount block account - in - let+ op = deposit_op ~block ~zk_rollup ~zk_op ~account ~deposit_contract in - (block, op, deposit_contract) -end - -module Nat_ticket = Make_ticket (struct - let ty_str = "nat" - - type contents = int - - type contents_type = Script_int.n Script_int.num - - let contents_type = Script_typed_ir.nat_t - - let contents_to_string = string_of_int - - let contents_to_micheline c = - WithExceptions.Option.get ~loc:__LOC__ @@ Script_int.(of_int c |> is_nat) -end) - -module String_ticket = Make_ticket (struct - let ty_str = "string" - - type contents = string - - type contents_type = Script_string.t - - let contents_type = Script_typed_ir.string_t - - let contents_to_string s = "\"" ^ s ^ "\"" - - let contents_to_micheline c = - WithExceptions.Result.get_ok ~loc:__LOC__ Script_string.(of_string c) -end) - -let test_append_errors () = - let open Lwt_result_syntax in - let open Zk_rollup.Operation in - (* Create two accounts and 1 zk rollup *) - let* block, contracts, zk_rollup = init_and_originate 2 in - let contract0 = Stdlib.List.nth contracts 0 in - let contract1 = Stdlib.List.nth contracts 1 in - (* Create and originate the deposit contract *) - let module Nat_ticket = Nat_ticket (struct - let contents = 1 - end) in - let* deposit_contract, _script, block = - Nat_ticket.init_deposit_contract (Z.of_int 10) block contract0 - in - (* Preparing operation and ticket for tests *) - let op = - let pkh = match contract0 with Implicit pkh -> pkh | _ -> assert false in - false_op pkh zk_rollup - in - let* ticket_hash = - Nat_ticket.ticket_hash (B block) ~ticketer:deposit_contract ~zk_rollup - in - let ticket = Nat_ticket.zkru_ticket ~ticketer:contract0 in - (* Start generating block *) - let* i = Incremental.begin_construction block in - (* Send ticket but price = 0 *) - let* operation = - let price = {id = ticket_hash; amount = Z.zero} in - Op.zk_rollup_publish - (I i) - contract1 - ~zk_rollup - ~ops:[({op with price}, Some ticket)] - in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_deposit_amount) - i - operation - in - (* None ticket, price < 0 *) - let* operation = - let price = {id = ticket_hash; amount = Z.of_string "-10"} in - Op.zk_rollup_publish - (I i) - contract1 - ~zk_rollup - ~ops:[no_ticket {op with price}] - in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_deposit_amount) - i - operation - in - (* Some ticket, price < 0, op.price ≠ hash(ticket, zkru) *) - let* operation = - let price = - { - id = Ticket_hash.of_bytes_exn (Bytes.create 32); - amount = Z.of_string "-10"; - } - in - Op.zk_rollup_publish - (I i) - contract1 - ~zk_rollup - ~ops:[({op with price}, Some ticket)] - in - let* (_i : Incremental.t) = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_deposit_ticket) - i - operation - in - return_unit - -let assert_ticket_balance ~loc incr token owner expected = - let open Lwt_result_wrap_syntax in - let ctxt = Incremental.alpha_ctxt incr in - let*@ key_hash, ctxt = Ticket_balance_key.of_ex_token ctxt ~owner token in - let*@ balance, _ = Ticket_balance.get_balance ctxt key_hash in - match (balance, expected) with - | Some b, Some e -> Assert.equal_int ~loc (Z.to_int b) e - | Some b, None -> - failwith "%s: Expected no balance but got some %d" loc (Z.to_int b) - | None, Some b -> failwith "%s: Expected balance %d but got none" loc b - | None, None -> return_unit - -let test_invalid_deposit () = - let open Lwt_result_syntax in - (* Create 2 accounts and one zk rollups *) - let* block, contracts, zk_rollup = init_and_originate 5 in - let contract0 = Stdlib.List.nth contracts 0 in - let contract1 = Stdlib.List.nth contracts 1 in - let contract2 = Stdlib.List.nth contracts 2 in - let contract3 = Stdlib.List.nth contracts 3 in - let contract4 = Stdlib.List.nth contracts 4 in - (* Create and originate the deposit contract *) - let module Nat_ticket = Nat_ticket (struct - let contents = 1 - end) in - let* deposit_contract, _script, block = - Nat_ticket.init_deposit_contract (Z.of_int 10) block contract0 - in - let token = Nat_ticket.ex_token ~ticketer:deposit_contract in - (* Generate ticket created by deposit contract and owned by rollup *) - let* ticket_hash = - Nat_ticket.ticket_hash (B block) ~ticketer:deposit_contract ~zk_rollup - in - let pkh = match contract0 with Implicit pkh -> pkh | _ -> assert false in - (* ----- Start generating block *) - let* i = Incremental.begin_construction block in - (* check rollup exists with none of these particular tokens *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- op.price = 0 *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = {id = ticket_hash; amount = Z.of_int 0}; - } - in - let* operation = - Nat_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract0 - ~deposit_contract - in - let* i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_deposit_amount) - i - operation - in - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- hash(ticket, zkru) <> op.price *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = - {id = Ticket_hash.of_bytes_exn (Bytes.create 32); amount = Z.of_int 10}; - } - in - let* operation = - Nat_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract1 - ~deposit_contract - in - let* i = - Incremental.add_operation - i - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_deposit_ticket) - operation - in - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- op.price <> ticket amount *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = {id = ticket_hash; amount = Z.of_int 12}; - } - in - let* operation = - Nat_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract2 - ~deposit_contract - in - let* i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_deposit_amount) - i - operation - in - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- ticket amount = 0 *) - let* deposit_contract, _script, block = - Nat_ticket.init_deposit_contract (Z.of_int 0) block contract0 - in - (* Create append/deposit operation with ticket *) - let zk_op = - {(false_op pkh zk_rollup) with price = {id = ticket_hash; amount = Z.zero}} - in - let* operation = - Nat_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract3 - ~deposit_contract - in - let* i = Incremental.begin_construction block in - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - let* i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error_f (function - | Script_interpreter.Runtime_contract_error _ -> true - | _ -> false)) - i - operation - in - - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- ticket size > Constants.tx_rollup_max_ticket_payload_size *) - (* Contents size is such that, together with the ticketer address, - they exceed the maximum size of an operation *) - let contents_size = 15_000 in - let module String_ticket = String_ticket (struct - let contents = String.make contents_size 'a' - end) in - let* deposit_contract, _script, block = - String_ticket.init_deposit_contract (Z.of_int 10) block contract0 - in - let* ticket_hash = - String_ticket.ticket_hash (B block) ~ticketer:deposit_contract ~zk_rollup - in - let token = String_ticket.ex_token ~ticketer:deposit_contract in - (* Create append/deposit operation with ticket *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = {id = ticket_hash; amount = Z.of_int 10}; - } - in - let* operation = - String_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract4 - ~deposit_contract - in - let* i = Incremental.begin_construction block in - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - let* limit = - let* constants = Context.get_constants (I i) in - constants.parametric.zk_rollup.max_ticket_payload_size |> return - in - let* (_i : Incremental.t) = - let payload_size = Saturation_repr.safe_int (contents_size + 216) in - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error - (Zk_rollup.Errors.Ticket_payload_size_limit_exceeded - {payload_size; limit})) - i - operation - in - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - return_unit - -(* Test for a valid update: - - 1 private batch of 10 "true" operations - - 1 public "false" operation - On a ZKRU with the initial state and a pending list with - 1 operation ("false"). -*) -let test_update () = - let open Lwt_result_syntax in - let* b, contracts, zk_rollup, pkh = init_with_pending 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let n_batches = 2 in - let _, update = - Operator.( - craft_update - init_state - ~zk_rollup - ~private_ops: - (Stdlib.List.init n_batches (fun batch -> - Stdlib.List.init batch_size - @@ Fun.const - @@ (if batch mod 2 = 0 then true_op else false_op) pkh zk_rollup)) - [false_op pkh zk_rollup]) - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = Incremental.add_operation i operation in - return_unit - -(* Test for an invalid update: - - 1 public "true" operation - On a ZKRU with the initial state and a pending list with - 1 operation ("false"). - The public operation proved is different from the one in the pending list. -*) -let test_update_false_proof () = - let open Lwt_result_syntax in - let* b, contracts, zk_rollup, pkh = init_with_pending 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - (* Testing with proof on incorrect statement *) - let _, update = - Operator.(craft_update init_state ~zk_rollup [true_op pkh zk_rollup]) - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - i - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_verification) - operation - in - (* Testing with proof with incorrect private inputs *) - let update = - let _, Zk_rollup.Update.{pending_pis; private_pis; fee_pi; proof} = - Operator.(craft_update init_state ~zk_rollup [true_op pkh zk_rollup]) - in - let private_pis = List.rev private_pis in - Zk_rollup.Update.{pending_pis; private_pis; fee_pi; proof} - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - i - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_verification) - operation - in - return_unit - -(* Test for an invalid update: - A set of inputs for a public circuit is included in the list of - inputs for private batches. -*) -let test_update_public_in_private () = - let open Lwt_result_syntax in - let* b, contracts, zk_rollup, pkh = init_with_pending 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.(craft_update init_state ~zk_rollup [true_op pkh zk_rollup]) - in - let update = - (* Circuit ID and inputs for a public circuit, which will be added to the - [private_pis] list *) - let name, op_pi = Stdlib.List.hd update.pending_pis in - { - update with - private_pis = - (name, {new_state = op_pi.new_state; fees = op_pi.fee}) - :: update.private_pis; - } - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - i - ~expect_apply_failure:(check_proto_error Zk_rollup.Errors.Invalid_circuit) - operation - in - return_unit - -(* Test for an invalid update: - Two ZKRUs are originated: [zk_rollup1] and [zk_rollup2]. - An L2 [op] for [zk_rollup2] is appended to [zk_rollup1]'s pending list. - This operation must be discarded, but a malicious validator tries to process - it by making a proof for an update in which [op]'s [rollup_id] is changed - from [zk_rollup2] to [zk_rollup1]. The verification must fail, because - the Protocol uses the actual [op] from the pending list as input. -*) -let test_update_for_another_rollup () = - let open Lwt_result_syntax in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let* b, contracts, zk_rollup1, pkh = init_with_pending 3 in - let contract0 = Stdlib.List.hd contracts in - let contract1 = Stdlib.List.nth contracts 1 in - let contract2 = Stdlib.List.nth contracts 2 in - let* i = Incremental.begin_construction b in - (* Originate [zk_rollup2] *) - let* operation, zk_rollup2 = - Op.zk_rollup_origination - (I i) - contract0 - ~public_parameters - ~circuits_info:(of_plonk_smap Operator.circuits) - ~init_state:Operator.init_state - ~nb_ops:1 - in - let* i = Incremental.add_operation i operation in - (* Append to [zk_rollup1] an op for [zk_rollup2] *) - let* operation = - Op.zk_rollup_publish - (I i) - contract1 - ~zk_rollup:zk_rollup1 - ~ops:[no_ticket @@ true_op pkh zk_rollup2] - in - let* i = Incremental.add_operation i operation in - (* Craft the update, changing the "true" op to have zk_rollup1 as - [rollup_id] *) - let _, update = - Operator.( - craft_update - init_state - ~zk_rollup:zk_rollup1 - [false_op pkh zk_rollup1; true_op pkh zk_rollup1]) - in - let* operation = - Op.zk_rollup_update (I i) contract2 ~zk_rollup:zk_rollup1 ~update - in - let* _i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Invalid_verification) - i - operation - in - return_unit - -(* Test for an invalid update: - The update sent by the prover processes more public operations than - those in the pending list. -*) -let test_update_more_public_than_pending () = - let open Lwt_result_syntax in - (* test with number of pending operations < min_pending_to_process. *) - let* b, contracts, zk_rollup, pkh = init_with_pending 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.( - craft_update - init_state - ~zk_rollup - [false_op pkh zk_rollup; true_op pkh zk_rollup]) - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup_storage.Zk_rollup_pending_list_too_short) - i - operation - in - (* test with number of pending operations >= min_pending_to_process. *) - let* constants = Context.get_constants (I i) in - let min_pending_to_process = - constants.parametric.zk_rollup.min_pending_to_process - in - let* b, contracts, zk_rollup, pkh = - init_with_pending ~n_pending:min_pending_to_process 1 - in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.( - craft_update - init_state - ~zk_rollup - (Stdlib.List.init (min_pending_to_process + 1) (fun i -> - if i mod 2 = 0 then false_op pkh zk_rollup - else true_op pkh zk_rollup))) - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup_storage.Zk_rollup_pending_list_too_short) - i - operation - in - return_unit - -(* Test for an invalid update: - The update sent by the prover contains a set of circuit inputs in which - the [new_state] is larger than the ZKRU's [state_length]. -*) -let test_update_inconsistent_state () = - let open Lwt_result_syntax in - let* b, contracts, zk_rollup, pkh = init_with_pending 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.(craft_update init_state ~zk_rollup [false_op pkh zk_rollup]) - in - let open Zk_rollup.Update in - let update = - { - update with - pending_pis = - List.map - (fun (s, (op_pi : op_pi)) -> - ( s, - { - op_pi with - new_state = Array.append op_pi.new_state op_pi.new_state; - } )) - update.pending_pis; - } - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - ~expect_apply_failure: - (check_proto_error Zk_rollup.Errors.Inconsistent_state_update) - i - operation - in - return_unit - -(* Test for an invalid update: - The update sent by the prover processes fewer pending operations (p.o.) than - allowed (the exact number of p.o. or at least min_pending_to_process). - The pending list has a length of 2, while only 1 is processed. -*) -let test_update_not_enough_pending () = - let open Lwt_result_syntax in - let* b, contracts, zk_rollup, pkh = init_with_pending ~n_pending:2 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.(craft_update init_state ~zk_rollup [false_op pkh zk_rollup]) - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = - Incremental.add_operation - ~expect_apply_failure:(check_proto_error Zk_rollup.Errors.Pending_bound) - i - operation - in - return_unit - -(* Test for a valid update: - The update sent by the prover processes a prefix of the pending list, - of the minimum length allowed. -*) -let test_update_valid_prefix () = - let open Lwt_result_syntax in - (* Checking when pending list has more than min_pending_to_process *) - let min_pending_to_process = - Context.default_test_constants.zk_rollup.min_pending_to_process - in - let* b, contracts, zk_rollup, pkh = - init_with_pending ~n_pending:(min_pending_to_process + 1) 1 - in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.( - craft_update - init_state - ~zk_rollup - (Stdlib.List.init min_pending_to_process (fun i -> - if i mod 2 = 0 then false_op pkh zk_rollup - else true_op pkh zk_rollup))) - in - (* Checking when pending list has less than min_pending_to_process *) - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = Incremental.add_operation i operation in - let* b, contracts, zk_rollup, pkh = init_with_pending ~n_pending:2 1 in - let contract = Stdlib.List.hd contracts in - let* i = Incremental.begin_construction b in - let _, update = - Operator.( - craft_update - init_state - ~zk_rollup - [false_op pkh zk_rollup; true_op pkh zk_rollup]) - in - let* operation = Op.zk_rollup_update (I i) contract ~zk_rollup ~update in - let* _i = Incremental.add_operation i operation in - return_unit - -let test_valid_deposit_and_withdrawal () = - let open Lwt_result_syntax in - (* Create 2 accounts and one zk rollups *) - let* block, contracts, zk_rollup = init_and_originate 2 in - let contract0 = Stdlib.List.nth contracts 0 in - let contract1 = Stdlib.List.nth contracts 1 in - (* Create and originate the deposit contract *) - let module Nat_ticket = Nat_ticket (struct - let contents = 1 - end) in - let* deposit_contract, _script, block = - Nat_ticket.init_deposit_contract (Z.of_int 10) block contract0 - in - let token = Nat_ticket.ex_token ~ticketer:deposit_contract in - (* Generate ticket created by deposit contract and owned by rollup *) - let* ticket_hash = - Nat_ticket.ticket_hash (B block) ~ticketer:deposit_contract ~zk_rollup - in - let pkh = match contract0 with Implicit pkh -> pkh | _ -> assert false in - (* Create append/deposit operation with ticket *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = {id = ticket_hash; amount = Z.of_int 10}; - } - in - let* operation = - Nat_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract0 - ~deposit_contract - in - (* ----- Start generating block *) - let* i = Incremental.begin_construction block in - (* check rollup exists with none of these particular tokens *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- Add deposit operation to block*) - let* i = Incremental.add_operation i operation in - (* check *rollup* has 10 of these particular tokens (deposit has been processed) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) (Some 10) - in - (* check *contract* has no tokens (deposit has been processed) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Contract contract0) None - in - (* Create update operation to process the zk operation (which is a - "deposit-withdrawal" for dummy rollup) *) - let _, update = - Operator.(craft_update init_state ~zk_rollup ~private_ops:[] [zk_op]) - in - let* operation = Op.zk_rollup_update (I i) contract1 ~zk_rollup ~update in - (* ----- Add update operation to block) *) - let* i = Incremental.add_operation i operation in - (* check *rollup* has no tokens (deposit was withdrawn) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* check *contract* has 10 of these particular tokens (deposit was withdrawn) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Contract contract0) (Some 10) - in - return_unit - -let test_valid_deposit_and_external_withdrawal () = - let open Lwt_result_syntax in - (* Create 2 accounts and one zk rollups *) - let* block, contracts, zk_rollup = init_and_originate 4 in - let contract0 = Stdlib.List.nth contracts 0 in - let contract1 = Stdlib.List.nth contracts 1 in - let contract2 = Stdlib.List.nth contracts 2 in - let contract3 = Stdlib.List.nth contracts 3 in - (* Create and originate the deposit contract *) - let module Nat_ticket = Nat_ticket (struct - let contents = 1 - end) in - let* deposit_contract, _script, block = - Nat_ticket.init_deposit_contract (Z.of_int 10) block contract0 - in - let token = Nat_ticket.ex_token ~ticketer:deposit_contract in - (* Generate ticket created by deposit contract and owned by rollup *) - let* ticket_hash = - Nat_ticket.ticket_hash (B block) ~ticketer:deposit_contract ~zk_rollup - in - let pkh = match contract0 with Implicit pkh -> pkh | _ -> assert false in - (* Create append/deposit operation with ticket *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = {id = ticket_hash; amount = Z.of_int 10}; - } - in - let* operation = - Nat_ticket.deposit_op - ~block - ~zk_rollup - ~zk_op - ~account:contract0 - ~deposit_contract - in - (* ----- Start generating block *) - let* i = Incremental.begin_construction block in - (* check rollup exists with none of these particular tokens *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* ----- Add deposit operation to block*) - let* i = Incremental.add_operation i operation in - (* check *rollup* has 10 of these particular tokens (deposit has been processed) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) (Some 10) - in - (* check *contract* has no tokens (deposit has been processed) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Contract contract0) None - in - (* Create update operation to process the zk operation (which is a - "deposit" for dummy rollup) *) - let s, update = - Operator.( - craft_update - init_state - ~zk_rollup - ~private_ops:[] - ~exit_validities:[false] - [zk_op]) - in - let* operation = Op.zk_rollup_update (I i) contract1 ~zk_rollup ~update in - (* ----- Add update operation to block) *) - let* i = Incremental.add_operation i operation in - (* check *rollup* has 10 of these particular tokens (deposit has been processed) *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) (Some 10) - in - (* Create withdrawal operation with ticket *) - let zk_op = - { - (false_op pkh zk_rollup) with - price = {id = ticket_hash; amount = Z.of_int (-10)}; - } - in - let ticket = Nat_ticket.zkru_ticket ~ticketer:deposit_contract in - let* operation = - Op.zk_rollup_publish (I i) contract2 ~zk_rollup ~ops:[(zk_op, Some ticket)] - in - let* i = Incremental.add_operation i operation in - (* Create update to process the withdrawal *) - let _, update = - Operator.( - craft_update s ~zk_rollup ~private_ops:[] ~exit_validities:[true] [zk_op]) - in - let* operation = Op.zk_rollup_update (I i) contract3 ~zk_rollup ~update in - let* i = Incremental.add_operation i operation in - (* check *rollup* has no tokens *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Zk_rollup zk_rollup) None - in - (* check *contract* has 10 of these particular tokens *) - let* () = - assert_ticket_balance ~loc:__LOC__ i token (Contract contract0) (Some 10) - in - return_unit - -let tests = - [ - Tztest.tztest - "check feature flag is disabled" - `Quick - test_disable_feature_flag; - Tztest.tztest "origination fees" `Quick test_origination_fees; - Tztest.tztest "originate two rollups" `Quick test_originate_two_rollups; - Tztest.tztest - "origination negative nb_ops" - `Quick - test_origination_negative_nb_ops; - Tztest.tztest - "append with invalid op code" - `Quick - test_append_out_of_range_op_code; - Tztest.tztest "append external deposit" `Quick test_append_external_deposit; - Tztest.tztest "append check errors" `Quick test_append_errors; - Tztest.tztest "invalid deposit" `Quick test_invalid_deposit; - Tztest.tztest "update" `Quick test_update; - Tztest.tztest "update with false proof" `Quick test_update_false_proof; - Tztest.tztest - "update with invalid circuit" - `Quick - test_update_public_in_private; - Tztest.tztest - "update with op for another rollup" - `Quick - test_update_for_another_rollup; - Tztest.tztest - "update with more public operations than pending" - `Quick - test_update_more_public_than_pending; - Tztest.tztest - "update with inconsistent state" - `Quick - test_update_inconsistent_state; - Tztest.tztest - "update with not enough pending" - `Quick - test_update_not_enough_pending; - Tztest.tztest "update with valid prefix" `Quick test_update_valid_prefix; - Tztest.tztest "valid deposit" `Quick test_valid_deposit_and_withdrawal; - Tztest.tztest - "valid deposit and external withdrawal" - `Quick - test_valid_deposit_and_external_withdrawal; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("zk rollup", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_adaptive_issuance_launch.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_adaptive_issuance_launch.ml deleted file mode 100644 index 5a8e715fbb05ee96cbe02d6bd93940f13f5b3bb0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_adaptive_issuance_launch.ml +++ /dev/null @@ -1,570 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Adaptive Issuance, launch vote - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_adaptive_issuance_launch.ml - Subject: Test the launch vote feature of Adaptive Issuance. -*) - -open Adaptive_issuance_helpers -module Cycle = Protocol.Alpha_context.Cycle - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["ai"; "ai_launch"] - -let assert_level ~loc (blk : Block.t) expected = - let current_level = blk.header.shell.level in - Assert.equal_int32 ~loc current_level expected - -let assert_is_not_yet_set_to_launch ~loc blk = - let open Lwt_result_syntax in - let* launch_cycle_opt = Context.get_adaptive_issuance_launch_cycle (B blk) in - Assert.is_none - ~loc - ~pp:(fun fmt cycle -> - Format.fprintf - fmt - "Activation cycle is set to %a but we expected it to be unset" - Protocol.Alpha_context.Cycle.pp - cycle) - launch_cycle_opt - -let assert_cycle_eq ~loc c1 c2 = - Assert.equal - ~loc - Protocol.Alpha_context.Cycle.( = ) - "cycle equality" - Protocol.Alpha_context.Cycle.pp - c1 - c2 - -let assert_current_cycle ~loc (blk : Block.t) expected = - let current_cycle = Block.current_cycle blk in - assert_cycle_eq ~loc current_cycle expected - -(** Assert that the staking balance is the expected one. *) -let assert_total_frozen_stake ~loc block expected = - let open Lwt_result_syntax in - let* actual = Context.get_total_frozen_stake (B block) in - Assert.equal_tez ~loc actual expected - -(* Assert that the current voting power of a delegate is the expected - one. The expectation is computed based on the expected self-staked, - delegated, and staked tez. The delegate's own liquid balance is - measured. *) -let assert_voting_power ~loc block delegate ~ai_enabled ~expected_staked - ~expected_delegated ~expected_ext_staked = - let open Lwt_result_syntax in - let* balance = Context.Contract.balance (B block) (Implicit delegate) in - let balance = Protocol.Alpha_context.Tez.to_mutez balance in - let expected_liquid = Int64.add balance expected_delegated in - let expected_frozen = Int64.add expected_staked expected_ext_staked in - let* constants = Context.get_constants (B block) in - let edge_of_staking_over_delegation = - Int64.of_int - constants.parametric.adaptive_issuance.edge_of_staking_over_delegation - in - let expected_voting_power = Int64.add expected_frozen expected_liquid in - let expected_baking_power = - if ai_enabled then - Int64.add - expected_frozen - (Int64.div expected_liquid edge_of_staking_over_delegation) - else expected_voting_power - in - let* actual_voting_power = - Context.get_current_voting_power (B block) delegate - in - let* () = Assert.equal_int64 ~loc actual_voting_power expected_voting_power in - let* actual_baking_power = - Context.get_current_baking_power (B block) delegate - in - Assert.equal_int64 ~loc actual_baking_power expected_baking_power - -(* Test that: - - the EMA of the adaptive issuance vote reaches the threshold after the - expected duration, - - the launch cycle is set as soon as the threshold is reached, - - the launch cycle is not reset before it is reached, - - once the launch cycle is reached, staking is allowed, - - staking increases total_frozen_stake. *) -let test_launch threshold expected_vote_duration = - let open Lwt_result_wrap_syntax in - let assert_ema_above_threshold ~loc - (metadata : Protocol.Main.block_header_metadata) = - let ema = - Protocol.Alpha_context.Per_block_votes.Adaptive_issuance_launch_EMA - .to_int32 - metadata.adaptive_issuance_vote_ema - in - Assert.lt_int32 ~loc threshold ema - in - (* Initialize the state with a single delegate. *) - let constants = - let default_constants = Default_parameters.constants_test in - let adaptive_issuance = - { - default_constants.adaptive_issuance with - launch_ema_threshold = threshold; - activation_vote_enable = true; - autostaking_enable = false; - } - in - let cost_per_byte = Tez_helpers.zero in - let issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez_helpers.zero; - } - in - let consensus_threshold = 0 in - { - default_constants with - consensus_threshold; - adaptive_issuance; - issuance_weights; - cost_per_byte; - } - in - let delay = constants.consensus_rights_delay in - let* block, delegate = Context.init_with_constants1 constants in - let delegate_pkh = Context.Contract.pkh delegate in - let* () = assert_is_not_yet_set_to_launch ~loc:__LOC__ block in - let* () = - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 200_000_000_000L) - in - - (* To test that adaptive issuance is active, we test that - staking, a feature only available after the activation, is - allowed. But by default, delegates reject stakers, they must - explicitely set a positive limit_of_staking_over_baking to allow - them. Setting this limit does not immediately take effect but can - be done before the activation. For these reasons, we set it at - the beginning. - - The baking_over_staking_edge indicates the portion of the rewards - sent to the delegate's liquid balance. It's expressed in - billionth, with 0 meaning that everything is frozen and one - billion meaning that everything is liquid. We send all rewards to - the liquid part to ease reasoning about the total frozen - stake. *) - let* block = - let* operation = - set_delegate_parameters - (B block) - delegate - ~parameters: - { - limit_of_staking_over_baking = Q.one; - edge_of_baking_over_staking = Q.one; - } - in - Block.bake ~operation ~adaptive_issuance_vote:Per_block_vote_on block - in - - (* Initialization of a delegator account which will attempt to - stake. *) - let wannabe_staker_account = Account.new_account () in - let wannabe_staker = - Protocol.Alpha_context.Contract.Implicit - Account.(wannabe_staker_account.pkh) - in - - (* To set up the wannabe staker, we need three operations: a - transfer from the delegate to initialize its balance, a - revelation of its public key, and a delegation toward the - delegate. For simplicity we put these operations in different - blocks. *) - let* block = - let* operation = - Op.transaction - (B block) - delegate - wannabe_staker - (Protocol.Alpha_context.Tez.of_mutez_exn 2_000_000_000_000L) - in - Block.bake ~operation ~adaptive_issuance_vote:Per_block_vote_on block - in - let* block = - let* operation = - Op.revelation - ~fee:Protocol.Alpha_context.Tez.zero - (B block) - wannabe_staker_account.pk - in - Block.bake ~operation ~adaptive_issuance_vote:Per_block_vote_on block - in - let* block = - let* operation = - Op.delegation - ~fee:Protocol.Alpha_context.Tez.zero - (B block) - wannabe_staker - (Some delegate_pkh) - in - Block.bake ~operation ~adaptive_issuance_vote:Per_block_vote_on block - in - (* Self-staking most of the remaining balance. *) - let* block = - let* operation = - stake - (B block) - delegate - (Protocol.Alpha_context.Tez.of_mutez_exn 1_800_000_000_000L) - in - Block.bake ~operation ~adaptive_issuance_vote:Per_block_vote_on block - in - - (* We are now ready to activate the feature through by baking many - more blocks voting in favor of the activation until the EMA - threshold is reached. *) - let* () = assert_is_not_yet_set_to_launch ~loc:__LOC__ block in - - let* block, _ = - Block.bake_while_with_metadata - ~adaptive_issuance_vote:Per_block_vote_on - (fun _block metadata -> - let ema = - Protocol.Alpha_context.Per_block_votes.Adaptive_issuance_launch_EMA - .to_int32 - metadata.adaptive_issuance_vote_ema - in - let launch_cycle = metadata.adaptive_issuance_launch_cycle in - let cond = Compare.Int32.(ema < threshold) in - assert ( - if cond then Option.is_none launch_cycle - else Option.is_some launch_cycle) ; - cond) - block - in - (* At this point we are on the last block before the end of the vote. *) - let* () = - assert_level ~loc:__LOC__ block (Int32.pred expected_vote_duration) - in - let* () = assert_is_not_yet_set_to_launch ~loc:__LOC__ block in - (* We bake one more block to end the vote and set the feature to launch. *) - let* block, (metadata, _) = - Block.bake_n_with_metadata ~adaptive_issuance_vote:Per_block_vote_on 1 block - in - let* () = assert_ema_above_threshold ~loc:__LOC__ metadata in - let* () = assert_level ~loc:__LOC__ block expected_vote_duration in - (* At this point the feature is not launched yet, it is simply - planned to be launched. *) - (* We check that the feature is not yet active by attempting a - stake operation. *) - let* () = - let* operation = - stake - (B block) - wannabe_staker - (Protocol.Alpha_context.Tez.of_mutez_exn 10L) - in - let* i = Incremental.begin_construction block in - let*! i = Incremental.add_operation i operation in - Assert.proto_error_with_info - ~loc:__LOC__ - i - "Staking for a delegator while external staking is disabled" - in - let* () = - assert_voting_power - ~loc:__LOC__ - block - delegate_pkh - ~ai_enabled:false - ~expected_staked:2_000_000_000_000L - ~expected_delegated:2_000_000_000_000L - ~expected_ext_staked:0L - in - - let* launch_cycle = get_launch_cycle ~loc:__LOC__ block in - let* () = - (* Check that the block metadata information about the launch cycle - is consistent with the RPC. *) - let* cycle = - Assert.get_some ~loc:__LOC__ metadata.adaptive_issuance_launch_cycle - in - assert_cycle_eq ~loc:__LOC__ launch_cycle cycle - in - (* Bake until the activation. *) - let* block = Block.bake_until_cycle launch_cycle block in - let* block, (metadata, _) = Block.bake_n_with_metadata 1 block in - let* () = assert_ema_above_threshold ~loc:__LOC__ metadata in - (* Check that keeping the EMA above the threshold did not postpone - the activation. *) - let* launch_cycle_bis = get_launch_cycle ~loc:__LOC__ block in - let* () = assert_cycle_eq ~loc:__LOC__ launch_cycle launch_cycle_bis in - (* Check that the current cycle is the one at which the launch is - planned to happen. *) - let* () = assert_current_cycle ~loc:__LOC__ block launch_cycle in - (* At this point, only the delegate has frozen any stake and its - frozen balance is about 2 million tez (it started with 4 million, - sent half to its delegate, and staked the rest). *) - let* () = - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 2_000_000_000_000L) - in - let* () = - assert_voting_power - ~loc:__LOC__ - block - delegate_pkh - ~ai_enabled:true - ~expected_staked:2_000_000_000_000L - ~expected_delegated:2_000_000_000_000L - ~expected_ext_staked:0L - in - - (* Test that the wannabe staker is now allowed to stake almost all - its balance. It cannot totally stake it however because this is - considered by the protocol as an attempt to empty the account, and - emptying delegated accounts is forbidden. *) - let* balance = Context.Contract.balance (B block) wannabe_staker in - let*?@ balance_to_stake = Protocol.Alpha_context.Tez.(balance -? one) in - let* operation = stake (B block) wannabe_staker balance_to_stake in - let* block = Block.bake ~operation block in - (* The staking operation leads to an increase of the - total_frozen_stake but only consensus_rights_delay after the - operation. *) - let start_cycle = Block.current_cycle block in - let* block = - Block.bake_while - ~invariant:(fun block -> - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 2_000_000_000_000L)) - (fun block -> - let current_cycle = Block.current_cycle block in - Protocol.Alpha_context.Cycle.(current_cycle <= add start_cycle delay)) - block - in - let* block = Block.bake block in - let* () = - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 3_999_999_000_000L) - in - let* () = - assert_voting_power - ~loc:__LOC__ - block - delegate_pkh - ~ai_enabled:true - ~expected_staked:2_000_000_000_000L - ~expected_delegated:1_000_000L - ~expected_ext_staked:1_999_999_000_000L - in - return_unit - -(* Test that, with the feature flag unset: - - the EMA of the adaptive issuance vote reaches the threshold after the - expected duration, - - the feature does not activate. *) -let test_does_not_launch_without_feature_flag threshold vote_duration = - let open Lwt_result_wrap_syntax in - let assert_ema_above_threshold ~loc - (metadata : Protocol.Main.block_header_metadata) = - let ema = - Protocol.Alpha_context.Per_block_votes.Adaptive_issuance_launch_EMA - .to_int32 - metadata.adaptive_issuance_vote_ema - in - Assert.lt_int32 ~loc threshold ema - in - (* Initialize the state with a single delegate. *) - let constants = - let default_constants = Default_parameters.constants_test in - let adaptive_issuance = - { - default_constants.adaptive_issuance with - launch_ema_threshold = threshold; - activation_vote_enable = false; - } - in - let consensus_threshold = 0 in - {default_constants with consensus_threshold; adaptive_issuance} - in - let* block, _delegate = Context.init_with_constants1 constants in - let* () = assert_is_not_yet_set_to_launch ~loc:__LOC__ block in - let* () = - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 200_000_000_000L) - in - (* Bake many more blocks voting in favor of the activation until the - EMA threshold is reached. *) - let* () = assert_is_not_yet_set_to_launch ~loc:__LOC__ block in - let* block, _ = - Block.bake_while_with_metadata - ~adaptive_issuance_vote:Per_block_vote_on - (fun _block metadata -> - let ema = - Protocol.Alpha_context.Per_block_votes.Adaptive_issuance_launch_EMA - .to_int32 - metadata.adaptive_issuance_vote_ema - in - let launch_cycle = metadata.adaptive_issuance_launch_cycle in - let cond = Compare.Int32.(ema < threshold) in - assert (Option.is_none launch_cycle) ; - cond) - block - in - (* At this point we are on the last block before the end of the vote. *) - let* () = assert_level ~loc:__LOC__ block (Int32.pred vote_duration) in - let* () = assert_is_not_yet_set_to_launch ~loc:__LOC__ block in - (* We bake one more block, this would set the feature to launch if - the vote was taken into account. *) - let* block, (metadata, _) = - Block.bake_n_with_metadata ~adaptive_issuance_vote:Per_block_vote_on 1 block - in - let* () = assert_ema_above_threshold ~loc:__LOC__ metadata in - let* () = assert_level ~loc:__LOC__ block vote_duration in - let* launch_cycle_opt = - Context.get_adaptive_issuance_launch_cycle (B block) - in - let* () = Assert.is_none ~loc:__LOC__ ~pp:Cycle.pp launch_cycle_opt in - let* () = - Assert.is_none - ~loc:__LOC__ - ~pp:Cycle.pp - metadata.adaptive_issuance_launch_cycle - in - return_unit - -(* Test that with force_activation feature flag set, the feature activates - without waiting for the activation vote *) -let test_launch_without_vote () = - let open Lwt_result_wrap_syntax in - (* Initialize the state with a single delegate. *) - let constants = - let default_constants = Default_parameters.constants_test in - let issuance_weights = - { - Default_parameters.constants_test.issuance_weights with - base_total_issued_per_minute = Tez_helpers.zero; - } - in - let adaptive_issuance = - {default_constants.adaptive_issuance with force_activation = true} - in - let consensus_threshold = 0 in - { - default_constants with - consensus_threshold; - issuance_weights; - adaptive_issuance; - } - in - let* block, delegate = Context.init_with_constants1 constants in - let delegate_pkh = Context.Contract.pkh delegate in - let* block = Block.bake block in - - (* AI should be activated and launch cycle is current cycle (0) *) - let* launch_cycle_opt = - Context.get_adaptive_issuance_launch_cycle (B block) - in - let* launch_cycle = Assert.get_some ~loc:__LOC__ launch_cycle_opt in - let* () = Assert.equal_int32 ~loc:__LOC__ (Cycle.to_int32 launch_cycle) 0l in - - let* () = - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 200_000_000_000L) - in - (* feature flag is set, AI should be active, let's use the stake function to check *) - let* operation = - stake - (B block) - delegate - (Protocol.Alpha_context.Tez.of_mutez_exn 180_000_000_000L) - in - let* block = Block.bake ~operation block in - (* Wait until total frozen stake is updated *) - let start_cycle = Block.current_cycle block in - let* block = - Block.bake_while - ~invariant:(fun block -> - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 200_000_000_000L)) - (fun block -> - let current_cycle = Block.current_cycle block in - Protocol.Alpha_context.Cycle.( - current_cycle <= add start_cycle constants.consensus_rights_delay)) - block - in - let* block = Block.bake block in - - let* () = - assert_total_frozen_stake - ~loc:__LOC__ - block - (Protocol.Alpha_context.Tez.of_mutez_exn 380_000_000_000L) - in - let* () = - assert_voting_power - ~loc:__LOC__ - block - delegate_pkh - ~ai_enabled:true - ~expected_staked:380_000_000_000L - ~expected_delegated:0L - ~expected_ext_staked:0L - in - return_unit - -let () = - register_test - ~title: - "Launch with force_activation feature flag set activates AI immediately" - test_launch_without_vote - -let () = - register_test - ~title:"expected EMA and AI launches (very low threshold, vote enabled)" - @@ fun () -> - test_launch 1000000l (* This means that the threshold is set to 0.05% *) 88l - -let () = - register_test - ~title: - "expected EMA and AI does not launch (very low threshold, vote disabled)" - @@ fun () -> - test_does_not_launch_without_feature_flag - 1000000l (* This means that the threshold is set to 0.05% *) - 88l diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_constants.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_constants.ml deleted file mode 100644 index 0c03f3a90d3ada1ab515b4235f71a4b45b91cf45..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_constants.ml +++ /dev/null @@ -1,259 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* Copyright (c) 2022 Trilitech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (baking) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_constants.ml - Subject: the consistency of parametric constants - *) - -open Tez_helpers - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["constants"] - -let () = - register_test ~title:"sc_rollup constants consistency" @@ fun () -> - let open Protocol.Alpha_context in - let to_string c = - Data_encoding.Json.( - to_string ~minify:true - @@ construct Constants.Parametric.Internal_for_tests.sc_rollup_encoding c) - in - (* We do not necessarily need to update this value when the block time - changes. The goal is to witness the consistency of the “symbolic” - computations in [Default_parameters] and [Raw_context].. *) - let block_time = 10 in - let sc_rollup = - Default_parameters.Internal_for_tests.make_sc_rollup_parameter - ~dal_attested_slots_validity_lag:241_920 - (* 4 weeks with a 10 secs block time. *) - ~dal_activation_level:Raw_level.root - block_time - in - let sc_rollup' = - Constants.Parametric.update_sc_rollup_parameter sc_rollup ~block_time - in - Assert.equal - ~loc:__LOC__ - (fun s1 s2 -> String.equal (to_string s1) (to_string s2)) - "sc_rollup_parameter update" - (fun fmt sc_rollup -> Format.pp_print_string fmt @@ to_string sc_rollup) - sc_rollup - sc_rollup' - -let () = - register_test ~title:"constants consistency" @@ fun () -> - let open Default_parameters in - List.iter_es - Block.check_constants_consistency - [constants_mainnet; constants_sandbox; constants_test] - -let () = - register_test ~title:"max_operations_ttl" @@ fun () -> - let open Lwt_result_wrap_syntax in - let open Protocol in - (* We check the rationale that the value for [max_operations_time_to_live] is the following: - - [minimal_time_between_blocks * max_operations_time_to_live = 3600] *) - let constants = Default_parameters.constants_mainnet in - let*?@ result = - Alpha_context.Period.mult - (Int32.of_int constants.max_operations_time_to_live) - constants.minimal_block_delay - in - Assert.equal - ~loc:__LOC__ - (fun x y -> Alpha_context.Period.compare x y = 0) - "max_operations_ttl" - Alpha_context.Period.pp - Alpha_context.Period.one_hour - result - -(* Check that - [sc_rollup_challenge_window_in_blocks < sc_rollup_max_lookahead_in_blocks] - - Otherwise committers would be forced to commit at an artificially slow rate, affecting - the throughput of the rollup. *) -let () = - register_test ~title:"sc rollup challenge window less than max lookahead" - @@ fun () -> - let constants = Default_parameters.constants_mainnet in - let max_lookahead = constants.sc_rollup.max_lookahead_in_blocks in - let challenge_window = - Int32.of_int constants.sc_rollup.challenge_window_in_blocks - in - Assert.lt_int32 ~loc:__LOC__ challenge_window max_lookahead - -(* TODO: https://gitlab.com/tezos/tezos/-/issues/4481 - Improve this to catch more regressions in term of storage consumption *) - -(* Check that - [commitment_storage_cost * max_lookahead / commitment_period < stake_amount] - - Otherwise storage could be overallocated - since backtracking is not allowed, a staker - can allocated at most [d] nodes (where [d] is the tree depth) - the maximum storage cost - of these commitments must be at most the size of the staker's deposit. *) -let () = - register_test ~title:"sc rollup max commitment storage cost less than deposit" - @@ fun () -> - let constants = Default_parameters.constants_mainnet in - let open Protocol in - let cost_per_byte_mutez = - Alpha_context.Tez.to_mutez constants.cost_per_byte - in - let commitment_storage_size = - Int64.of_int - Sc_rollup_stake_storage.Internal_for_tests - .max_commitment_storage_size_in_bytes - in - let commitment_storage_cost = - Int64.mul cost_per_byte_mutez commitment_storage_size - in - let max_lookahead = - Int64.of_int32 constants.sc_rollup.max_lookahead_in_blocks - in - let commitment_period = - Int64.of_int constants.sc_rollup.commitment_period_in_blocks - in - let stake_amount = - Alpha_context.Tez.to_mutez constants.sc_rollup.stake_amount - in - Assert.leq_int64 - ~loc:__LOC__ - (Int64.mul - commitment_storage_cost - (Int64.div max_lookahead commitment_period)) - stake_amount - -(* Check that - [{!Sc_rollup_stake_storage.commitment_storage_size_in_bytes} = - commitments_entry_size + commitment_stake_count_entry_size + - commitment_added_entry_size] - - Required to ensure [sc_rollup_stake_amount] and [sc_rollup_max_lookahead] are - correctly scaled with respect to each other - see - {!test_sc_rollup_max_commitment_storage_cost_lt_deposit} -*) -let () = - register_test ~title:"sc rollup commitment storage size correct" @@ fun () -> - let open Lwt_result_syntax in - let open Protocol in - let* number_of_ticks = - Assert.get_some - ~loc:__LOC__ - (Sc_rollup_repr.Number_of_ticks.of_value 1232909L) - in - let commitment = - Sc_rollup_commitment_repr. - { - predecessor = Sc_rollup_commitment_repr.Hash.zero; - inbox_level = Raw_level_repr.of_int32_exn 21l; - number_of_ticks; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let versioned_commitment = - Sc_rollup_commitment_repr.to_versioned commitment - in - let commitment_length = - Data_encoding.Binary.length - Sc_rollup_commitment_repr.versioned_encoding - versioned_commitment - in - let commitment_hash = - Sc_rollup_commitment_repr.hash_uncarbonated commitment - in - let level = Alpha_context.Raw_level.of_int32_exn 5l in - (* One for the first publication level, and one for the published level. *) - let levels_length = - Data_encoding.Binary.length Alpha_context.Raw_level.encoding level * 2 - in - let staker_index = - Sc_rollup_staker_index_repr.Internal_for_tests.of_z (Z.of_int 94323442) - in - let stakers_index_length = - Data_encoding.( - Binary.length (list Sc_rollup_staker_index_repr.encoding) [staker_index]) - in - let commitment_hashes_length = - Data_encoding.( - Binary.length - (list Sc_rollup_commitment_repr.Hash.encoding) - [commitment_hash]) - in - let max_expected = - Sc_rollup_stake_storage.Internal_for_tests - .max_commitment_storage_size_in_bytes - in - let total_computed = - commitment_length + levels_length + stakers_index_length - + commitment_hashes_length - in - Assert.leq_int ~loc:__LOC__ total_computed max_expected - -(** Test that the amount of the liquidity baking subsidy is epsilon smaller than - 1/16th of the maximum reward. *) -let () = - register_test - ~title: - "liquidity_baking_subsidy parameter is 1/16th of total baking rewards" - @@ fun () -> - let open Lwt_result_wrap_syntax in - let constants = Default_parameters.constants_mainnet in - let get_reward = - Protocol.Alpha_context.Delegate.Rewards.For_RPC.reward_from_constants - constants - in - let*?@ baking_reward_bonus_per_slot = - get_reward ~reward_kind:Baking_reward_bonus_per_slot - in - let*? baking_reward_bonus = - baking_reward_bonus_per_slot - *? Int64.of_int (constants.consensus_committee_size / 3) - in - let*?@ baking_reward_fixed_portion = - get_reward ~reward_kind:Baking_reward_fixed_portion - in - let*? baking_rewards = baking_reward_fixed_portion +? baking_reward_bonus in - let*?@ attesting_reward_per_slot = - get_reward ~reward_kind:Attesting_reward_per_slot - in - let*? validators_rewards = - attesting_reward_per_slot *? Int64.of_int constants.consensus_committee_size - in - let*? total_rewards = baking_rewards +? validators_rewards in - let expected_subsidy = total_rewards /! 16L in - let*?@ liquidity_baking_subsidy = - Protocol.Alpha_context.Delegate.Rewards.For_RPC - .liquidity_baking_subsidy_from_constants - constants - in - let*? diff = liquidity_baking_subsidy -? expected_subsidy in - let max_diff = 1000 (* mutez *) in - Assert.leq_int ~loc:__LOC__ (Int64.to_int (to_mutez diff)) max_diff diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_frozen_bonds.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_frozen_bonds.ml deleted file mode 100644 index c44d8e7f68e6017641229dec298403066b9be721..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_frozen_bonds.ml +++ /dev/null @@ -1,748 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (token) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_frozen_bonds.ml - Subject: Frozen bonds applicable to contracts and part of their stake. -*) - -open Protocol -open Alpha_context -open Tez_helpers - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["frozen_bonds"] - -let big_random_amount () = - match Tez.of_mutez (Int64.add 100_000L (Random.int64 1_000_000L)) with - | None -> assert false - | Some x -> x - -let small_random_amount () = - match Tez.of_mutez (Int64.add 1_000L (Random.int64 10_000L)) with - | None -> assert false - | Some x -> x - -let very_small_random_amount () = - match Tez.of_mutez (Int64.add 1L (Random.int64 100L)) with - | None -> assert false - | Some x -> x - -let nonce_zero = - Origination_nonce.Internal_for_tests.initial Operation_hash.zero - -let mk_sc_rollup ?(nonce = nonce_zero) () = - ( Sc_rollup.Internal_for_tests.originated_sc_rollup nonce, - Origination_nonce.Internal_for_tests.incr nonce ) - -(** Creates a context with a single account. Returns the context and the public - key hash of the account. *) -let create_context () = - let open Lwt_result_syntax in - let (Parameters.{public_key_hash; _} as bootstrap_account) = - Account.(new_account () |> make_bootstrap_account) - in - let+ ctxt = Block.alpha_context [bootstrap_account] in - (ctxt, public_key_hash) - -(** Creates a context, a user contract, and a delegate. - Returns the context, the user contract, the user account, and the - delegate's pkh. *) -let init_test ~user_is_delegate = - let open Lwt_result_wrap_syntax in - let* ctxt, _ = create_context () in - let delegate, delegate_pk, _ = Signature.generate_key () in - let delegate_contract = Contract.Implicit delegate in - let delegate_account = `Contract (Contract.Implicit delegate) in - let user_contract = - if user_is_delegate then delegate_contract - else - let user, _, _ = Signature.generate_key () in - Contract.Implicit user - in - let user_account = `Contract user_contract in - (* Allocate contracts for user and delegate. *) - let user_balance = big_random_amount () in - let*@ ctxt, _ = Token.transfer ctxt `Minted user_account user_balance in - let delegate_balance = big_random_amount () in - let*@ ctxt, _ = - Token.transfer ctxt `Minted delegate_account delegate_balance - in - (* Configure delegate, as a delegate by self-delegation, for which - revealing its manager key is a prerequisite. *) - let*@ ctxt = Contract.reveal_manager_key ctxt delegate delegate_pk in - let*@ ctxt = Contract.Delegate.set ctxt delegate_contract (Some delegate) in - return (ctxt, user_contract, user_account, delegate) - -(** Tested scenario : - 1. user contract delegates to 'delegate', - 2. freeze a deposit, - 3. check that staking balance of delegate has not changed, - 4. remove delegation, - 5. check staking balance decreased accordingly, - 6. unfreeze the deposit, - 7. check that staking balance is unchanged, - 8. check that user's balance is unchanged. *) -let test_delegate_then_freeze_deposit () = - let open Lwt_result_wrap_syntax in - let* ctxt, user_contract, user_account, delegate = - init_test ~user_is_delegate:false - in - (* Fetch user's initial balance before freeze. *) - let*@ ctxt, user_balance = - Token.Internal_for_tests.balance ctxt user_account - in - (* Let user delegate to "delegate". *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract (Some delegate) in - (* Fetch staking balance after delegation and before freeze. *) - let*@ staking_balance = Delegate.For_RPC.staking_balance ctxt delegate in - (* Freeze a sc-rollup deposit. *) - let sc_rollup, _ = mk_sc_rollup () in - let bond_id = Bond_id.Sc_rollup_bond_id sc_rollup in - let deposit_amount = small_random_amount () in - let deposit_account = `Frozen_bonds (user_contract, bond_id) in - let*@ ctxt, _ = - Token.transfer ctxt user_account deposit_account deposit_amount - in - (* Fetch staking balance after freeze. *) - let*@ staking_balance' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Ensure staking balance did not change. *) - let* () = Assert.equal_tez ~loc:__LOC__ staking_balance' staking_balance in - (* Remove delegation. *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract None in - (* Fetch staking balance after delegation removal. *) - let*@ staking_balance'' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Ensure staking balance decreased by user's initial balance. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - staking_balance'' - (staking_balance' -! user_balance) - in - (* Unfreeze the deposit. *) - let*@ ctxt, _ = - Token.transfer ctxt deposit_account user_account deposit_amount - in - (* Fetch staking balance of delegate. *) - let*@ staking_balance''' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Ensure that staking balance is unchanged. *) - let* () = - Assert.equal_tez ~loc:__LOC__ staking_balance''' staking_balance'' - in - (* Fetch user's balance again. *) - let*@ _, user_balance' = Token.Internal_for_tests.balance ctxt user_account in - (* Ensure user's balance is unchanged. *) - Assert.equal_tez ~loc:__LOC__ user_balance' user_balance - -(** Tested scenario: - 1. freeze a deposit, - 2. user contract delegate to 'delegate', - 3. check that staking balance of delegate has increased as expected, - 4. unfreeze the deposit, - 5. check that staking balance has not changed, - 6. remove delegation, - 7. check that staking balance has decreased as expected, - 8. check that the user's balance is unchanged. *) -let test_freeze_deposit_then_delegate () = - let open Lwt_result_wrap_syntax in - let* ctxt, user_contract, user_account, delegate = - init_test ~user_is_delegate:false - in - (* Fetch user's initial balance before freeze. *) - let*@ ctxt, user_balance = - Token.Internal_for_tests.balance ctxt user_account - in - (* Freeze a sc-rollup deposit. *) - let sc_rollup, _ = mk_sc_rollup () in - let bond_id = Bond_id.Sc_rollup_bond_id sc_rollup in - let deposit_amount = small_random_amount () in - let deposit_account = `Frozen_bonds (user_contract, bond_id) in - let*@ ctxt, _ = - Token.transfer ctxt user_account deposit_account deposit_amount - in - (* Here, user balance has decreased. - Now, fetch staking balance before delegation and after freeze. *) - let*@ staking_balance = Delegate.For_RPC.staking_balance ctxt delegate in - (* Let user delegate to "delegate". *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract (Some delegate) in - (* Fetch staking balance after delegation. *) - let*@ staking_balance' = Delegate.For_RPC.staking_balance ctxt delegate in - (* ensure staking balance increased by the user's balance. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - staking_balance' - (user_balance +! staking_balance) - in - (* Unfreeze the deposit. *) - let*@ ctxt, _ = - Token.transfer ctxt deposit_account user_account deposit_amount - in - (* Fetch staking balance after unfreeze. *) - let*@ staking_balance'' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Ensure that staking balance is unchanged. *) - let* () = Assert.equal_tez ~loc:__LOC__ staking_balance'' staking_balance' in - (* Remove delegation. *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract None in - (* Fetch staking balance. *) - let*@ staking_balance''' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Check that staking balance has decreased by the user's initial balance. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - staking_balance''' - (staking_balance'' -! user_balance) - in - (* Fetch user's balance. *) - let*@ _, user_balance' = Token.Internal_for_tests.balance ctxt user_account in - (* Ensure user's balance is unchanged. *) - Assert.equal_tez ~loc:__LOC__ user_balance' user_balance - -(** Tested scenario: - 1. freeze a deposit (with deposit amount = balance), - 2. check that the user contract is still allocated, - 3. punish the user contract, - 4. check that the user contract is unallocated, except if it's a delegate. *) -let test_allocated_when_frozen_deposits_exists ~user_is_delegate () = - let open Lwt_result_wrap_syntax in - let* ctxt, user_contract, user_account, _delegate = - init_test ~user_is_delegate - in - (* Fetch user's initial balance before freeze. *) - let*@ ctxt, user_balance = - Token.Internal_for_tests.balance ctxt user_account - in - let* () = Assert.equal_bool ~loc:__LOC__ Tez.(user_balance > zero) true in - (* Freeze a sc-rollup deposit. *) - let sc_rollup, _ = mk_sc_rollup () in - let bond_id = Bond_id.Sc_rollup_bond_id sc_rollup in - let deposit_amount = user_balance in - let deposit_account = `Frozen_bonds (user_contract, bond_id) in - let*@ ctxt, _ = - Token.transfer ctxt user_account deposit_account deposit_amount - in - (* Check that user contract is still allocated, despite a null balance. *) - let*@ ctxt, balance = Token.Internal_for_tests.balance ctxt user_account in - let* () = Assert.equal_tez ~loc:__LOC__ balance Tez.zero in - let*@ ctxt, user_allocated = - Token.Internal_for_tests.allocated ctxt (user_account :> Token.container) - in - let*@ ctxt, dep_allocated = - Token.Internal_for_tests.allocated ctxt deposit_account - in - let* () = - Assert.equal_bool ~loc:__LOC__ (user_allocated && dep_allocated) true - in - (* Punish the user contract. *) - let*@ ctxt, _ = Token.transfer ctxt deposit_account `Burned deposit_amount in - (* Check that user and deposit accounts have been unallocated. *) - let*@ ctxt, user_allocated = - Token.Internal_for_tests.allocated ctxt (user_account :> Token.container) - in - let*@ _, dep_allocated = - Token.Internal_for_tests.allocated ctxt deposit_account - in - if user_is_delegate then - Assert.equal_bool ~loc:__LOC__ (user_allocated && not dep_allocated) true - else Assert.equal_bool ~loc:__LOC__ (user_allocated || dep_allocated) false - -(** Tested scenario: - 1. freeze two deposits for the user contract, - 2. check that the stake of the user contract is balance + two deposits, - 3. punish for one of the deposits, - 4. check that the stake of the user contract balance + deposit, - 5. punish for the other deposit, - 6. check that the stake of the user contract is equal to balance. *) -let test_total_stake ~user_is_delegate () = - let open Lwt_result_wrap_syntax in - let* ctxt, user_contract, user_account, _delegate = - init_test ~user_is_delegate - in - (* Fetch user's initial balance before freeze. *) - let*@ ctxt, user_balance = - Token.Internal_for_tests.balance ctxt user_account - in - let* () = Assert.equal_bool ~loc:__LOC__ Tez.(user_balance > zero) true in - (* Freeze 2 sc-rollup deposits. *) - let sc_rollup, nonce = mk_sc_rollup () in - let bond_id1 = Bond_id.Sc_rollup_bond_id sc_rollup in - let sc_rollup, _ = mk_sc_rollup ~nonce () in - let bond_id2 = Bond_id.Sc_rollup_bond_id sc_rollup in - let deposit_amount = small_random_amount () in - let deposit_account1 = `Frozen_bonds (user_contract, bond_id1) in - let*@ ctxt, _ = - Token.transfer ctxt user_account deposit_account1 deposit_amount - in - let deposit_account2 = `Frozen_bonds (user_contract, bond_id2) in - let*@ ctxt, _ = - Token.transfer ctxt user_account deposit_account2 deposit_amount - in - (* Test folding on bond ids. *) - let*! bond_ids = - Bond_id.Internal_for_tests.fold_on_bond_ids - ctxt - user_contract - ~init:[] - ~order:`Sorted - ~f:(fun id l -> Lwt.return (id :: l)) - in - let* () = - Assert.assert_equal_list - ~loc:__LOC__ - (fun id1 id2 -> Bond_id.compare id1 id2 = 0) - "Unexpected bond identifiers." - Bond_id.pp - (List.sort Bond_id.compare bond_ids) - (List.sort Bond_id.compare [bond_id1; bond_id2]) - in - (* Check that the stake of user contract is balance + two deposits. *) - let*@ stake = Contract.get_balance_and_frozen_bonds ctxt user_contract in - let*@ frozen_bonds = Contract.get_frozen_bonds ctxt user_contract in - let*@ ctxt, balance = Token.Internal_for_tests.balance ctxt user_account in - let* () = Assert.equal_tez ~loc:__LOC__ (stake -! balance) frozen_bonds in - let* () = - Assert.equal_tez ~loc:__LOC__ (stake -! balance) (deposit_amount *! 2L) - in - (* Punish for one deposit. *) - let*@ ctxt, _ = Token.transfer ctxt deposit_account2 `Burned deposit_amount in - (* Check that stake of contract is balance + deposit. *) - let*@ stake = Contract.get_balance_and_frozen_bonds ctxt user_contract in - let*@ frozen_bonds = Contract.get_frozen_bonds ctxt user_contract in - let* () = Assert.equal_tez ~loc:__LOC__ (stake -! balance) frozen_bonds in - let* () = Assert.equal_tez ~loc:__LOC__ (stake -! balance) deposit_amount in - (* Punish for the other deposit. *) - let*@ ctxt, _ = Token.transfer ctxt deposit_account1 `Burned deposit_amount in - (* Check that stake of contract is equal to balance. *) - let*@ stake = Contract.get_balance_and_frozen_bonds ctxt user_contract in - Assert.equal_tez ~loc:__LOC__ stake balance - -let check_delegated_balance_is ctxt ~loc delegate expected_balance = - let open Lwt_result_wrap_syntax in - (* Fetch the delegated balance of d. *) - let*@ delegated_balance = Delegate.For_RPC.delegated_balance ctxt delegate in - (* Check that the delegated balance of [delegate] is as explected. *) - Assert.equal_tez ~loc delegated_balance expected_balance - -(** Tested scenario: - 1. freeze some bonds for the delegate, - 2. check that the delegated balance is null, - 3. let user contract delegate to 'delegate', - 4. check that the staking balance of 'delegate' has increased as expected, - 5. check that the delegated balance of 'delegate' is equal to the balance of the delegator, - 6. unfreeze the bonds, - 7. check that the staking balance has not changed, - 8. check that the delegated balance of 'delegate' is equal to the balance of the delegator, - 9. remove the delegation, - 10. check that staking balance has decreased as expected, - 11. check that the delegated balance is null, - 12. check that the user's balance is unchanged. *) -let test_delegated_balance () = - let open Lwt_result_wrap_syntax in - let* ctxt, user_contract, user_account, delegate = - init_test ~user_is_delegate:false - in - let delegate_contract = Contract.Implicit delegate in - let delegate_account = `Contract delegate_contract in - (* Fetch user's initial balance before freeze. *) - let*@ ctxt, user_balance = - Token.Internal_for_tests.balance ctxt user_account - in - (* Fetch staking balance before freeze. *) - let*@ staking_balance = Delegate.For_RPC.staking_balance ctxt delegate in - (* Freeze a sc-rollup deposit for the delegate. *) - let sc_rollup, _ = mk_sc_rollup () in - let bond_id = Bond_id.Sc_rollup_bond_id sc_rollup in - let deposit_amount = small_random_amount () in - let deposit_account = `Frozen_bonds (delegate_contract, bond_id) in - let*@ ctxt, _ = - Token.transfer ctxt delegate_account deposit_account deposit_amount - in - (* Check that the delegated balance of [delegate] is null. *) - let* () = check_delegated_balance_is ctxt ~loc:__LOC__ delegate Tez.zero in - (* Let user delegate to "delegate". *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract (Some delegate) in - (* Fetch staking balance after delegation. *) - let*@ staking_balance' = Delegate.For_RPC.staking_balance ctxt delegate in - (* ensure staking balance increased by the user's balance. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - staking_balance' - (user_balance +! staking_balance) - in - (* Check that the delegated balance of [delegate] is equal to [user_balance]. *) - let* () = - check_delegated_balance_is ctxt ~loc:__LOC__ delegate user_balance - in - (* Unfreeze the deposit. *) - let*@ ctxt, _ = - Token.transfer ctxt deposit_account delegate_account deposit_amount - in - (* Fetch staking balance after unfreeze. *) - let*@ staking_balance'' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Ensure that staking balance is unchanged. *) - let* () = Assert.equal_tez ~loc:__LOC__ staking_balance'' staking_balance' in - (* Check that the delegated balance of [delegate] is equal to [user_balance]. *) - let* () = - check_delegated_balance_is ctxt ~loc:__LOC__ delegate user_balance - in - (* Remove delegation. *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract None in - (* Fetch staking balance. *) - let*@ staking_balance''' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Check that staking balance has decreased by the user's initial balance. *) - let* () = - Assert.equal_tez - ~loc:__LOC__ - staking_balance''' - (staking_balance'' -! user_balance) - in - (* Check that the delegated balance of [delegate] is null. *) - let* () = check_delegated_balance_is ctxt ~loc:__LOC__ delegate Tez.zero in - (* Fetch user's balance. *) - let*@ _, user_balance' = Token.Internal_for_tests.balance ctxt user_account in - (* Ensure user's balance is unchanged. *) - Assert.equal_tez ~loc:__LOC__ user_balance' user_balance - -(** Tests that the rpcs [contract/pkh/frozen_bonds] and - [contract/pkh/balance_and_frozen_bonds] can be called successfully. - These rpcs call the functions [Contract.get_frozen_bonds] and - [Contract.get_balance_and_frozen_bonds] already tested in previous tests. *) -let test_rpcs () = - let open Lwt_result_syntax in - let* blk, contract = Context.init1 () in - let* frozen_bonds = Context.Contract.frozen_bonds (B blk) contract in - let* () = Assert.equal_tez ~loc:__LOC__ frozen_bonds Tez.zero in - let* balance_and_frozen_bonds = - Context.Contract.balance_and_frozen_bonds (B blk) contract - in - let* balance = Context.Contract.balance (B blk) contract in - Assert.equal_tez ~loc:__LOC__ balance_and_frozen_bonds balance - -(** A helper to test a particular delegation/freezing scenario *) -let test_scenario scenario = - let open Lwt_result_wrap_syntax in - let* ctxt, user_contract, user_account, delegate1 = - init_test ~user_is_delegate:false - in - let delegate2, delegate_pk2, _ = Signature.generate_key () in - let delegate_contract2 = Contract.Implicit delegate2 in - let delegate_account2 = `Contract delegate_contract2 in - let delegate_balance2 = big_random_amount () in - let*@ ctxt, _ = - Token.transfer ctxt `Minted delegate_account2 delegate_balance2 - in - (* Configure delegate, as a delegate by self-delegation, for which - revealing its manager key is a prerequisite. *) - let*@ ctxt = Contract.reveal_manager_key ctxt delegate2 delegate_pk2 in - let*@ ctxt = Contract.Delegate.set ctxt delegate_contract2 (Some delegate2) in - let sc_rollup1, nonce = mk_sc_rollup () in - let sc_rollup2, _ = mk_sc_rollup ~nonce () in - let bond_id1 = Bond_id.Sc_rollup_bond_id sc_rollup1 in - let bond_id2 = Bond_id.Sc_rollup_bond_id sc_rollup2 in - let deposit_amount = Tez.of_mutez_exn 1000L in - let deposit_account1 = `Frozen_bonds (user_contract, bond_id1) in - let deposit_account2 = `Frozen_bonds (user_contract, bond_id2) in - let do_delegate ?(delegate = delegate1) ctxt = - (* Fetch staking balance before delegation *) - let*@ staking_balance = Delegate.For_RPC.staking_balance ctxt delegate in - (* Fetch user's initial balance before delegate. *) - let*@ user_balance = - Contract.get_balance_and_frozen_bonds ctxt user_contract - in - (* Let user delegate to "delegate". *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract (Some delegate) in - (* Fetch staking balance after delegation *) - let*@ staking_balance' = Delegate.For_RPC.staking_balance ctxt delegate in - let+ () = - Assert.equal_tez - ~loc:__LOC__ - staking_balance' - (staking_balance +! user_balance) - in - (ctxt, user_balance) - in - let do_freeze ?(deposit_account = deposit_account1) ctxt = - (* Fetch staking balance before freeze *) - let*@ staking_balance1 = Delegate.For_RPC.staking_balance ctxt delegate1 in - let*@ staking_balance2 = Delegate.For_RPC.staking_balance ctxt delegate2 in - (* Freeze a sc-rollup deposit. *) - let*@ ctxt, _ = - Token.transfer ctxt user_account deposit_account deposit_amount - in - (* Fetch staking balance after freeze. *) - let*@ staking_balance1' = Delegate.For_RPC.staking_balance ctxt delegate1 in - let*@ staking_balance2' = Delegate.For_RPC.staking_balance ctxt delegate2 in - (* Ensure staking balance did not change. *) - let* () = - Assert.equal_tez ~loc:__LOC__ staking_balance1' staking_balance1 - in - let+ () = - Assert.equal_tez ~loc:__LOC__ staking_balance2' staking_balance2 - in - ctxt - in - let do_unfreeze ?(deposit_account = deposit_account1) ctxt = - (* Fetch staking balance before unfreeze *) - let*@ staking_balance1 = Delegate.For_RPC.staking_balance ctxt delegate1 in - let*@ staking_balance2 = Delegate.For_RPC.staking_balance ctxt delegate2 in - (* Unfreeze the deposit *) - let*@ ctxt, _ = - Token.transfer ctxt deposit_account user_account deposit_amount - in - (* Fetch staking balance after unfreeze. *) - let*@ staking_balance1' = Delegate.For_RPC.staking_balance ctxt delegate1 in - let*@ staking_balance2' = Delegate.For_RPC.staking_balance ctxt delegate2 in - (* Ensure staking balance did not change. *) - let* () = - Assert.equal_tez ~loc:__LOC__ staking_balance1' staking_balance1 - in - let+ () = - Assert.equal_tez ~loc:__LOC__ staking_balance2' staking_balance2 - in - ctxt - in - let do_slash ?(deposit_account = deposit_account1) - ?(current_delegate = Some delegate1) ctxt = - (* Fetch staking balance before slash *) - let*@ staking_balance = - match current_delegate with - | None -> return Tez.zero - | Some current_delegate -> - Delegate.For_RPC.staking_balance ctxt current_delegate - in - (* Slash the deposit *) - let*@ ctxt, _ = - Token.transfer - ctxt - deposit_account - `Sc_rollup_refutation_punishments - deposit_amount - in - (* Fetch staking balance after slash. *) - let+ () = - match current_delegate with - | None -> return_unit - | Some current_delegate -> - let*@ staking_balance' = - Delegate.For_RPC.staking_balance ctxt current_delegate - in - (* Ensure balance slashed *) - Assert.equal_tez - ~loc:__LOC__ - staking_balance' - (staking_balance -! deposit_amount) - in - ctxt - in - let do_undelegate ?(delegate = delegate1) ctxt amount = - (* Fetch staking balance before undelegate *) - let*@ staking_balance = Delegate.For_RPC.staking_balance ctxt delegate in - (* Fetch user's initial balance before undelegate. *) - let*@ _, user_balance = - Token.Internal_for_tests.balance ctxt user_account - in - (* Remove delegation. *) - let*@ ctxt = Contract.Delegate.set ctxt user_contract None in - (* Fetch staking balance after delegation removal. *) - let*@ staking_balance' = Delegate.For_RPC.staking_balance ctxt delegate in - (* Ensure staking balance decreased by delegation amount *) - let* () = - Assert.equal_tez ~loc:__LOC__ staking_balance' (staking_balance -! amount) - in - (* Fetch user's balance again. *) - let*@ _, user_balance' = - Token.Internal_for_tests.balance ctxt user_account - in - (* Ensure user's balance unchanged. *) - let+ () = Assert.equal_tez ~loc:__LOC__ user_balance' user_balance in - ctxt - in - let initial_ctxt = ctxt in - (* delegate-then-freeze *) - let* ctxt, amount_delegated = do_delegate ctxt in - let* ctxt = do_freeze ctxt in - let* () = - scenario - ctxt - ~accounts:(deposit_account1, deposit_account2) - ~delegates:(delegate1, delegate2) - amount_delegated - ~do_delegate - ~do_undelegate - ~do_freeze - ~do_unfreeze - ~do_slash - in - (* freeze-then-delegate *) - let ctxt = initial_ctxt in - let* ctxt = do_freeze ctxt in - let* ctxt, amount_delegated = do_delegate ctxt in - scenario - ctxt - ~accounts:(deposit_account1, deposit_account2) - ~delegates:(delegate1, delegate2) - amount_delegated - ~do_delegate - ~do_undelegate - ~do_freeze - ~do_unfreeze - ~do_slash - -let test_delegate_freeze_unfreeze_undelegate () = - let open Lwt_result_syntax in - test_scenario - (fun - ctxt - ~accounts:_ - ~delegates:_ - amount_delegated - ~do_delegate:_ - ~do_undelegate - ~do_freeze:_ - ~do_unfreeze - ~do_slash:_ - -> - let* ctxt = do_unfreeze ctxt in - let* (_ : context) = do_undelegate ctxt amount_delegated in - return_unit) - -let test_delegate_freeze_undelegate_unfreeze () = - let open Lwt_result_syntax in - test_scenario - (fun - ctxt - ~accounts:_ - ~delegates:_ - amount_delegated - ~do_delegate:_ - ~do_undelegate - ~do_freeze:_ - ~do_unfreeze - ~do_slash:_ - -> - let* ctxt = do_undelegate ctxt amount_delegated in - let* (_ : context) = do_unfreeze ctxt in - return_unit) - -let test_delegate_double_freeze_undelegate_unfreeze () = - let open Lwt_result_syntax in - test_scenario - (fun - ctxt - ~accounts:(deposit_account1, deposit_account2) - ~delegates:_ - amount_delegated - ~do_delegate:_ - ~do_undelegate - ~do_freeze - ~do_unfreeze - ~do_slash:_ - -> - let* ctxt = do_freeze ~deposit_account:deposit_account2 ctxt in - let* ctxt = do_undelegate ctxt amount_delegated in - let* (_ : context) = do_unfreeze ~deposit_account:deposit_account1 ctxt in - return_unit) - -let test_delegate_freeze_redelegate_unfreeze () = - let open Lwt_result_syntax in - test_scenario - (fun - ctxt - ~accounts:_ - ~delegates:(_delegate1, delegate2) - _amount_delegated - ~do_delegate - ~do_undelegate - ~do_freeze:_ - ~do_unfreeze - ~do_slash:_ - -> - let* ctxt, amount2 = do_delegate ~delegate:delegate2 ctxt in - let* ctxt = do_unfreeze ctxt in - let* (_ : context) = do_undelegate ~delegate:delegate2 ctxt amount2 in - return_unit) - -let test_delegate_freeze_unfreeze_freeze_redelegate () = - let open Lwt_result_syntax in - test_scenario - (fun - ctxt - ~accounts:_ - ~delegates:(_delegate1, delegate2) - _amount_delegated - ~do_delegate - ~do_undelegate - ~do_freeze - ~do_unfreeze - ~do_slash:_ - -> - let* ctxt = do_unfreeze ctxt in - let* ctxt = do_freeze ctxt in - let* ctxt, amount2 = do_delegate ~delegate:delegate2 ctxt in - let* (_ : context) = do_undelegate ~delegate:delegate2 ctxt amount2 in - return_unit) - -let test_delegate_freeze_slash_undelegate () = - let open Lwt_result_syntax in - let slash_amount = Tez.of_mutez_exn 1000L in - test_scenario - (fun - ctxt - ~accounts:_ - ~delegates:_ - amount_delegated - ~do_delegate:_ - ~do_undelegate - ~do_freeze:_ - ~do_unfreeze:_ - ~do_slash - -> - let* ctxt = do_slash ctxt in - let* (_ : context) = - do_undelegate ctxt (amount_delegated -! slash_amount) - in - return_unit) - -let () = - register_test ~title:"delegate then freeze" test_delegate_then_freeze_deposit ; - register_test ~title:"freeze then delegate" test_freeze_deposit_then_delegate ; - register_test - ~title:"contract remains allocated, user is not a delegate" - (test_allocated_when_frozen_deposits_exists ~user_is_delegate:false) ; - register_test - ~title:"contract remains allocated, user is a delegate" - (test_allocated_when_frozen_deposits_exists ~user_is_delegate:true) ; - register_test - ~title:"total stake, user is not a delegate" - (test_total_stake ~user_is_delegate:false) ; - register_test - ~title:"total stake, user is a delegate" - (test_total_stake ~user_is_delegate:true) ; - register_test ~title:"delegated balance" test_delegated_balance ; - register_test ~title:"test rpcs" test_rpcs ; - register_test - ~title:"delegate, freeze, unfreeze, undelegate" - test_delegate_freeze_unfreeze_undelegate ; - register_test - ~title:"delegate, freeze, undelegate, unfreeze" - test_delegate_freeze_undelegate_unfreeze ; - register_test - ~title:"delegate, double freeze, undelegate, unfreeze" - test_delegate_double_freeze_undelegate_unfreeze ; - register_test - ~title:"delegate, freeze, redelegate, unfreeze" - test_delegate_freeze_redelegate_unfreeze ; - register_test - ~title:"delegate, freeze, unfreeze, freeze, redelegate" - test_delegate_freeze_unfreeze_freeze_redelegate ; - register_test - ~title:"delegate, freeze, slash, undelegate" - test_delegate_freeze_slash_undelegate diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_liquidity_baking.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_liquidity_baking.ml deleted file mode 100644 index 0cd3ab6a6f3ed5e67250161184a3450e550e478a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_liquidity_baking.ml +++ /dev/null @@ -1,634 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Tocqueville Group, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: liquidity baking - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_liquidity_baking.ml - Subject: Test liquidity baking subsidies, CPMM storage updates, - and toggle vote. -*) - -open Liquidity_baking_machine -open Protocol -open Tez_helpers - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["liquidity_baking"] - -let generate_init_state () = - let open Lwt_result_syntax in - let cpmm_min_xtz_balance = 10_000_000L in - let cpmm_min_tzbtc_balance = 100_000 in - let accounts_balances = - [ - {xtz = 1_000_000L; tzbtc = 1; liquidity = 100}; - {xtz = 1_000L; tzbtc = 1000; liquidity = 100}; - {xtz = 40_000_000L; tzbtc = 350000; liquidity = 300}; - ] - in - let* _, _ = - ValidationMachine.build - {cpmm_min_xtz_balance; cpmm_min_tzbtc_balance; accounts_balances} - in - return_unit - -(* The script hash of - - https://gitlab.com/dexter2tz/dexter2tz/-/blob/d98643881fe14996803997f1283e84ebd2067e35/dexter.liquidity_baking.mligo.tz -*) -let expected_cpmm_hash = - Script_expr_hash.of_b58check_exn - "exprvEBYbxZruLZ9aUDEC9cUxn5KUj361xsaZXGfCxogFoKQ1er9Np" - -(* The script hash of - - https://gitlab.com/dexter2tz/dexter2tz/-/blob/d98643881fe14996803997f1283e84ebd2067e35/lqt_fa12.mligo.tz -*) -let expected_lqt_hash = - Script_expr_hash.of_b58check_exn - "exprufAK15C2FCbxGLCEVXFe26p3eQdYuwZRk1morJUwy9NBUmEZVB" - -(* Test that the scripts of the Liquidity Baking contracts (CPMM and LQT) have the expected hashes. *) -let liquidity_baking_origination () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* cpmm_address = Context.get_liquidity_baking_cpmm_address (B blk) in - let* cpmm_hash = Context.Contract.script_hash (B blk) cpmm_address in - let lqt_address = - Contract_hash.of_b58check_exn "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - in - let* lqt_hash = Context.Contract.script_hash (B blk) lqt_address in - let* () = - Assert.equal - ~loc:__LOC__ - Script_expr_hash.equal - "Unexpected CPMM script." - Script_expr_hash.pp - cpmm_hash - expected_cpmm_hash - in - let* () = - Assert.equal - ~loc:__LOC__ - Script_expr_hash.equal - "Unexpected LQT script." - Script_expr_hash.pp - lqt_hash - expected_lqt_hash - in - return_unit - -(* Test that the CPMM address in storage is correct *) -let liquidity_baking_cpmm_address () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let* () = - Assert.equal - ~loc:__LOC__ - String.equal - "CPMM address in storage is incorrect" - Format.pp_print_string - (Contract_hash.to_b58check liquidity_baking) - "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" - in - return_unit - -(* Test that after [n] blocks, the liquidity baking CPMM contract is credited [n] times the subsidy amount. *) -let liquidity_baking_subsidies n () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let liquidity_baking = Alpha_context.Contract.Originated liquidity_baking in - let* old_balance = Context.Contract.balance (B blk) liquidity_baking in - let* blk = Block.bake_n n blk in - let* liquidity_baking_subsidy = - Context.get_liquidity_baking_subsidy (B blk) - in - let*? expected_credit = liquidity_baking_subsidy *? Int64.(of_int n) in - let* () = - Assert.balance_was_credited - ~loc:__LOC__ - (B blk) - liquidity_baking - old_balance - expected_credit - in - return_unit - -(* Test that subsidy shuts off at correct level alternating baking - blocks with liquidity_baking_toggle_vote set to [Per_block_vote_on], [Per_block_vote_off], and [Per_block_vote_pass] followed by [bake_after_toggle] blocks with it set to [Per_block_vote_pass]. *) -(* Expected level is roughly 2*(log(1-1/(2*p)) / log(0.999)) where [p] is the proportion [Per_block_vote_off / (Per_block_vote_on + Per_block_vote_off)]. *) -let liquidity_baking_toggle ~n_vote_on ~n_vote_off ~n_vote_pass expected_level - bake_after () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let liquidity_baking = Alpha_context.Contract.Originated liquidity_baking in - let* old_balance = Context.Contract.balance (B blk) liquidity_baking in - let* liquidity_baking_subsidy = - Context.get_liquidity_baking_subsidy (B blk) - in - let rec bake_stopping blk i = - if i < expected_level then - let* blk = - Block.bake_n - ~liquidity_baking_toggle_vote:Per_block_vote_on - n_vote_on - blk - in - let* blk = - Block.bake_n - ~liquidity_baking_toggle_vote:Per_block_vote_off - n_vote_off - blk - in - let* blk = - Block.bake_n - ~liquidity_baking_toggle_vote:Per_block_vote_pass - n_vote_pass - blk - in - bake_stopping blk (i + n_vote_on + n_vote_off + n_vote_pass) - else return blk - in - let* blk = bake_stopping blk 0 in - let* balance = Context.Contract.balance (B blk) liquidity_baking in - let* blk = - Block.bake_n - ~liquidity_baking_toggle_vote:Per_block_vote_pass - bake_after - blk - in - let* () = Assert.balance_is ~loc:__LOC__ (B blk) liquidity_baking balance in - let*? expected_final_balance = - liquidity_baking_subsidy *? Int64.of_int (expected_level - 1) - in - let* () = - Assert.balance_was_credited - ~loc:__LOC__ - (B blk) - liquidity_baking - old_balance - expected_final_balance - in - return_unit - -(* 100% of blocks have liquidity_baking_toggle_vote = Per_block_vote_off *) -let liquidity_baking_toggle_100 n () = - liquidity_baking_toggle ~n_vote_on:0 ~n_vote_off:1 ~n_vote_pass:0 1386 n () - -(* 80% of blocks have liquidity_baking_toggle_vote = Per_block_vote_off *) -let liquidity_baking_toggle_80 n () = - liquidity_baking_toggle ~n_vote_on:1 ~n_vote_off:4 ~n_vote_pass:0 1963 n () - -(* 60% of blocks have liquidity_baking_toggle_vote = Per_block_vote_off *) -let liquidity_baking_toggle_60 n () = - liquidity_baking_toggle ~n_vote_on:2 ~n_vote_off:3 ~n_vote_pass:0 3583 n () - -(* 50% of blocks have liquidity_baking_toggle_vote = Per_block_vote_off. - Subsidy should not be stopped. - Bakes until 100 blocks after the test sunset level of 4096 used in previous protocols. *) -let liquidity_baking_toggle_50 () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let liquidity_baking = Alpha_context.Contract.Originated liquidity_baking in - let* old_balance = Context.Contract.balance (B blk) liquidity_baking in - let* liquidity_baking_subsidy = - Context.get_liquidity_baking_subsidy (B blk) - in - let rec bake_stopping blk i = - if i < 4196 then - let* blk = - Block.bake ~liquidity_baking_toggle_vote:Per_block_vote_on blk - in - let* blk = - Block.bake ~liquidity_baking_toggle_vote:Per_block_vote_off blk - in - bake_stopping blk (i + 2) - else return blk - in - let* blk = bake_stopping blk 0 in - let* balance = Context.Contract.balance (B blk) liquidity_baking in - let* () = Assert.balance_is ~loc:__LOC__ (B blk) liquidity_baking balance in - let*? expected_final_balance = - liquidity_baking_subsidy *? Int64.of_int 4196 - in - let* () = - Assert.balance_was_credited - ~loc:__LOC__ - (B blk) - liquidity_baking - old_balance - expected_final_balance - in - return_unit - -(* Test that the subsidy can restart if Per_block_vote_on votes regain majority. - Bake n_votes with Per_block_vote_off, check that the subsidy is paused, bake - n_votes with Per_block_vote_on, check that the subsidy flows. -*) -let liquidity_baking_restart n_votes n () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let liquidity_baking = Alpha_context.Contract.Originated liquidity_baking in - let* blk = - Block.bake_n ~liquidity_baking_toggle_vote:Per_block_vote_off n_votes blk - in - let* balance_when_paused = - Context.Contract.balance (B blk) liquidity_baking - in - let* blk = - Block.bake_n ~liquidity_baking_toggle_vote:Per_block_vote_pass n blk - in - let* () = - Assert.balance_is ~loc:__LOC__ (B blk) liquidity_baking balance_when_paused - in - let* blk = - Block.bake_n ~liquidity_baking_toggle_vote:Per_block_vote_on n_votes blk - in - let* balance_when_restarted = - Context.Contract.balance (B blk) liquidity_baking - in - let* blk = - Block.bake_n ~liquidity_baking_toggle_vote:Per_block_vote_pass n blk - in - let* liquidity_baking_subsidy = - Context.get_liquidity_baking_subsidy (B blk) - in - let*? expected_balance = liquidity_baking_subsidy *? Int64.of_int n in - let* () = - Assert.balance_was_credited - ~loc:__LOC__ - (B blk) - liquidity_baking - balance_when_restarted - expected_balance - in - return_unit - -(* Test that the toggle EMA in block metadata is correct. *) -let liquidity_baking_toggle_ema n_vote_on n_vote_off level bake_after - expected_toggle_ema () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let rec bake_escaping blk i = - if i < level then - let* blk = - Block.bake_n - ~liquidity_baking_toggle_vote:Per_block_vote_on - n_vote_on - blk - in - let* blk = - Block.bake_n - ~liquidity_baking_toggle_vote:Per_block_vote_off - n_vote_off - blk - in - bake_escaping blk (i + n_vote_on + n_vote_off) - else return blk - in - let* blk = bake_escaping blk 0 in - (* We only need to return the toggle EMA at the end. *) - let* _blk, toggle_ema = - Block.bake_n_with_liquidity_baking_toggle_ema bake_after blk - in - let* () = - Assert.leq_int - ~loc:__LOC__ - (toggle_ema - |> Alpha_context.Per_block_votes.Liquidity_baking_toggle_EMA.to_int32 - |> Int32.to_int) - expected_toggle_ema - in - return_unit - -(* With no bakers setting the toggle vote, EMA should be zero. *) -let liquidity_baking_toggle_ema_zero () = - liquidity_baking_toggle_ema 0 0 0 100 0 () - -(* The EMA should be not much over the threshold after the subsidy has been stopped by a toggle vote. We add 1_000_000 to the constant to give room for the last update. *) -let liquidity_baking_toggle_ema_threshold () = - liquidity_baking_toggle_ema 0 1 1386 1 1_001_000_000 () - -let liquidity_baking_storage n () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let* subsidy = Context.get_liquidity_baking_subsidy (B blk) in - let expected_storage = - Expr.from_string - (Printf.sprintf - "Pair 1\n\ - \ %d\n\ - \ 100\n\ - \ \"KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN\"\n\ - \ \"KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo\"" - (100 + (n * Int64.to_int (to_mutez subsidy)))) - in - let* blk = Block.bake_n n blk in - let* storage = Context.Contract.storage (B blk) liquidity_baking in - let to_string expr = - Format.asprintf "%a" Michelson_v1_printer.print_expr expr - in - let* () = - Assert.equal - ~loc:__LOC__ - String.equal - "Storage isn't equal" - Format.pp_print_string - (to_string storage) - (to_string expected_storage) - in - return_unit - -let liquidity_baking_balance_update () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 ~consensus_threshold:0 () in - let* liquidity_baking = Context.get_liquidity_baking_cpmm_address (B blk) in - let* subsidy = Context.get_liquidity_baking_subsidy (B blk) in - let* _blk, balance_updates = Block.bake_n_with_all_balance_updates 128 blk in - let liquidity_baking_updates = - List.filter - (fun el -> - match el with - | Alpha_context.Receipt.Balance_update_item - (Contract (Originated contract), Credited _, Subsidy) -> - Contract_hash.(contract = liquidity_baking) - | _ -> false) - balance_updates - in - let*? credits = - List.fold_left_e - (fun accum - (Alpha_context.Receipt.Balance_update_item (balance, update, _)) -> - match Alpha_context.Receipt.token_of_balance balance with - | Tez -> ( - match update with - | Credited x -> accum +? x - | Debited _ -> assert false) - | _ -> assert false) - (of_int 0) - liquidity_baking_updates - in - let* () = - Assert.equal_int - ~loc:__LOC__ - (Int64.to_int (to_mutez credits)) - (128 * Int64.to_int (to_mutez subsidy)) - in - return_unit - -let get_cpmm_result results = - match results with - | cpmm_result :: _results -> cpmm_result - | _ -> assert false - -let get_lqt_result results = - match results with - | _cpmm_result :: lqt_result :: _results -> lqt_result - | _ -> assert false - -let get_address_in_result result = - match result with - | Apply_results.Origination_result {originated_contracts; _} -> ( - match originated_contracts with [c] -> c | _ -> assert false) - -let get_balance_updates_in_result result = - match result with - | Apply_results.Origination_result {balance_updates; _} -> balance_updates - -let get_balance_update_in_result result = - match get_balance_updates_in_result result with - | [Balance_update_item (Contract _, Credited balance, Protocol_migration)] -> - (balance : Alpha_context.Tez.t) - | [ - _; - _; - _; - _; - _; - Balance_update_item (Contract _, Credited balance, Protocol_migration); - ] -> - balance - | _ -> assert false - -let liquidity_baking_origination_result_cpmm_address () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* cpmm_address_in_storage = - Context.get_liquidity_baking_cpmm_address (B blk) - in - let* _blk, origination_results = - Block.bake_n_with_origination_results 1 blk - in - let result = get_cpmm_result origination_results in - let address = get_address_in_result result in - let* () = - Assert.equal - ~loc:__LOC__ - Contract_hash.equal - "CPMM address in storage is not the same as in origination result" - Contract_hash.pp - address - cpmm_address_in_storage - in - return_unit - -let liquidity_baking_origination_result_cpmm_balance () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* _blk, origination_results = - Block.bake_n_with_origination_results 1 blk - in - let result = get_cpmm_result origination_results in - let balance_update = get_balance_update_in_result result in - let* () = Assert.equal_tez ~loc:__LOC__ balance_update (of_mutez 100L) in - return_unit - -let liquidity_baking_origination_result_lqt_address () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* _blk, origination_results = - Block.bake_n_with_origination_results 1 blk - in - let result = get_lqt_result origination_results in - let address = get_address_in_result result in - let* () = - Assert.equal - ~loc:__LOC__ - String.equal - "LQT address in origination result is incorrect" - Format.pp_print_string - (Contract_hash.to_b58check address) - "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - in - return_unit - -let liquidity_baking_origination_result_lqt_balance () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* _blk, origination_results = - Block.bake_n_with_origination_results 1 blk - in - let result = get_lqt_result origination_results in - let balance_updates = get_balance_updates_in_result result in - match balance_updates with - | [ - Balance_update_item - (Liquidity_baking_subsidies, Debited am1, Protocol_migration); - Balance_update_item (Storage_fees, Credited am2, Protocol_migration); - Balance_update_item - (Liquidity_baking_subsidies, Debited am3, Protocol_migration); - Balance_update_item (Storage_fees, Credited am4, Protocol_migration); - ] -> - let* () = Assert.equal_tez ~loc:__LOC__ am1 am2 in - let* () = Assert.equal_tez ~loc:__LOC__ am3 am4 in - let* () = Assert.equal_tez ~loc:__LOC__ am1 (of_mutez 64_250L) in - Assert.equal_tez ~loc:__LOC__ am3 (of_mutez 494_500L) - | _ -> failwith "Unexpected balance updates (%s)" __LOC__ - -(* Test that with no contract at the tzBTC address and the level low enough to indicate we're not on mainnet, three contracts are originated in stitching. *) -let liquidity_baking_origination_test_migration () = - let open Lwt_result_syntax in - let* blk, _contract = Context.init1 () in - let* _blk, origination_results = - Block.bake_n_with_origination_results 1 blk - in - let num_results = List.length origination_results in - Assert.equal_int ~loc:__LOC__ num_results 3 - -(* Test that with no contract at the tzBTC address and the level high enough to indicate we could be on mainnet, no contracts are originated in stitching. *) -let liquidity_baking_origination_no_tzBTC_mainnet_migration () = - let open Lwt_result_syntax in - let* blk, _contract = - Context.init1 ~consensus_threshold:0 ~level:1_437_862l () - in - (* By baking a bit we also check that the subsidy application with no CPMM present does nothing rather than stopping the chain.*) - let* _blk, origination_results = - Block.bake_n_with_origination_results 64 blk - in - let num_results = List.length origination_results in - Assert.equal_int ~loc:__LOC__ num_results 0 - -let () = - register_test ~title:"script hashes" liquidity_baking_origination ; - register_test - ~title:"cpmm is originated at the expected address" - liquidity_baking_cpmm_address ; - register_test ~title:"Init Context" generate_init_state ; - register_test ~title:"subsidy is correct" (liquidity_baking_subsidies 64) ; - register_test - ~title: - "toggle vote with 100% of bakers voting Per_block_vote_off baking one \ - block longer" - (liquidity_baking_toggle_100 1) ; - register_test - ~title: - "toggle vote with 100% of bakers voting Per_block_vote_off baking two \ - blocks longer" - (liquidity_baking_toggle_100 2) ; - register_test - ~title: - "toggle vote with 100% of bakers voting Per_block_vote_off baking 100 \ - blocks longer" - (liquidity_baking_toggle_100 100) ; - register_test - ~title: - "toggle vote with 80% of bakers voting Per_block_vote_off baking one \ - block longer" - (liquidity_baking_toggle_80 1) ; - register_test - ~title: - "toggle vote with 80% of bakers voting Per_block_vote_off baking two \ - blocks longer" - (liquidity_baking_toggle_80 2) ; - register_test - ~title: - "toggle vote with 80% of bakers voting Per_block_vote_off baking 100 \ - blocks longer" - (liquidity_baking_toggle_80 100) ; - register_test - ~title: - "toggle vote with 60% of bakers voting Per_block_vote_off baking one \ - block longer" - (liquidity_baking_toggle_60 1) ; - register_test - ~title: - "toggle vote with 60% of bakers voting Per_block_vote_off baking two \ - blocks longer" - (liquidity_baking_toggle_60 2) ; - register_test - ~title: - "toggle vote with 60% of bakers voting Per_block_vote_off baking 100 \ - blocks longer" - (liquidity_baking_toggle_60 100) ; - register_test - ~title: - "does not shut off with toggle vote at 50% and baking 100 blocks longer \ - than sunset level in previous protocols" - liquidity_baking_toggle_50 ; - register_test - ~title:"restart with 100% of bakers voting off, then pass, then on" - (liquidity_baking_restart 2000 1) ; - register_test - ~title: - "toggle ema in block metadata is zero with no bakers voting \ - Per_block_vote_off." - liquidity_baking_toggle_ema_zero ; - register_test - ~title: - "toggle ema is equal to the threshold after the subsidy has been stopped \ - by a toggle vote" - liquidity_baking_toggle_ema_threshold ; - register_test ~title:"storage is updated" (liquidity_baking_storage 64) ; - register_test ~title:"balance updates" liquidity_baking_balance_update ; - register_test - ~title:"CPMM address in storage matches address in the origination result" - liquidity_baking_origination_result_cpmm_address ; - register_test - ~title:"CPMM balance in origination result is 100 mutez" - liquidity_baking_origination_result_cpmm_balance ; - register_test - ~title:"LQT contract is originated at expected address" - liquidity_baking_origination_result_lqt_address ; - register_test - ~title:"LQT balance in origination result is 0 mutez" - liquidity_baking_origination_result_lqt_balance ; - register_test - ~title: - "originates three contracts when tzBTC does not exist and level \ - indicates we are not on mainnet" - liquidity_baking_origination_test_migration ; - register_test - ~title: - "originates three contracts when tzBTC does not exist and level \ - indicates we might be on mainnet" - liquidity_baking_origination_no_tzBTC_mainnet_migration diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_autostaking.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_autostaking.ml deleted file mode 100644 index 734babdeb1d38eed4c84bc46f2016a23f74a17b5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_autostaking.ml +++ /dev/null @@ -1,254 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Adaptive Issuance, Autostaking - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_autostaking.ml - Subject: Test autostaking in the protocol. -*) - -open State_account -open Tez_helpers.Ez_tez -open Scenario -open Log_helpers - -let assert_balance_evolution ~loc ~for_accounts ~part ~name ~old_balance - ~new_balance compare = - let open Lwt_result_syntax in - let old_b, new_b = - match part with - | `liquid -> - ( Q.of_int64 @@ Tez.to_mutez old_balance.liquid_b, - Q.of_int64 @@ Tez.to_mutez new_balance.liquid_b ) - | `staked -> (old_balance.staked_b, new_balance.staked_b) - | `unstaked_frozen -> - ( Q.of_int64 @@ Tez.to_mutez old_balance.unstaked_frozen_b, - Q.of_int64 @@ Tez.to_mutez new_balance.unstaked_frozen_b ) - | `unstaked_finalizable -> - ( Q.of_int64 @@ Tez.to_mutez old_balance.unstaked_finalizable_b, - Q.of_int64 @@ Tez.to_mutez new_balance.unstaked_finalizable_b ) - in - if List.mem ~equal:String.equal name for_accounts then - if compare new_b old_b then return_unit - else ( - Log.debug ~color:warning_color "Balances changes failed:@." ; - Log.debug "@[Old Balance@ %a@]@." balance_pp old_balance ; - Log.debug "@[New Balance@ %a@]@." balance_pp new_balance ; - Log.debug - "@[Diff between balances@ %a@]@." - Q.pp_print - Q.(new_b - old_b) ; - failwith "%s Unexpected stake evolution for %s" loc name) - else ( - Log.error - "Test_scenario_autostaking.assert_balance_evolution: account %s not found" - name ; - assert false) - -let gt_diff diff new_b old_b = - let diff = Q.of_int64 @@ Tez.to_mutez diff in - Q.equal new_b (Q.add old_b diff) - -let lt_diff diff new_b old_b = - let diff = Q.of_int64 @@ Tez.to_mutez diff in - Q.equal new_b (Q.sub old_b diff) - -let delegate = "delegate" - -and delegator1 = "delegator1" - -and delegator2 = "delegator2" - -let setup ~activate_ai = - init_constants () - --> set S.Adaptive_issuance.autostaking_enable true - --> Scenario_begin.activate_ai (if activate_ai then `Force else `No) - --> begin_test [delegate] - --> add_account_with_funds - delegator1 - ~funder:"__bootstrap__" - (Amount (Tez.of_mutez 2_000_000_000L)) - --> add_account_with_funds - delegator2 - ~funder:"__bootstrap__" - (Amount (Tez.of_mutez 2_000_000_000L)) - --> next_cycle - --> snapshot_balances "before delegation" [delegate] - --> set_delegate delegator1 (Some delegate) - --> check_snapshot_balances "before delegation" - --> next_cycle - -let test_autostaking = - Tag "No Ai" --> setup ~activate_ai:false - (* Delegate will need to freeze 5% * 2k = 100 *) - --> check_snapshot_balances - ~f: - (assert_balance_evolution - ~loc:__LOC__ - ~for_accounts:[delegate] - ~part:`staked - (gt_diff @@ Tez.of_mutez 100_000_000L)) - "before delegation" - --> snapshot_balances "before second delegation" [delegate] - --> (Tag "increase delegation" - --> set_delegate delegator2 (Some delegate) - --> next_cycle - (* Delegate will need to freeze 5% * 2k = 100 *) - --> check_snapshot_balances - ~f: - (assert_balance_evolution - ~loc:__LOC__ - ~for_accounts:[delegate] - ~part:`staked - (gt_diff @@ Tez.of_mutez 100_000_000L)) - "before second delegation" - |+ Tag "constant delegation" - --> snapshot_balances "after stake change" [delegate] - --> wait_n_cycles 6 - --> check_snapshot_balances "after stake change" - |+ Tag "decrease delegation" - --> set_delegate delegator1 None - --> next_cycle - (* Delegate will need to unfreeze 5% * 2k = 100 *) - --> check_snapshot_balances - ~f: - (assert_balance_evolution - ~loc:__LOC__ - ~for_accounts:[delegate] - ~part:`staked - (lt_diff @@ Tez.of_mutez 100_000_000L)) - "before second delegation" - --> check_snapshot_balances - ~f: - (assert_balance_evolution - ~loc:__LOC__ - ~for_accounts:[delegate] - ~part:`unstaked_frozen - (gt_diff @@ Tez.of_mutez 100_000_000L)) - "before second delegation" - --> snapshot_balances "after unstake" [delegate] - --> next_cycle - --> check_snapshot_balances "after unstake" - --> wait_n_cycles_f Test_scenario_stake.(unstake_wait -- 1) - --> check_snapshot_balances - ~f: - (assert_balance_evolution - ~loc:__LOC__ - ~for_accounts:[delegate] - ~part:`unstaked_frozen - (lt_diff @@ Tez.of_mutez 100_000_000L)) - "after unstake" - (* finalizable are auto-finalize immediately *) - --> check_snapshot_balances - ~f: - (assert_balance_evolution - ~loc:__LOC__ - ~for_accounts:[delegate] - ~part:`liquid - (gt_diff @@ Tez.of_mutez 100_000_000L)) - "after unstake") - |+ Tag "Yes AI" --> setup ~activate_ai:true - --> check_snapshot_balances "before delegation" - -let test_overdelegation = - (* This test assumes that all delegate accounts created in [begin_test] - begin with 4M tz, with 5% staked *) - init_constants () - --> set S.Adaptive_issuance.autostaking_enable true - --> set S.consensus_committee_size 7000 - --> activate_ai `No - --> begin_test - ~force_attest_all:true - ["delegate"; "faucet1"; "faucet2"; "faucet3"] - --> add_account_with_funds - "delegator_to_fund" - ~funder:"delegate" - (Amount (Tez.of_mutez 3_600_000_000_000L)) - (* Delegate has 200k = 5% * 4M staked and 200k liquid *) - --> check_balance_fields - "delegate" - ~liquid:(Tez.of_mutez 200_000_000_000L) - ~staked:(Tez.of_mutez 200_000_000_000L) - () - --> set_delegate "delegator_to_fund" (Some "delegate") - (* Delegate stake will not change at the end of cycle: same stake *) - --> next_cycle - --> check_balance_fields - "delegate" - ~liquid:(Tez.of_mutez 200_000_000_000L) - ~staked:(Tez.of_mutez 200_000_000_000L) - () - --> transfer - "faucet1" - "delegator_to_fund" - (Amount (Tez.of_mutez 3_600_000_000_000L)) - (* Delegate is not overdelegated, but will need to freeze 180k = 5% * 3.6M *) - --> next_cycle - --> check_balance_fields - "delegate" - ~liquid:(Tez.of_mutez 20_000_000_000L) - ~staked:(Tez.of_mutez 380_000_000_000L) - () - --> transfer - "faucet2" - "delegator_to_fund" - (Amount (Tez.of_mutez 3_600_000_000_000L)) - (* Delegate is now overdelegated, it will freeze 100% *) - --> next_cycle - --> check_balance_fields - "delegate" - ~liquid:Tez.zero - ~staked:(Tez.of_mutez 400_000_000_000L) - () - --> transfer - "faucet3" - "delegator_to_fund" - (Amount (Tez.of_mutez 3_600_000_000_000L)) - (* Delegate is overmegadelegated *) - --> next_cycle - --> check_balance_field - "delegator_to_fund" - `Liquid - (Tez.of_mutez 14_400_000_000_000L) - --> check_balance_fields - "delegate" - ~liquid:Tez.zero - ~staked:(Tez.of_mutez 400_000_000_000L) - () - --> transfer - "delegator_to_fund" - "faucet1" - (Amount (Tez.of_mutez 7_200_000_000_000L)) - (* Delegate is not overdelegated anymore, it will freeze 380k = 5% * 7.2M - and unstake 20k *) - --> next_cycle - --> check_balance_fields - "delegate" - ~liquid:Tez.zero - ~staked:(Tez.of_mutez 380_000_000_000L) - ~unstaked_frozen_total:(Tez.of_mutez 20_000_000_000L) - () - (* Unfreezing will be done automatically in - (consensus_rights_delay + max_slashing_period) cycles *) - --> wait_n_cycles_f Test_scenario_stake.unstake_wait - --> check_balance_fields - "delegate" - ~liquid:(Tez.of_mutez 20_000_000_000L) - ~staked:(Tez.of_mutez 380_000_000_000L) - () - -let tests = - tests_of_scenarios - [ - ("Test auto-staking", test_autostaking); - ("Test auto-staking with overdelegation", test_overdelegation); - ] - -let () = - register_tests ~__FILE__ ~tags:["protocol"; "scenario"; "autostaking"] tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_base.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_base.ml deleted file mode 100644 index 58199ed65c1a8dfe717ec48ac37577cd41573488..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_base.ml +++ /dev/null @@ -1,33 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Scenario, State - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_base.ml - Subject: Test basic functionality of the scenario framework. -*) - -open Scenario - -let test_expected_error = - assert_failure - ~expected_error:(fun _ -> [Exn (Failure "")]) - (exec (fun _ -> failwith "")) - --> assert_failure - ~expected_error:(fun _ -> [Unexpected_error]) - (assert_failure - ~expected_error:(fun _ -> - [Inconsistent_number_of_bootstrap_accounts]) - (exec (fun _ -> failwith ""))) - -let tests = - tests_of_scenarios - @@ [("Test expected error in assert failure", test_expected_error)] - -let () = register_tests ~__FILE__ ~tags:["protocol"; "scenario"; "base"] tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_deactivation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_deactivation.ml deleted file mode 100644 index 764d09bfbe68acd9769596d31f182fac64a13b48..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_deactivation.ml +++ /dev/null @@ -1,158 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol, Consensus, Deactivation - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_deactivation.ml - Subject: Test deactivation in the protocol. -*) - -open State_account -open Tez_helpers.Ez_tez -open Scenario - -let check_is_active ~loc src_name = - let open Lwt_result_syntax in - exec_unit @@ fun (block, state) -> - let src = State.find_account src_name state in - let* b = Context.Delegate.deactivated (B block) src.pkh in - Assert.is_true ~loc (not b) - -let check_is_not_active ~loc src_name = - let open Lwt_result_syntax in - exec_unit @@ fun (block, state) -> - let src = State.find_account src_name state in - let* b = Context.Delegate.deactivated (B block) src.pkh in - Assert.is_true ~loc b - -(** Test that a delegate gets deactivated after a set period of time if it is not baking. - Test that with autostaking, the frozen funds are completely unstaked, which get - finalizable (but not finalized) after a set period of time. - Test that these finalizable funds can indeed be finalized. *) -let test_simple_scenario_with_autostaking = - init_constants () - --> set S.Adaptive_issuance.autostaking_enable true - --> activate_ai `No - --> begin_test ["delegate"; "baker"] - --> set_baker "baker" - --> wait_n_cycles_f (fun (_, state) -> - (2 * state.State.constants.consensus_rights_delay) + 1) - --> check_balance_field "delegate" `Staked (Tez.of_mutez 200_000_000_000L) - --> check_is_active ~loc:__LOC__ "delegate" - --> next_cycle - --> check_is_not_active ~loc:__LOC__ "delegate" - --> check_balance_field "delegate" `Staked Tez.zero - --> check_balance_field - "delegate" - `Unstaked_frozen_total - (Tez.of_mutez 200_000_000_000L) - --> wait_n_cycles_f Test_scenario_stake.unstake_wait - --> check_balance_field "delegate" `Unstaked_frozen_total Tez.zero - --> check_balance_field - "delegate" - `Unstaked_finalizable - (Tez.of_mutez 200_000_000_000L) - --> (Tag "Reactivate" - --> set_delegate "delegate" (Some "delegate") - --> check_is_active ~loc:__LOC__ "delegate" - --> next_cycle - --> check_balance_field "delegate" `Unstaked_finalizable Tez.zero - --> check_balance_field - "delegate" - `Staked - (Tez.of_mutez 200_000_000_000L) - |+ Tag "manual finalize unstake" - --> finalize_unstake "delegate" - --> check_balance_field "delegate" `Unstaked_finalizable Tez.zero - --> check_balance_field "delegate" `Staked Tez.zero - --> check_balance_field - "delegate" - `Liquid - (Tez.of_mutez 4_000_000_000_000L)) - -(** Test that a delegate gets deactivated after a set period of time if it is not baking. - Test that with AI, the frozen funds stay frozen, and the delegate can still issue AI - operations without reactivating. *) -let test_simple_scenario_with_ai = - init_constants () --> activate_ai `Force - --> begin_test ["delegate"; "baker"] - --> check_balance_field "delegate" `Staked (Tez.of_mutez 200_000_000_000L) - --> set_baker "baker" - --> wait_n_cycles_f (fun (_, state) -> - (2 * state.State.constants.consensus_rights_delay) + 1) - --> check_balance_field "delegate" `Staked (Tez.of_mutez 200_000_000_000L) - --> check_is_active ~loc:__LOC__ "delegate" - --> next_cycle - --> check_is_not_active ~loc:__LOC__ "delegate" - --> check_balance_field "delegate" `Staked (Tez.of_mutez 200_000_000_000L) - --> check_balance_field "delegate" `Unstaked_frozen_total Tez.zero - --> unstake "delegate" All - --> wait_n_cycles_f Test_scenario_stake.unstake_wait - --> finalize_unstake "delegate" - --> check_balance_field "delegate" `Unstaked_finalizable Tez.zero - --> check_balance_field "delegate" `Staked Tez.zero - --> check_balance_field "delegate" `Liquid (Tez.of_mutez 4_000_000_000_000L) - --> check_is_not_active ~loc:__LOC__ "delegate" - --> stake "delegate" Half --> next_cycle - --> check_is_not_active ~loc:__LOC__ "delegate" - -(** Test that a delegate can be deactivated by setting its frozen funds to 0. - Test that a delegate can be activated while having no rights. - Test that a delegate can be deactivated while having rights, and test that it can - still bake while deactivated, hence reactivating *) -let test_baking_deactivation = - init_constants () --> activate_ai `Force - --> begin_test ["delegate"; "baker"] - --> unstake "delegate" All - --> wait_n_cycles_f (fun (_, state) -> - (2 * state.State.constants.consensus_rights_delay) + 1) - --> check_is_active ~loc:__LOC__ "delegate" - --> next_cycle - --> check_is_not_active ~loc:__LOC__ "delegate" - (* Reactivate and wait for rights *) - --> stake "delegate" Half - --> set_delegate "delegate" (Some "delegate") - (* No rights yet, but active *) - --> assert_failure (next_block_with_baker "delegate") - --> check_is_active ~loc:__LOC__ "delegate" - --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay + 1) - --> check_is_active ~loc:__LOC__ "delegate" - --> next_block_with_baker "delegate" - (* Get deactivated by doing nothing *) - --> set_baker "baker" - --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay + 1) - --> check_is_active ~loc:__LOC__ "delegate" - --> next_cycle - --> check_is_not_active ~loc:__LOC__ "delegate" - (* The delegate still has enough rights to bake... *) - --> exec_unit (fun (block, state) -> - let dlgt = State.find_account "delegate" state in - let current_cycle = Block.current_cycle block in - let rights = - CycleMap.find current_cycle dlgt.frozen_rights - |> Option.value ~default:Tez.zero - in - Assert.not_equal_tez ~loc:__LOC__ Tez.zero rights) - --> next_block_with_baker "delegate" - --> check_is_active ~loc:__LOC__ "delegate" - -let tests = - tests_of_scenarios - [ - ( "Test simple deactivation scenario with autostaking", - test_simple_scenario_with_autostaking ); - ("Test simple deactivation scenario with ai", test_simple_scenario_with_ai); - ( "Test deactivation and reactivation scenarios with baking", - test_baking_deactivation ); - ] - -let () = - register_tests ~__FILE__ ~tags:["protocol"; "scenario"; "deactivation"] tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_rewards.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_rewards.ml deleted file mode 100644 index 25827edc4311bbe0f9abb153c8a2c6b7aa14c154..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_rewards.ml +++ /dev/null @@ -1,367 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Adaptive Issuance, Rewards - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_rewards.ml - Subject: Test rewards issuance in the protocol. -*) - -open Adaptive_issuance_helpers -open State_account -open Tez_helpers.Ez_tez -open Scenario - -(** Test reward distribution without AI and without autostaking. - [State_account.add_*_rewards] ensures the rewards are distributed - correctly, and it is checked at the end of every block. -*) -let test_wait_rewards_no_ai_no_auto = - (* Prime number to always trigger roundings *) - init_constants ~reward_per_block:1_000_000_007L () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `No - --> begin_test ["delegate1"; "delegate2"; "delegate3"] - --> wait_n_cycles 20 - -(** Test reward distribution without AI and with autostaking. - We expect autostaking to keep the ratio total/frozen equal to - [limit_of_delegation_over_baking + 1], rounding towards frozen. -*) -let test_wait_rewards_no_ai_yes_auto = - let open Lwt_result_syntax in - let check_balanced_balance src_name = - exec_unit (fun (_block, state) -> - let src_balance, src_total = - balance_and_total_balance_of_account src_name state.State.account_map - in - let rat = state.constants.limit_of_delegation_over_baking + 1 in - let expected_frozen = - Tez_helpers.(mul_q src_total Q.(1 // rat) |> of_q ~round:`Up) - in - let* () = - Assert.equal_tez - ~loc:__LOC__ - expected_frozen - (Tez_helpers.of_q ~round:`Down src_balance.staked_b) - in - return_unit) - in - let check_all_balanced_balances = unfold check_balanced_balance in - let all_delegates = ["delegate1"; "delegate2"; "delegate3"] in - init_constants ~reward_per_block:1_000_000_007L () - --> set S.Adaptive_issuance.autostaking_enable true - --> activate_ai `No --> begin_test all_delegates - --> loop - 20 - (exec bake_until_dawn_of_next_cycle - --> check_all_balanced_balances all_delegates - --> next_block) - -(** Tests reward distribution under AI: - - with and without stakers (sometimes overstaking); - - with different values of edge. *) -let test_wait_rewards_with_ai = - let set_edge pct = - let params = - { - limit_of_staking_over_baking = Q.one; - edge_of_baking_over_staking = Q.of_float pct; - } - in - set_delegate_params "delegate" params - in - init_constants ~reward_per_block:1_000_000_007L () - --> activate_ai `Force - --> begin_test ["delegate"; "faucet"] - --> (Tag "edge = 0" --> set_edge 0. - |+ Tag "edge = 0.24" --> set_edge 0.24 - |+ Tag "edge = 0.11... repeating" --> set_edge 0.1111111111 - |+ Tag "edge = 1" --> set_edge 1.) - --> wait_delegate_parameters_activation - --> (Tag "no staker" --> Empty - |+ Tag "one staker" - --> add_account_with_funds - "staker1" - ~funder:"faucet" - (Amount (Tez.of_mutez 2_000_000_000L)) - --> set_delegate "staker1" (Some "delegate") - --> stake "staker1" (Amount (Tez.of_mutez 444_000_111L)) - --> (Empty - |+ Tag "two stakers" - --> add_account_with_funds - "staker2" - ~funder:"faucet" - (Amount (Tez.of_mutez 2_000_000_000L)) - --> set_delegate "staker2" (Some "delegate") - --> stake "staker2" (Amount (Tez.of_mutez 333_001_987L)) - --> (Empty - |+ Tag "three stakers! ha ha ha" - (* This staker overstakes *) - --> add_account_with_funds - "staker3" - ~funder:"faucet" - (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> set_delegate "staker3" (Some "delegate") - --> stake - "staker3" - (Amount (Tez.of_mutez 1_799_123_456_788L)) - --> exec_unit (fun (_, state) -> - let src = State.find_account "delegate" state in - let self_frozen = - src.frozen_deposits.self_current - in - let staked = - Frozen_tez.total_co_current_q - src.frozen_deposits.co_current - in - Assert.is_true - ~loc:__LOC__ - Q.( - Tez.mul_q - self_frozen - src.parameters.limit_of_staking_over_baking - < staked))))) - --> set_baker "delegate" --> wait_n_cycles 20 - -(** Tests reward distribution under AI for one baker and one staker, - and different arbitrary events: - staking, unstaking, finalizing, slashing *) -let test_wait_rewards_with_ai_staker_variation = - let set_edge pct = - let params = - { - limit_of_staking_over_baking = Q.one; - edge_of_baking_over_staking = Q.of_float pct; - } - in - set_delegate_params "delegate" params - in - init_constants ~reward_per_block:1_000_000_007L () - --> activate_ai `Force - --> begin_test ["delegate"; "faucet"] - --> set_edge 0.24 --> wait_delegate_parameters_activation - --> add_account_with_funds - "staker" - ~funder:"faucet" - (Amount (Tez.of_mutez 20_000_000_000L)) - --> set_delegate "staker" (Some "delegate") - --> stake "staker" (Amount (Tez.of_mutez 12_444_000_111L)) - --> set_baker "delegate" - (* Regular rewards *) - --> wait_n_cycles 7 - (* Staker unstakes some *) - --> unstake "staker" Half - --> wait_n_cycles 4 - (* Staker restakes some *) - --> stake "staker" Half - (* Reactivate another baker for allowing it to bake later *) - --> set_delegate "faucet" (Some "faucet") - --> wait_n_cycles 4 - (* Add unstake requests in the mix *) - --> unstake "staker" Half - --> next_cycle - (* Double bake for the delegate *) - --> set_baker "faucet" - --> double_bake "delegate" --> make_denunciations () - (* Wait for the delegate to not be forbidden anymore *) - --> wait_n_cycles 10 - (* Reactivate it, make it bake, and see everything is as before *) - --> set_delegate "delegate" (Some "delegate") - --> wait_n_cycles 4 --> set_baker "delegate" --> wait_n_cycles 10 - -(** Tests reward distribution under AI for one baker and two stakers, - and the baker changes its limit parameter while being overstaked. - We expect the rewards for the stakers to change accordingly with the limit. -*) -let test_overstake_different_limits = - let set_limit l = - let params = - { - limit_of_staking_over_baking = Q.of_float l; - edge_of_baking_over_staking = Q.zero; - } - in - set_delegate_params "delegate" params - in - init_constants ~reward_per_block:1_000_000_007L () - --> activate_ai `Force - --> begin_test ["delegate"; "faucet"] - --> set_baker "faucet" - --> unstake "delegate" (Amount (Tez.of_mutez 190_000_000_000L)) - --> check_balance_field "delegate" `Staked (Tez.of_mutez 10_000_000_000L) - --> set_baker "delegate" - (* same rights to have same block distribution *) - --> unstake "faucet" (Amount (Tez.of_mutez 190_000_000_000L)) - --> unstake "__bootstrap__" (Amount (Tez.of_mutez 190_000_000_000L)) - --> set_limit 5. --> wait_delegate_parameters_activation - --> add_account_with_funds - "staker1" - ~funder:"faucet" - (Amount (Tez.of_mutez 400_000_000_000L)) - --> set_delegate "staker1" (Some "delegate") - --> add_account_with_funds - "staker2" - ~funder:"faucet" - (Amount (Tez.of_mutez 400_000_000_000L)) - --> set_delegate "staker2" (Some "delegate") - (* Always overstaked *) - --> stake "staker1" (Amount (Tez.of_mutez 111_000_000_000L)) - --> stake "staker2" (Amount (Tez.of_mutez 222_000_000_000L)) - --> (Tag "limit = 0" --> set_limit 0. - |+ Tag "limit = 0.24" --> set_limit 0.24 - |+ Tag "limit = 1" --> set_limit 1. - |+ Tag "limit >= 5" --> set_limit 6.) - (* Before activation: testing global limit (5) *) - --> wait_delegate_parameters_activation - --> wait_n_cycles 6 - --> (Tag "limit = 0" --> set_limit 0. - |+ Tag "limit = 0.24" --> set_limit 0.24 - |+ Tag "limit = 1" --> set_limit 1. - |+ Tag "limit >= 5" --> set_limit 6.) - --> wait_delegate_parameters_activation --> wait_n_cycles 6 - -(** Tests that the activation time for AI is as expected: - The expected delay is [consensus_rights_delay] + 1 cycles after activation. *) -let test_ai_curve_activation_time = - let consensus_rights_delay (_, state) = - state.State.constants.consensus_rights_delay - in - init_constants ~reward_per_block:1_000_000_000L ~deactivate_dynamic:true () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Zero_threshold - --> begin_test ~burn_rewards:true [""] - --> next_block --> save_current_rate (* before AI rate *) - --> wait_ai_activation - (* Rate remains unchanged right after AI activation, we must wait [pc + 1] cycles *) - --> check_rate_evolution Q.equal - --> wait_n_cycles_f consensus_rights_delay - --> check_rate_evolution Q.equal - --> next_cycle - (* The new rate should be active now. With the chosen constants, it should be lower. - We go from 1000tz per day to (at most) 5% of 4_000_000tz per year *) - --> check_rate_evolution Q.gt - -(** Integration test for Adaptive Issuance. - Tests that the curve is decreasing wrt stake ratio. *) -let test_static_decreasing = - let rate_var_lag = Default_parameters.constants_test.consensus_rights_delay in - let delta = Amount (Tez.of_mutez 20_000_000_000L) in - let q_almost_equal x y = - let rat = Q.div x y in - (* ~ inverse square root of total supply *) - let epsilon = Q.(1 // 100_000) in - Q.(rat >= one - epsilon && rat <= one + epsilon) - in - let cycle_stake = - save_current_rate --> stake "delegate" delta --> next_cycle - --> check_rate_evolution Q.gt - in - let cycle_unstake = - save_current_rate --> unstake "delegate" delta --> next_cycle - --> check_rate_evolution Q.lt - in - let cycle_stable = - save_current_rate --> next_cycle --> check_rate_evolution q_almost_equal - in - init_constants ~reward_per_block:1L ~deactivate_dynamic:true () - (* Set rate bounds that should not be reached *) - --> set S.Adaptive_issuance.autostaking_enable false - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_final_min - Q.(1 // 100_000) - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_initial_min - Q.(1 // 100_000) - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_final_max - Q.one - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_initial_max - Q.one - --> activate_ai `Zero_threshold - --> begin_test ~burn_rewards:true ["delegate"] - --> next_block --> wait_ai_activation - (* We stake about 50% of the total supply *) - --> stake "delegate" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> stake "__bootstrap__" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> (Tag "increase stake, decrease rate" --> next_cycle - --> loop rate_var_lag (stake "delegate" delta --> next_cycle) - --> loop 10 cycle_stake - |+ Tag "decrease stake, increase rate" --> next_cycle - --> loop rate_var_lag (unstake "delegate" delta --> next_cycle) - --> loop 10 cycle_unstake - |+ Tag "stable stake, stable rate" --> next_cycle - --> wait_n_cycles rate_var_lag --> loop 10 cycle_stable) - -(** Integration test for Adaptive Issuance. - Tests that the curve is updated for stake movement only after - [consensus_rights_delay] cycles. *) -let test_static_timing = - let consensus_rights_delay (_block, state) = - state.State.constants.consensus_rights_delay - in - let delta = Amount (Tez.of_mutez 20_000_000_000L) in - let q_almost_equal x y = - let rat = Q.div x y in - (* ~ inverse square root of total supply *) - let epsilon = Q.(1 // 100_000) in - Q.(rat >= one - epsilon && rat <= one + epsilon) - in - init_constants ~reward_per_block:1L ~deactivate_dynamic:true () - (* Set rate bounds that should not be reached *) - --> set S.Adaptive_issuance.autostaking_enable false - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_final_min - Q.(1 // 100_000) - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_initial_min - Q.(1 // 100_000) - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_final_max - Q.one - --> set - S.Adaptive_issuance.Adaptive_rewards_params.issuance_ratio_initial_max - Q.one - --> activate_ai `Force - --> begin_test ~burn_rewards:true ["delegate"] - (* We stake about 50% of the total supply *) - --> stake "delegate" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> stake "__bootstrap__" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> wait_n_cycles_f (fun x -> consensus_rights_delay x + 1) - --> save_current_rate - --> (Tag "increase stake" --> stake "delegate" delta - --> wait_n_cycles_f consensus_rights_delay - --> check_rate_evolution q_almost_equal - --> next_cycle --> check_rate_evolution Q.gt - |+ Tag "decrease stake" --> unstake "delegate" delta - --> wait_n_cycles_f consensus_rights_delay - --> check_rate_evolution q_almost_equal - --> next_cycle --> check_rate_evolution Q.lt) - -let tests = - tests_of_scenarios - @@ [ - ("Test wait rewards no AI no autostake", test_wait_rewards_no_ai_no_auto); - ( "Test wait rewards no AI yes autostake", - test_wait_rewards_no_ai_yes_auto ); - ("Test wait rewards with AI, stakers and edge", test_wait_rewards_with_ai); - ( "Test wait rewards with AI and stake variation events", - test_wait_rewards_with_ai_staker_variation ); - ("Test ai curve activation time", test_ai_curve_activation_time); - ( "Test static rate decreasing with stake ratio increasing", - test_static_decreasing ); - ( "Test static rate updated after consensus_rights_delay", - test_static_timing ); - ( "Test limit parameter with overstake and rewards", - test_overstake_different_limits ); - ] - -let () = - register_tests ~__FILE__ ~tags:["protocol"; "scenario"; "rewards"] tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_slashing.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_slashing.ml deleted file mode 100644 index 3cdedd52d8d564a0a17fa965a5004306ae414730..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_slashing.ml +++ /dev/null @@ -1,386 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Adaptive Issuance, Slashing - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_slashing.ml - Subject: Test slashing scenarios in the protocol. -*) - -open State_account -open Tez_helpers.Ez_tez -open Scenario -open Scenario_constants - -let fs = Format.asprintf - -(** Test multiple misbehaviors - - Test a single delegate misbehaving multiple times - - Test multiple delegates misbehaving - - Test multiple delegates misbehaving multiple times - - Test denunciation at once or in a staggered way - - Test denunciation in chronological order or reverse order - - Spread misbehaviors/denunciations over multiple cycles - *) -let test_multiple_misbehaviors = - (* Denounce all misbehaviours or 14 one by one in chronological or reverse - order *) - let make_denunciations () = - Tag "denounce chronologically" - --> log "denounce chronologically" - --> (Tag "all at once" --> make_denunciations ~rev:false () - |+ Tag "one by one" - --> loop - 12 - (make_denunciations - ~filter:(fun {denounced; _} -> not denounced) - ~single:true - ~rev:false - ())) - |+ Tag "denounce reverse" --> log "denounce reverse" - --> (Tag "all at once" --> make_denunciations ~rev:true () - |+ Tag "one by one" - --> loop - 12 - (make_denunciations - ~filter:(fun {denounced; _} -> not denounced) - ~single:true - ~rev:true - ())) - in - (* Misbehaviors scenarios *) - let misbehave i delegate1 delegate2 = - (Tag "single delegate" - (* A single delegate misbehaves several times before being denunced *) - --> loop - i - (double_attest delegate1 --> double_preattest delegate1 - --> double_bake delegate1 --> double_attest delegate1 - --> double_preattest delegate1) - --> exclude_bakers [delegate1] - |+ Tag "multiple delegates" - (* Two delegates double bake sequentially *) - --> loop - i - (loop - 3 - (double_bake delegate1 --> double_bake delegate2 --> next_block)) - --> exclude_bakers [delegate1; delegate2] - |+ Tag "double misbehaviors" - (* Two delegates misbehave in parallel for multiple levels *) - --> loop - i - (double_attest_many [delegate1; delegate2] - --> double_attest_many [delegate1; delegate2] - --> double_preattest_many [delegate1; delegate2] - --> double_bake_many [delegate1; delegate2]) - --> exclude_bakers [delegate1; delegate2]) - --> make_denunciations () - in - init_constants ~blocks_per_cycle:24l ~reward_per_block:0L () - --> set S.Adaptive_issuance.autostaking_enable false - --> (Tag "No AI" --> activate_ai `No |+ Tag "Yes AI" --> activate_ai `Force) - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test ["delegate"; "bootstrap1"; "bootstrap2"; "bootstrap3"] - --> next_cycle - --> (* various make misbehaviors spread over 1 or two cycles *) - List.fold_left - (fun acc i -> - acc - |+ Tag (string_of_int i ^ " misbehavior loops") - --> misbehave i "delegate" "bootstrap1" - --> next_cycle) - Empty - [1; 3] - -let check_is_forbidden baker = assert_failure (next_block_with_baker baker) - -let check_is_not_forbidden baker = - let open Lwt_result_syntax in - exec (fun ((block, state) as input) -> - let baker = State.find_account baker state in - let* _ = Block.bake ~policy:(By_account baker.pkh) block in - return input) - -(** Tests forbidding delegates ensuring: - - delegates are not forbidden until a denunciation is made (allowing for - multiple misbehaviours) - - a single misbehaviour is enough to be denunced and forbidden - - delegates are unforbidden after a certain amount of time - - delegates are not forbidden if denounced for an outdated misbehaviour -*) -let test_delegate_forbidden = - let crd (_, state) = state.State.constants.consensus_rights_delay in - init_constants ~blocks_per_cycle:32l () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `No - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test ["delegate"; "bootstrap1"; "bootstrap2"] - --> set_baker "bootstrap1" - --> (Tag "Is not forbidden until first denunciation" - --> loop 14 (double_bake "delegate") - --> exclude_bakers ["delegate"] - --> (* ensure delegate is not forbidden until the denunciations are done *) - check_is_not_forbidden "delegate" - --> make_denunciations () - --> (* delegate is forbidden directly after the first denunciation *) - check_is_forbidden "delegate" - |+ Tag "Is forbidden after single misbehavior" - --> double_attest "delegate" - --> (Tag "very early first denounce" - --> exclude_bakers ["delegate"] - --> make_denunciations () - |+ Tag "in next cycle" --> next_cycle - --> exclude_bakers ["delegate"] - --> make_denunciations ()) - --> check_is_forbidden "delegate" - |+ Tag "Is unforbidden after CONSENSUS_RIGHTS_DELAY after slash cycles" - --> double_attest "delegate" - --> exclude_bakers ["delegate"] - --> make_denunciations () - --> check_is_forbidden "delegate" - --> next_cycle (* slash occured *) --> stake "delegate" Half - --> wait_n_cycles_f crd - --> check_is_not_forbidden "delegate" - |+ Tag "Is not forbidden after a denunciation is outdated" - --> double_attest "delegate" --> wait_n_cycles 2 - --> assert_failure (make_denunciations ()) - --> check_is_not_forbidden "delegate" - |+ Tag - "Two double attestations, in consecutive cycles, denounce out of \ - order" --> double_attest "delegate" --> next_cycle - --> double_attest "delegate" - --> make_denunciations - ~filter:(fun {denounced; misbehaviour = {level; _}; _} -> - (not denounced) && Protocol.Raw_level_repr.to_int32 level > 10l) - () - --> make_denunciations - ~filter:(fun {denounced; misbehaviour = {level; _}; _} -> - (not denounced) - && Protocol.Raw_level_repr.to_int32 level <= 10l) - () - --> check_is_forbidden "delegate") - -let test_slash_unstake = - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `No - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test ["delegate"; "bootstrap1"; "bootstrap2"] - --> set_baker "bootstrap1" --> next_cycle --> unstake "delegate" Half - --> next_cycle --> double_bake "delegate" --> make_denunciations () - --> (Empty |+ Tag "unstake twice" --> unstake "delegate" Half) - --> wait_n_cycles 5 - --> finalize_unstake "delegate" - -let test_slash_monotonous_stake = - let scenario ~offending_op ~op ~early_d = - init_constants ~blocks_per_cycle:16l () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `No - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test ["delegate"; "bootstrap1"] - --> next_cycle - --> loop - 6 - (op "delegate" (Amount (Tez.of_mutez 1_000_000_000L)) --> next_cycle) - --> offending_op "delegate" - --> (op "delegate" (Amount (Tez.of_mutez 1_000_000_000L)) - --> loop - 2 - (op "delegate" (Amount (Tez.of_mutez 1_000_000_000L)) - --> - if early_d then - make_denunciations () - --> exclude_bakers ["delegate"] - --> next_block - else offending_op "delegate" --> next_block)) - in - Tag "slashes with increasing stake" - --> (Tag "denounce early" - --> (Tag "Double Bake" - --> scenario ~offending_op:double_bake ~op:stake ~early_d:true - |+ Tag "Double attest" - --> scenario - ~offending_op:(fun s -> double_attest s) - ~op:stake - ~early_d:true) - |+ Tag "denounce late" - --> (Tag "Double Bake" - --> scenario ~offending_op:double_bake ~op:stake ~early_d:false - |+ Tag "Double attest" - --> scenario - ~offending_op:(fun s -> double_attest s) - ~op:stake - ~early_d:false) - --> make_denunciations ()) - |+ Tag "slashes with decreasing stake" - --> (Tag "Double Bake" - --> scenario ~offending_op:double_bake ~op:unstake ~early_d:true - |+ Tag "Double attest" - --> scenario - ~offending_op:(fun s -> double_attest s) - ~op:unstake - ~early_d:true) - |+ Tag "denounce late" - --> (Tag "Double Bake" - --> scenario ~offending_op:double_bake ~op:unstake ~early_d:false - |+ Tag "Double attest" - --> scenario - ~offending_op:(fun s -> double_attest s) - ~op:unstake - ~early_d:false) - --> make_denunciations () - -let test_slash_timing = - init_constants ~blocks_per_cycle:8l () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `No - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test ["delegate"; "bootstrap1"] - --> next_cycle - --> (Tag "stake" --> stake "delegate" Half - |+ Tag "unstake" --> unstake "delegate" Half) - --> (Tag "with a first slash" --> double_bake "delegate" - --> exclude_bakers ["delegate"] - --> make_denunciations () - |+ Tag "without another slash" --> Empty) - --> stake "delegate" Half - --> List.fold_left - (fun acc i -> - acc |+ Tag (string_of_int i ^ " cycles lag") --> wait_n_cycles i) - (wait_n_cycles 2) - [3; 4; 5; 6] - --> double_bake "delegate" - --> exclude_bakers ["delegate"] - --> make_denunciations () --> next_cycle - -let test_no_shortcut_for_cheaters = - let amount = Amount (Tez.of_mutez 333_000_000_000L) in - let consensus_rights_delay = - Default_parameters.constants_test.consensus_rights_delay - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force - --> begin_test ["delegate"; "bootstrap1"] - --> stake "delegate" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> next_cycle --> double_bake "delegate" --> make_denunciations () - --> set_baker "bootstrap1" (* exclude_bakers ["delegate"] *) - --> next_cycle - --> snapshot_balances "init" ["delegate"] - --> unstake "delegate" amount - --> (List.fold_left - (fun acc i -> acc |+ Tag (fs "wait %i cycles" i) --> wait_n_cycles i) - (Tag "wait 0 cycles" --> Empty) - (Stdlib.List.init (consensus_rights_delay - 1) (fun i -> i + 1)) - --> stake "delegate" amount - --> assert_failure (check_snapshot_balances "init") - |+ Tag "wait enough cycles (consensus_rights_delay + 1)" - --> wait_n_cycles (consensus_rights_delay + 1) - --> stake "delegate" amount - --> check_snapshot_balances "init") - -let test_slash_correct_amount_after_stake_from_unstake = - let amount_to_unstake = Amount (Tez.of_mutez 200_000_000_000L) in - let amount_to_restake = Amount (Tez.of_mutez 100_000_000_000L) in - let amount_expected_in_unstake_after_slash = Tez.of_mutez 50_000_000_000L in - let consensus_rights_delay = - Default_parameters.constants_test.consensus_rights_delay - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force - --> begin_test ["delegate"; "bootstrap1"] - --> stake "delegate" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> next_cycle - --> unstake "delegate" amount_to_unstake - --> stake "delegate" amount_to_restake - --> List.fold_left - (fun acc i -> acc |+ Tag (fs "wait %i cycles" i) --> wait_n_cycles i) - (Tag "wait 0 cycles" --> Empty) - (Stdlib.List.init (consensus_rights_delay - 2) (fun i -> i + 1)) - --> double_attest "delegate" --> make_denunciations () - --> exclude_bakers ["delegate"] - --> next_cycle - --> check_balance_field - "delegate" - `Unstaked_frozen_total - amount_expected_in_unstake_after_slash - -(* Test a non-zero request finalizes for a non-zero amount if it hasn't been slashed 100% *) -let test_mini_slash = - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> (Tag "Yes AI" --> activate_ai `Force --> begin_test ["delegate"; "baker"] - |+ Tag "No AI" --> activate_ai `No --> begin_test ["delegate"; "baker"]) - --> unstake "delegate" (Amount Tez.one_mutez) - --> set_baker "baker" --> next_cycle - --> (Tag "5% slash" --> double_bake "delegate" --> make_denunciations () - |+ Tag "95% slash" --> next_cycle --> double_attest "delegate" - --> loop 9 (double_bake "delegate") - --> make_denunciations ()) - (* Wait two cycles because of ns_enable *) - --> next_cycle - --> next_cycle - --> check_balance_field "delegate" `Unstaked_frozen_total Tez.zero - --> wait_n_cycles_f (fun (_, state) -> - state.constants.consensus_rights_delay + 1) - -let test_slash_rounding = - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test ["delegate"; "baker"] - --> set_baker "baker" - --> unstake "delegate" (Amount (Tez.of_mutez 2L)) - --> next_cycle --> double_bake "delegate" --> double_bake "delegate" - --> make_denunciations () --> wait_n_cycles 7 - --> finalize_unstake "delegate" - -(* TODO #6645: reactivate tests *) -let tests = - tests_of_scenarios - @@ [ - ("Test multiple misbehaviors", test_multiple_misbehaviors); - ("Test slashed is forbidden", test_delegate_forbidden); - ("Test slash with unstake", test_slash_unstake); - (* TODO: make sure this test passes with blocks_per_cycle:8l - https://gitlab.com/tezos/tezos/-/issues/6904 *) - ("Test slashes with simple varying stake", test_slash_monotonous_stake); - ("Test slash timing", test_slash_timing); - ( "Test stake from unstake deactivated when slashed", - test_no_shortcut_for_cheaters ); - ( "Test stake from unstake reduce initial amount", - test_slash_correct_amount_after_stake_from_unstake ); - ("Test unstake 1 mutez then slash", test_mini_slash); - ("Test slash rounding", test_slash_rounding); - ] - -let () = - register_tests ~__FILE__ ~tags:["protocol"; "scenario"; "slashing"] tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_slashing_stakers.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_slashing_stakers.ml deleted file mode 100644 index 5d87e7d267bd85c4cf46ff1e0eca876d653967d2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_slashing_stakers.ml +++ /dev/null @@ -1,193 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Adaptive Issuance, Slashing with Stakers - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_slashing_stakers.ml - Subject: Test slashing scenarios in the protocol with stakers. -*) - -open Adaptive_issuance_helpers -open State_account -open Tez_helpers.Ez_tez -open Scenario -open Scenario_constants - -let fs = Format.asprintf - -let slashed_staker_1 = "staker1" - -let slashed_staker_2 = "staker2" - -let never_slashed_staker = "staker3" - -let first_slashed_delegate = "delegate" - -let second_slashed_delegate = "bootstrap1" - -let never_slashed_delegate1 = "bootstrap2" - -let never_slashed_delegate2 = "bootstrap3" - -(** Setup starting state for test with - - 4 delegates - - potentialy three stakers (2 delegating to first_slashed_delegate and 1 to - never_slashed_delegate1 respectively) - - AI enabled - - ns_enable enabled/disabled - - alternative parameters for first_slashed_delegate and - never_slashed_delegate1 -*) -let init_with_stakers () = - let init_params l e = - {limit_of_staking_over_baking = l; edge_of_baking_over_staking = e} - in - (* Same edge for both delegates to avoid test branches explosion *) - let set_delegate_params dlgt1 dlgt2 = - (Tag "edge 1" - --> set_delegate_params dlgt1 (init_params Q.one Q.one) - --> set_delegate_params dlgt2 (init_params Q.one Q.one) - |+ Tag "edge 1/3" - --> set_delegate_params dlgt1 (init_params Q.one Q.(1 // 3)) - --> set_delegate_params dlgt2 (init_params Q.one Q.(1 // 3))) - --> wait_n_cycles 4 - in - let add_staker name delegate amount staked_amount = - add_account_with_funds name ~funder:delegate (Amount (Tez.of_mutez amount)) - --> set_delegate name (Some delegate) - --> stake name staked_amount - in - let add_stakers = - Tag "with stakers" - --> add_staker - slashed_staker_1 - first_slashed_delegate - 1_000_000_000_000L - Half - --> add_staker slashed_staker_2 first_slashed_delegate 3_333_333L Half - --> add_staker - never_slashed_staker - never_slashed_delegate1 - 1_000_000_000L - Half - |+ Empty - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force - --> branch_flag S.Adaptive_issuance.ns_enable - --> begin_test - [ - first_slashed_delegate; - second_slashed_delegate; - never_slashed_delegate1; - never_slashed_delegate2; - ] - --> set_delegate_params first_slashed_delegate never_slashed_delegate1 - --> add_stakers - -(** Starts with four delegates, misbhehaves with one, denounce it, and - potentially do it again with another delegate. - Alternative scenarios include: - - all three misbehaviors - - delegates with/without stakers to observe sharing of slashing and rewards, - - denunciations be made in the same cycle, in the next or too late - - several staking parameters - *) -let test_simple_slash = - let open Lwt_result_syntax in - let any_slash delegate = - Tag "double baking" --> double_bake delegate - |+ Tag "double attesting" - --> double_attest - ~other_bakers:(never_slashed_delegate1, never_slashed_delegate2) - delegate - |+ Tag "double preattesting" - --> double_preattest - ~other_bakers:(never_slashed_delegate1, never_slashed_delegate2) - delegate - in - init_with_stakers () - --> any_slash first_slashed_delegate - --> log "make denunciations" - --> snapshot_balances "before slash" [first_slashed_delegate] - --> ((Tag "denounce same cycle" --> make_denunciations () - (* delegate can be forbidden in this case, so we exclude it from list of potential bakers *) - --> exclude_bakers [first_slashed_delegate] - |+ Tag "denounce next cycle" --> next_cycle --> make_denunciations () - (* delegate can be forbidden in this case, so we set another baker *) - --> exclude_bakers [first_slashed_delegate]) - --> (Tag "denouncer with maybe staker" - --> set_baker never_slashed_delegate1 - (* ensure denunciation is included by never_slashed_delegate1 *) - |+ Tag "denouncer without staker" - --> set_baker never_slashed_delegate2) - --> next_block - --> (* only exclude "delegate" *) exclude_bakers [first_slashed_delegate] - --> (Empty - |+ Tag "another slash" - --> any_slash second_slashed_delegate - --> make_denunciations () - (* bootstrap1 can be forbidden in this case, so we exclude it from list of potential bakers *) - --> exclude_bakers - [first_slashed_delegate; second_slashed_delegate]) - --> check_snapshot_balances "before slash" - --> exec_unit (check_pending_slashings ~loc:__LOC__) - --> next_cycle - --> assert_failure - (exec_unit (fun (_block, state) -> - if State_ai_flags.Delayed_slashing.enabled state then - failwith "ns_enable = true: slash not applied yet" - else return_unit) - --> check_snapshot_balances "before slash") - --> exec_unit (check_pending_slashings ~loc:__LOC__) - --> next_cycle - |+ Tag "denounce too late" --> next_cycle --> next_cycle - --> assert_failure - ~expected_error:(fun (_block, state) -> - let ds = state.State.double_signings in - let ds = match ds with [a] -> a | _ -> assert false in - let level = - Protocol.Alpha_context.Raw_level.Internal_for_tests.from_repr - ds.misbehaviour.level - in - let last_cycle = - Cycle.add - (Block.current_cycle_of_level - ~blocks_per_cycle:state.State.constants.blocks_per_cycle - ~current_level: - (Protocol.Raw_level_repr.to_int32 - ds.misbehaviour.level)) - Protocol.Constants_repr.max_slashing_period - in - let (kind : Protocol.Alpha_context.Misbehaviour.kind) = - (* This conversion would not be needed if - Misbehaviour_repr.kind were moved to a - separate file that doesn't have under/over - Alpha_context versions. *) - match ds.misbehaviour.kind with - | Double_baking -> Double_baking - | Double_attesting -> Double_attesting - | Double_preattesting -> Double_preattesting - in - [ - Environment.Ecoproto_error - (Protocol.Validate_errors.Anonymous.Outdated_denunciation - {kind; level; last_cycle}); - ]) - (make_denunciations ()) - --> check_snapshot_balances "before slash") - -let tests = tests_of_scenarios @@ [("Test simple slashing", test_simple_slash)] - -let () = - register_tests - ~__FILE__ - ~tags:["protocol"; "scenario"; "slashing"; "stakers"] - tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_stake.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_stake.ml deleted file mode 100644 index d631f74f5b84504fb8ff4f6ca6a172dd63984384..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_scenario_stake.ml +++ /dev/null @@ -1,596 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Adaptive Issuance, Staking - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_scenario_stake.ml - Subject: Test staking operations in the protocol. -*) - -open Adaptive_issuance_helpers -open State_account -open Tez_helpers.Ez_tez -open Scenario - -let fs = Format.asprintf - -(** Initializes of scenarios with 2 cases: - - staker = delegate - - staker != delegate - Any scenario that begins with this will be duplicated. - - Also, ensures that AI is activated (sets EMA threshold to zero, - enables activation vote, and waits for AI activation). *) -let init_staker_delegate_or_external = - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - let begin_test ~self_stake = - let name = if self_stake then "staker" else "delegate" in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> Scenario_begin.activate_ai `Force - --> begin_test [name] - --> set_delegate_params name init_params - in - Tag "AI activated" - --> (Tag "self stake" --> begin_test ~self_stake:true - |+ Tag "external stake" - --> begin_test ~self_stake:false - --> add_account_with_funds - "staker" - ~funder:"delegate" - (Amount (Tez.of_mutez 2_000_000_000_000L)) - --> set_delegate "staker" (Some "delegate")) - --> wait_delegate_parameters_activation - -let stake_init = - stake "staker" Half - --> (Tag "no wait after stake" --> Empty - |+ Tag "wait after stake" --> wait_n_cycles 2) - -let ( -- ) a b x = a x - b - -let ( ++ ) a b x = a x + b - -let wait_for_unfreeze_and_check wait = - snapshot_balances "wait snap" ["staker"] - --> wait_n_cycles_f (wait -- 1) - (* Balance didn't change yet, but will change next cycle *) - --> check_snapshot_balances "wait snap" - --> next_cycle - --> assert_failure (check_snapshot_balances "wait snap") - -let unstake_wait (_, state) = - let crd = state.State.constants.consensus_rights_delay in - let msp = Protocol.Constants_repr.max_slashing_period in - crd + msp - -let finalize staker = - assert_failure (check_balance_field staker `Unstaked_finalizable Tez.zero) - --> finalize_unstake staker - --> check_balance_field staker `Unstaked_finalizable Tez.zero - -(* Simple stake - unstake - finalize roundtrip. - - - Note that the test framework automatically checks, whenever a - block is baked, that the staker's fully detailed balance (liquid, - bonds, staked, unstaked frozen, unstaked finalizable, and costaking - values) is the same as predicted in the simulated state. - - - Moreover, we explicitly check that after the unstake operation, - the staker's balance doesn't change until the last cycle of the - unfreeze delay (which is [consensus_rights_delay + - max_slashing_period = 2 + 2]). *) -let simple_roundtrip = - init_staker_delegate_or_external --> stake_init - --> (Tag "full unstake" --> unstake "staker" All - |+ Tag "half unstake" --> unstake "staker" Half) - --> wait_for_unfreeze_and_check unstake_wait - --> finalize "staker" --> next_cycle - -(* Same as above, except with two separate unstake operations. *) -let double_roundtrip = - init_staker_delegate_or_external --> stake_init --> unstake "staker" Half - --> (Tag "half then full unstake" --> wait_n_cycles 2 --> unstake "staker" All - |+ Tag "half then half unstake" --> wait_n_cycles 2 - --> unstake "staker" Half) - --> wait_for_unfreeze_and_check (unstake_wait -- 2) - --> wait_for_unfreeze_and_check (Fun.const 2) - --> finalize "staker" --> next_cycle - -(* Roundtrip where the unstaked amount matches the initially staked - amount (either from one unstake operation of this amount, or two - unstake operations summing up to it). This lets us explicitly check - that the detailed balance of the staker at the end is identical to - its balance before the stake operation. *) -let status_quo_rountrip = - let full_amount = Tez.of_mutez 10_000_000L in - let amount_1 = Tez.of_mutez 2_999_999L in - let amount_2 = Tez.of_mutez 7_000_001L in - init_staker_delegate_or_external - --> snapshot_balances "init" ["staker"] - --> stake "staker" (Amount full_amount) - --> next_cycle - --> (Tag "1 unstake" --> unstake "staker" (Amount full_amount) - |+ Tag "2 unstakes" - --> unstake "staker" (Amount amount_1) - --> next_cycle - --> unstake "staker" (Amount amount_2)) - --> wait_n_cycles_f unstake_wait - --> finalize "staker" - --> check_snapshot_balances "init" - -(* Test that a baker can stake from unstaked frozen funds. - The most recent unstakes are prioritized when staking. *) -let shorter_roundtrip_for_baker = - let unstake_amount = Amount (Tez.of_mutez 222_000_000_000L) in - let consensus_rights_delay = - Default_parameters.constants_mainnet.consensus_rights_delay - (* mainnet value, = 2 *) - in - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> set S.consensus_rights_delay consensus_rights_delay - --> activate_ai `Force - --> begin_test ["delegate"; "faucet"] - --> stake "delegate" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> set_delegate_params "delegate" init_params - --> add_account_with_funds - "staker1" - ~funder:"faucet" - (Amount (Tez.of_mutez 200_000_000_000L)) - --> add_account_with_funds - "staker2" - ~funder:"faucet" - (Amount (Tez.of_mutez 200_000_000_000L)) - --> wait_delegate_parameters_activation - --> set_delegate "staker1" (Some "delegate") - --> set_delegate "staker2" (Some "delegate") - --> stake "staker1" Half --> stake "staker2" Half - --> - (* From now on, staker1 unstakes every cycle to fill all the containers, but - this shouldn't change anything for the baker *) - let next_cycle = unstake "staker1" Half --> next_cycle in - next_cycle - (* We unstake to have an amount in the last container for ufd *) - --> unstake "delegate" unstake_amount - --> next_cycle - (* We unstake either one, two or three cycles later *) - --> (Tag "unstake cycle (current-2)" - --> unstake "delegate" unstake_amount - --> next_cycle --> next_cycle - |+ Tag "unstake cycle (current-1)" --> next_cycle - --> unstake "delegate" unstake_amount - --> next_cycle - |+ Tag "unstake cycle (current)" --> next_cycle --> next_cycle - --> unstake "delegate" unstake_amount) - (* Nothing is finalizable yet. If nothing else happens, next cycle the - first unstake request will become finalizable. *) - --> check_balance_field "delegate" `Unstaked_finalizable Tez.zero - --> (Tag "stake from unstake one container" - --> (Tag "one stake" - --> stake "delegate" (Amount (Tez.of_mutez 111_000_000_000L)) - |+ Tag "two stakes" - --> stake "delegate" (Amount (Tez.of_mutez 100_000_000_000L)) - --> stake "delegate" (Amount (Tez.of_mutez 11_000_000_000L))) - --> check_balance_field - "delegate" - `Unstaked_frozen_total - (Tez.of_mutez 333_000_000_000L) - (* We only removed unstake from the most recent unstake: we should - expect the first unstake request to finalize with its full amount on the next cycle *) - --> next_cycle - --> check_balance_field - "delegate" - `Unstaked_finalizable - (Tez.of_mutez 222_000_000_000L) - --> check_balance_field - "delegate" - `Unstaked_frozen_total - (Tez.of_mutez 111_000_000_000L) - |+ Tag "stake from unstake two containers" - --> stake "delegate" (Amount (Tez.of_mutez 333_000_000_000L)) - --> check_balance_field - "delegate" - `Unstaked_frozen_total - (Tez.of_mutez 111_000_000_000L) - (* We should have removed all the unstake from the most recent container. - The rest will be finalizable next cycle. *) - --> next_cycle - --> check_balance_field - "delegate" - `Unstaked_finalizable - (Tez.of_mutez 111_000_000_000L) - --> check_balance_field "delegate" `Unstaked_frozen_total Tez.zero - |+ Tag "stake from all unstaked + liquid" - --> stake "delegate" (Amount (Tez.of_mutez 555_000_000_000L)) - (* Nothing remains unstaked *) - --> check_balance_field "delegate" `Unstaked_frozen_total Tez.zero - --> check_balance_field "delegate" `Unstaked_finalizable Tez.zero) - -(* Test three different ways to finalize unstake requests: - - finalize_unstake operation - - stake operation (of 1 mutez) - - unstake operation (of 1 mutez) - - Check that the finalizable unstaked balance is non-zero before, and - becomes zero after the finalization. *) -let scenario_finalize = - init_staker_delegate_or_external --> stake "staker" Half --> next_cycle - --> unstake "staker" Half - --> wait_n_cycles_f unstake_wait - --> (Tag "minimal wait after unstake" --> Empty - |+ Tag "wait longer after unstake" --> wait_n_cycles 2) - --> assert_failure - (check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> (Tag "finalize with finalize" --> finalize_unstake "staker" - |+ Tag "finalize with stake" --> stake "staker" (Amount Tez.one_mutez) - |+ Tag "finalize with unstake" --> unstake "staker" (Amount Tez.one_mutez) - ) - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero - -(* Test that an unstake operation doesn't cause finalization when - there are zero staked funds (so the unstake operation doesn't do - anything). *) -(* Todo: there might be other cases... like changing delegates *) -let scenario_not_finalize = - init_staker_delegate_or_external --> stake "staker" Half --> next_cycle - --> unstake "staker" All - --> wait_n_cycles_f (unstake_wait ++ 2) - --> assert_failure - (check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> snapshot_balances "not finalize" ["staker"] - --> (Tag "no finalize with unstake if staked = 0" - --> unstake "staker" (Amount Tez.one_mutez)) - --> assert_failure - (check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> check_snapshot_balances "not finalize" - -(* TODO: there's probably more... *) -let scenario_forbidden_operations = - let open Lwt_result_syntax in - let fail_if_staker_is_self_delegate staker = - exec (fun ((_, state) as input) -> - if State.(is_self_delegate staker state) then - failwith "_self_delegate_exit_" - else return input) - in - init_staker_delegate_or_external - --> (* Staking everything works for self delegates, but not for delegated accounts *) - assert_failure - (fail_if_staker_is_self_delegate "staker" --> stake "staker" All) - (* stake is always forbidden when amount is zero *) - --> assert_failure (stake "staker" Nothing) - (* One cannot stake more that one has *) - --> assert_failure (stake "staker" Max_tez) - (* unstake is actually authorized for amount 0, but does nothing (doesn't even finalize if possible) *) - --> unstake "staker" Nothing - -let full_balance_in_finalizable = - init_staker_delegate_or_external - --> add_account_with_funds - "dummy" - ~funder:"staker" - (Amount (Tez.of_mutez 10_000_000L)) - --> stake "staker" All_but_one --> next_cycle --> unstake "staker" All - --> wait_n_cycles_f (unstake_wait ++ 2) - (* At this point, almost all the balance (but one mutez) of the stake is in finalizable *) - (* Staking is possible, but not transfer *) - --> assert_failure - (transfer "staker" "dummy" (Amount (Tez.of_mutez 10_000_000L))) - --> stake "staker" (Amount (Tez.of_mutez 10_000_000L)) - (* After the stake, transfer is possible again because the funds were finalized *) - --> transfer "staker" "dummy" (Amount (Tez.of_mutez 10_000_000L)) - -(* Stress test: what happens if someone were to stake and unstake every cycle? *) -let odd_behavior = - init_staker_delegate_or_external - --> - let one_cycle = - no_tag --> stake "staker" Half --> unstake "staker" Half --> next_cycle - in - loop 20 one_cycle - -(* Test changing delegate to self delegation while having staked funds. *) -let change_delegate_to_self = - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force --> begin_test ["delegate"] - --> set_delegate_params "delegate" init_params - --> add_account_with_funds - "staker" - ~funder:"delegate" - (Amount (Tez.of_mutez 2_000_000_000_000L)) - --> set_delegate "staker" (Some "delegate") - --> wait_delegate_parameters_activation --> stake "staker" Half --> next_cycle - --> set_delegate "staker" (Some "staker") - (* Can't stake: "A contract tries to stake to its delegate while - having unstake requests to a previous delegate that cannot be - finalized yet. Try again in a later cycle (no more than - consensus_rights_delay + max_slashing_period)." *) - --> assert_failure (stake "staker" Half) - --> unstake "staker" Max_tez - --> wait_n_cycles_f (unstake_wait -- 1) (* Still can't stake. *) - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero - --> assert_failure (stake "staker" Half) - --> next_cycle - (* The unstake request from changing delegates is now finalizable. *) - --> assert_failure - (check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> assert_success - (* Can directly stake again, which automatically finalizes, - even though the finalizable unstaked request is about a - previous delegate. *) - (stake "staker" Half - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> (Tag "finalize" - --> (* Explicitly finalize, so that we can check that the balances - are identical to the beginning. This proves that changing - delegates has indeed unstaked all staked funds. *) - finalize "staker" - --> check_snapshot_balances "init" - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero - |+ Tag "don't finalize" --> Empty) - --> stake "staker" Half --> unstake "staker" Half --> stake "staker" Half - -(* Test changing delegates while having staked funds. *) -let change_delegate = - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force - --> begin_test ["delegate1"; "delegate2"] - --> set_delegate_params "delegate1" init_params - --> set_delegate_params "delegate2" init_params - --> add_account_with_funds - "staker" - ~funder:"delegate1" - (Amount (Tez.of_mutez 2_000_000_000_000L)) - --> snapshot_balances "init" ["staker"] - --> set_delegate "staker" (Some "delegate1") - --> wait_delegate_parameters_activation --> stake "staker" Half - --> snapshot_balances "after_stake" ["staker"] - (* Changing delegates. This also unstakes all staked funds. *) - --> set_delegate "staker" (Some "delegate2") - (* Can't stake: "A contract tries to stake to its delegate while - having unstake requests to a previous delegate that cannot be - finalized yet. Try again in a later cycle (no more than - consensus_rights_delay + max_slashing_period)." *) - --> assert_failure (stake "staker" Half) - --> unstake "staker" Max_tez - --> wait_n_cycles_f (unstake_wait -- 1) (* Still can't stake. *) - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero - --> assert_failure (stake "staker" Half) - --> next_cycle - (* The unstake request from changing delegates is now finalizable. *) - --> assert_failure - (check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> assert_success - (* Can directly stake again, which automatically finalizes, - even though the finalizable unstaked request is about a - previous delegate. *) - (stake "staker" Half - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero) - --> (Tag "finalize" - --> (* Explicitly finalize, so that we can check that the balances - are identical to the beginning. This proves that changing - delegates has indeed unstaked all staked funds. *) - finalize "staker" - --> check_snapshot_balances "init" - --> check_balance_field "staker" `Unstaked_finalizable Tez.zero - --> (* Staking again is also possible. *) stake "staker" Half - --> check_snapshot_balances "after_stake" - |+ Tag "don't finalize" --> stake "staker" Half) - --> (Tag "finally, unstake" --> unstake "staker" Half - |+ Tag "finally, change delegate one last time" - --> set_delegate "staker" (Some "delegate1") - |+ Tag "finally, unset delegate" --> set_delegate "staker" None) - -let unset_delegate = - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force --> begin_test ["delegate"] - --> set_delegate_params "delegate" init_params - --> add_account_with_funds - "staker" - ~funder:"delegate" - (Amount (Tez.of_mutez 2_000_000_000_000L)) - --> add_account_with_funds - "dummy" - ~funder:"delegate" - (Amount (Tez.of_mutez 2_000_000L)) - --> set_delegate "staker" (Some "delegate") - --> wait_delegate_parameters_activation --> stake "staker" Half - --> unstake "staker" All --> next_cycle --> set_delegate "staker" None - --> next_cycle - --> transfer "staker" "dummy" All - (* staker has an empty liquid balance, but still has unstaked frozen tokens, - so it doesn't get deactivated *) - --> wait_n_cycles_f (unstake_wait ++ 1) - --> finalize_unstake "staker" - -(* Test that external stakers cannot stake when a delegate sets the - limit of staking over baking to zero, then can stake again when the - limit is set back to one. Changes take effect only after - [delegate_parameters_activation_delay + 1] cycles. *) -let forbid_costaking = - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - let no_costake_params = - {limit_of_staking_over_baking = Q.zero; edge_of_baking_over_staking = Q.one} - in - let amount = Amount (Tez.of_mutez 1_000_000L) in - (* init constants *) - (Tag "default protocol constants" --> init_constants () - |+ Tag "small delegate parameters delay" - --> init_constants ~delegate_parameters_activation_delay:0 () - |+ Tag "large delegate parameters delay" - --> init_constants ~delegate_parameters_activation_delay:10 ()) - (* Set flags *) - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Zero_threshold - (* Start scenario *) - --> begin_test ["delegate"] - --> set_delegate_params "delegate" init_params - --> add_account_with_funds - "staker" - ~funder:"delegate" - (Amount (Tez.of_mutez 2_000_000_000_000L)) - --> set_delegate "staker" (Some "delegate") - --> wait_cycle_until (`And (`AI_activation, `delegate_parameters_activation)) - (* try stake in normal conditions *) - --> stake "staker" amount - (* Change delegate parameters to forbid staking *) - --> set_delegate_params "delegate" no_costake_params - (* The changes are not immediate *) - --> stake "staker" amount - (* The parameters change is applied after at least - [delegate_parameters_activation_delay] full cycles have passed, - that is, exactly [delegate_parameters_activation_delay + 1] - cycles after the request. *) - --> wait_cycle_until `right_before_delegate_parameters_activation - (* Not yet... *) - --> stake "staker" amount - --> next_cycle - (* External staking is now forbidden *) - --> assert_failure (stake "staker" amount) - (* Can still self-stake *) - --> stake "delegate" amount - (* Can still unstake *) - --> unstake "staker" Half - --> wait_n_cycles_f (unstake_wait ++ 1) - --> finalize_unstake "staker" - (* Can authorize stake again *) - --> set_delegate_params "delegate" init_params - --> wait_cycle_until `right_before_delegate_parameters_activation - (* Not yet... *) - --> assert_failure (stake "staker" amount) - --> next_cycle - (* Now possible *) - --> stake "staker" amount - -(* Check that a delegate can be deactivated under AI by unstaking everything, even with stakers. - Check that such a delegate can reactivate later, and still have their stakers *) -let test_deactivation = - let init_params = - {limit_of_staking_over_baking = Q.one; edge_of_baking_over_staking = Q.one} - in - let fail_if_deactivated delegate = - let open Lwt_result_syntax in - exec_unit (fun (block, state) -> - let dlgt = State.find_account delegate state in - let* deactivated = Context.Delegate.deactivated (B block) dlgt.pkh in - Assert.is_true ~loc:__LOC__ (not deactivated)) - in - init_constants () - --> set S.Adaptive_issuance.autostaking_enable false - --> activate_ai `Force - --> begin_test ["delegate"; "faucet"] - --> stake "delegate" (Amount (Tez.of_mutez 1_800_000_000_000L)) - --> set_delegate_params "delegate" init_params - --> add_account_with_funds - "staker1" - ~funder:"faucet" - (Amount (Tez.of_mutez 200_000_000_000L)) - --> add_account_with_funds - "staker2" - ~funder:"faucet" - (Amount (Tez.of_mutez 200_000_000_000L)) - --> wait_delegate_parameters_activation - --> set_delegate "staker1" (Some "delegate") - --> set_delegate "staker2" (Some "delegate") - --> stake "staker1" Half --> stake "staker2" Half --> next_cycle - (* The delegate unstakes all, starting the deactivation process *) - --> unstake "delegate" All - (* "delegate" can still bake, but not for long... *) - --> assert_success ~loc:__LOC__ (next_block_with_baker "delegate") - --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay) - (* After consensus_rights_delay, the delegate still has rights... *) - --> assert_success ~loc:__LOC__ (next_block_with_baker "delegate") - --> next_cycle - (* ...But not in the following cycle *) - --> assert_failure ~loc:__LOC__ (next_block_with_baker "delegate") - (* The stakers still have stake, and can still stake/unstake *) - --> check_balance_field "staker1" `Staked (Tez.of_mutez 100_000_000_000L) - --> check_balance_field "staker2" `Staked (Tez.of_mutez 100_000_000_000L) - --> assert_success ~loc:__LOC__ (stake "staker1" Half) - --> assert_success - ~loc:__LOC__ - (unstake "staker2" Half --> wait_n_cycles 5 - --> finalize_unstake "staker2") - (* We wait until the delegate is completely deactivated *) - --> assert_success ~loc:__LOC__ (fail_if_deactivated "delegate") - (* We already waited for [consensus_rights_delay] + 1 cycles since 0 stake, - we must wait for [consensus_rights_delay] more. *) - --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay) - --> assert_success ~loc:__LOC__ (fail_if_deactivated "delegate") - --> next_cycle - --> assert_failure ~loc:__LOC__ (fail_if_deactivated "delegate") - --> next_cycle - (* The stakers still have stake, and can still stake/unstake *) - --> check_balance_field "staker1" `Staked (Tez.of_mutez 100_000_000_000L) - --> check_balance_field "staker2" `Staked (Tez.of_mutez 100_000_000_000L) - --> assert_success ~loc:__LOC__ (stake "staker1" Half) - --> assert_success - ~loc:__LOC__ - (unstake "staker2" Half --> wait_n_cycles 5 - --> finalize_unstake "staker2") - --> next_cycle - (* We now reactivate the delegate *) - --> set_delegate "delegate" (Some "delegate") - --> stake "delegate" (Amount (Tez.of_mutez 2_000_000_000_000L)) - (* It cannot bake right away *) - --> assert_failure ~loc:__LOC__ (next_block_with_baker "delegate") - --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay) - (* After consensus_rights_delay, the delegate still has no rights... *) - --> assert_failure ~loc:__LOC__ (next_block_with_baker "delegate") - --> next_cycle - (* ...But has enough to bake in the following cycle *) - --> assert_success ~loc:__LOC__ (next_block_with_baker "delegate") - --> exec_unit (fun (_, state) -> - let dlgt = State.find_account "delegate" state in - let total = Frozen_tez.total_current dlgt.frozen_deposits in - Assert.equal_tez ~loc:__LOC__ total (Tez.of_mutez 2_200_000_000_000L)) - -let tests = - tests_of_scenarios - @@ [ - ("Test simple roundtrip", simple_roundtrip); - ("Test double roundtrip", double_roundtrip); - ("Test preserved balance", status_quo_rountrip); - ("Test finalize", scenario_finalize); - ("Test no finalize", scenario_not_finalize); - ("Test forbidden operations", scenario_forbidden_operations); - ("Test full balance in finalizable", full_balance_in_finalizable); - ("Test stake unstake every cycle", odd_behavior); - ("Test change delegate", change_delegate); - ("Test change delegate to self", change_delegate_to_self); - ("Test unset delegate", unset_delegate); - ("Test forbid costake", forbid_costaking); - ("Test stake from unstake", shorter_roundtrip_for_baker); - ("Test deactivation under AI", test_deactivation); - ] - -let () = register_tests ~__FILE__ ~tags:["protocol"; "scenario"; "stake"] tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_storage.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_storage.ml deleted file mode 100644 index e54ec5b71d1772d1af8019daa1c7e21ad91da88c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_storage.ml +++ /dev/null @@ -1,234 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Metastate AG *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Context Storage - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_storage.ml - Subject: Test the correctnesss of debug message from storage_functor - *) - -open Protocol -open Storage_functors -open Storage_sigs - -let register_test = Tezt_helpers.register_test ~__FILE__ ~file_tags:["storage"] - -module Int32 = struct - type t = int32 - - let encoding = Data_encoding.int32 - - module Index = struct - type t = int - - let path_length = 1 - - let to_path c l = string_of_int c :: l - - let of_path = function - | [] | _ :: _ :: _ -> None - | [c] -> int_of_string_opt c - - type 'a ipath = 'a * t - - let args = - Storage_description.One - { - rpc_arg = Environment.RPC_arg.int; - encoding = Data_encoding.int31; - compare = Compare.Int.compare; - } - end -end - -module Int64 = struct - type t = int64 - - let encoding = Data_encoding.int64 - - module Index = struct - type t = int64 - - let path_length = 1 - - let to_path c l = Int64.to_string c :: l - - let of_path = function - | [] | _ :: _ :: _ -> None - | [c] -> Int64.of_string_opt c - - type 'a ipath = 'a * t - - let args = - Storage_description.One - { - rpc_arg = Environment.RPC_arg.int64; - encoding = Data_encoding.int64; - compare = Compare.Int64.compare; - } - end -end - -let create_context name : (module Raw_context.T with type t = Raw_context.t) = - (module Make_subcontext (Registered) (Raw_context) - (struct - let name = [name] - end)) - -let create_subcontext name - (module Context : Raw_context.T with type t = Raw_context.t) : - (module Raw_context.T with type t = Raw_context.t) = - (module Make_subcontext (Registered) (Context) - (struct - let name = [name] - end)) - -let create_single_data_storage name - (module Context : Raw_context.T with type t = Raw_context.t) : - (module Single_data_storage with type t = Context.t and type value = Int32.t) - = - (module Make_single_data_storage (Registered) (Context) - (struct - let name = [name] - end) - (Int32)) - -let create_indexed_subcontext_int32 - (module Context : Raw_context.T with type t = Raw_context.t) : - (module Data_set_storage with type t = Raw_context.t) = - (module Make_data_set_storage (Context) (Int32.Index)) - -let create_indexed_subcontext_int64 - (module Context : Raw_context.T with type t = Raw_context.t) : - (module Data_set_storage with type t = Raw_context.t) = - (module Make_data_set_storage (Context) (Int64.Index)) - -let must_failwith f_prog error = - try - let () = f_prog () in - Alcotest.fail "Unexpected successful result" - with exc -> - if exc = error then Lwt.return_unit - else Alcotest.fail "Unexpected error result" - -(** Test: - - This test check that creating value where value already exists - fails*) -let test_register_single_data () = - let f_prog () = - let context = create_context "context1" in - (create_single_data_storage "single_data" context - :> (module Single_data_storage)) - |> ignore ; - (create_single_data_storage "single_data" context - :> (module Single_data_storage)) - |> ignore - in - let error = - Invalid_argument - "Could not register a value at [context1 / single_data] because of an \ - existing Value." - in - must_failwith f_prog error - -(** Test: - - This test check that creating a subcontext where a value already exists - fails*) -let test_register_named_subcontext () = - let f_prog () = - let context = create_context "context2" in - let subcontext = create_subcontext "sub_context" context in - (create_single_data_storage "error_register" subcontext - :> (module Single_data_storage)) - |> ignore ; - let subcontext = create_subcontext "error_register" subcontext in - (create_single_data_storage "single_data2" subcontext - :> (module Single_data_storage)) - |> ignore - in - let error = - Invalid_argument - "Could not register a named subcontext at [context2 / sub_context / \ - error_register] because of an existing Value." - in - must_failwith f_prog error - -(** Test: - - This test check that creating a indexed subcontext where a value already - exists fails*) -let test_register_indexed_subcontext () = - let f_prog () = - let context = create_context "context3" in - (create_single_data_storage "single_value" context - :> (module Single_data_storage)) - |> ignore ; - (create_indexed_subcontext_int32 context :> (module Data_set_storage)) - |> ignore - in - let error = - Invalid_argument - "Could not register an indexed subcontext at [context3] because of an \ - existing \n\ - single_value Value." - in - must_failwith f_prog error - -(** Test: - - This test check that creating a indexed subcontext where an indexed - subcontext already exists fails*) -let test_register_indexed_subcontext_2 () = - let f_prog () = - let context = create_context "context4" in - (create_indexed_subcontext_int32 context :> (module Data_set_storage)) - |> ignore ; - (create_indexed_subcontext_int64 context :> (module Data_set_storage)) - |> ignore - in - let error = - Invalid_argument - "An indexed subcontext at [context4] already exists but has a different \ - argument: `int64` <> `int`." - in - must_failwith f_prog error - -let () = - register_test - ~title:"register single data in existing path" - test_register_single_data ; - register_test - ~title:"register named subcontext in existing path" - test_register_named_subcontext ; - register_test - ~title:"register indexed subcontext in existing path" - test_register_indexed_subcontext ; - register_test - ~title:"register indexed subcontext with existing indexed subcontext" - test_register_indexed_subcontext_2 diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_storage_functions.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_storage_functions.ml deleted file mode 100644 index 01ef50f93a831820282f140cb9e0ab2a2a09397f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_storage_functions.ml +++ /dev/null @@ -1,234 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Oxhead Alpha *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Context Storage - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_storage_functions.ml - Subject: Test storage functions. - *) - -open Protocol -open Storage_functors - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["storage"] - -let assert_length ~loc ctxt key expected = - let open Lwt_result_syntax in - let*! length = Raw_context.length ctxt key in - let* () = Assert.equal_int ~loc length expected in - let*! list = Raw_context.list ctxt key in - let list_length = List.length list in - Assert.equal_int ~loc length list_length - -module Int32 = struct - type t = int32 - - let encoding = Data_encoding.int32 - - module Index = struct - type t = int - - let path_length = 1 - - let to_path c l = string_of_int c :: l - - let of_path = function - | [] | _ :: _ :: _ -> None - | [c] -> int_of_string_opt c - - type 'a ipath = 'a * t - - let args = - Storage_description.One - { - rpc_arg = Environment.RPC_arg.int; - encoding = Data_encoding.int31; - compare = Compare.Int.compare; - } - end -end - -module String = struct - type t = string - - let encoding = Data_encoding.string -end - -module Root_raw_context = - Make_subcontext (Registered) (Raw_context) - (struct - let name = ["test_storage_functors"] - end) - -module Indexed_context = - Make_indexed_subcontext - (Make_subcontext (Registered) (Root_raw_context) - (struct - let name = ["index"] - end)) - (Int32.Index) - -module Table = - Make_carbonated_data_set_storage - (Make_subcontext (Registered) (Raw_context) - (struct - let name = ["table"] - end)) - (Int32.Index) - -module Indexed_table = - Make_carbonated_data_set_storage - (Make_subcontext (Registered) (Indexed_context.Raw_context) - (struct - let name = ["table2"] - end)) - (Int32.Index) - -(** Test: - This test checks that it is possible to add values to a - Carbonated_data_set_storage and iterate over them. *) -let test_fold_keys_unaccounted () = - let open Lwt_result_wrap_syntax in - let* ctxt = Context.default_raw_context () in - let*@ ctxt, _ = Table.init ctxt 1 in - let*@ ctxt, _ = Table.init ctxt 2 in - let*! items = - Table.fold_keys_unaccounted - ctxt - ~order:`Undefined - ~f:(fun x acc -> Lwt.return @@ (x :: acc)) - ~init:[] - in - let items = List.sort Compare.Int.compare items in - Assert.assert_equal_list - ~loc:__LOC__ - Int.equal - "Compare items" - Format.pp_print_int - [1; 2] - items - -(** Test that [length] returns the number of elements for a given path. *) -let test_length () = - let open Lwt_result_wrap_syntax in - let* ctxt = Context.default_raw_context () in - (* Add a tree to the context: - root: - left: - l1 : V1 - l2 : V2 - l3 : V3 - right: - r1 : V4 - r2 : V5 - file : V6 - *) - let*! tree = - let*! tree_left = - let tree = Raw_context.Tree.empty ctxt in - let*! tree = Raw_context.Tree.add tree ["l1"] (Bytes.of_string "V1") in - let*! tree = Raw_context.Tree.add tree ["l2"] (Bytes.of_string "V2") in - Raw_context.Tree.add tree ["c"] (Bytes.of_string "V3") - in - let*! tree_right = - let tree = Raw_context.Tree.empty ctxt in - let*! tree = Raw_context.Tree.add tree ["r1"] (Bytes.of_string "V4") in - Raw_context.Tree.add tree ["r2"] (Bytes.of_string "V5") - in - let tree = Raw_context.Tree.empty ctxt in - let*! tree = Raw_context.Tree.add_tree tree ["left"] tree_left in - let*! tree = Raw_context.Tree.add_tree tree ["right"] tree_right in - Raw_context.Tree.add tree ["file"] (Bytes.of_string "V6") - in - let*@ ctxt = Raw_context.init_tree ctxt ["root"] tree in - (* The root node contains 3 elements. *) - let* () = assert_length ctxt ~loc:__LOC__ ["root"] 3 in - (* The left branch contains 3 elements. *) - let* () = assert_length ctxt ~loc:__LOC__ ["root"; "left"] 3 in - (* The right branch contains 2 elements. *) - let* () = assert_length ctxt ~loc:__LOC__ ["root"; "right"] 2 in - (* Path [root/left/l1] is a leaf and thus returns length 0. *) - let* () = assert_length ctxt ~loc:__LOC__ ["root"; "left"; "l1"] 0 in - (* The length of a non-existing path also returns 0. *) - assert_length ctxt ~loc:__LOC__ ["root"; "right"; "non_existing"] 0 - -let test_is_empty_carbonated_data_set () = - let open Lwt_result_wrap_syntax in - let* ctxt = Context.default_raw_context () in - let*@ ctxt, is_empty = Table.is_empty ctxt in - (* Test is_empty on uninitialized Table. *) - let* () = Assert.equal_bool ~loc:__LOC__ is_empty true in - - let*@ ctxt, _ = Table.init ctxt 1 in - let*@ ctxt, is_empty = Table.is_empty ctxt in - (* Test empty after adding an element to the Table. *) - let* () = Assert.equal_bool ~loc:__LOC__ is_empty false in - - let*@ ctxt, _, _ = Table.remove ctxt 1 in - let*@ _ctxt, is_empty = Table.is_empty ctxt in - (* Test empty after removing the element from the Table. *) - Assert.equal_bool ~loc:__LOC__ is_empty true - -let test_clear_carbonated_data_set () = - let open Lwt_result_wrap_syntax in - let* ctxt = Context.default_raw_context () in - (* Test clear on uninitialized Table. *) - let*@ ctxt = Table.clear ctxt in - let*@ ctxt, is_empty = Table.is_empty ctxt in - let* () = Assert.equal_bool ~loc:__LOC__ is_empty true in - - let*@ ctxt, _ = Table.init ctxt 1 in - let*@ ctxt, is_empty = Table.is_empty ctxt in - let* () = Assert.equal_bool ~loc:__LOC__ is_empty false in - - (* Test clear on non-empty Table. *) - let*@ ctxt = Table.clear ctxt in - let*@ _ctxt, is_empty = Table.is_empty ctxt in - let* () = Assert.equal_bool ~loc:__LOC__ is_empty true in - - (* Test clear on indexed table. Check that only the cleared indexed - table is cleared. *) - let*@ ctxt, _ = Indexed_table.init (ctxt, 0) 0 in - let*@ ctxt, _ = Indexed_table.init (ctxt, 1) 1 in - let*@ ctxt = Indexed_table.clear (ctxt, 0) in - let*@ ctxt, is_empty0 = Indexed_table.is_empty (ctxt, 0) in - let*@ _ctxt, is_empty1 = Indexed_table.is_empty (ctxt, 1) in - let* () = Assert.equal_bool ~loc:__LOC__ is_empty0 true in - Assert.equal_bool ~loc:__LOC__ is_empty1 false - -let () = - register_test - ~title:"fold_keys_unaccounted smoke test" - test_fold_keys_unaccounted ; - register_test ~title:"length test" test_length ; - register_test - ~title:"test empty carbonated data set" - test_is_empty_carbonated_data_set ; - register_test - ~title:"test clear carbonated data set" - test_clear_carbonated_data_set diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/test_token.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/test_token.ml deleted file mode 100644 index e20cf2a8dfc5a9332bc4f464bc7ff5ae33f8642e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/test_token.ml +++ /dev/null @@ -1,779 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (token) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/main.exe \ - -- --file test_token.ml - Subject: Token movements in the protocol. -*) - -open Protocol -open Alpha_context -open Tez_helpers - -let register_test = Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["token"] - -(** Creates a context with a single account. Returns the context and the public - key hash of the account. *) -let create_context () = - let open Lwt_result_syntax in - let (Account.{pkh; _} as account) = Account.new_account () in - let bootstrap_account = Account.make_bootstrap_account account in - let* ctxt = Block.alpha_context [bootstrap_account] in - return (ctxt, pkh) - -let random_amount () = - match Tez.of_mutez (Int64.add 1L (Random.int64 100L)) with - | None -> assert false - | Some x -> x - -let nonce = Origination_nonce.Internal_for_tests.initial Operation_hash.zero - -let sc_rollup () = Sc_rollup.Internal_for_tests.originated_sc_rollup nonce - -(** Check balances for a simple transfer from [bootstrap] to new [Implicit]. *) -let test_simple_balances () = - let open Lwt_result_wrap_syntax in - Random.init 0 ; - let* ctxt, pkh = create_context () in - let giver = `Contract (Contract.Implicit pkh) in - let pkh, _pk, _sk = Signature.generate_key () in - let receiver = `Contract (Contract.Implicit pkh) in - let amount = Tez.one in - let*@ ctxt', _ = Token.transfer ctxt giver receiver amount in - let*@ ctxt, bal_giver = Token.Internal_for_tests.balance ctxt giver in - let*@ ctxt', bal_giver' = Token.Internal_for_tests.balance ctxt' giver in - let*@ _, bal_receiver = Token.Internal_for_tests.balance ctxt receiver in - let*@ _, bal_receiver' = Token.Internal_for_tests.balance ctxt' receiver in - let*? add_bal_giver'_amount = bal_giver' +? amount in - let*? add_bal_receiver_amount = bal_receiver +? amount in - let* () = Assert.equal_tez ~loc:__LOC__ bal_giver add_bal_giver'_amount in - Assert.equal_tez ~loc:__LOC__ bal_receiver' add_bal_receiver_amount - -(** Check balance updates for a simple transfer from [bootstrap] to new - [Implicit]. *) -let test_simple_balance_updates () = - let open Lwt_result_wrap_syntax in - Random.init 0 ; - let* ctxt, pkh = create_context () in - let giver = Contract.Implicit pkh in - let pkh, _pk, _sk = Signature.generate_key () in - let receiver = Contract.Implicit pkh in - let amount = Tez.one in - let*@ _, bal_updates = - Token.transfer ctxt (`Contract giver) (`Contract receiver) amount - in - Alcotest.( - check - bool - "Missing balance update for giver contract." - (List.mem - ~equal:( = ) - (Receipt.item (Contract giver) (Debited amount) Block_application) - bal_updates) - true) ; - Alcotest.( - check - bool - "Missing balance update for receiver contract." - (List.mem - ~equal:( = ) - (Receipt.item (Contract receiver) (Credited amount) Block_application) - bal_updates) - true) ; - return_unit - -let test_allocated_and_deallocated ctxt receiver initial_status - status_when_empty = - let open Lwt_result_wrap_syntax in - let receiver_container = (receiver :> Token.container) in - let*@ ctxt, allocated = - Token.Internal_for_tests.allocated ctxt receiver_container - in - let* () = Assert.equal_bool ~loc:__LOC__ allocated initial_status in - let amount = Tez.one in - let*@ ctxt', _ = Token.transfer ctxt `Minted receiver_container amount in - let*@ ctxt', allocated = - Token.Internal_for_tests.allocated ctxt' receiver_container - in - let* () = Assert.equal_bool ~loc:__LOC__ allocated true in - let*@ ctxt', bal_receiver' = - Token.Internal_for_tests.balance ctxt' receiver - in - let*@ ctxt', _ = - Token.transfer ctxt' receiver_container `Burned bal_receiver' - in - let*@ _, allocated = - Token.Internal_for_tests.allocated ctxt' receiver_container - in - let* () = Assert.equal_bool ~loc:__LOC__ allocated status_when_empty in - return_unit - -let test_allocated_and_deallocated_when_empty ctxt receiver = - test_allocated_and_deallocated ctxt receiver false false - -let test_allocated_and_still_allocated_when_empty ctxt receiver initial_status = - test_allocated_and_deallocated ctxt receiver initial_status true - -let test_allocated () = - let open Lwt_result_syntax in - Random.init 0 ; - let* ctxt, baker_pkh = create_context () in - let receiver = `Contract (Contract.Implicit baker_pkh) in - let* () = test_allocated_and_still_allocated_when_empty ctxt receiver true in - (* Generate a fresh, empty, non-allocated implicit account. *) - let pkh, _pk, _sk = Signature.generate_key () in - let receiver = `Contract (Contract.Implicit pkh) in - let* () = test_allocated_and_deallocated_when_empty ctxt receiver in - let receiver = `Collected_commitments Blinded_public_key_hash.zero in - let* () = test_allocated_and_deallocated_when_empty ctxt receiver in - let receiver = `Block_fees in - let* () = test_allocated_and_still_allocated_when_empty ctxt receiver true in - let receiver = - let bond_id = Bond_id.Sc_rollup_bond_id (sc_rollup ()) in - `Frozen_bonds (Contract.Implicit pkh, bond_id) - in - test_allocated_and_deallocated_when_empty ctxt receiver - -let check_receiver_balances ctxt ctxt' receiver amount = - let open Lwt_result_wrap_syntax in - let*@ _, bal_receiver = Token.Internal_for_tests.balance ctxt receiver in - let*@ _, bal_receiver' = Token.Internal_for_tests.balance ctxt' receiver in - let*? add_bal_receiver_amount = bal_receiver +? amount in - Assert.equal_tez ~loc:__LOC__ bal_receiver' add_bal_receiver_amount - -let test_transferring_to_receiver ctxt receiver amount expected_bupds = - let open Lwt_result_wrap_syntax in - (* Transferring zero must be a noop, and must not return balance updates. *) - let*@ ctxt', bupds = Token.transfer ctxt `Minted receiver Tez.zero in - let* () = Assert.equal_bool ~loc:__LOC__ (ctxt == ctxt' && bupds = []) true in - (* Test transferring a non null amount. *) - let*@ ctxt', bupds = Token.transfer ctxt `Minted receiver amount in - let* () = check_receiver_balances ctxt ctxt' receiver amount in - let expected_bupds = - Receipt.item Minted (Debited amount) Block_application :: expected_bupds - in - Alcotest.( - check bool "Balance updates do not match." (bupds = expected_bupds) true) ; - (* Test transferring to go beyond capacity. *) - let*@ ctxt', bal = Token.Internal_for_tests.balance ctxt' receiver in - let amount = Tez.of_mutez_exn Int64.max_int -! bal +! Tez.one_mutez in - let*!@ res = Token.transfer ctxt' `Minted receiver amount in - Assert.proto_error_with_info ~loc:__LOC__ res "Overflowing tez addition" - -let test_transferring_to_contract ctxt = - let pkh, _pk, _sk = Signature.generate_key () in - let receiver = Contract.Implicit pkh in - let amount = random_amount () in - test_transferring_to_receiver - ctxt - (`Contract receiver) - amount - Receipt.[item (Contract receiver) (Credited amount) Block_application] - -let test_transferring_to_collected_commitments ctxt = - let amount = random_amount () in - let bpkh = Blinded_public_key_hash.zero in - test_transferring_to_receiver - ctxt - (`Collected_commitments bpkh) - amount - Receipt.[item (Commitments bpkh) (Credited amount) Block_application] - -let test_transferring_to_collected_fees ctxt = - let amount = random_amount () in - test_transferring_to_receiver - ctxt - `Block_fees - amount - Receipt.[item Block_fees (Credited amount) Block_application] - -let test_transferring_to_burned ctxt = - let open Lwt_result_wrap_syntax in - let amount = random_amount () in - let minted_bupd = Receipt.item Minted (Debited amount) Block_application in - let*@ _, bupds = Token.transfer ctxt `Minted `Burned amount in - let* () = - Assert.equal_bool - ~loc:__LOC__ - (bupds - = Receipt.[minted_bupd; item Burned (Credited amount) Block_application]) - true - in - let*@ _, bupds = Token.transfer ctxt `Minted `Storage_fees amount in - let* () = - Assert.equal_bool - ~loc:__LOC__ - (bupds - = Receipt. - [minted_bupd; item Storage_fees (Credited amount) Block_application]) - true - in - let*@ _, bupds = - Token.transfer ctxt `Minted `Double_signing_punishments amount - in - let* () = - Assert.equal_bool - ~loc:__LOC__ - (bupds - = Receipt. - [ - minted_bupd; - item Double_signing_punishments (Credited amount) Block_application; - ]) - true - in - let pkh = Signature.Public_key_hash.zero in - let p, r = (Random.bool (), Random.bool ()) in - let*@ _, bupds = - Token.transfer ctxt `Minted (`Lost_attesting_rewards (pkh, p, r)) amount - in - let* () = - Assert.equal_bool - ~loc:__LOC__ - (bupds - = Receipt. - [ - minted_bupd; - item - (Lost_attesting_rewards (pkh, p, r)) - (Credited amount) - Block_application; - ]) - true - in - let*@ _, bupds = - Token.transfer ctxt `Minted `Sc_rollup_refutation_punishments amount - in - Assert.equal_bool - ~loc:__LOC__ - (bupds - = Receipt. - [ - minted_bupd; - item - Sc_rollup_refutation_punishments - (Credited amount) - Block_application; - ]) - true - -let test_transferring_to_frozen_bonds ctxt = - let pkh, _pk, _sk = Signature.generate_key () in - let contract = Contract.Implicit pkh in - let sc_rollup = sc_rollup () in - let bond_id = Bond_id.Sc_rollup_bond_id sc_rollup in - let amount = random_amount () in - test_transferring_to_receiver - ctxt - (`Frozen_bonds (contract, bond_id)) - amount - Receipt. - [ - item - (Frozen_bonds (contract, bond_id)) - (Credited amount) - Block_application; - ] - -let test_transferring_to_receiver () = - let open Lwt_result_syntax in - Random.init 0 ; - let* ctxt, _ = create_context () in - let* () = test_transferring_to_contract ctxt in - let* () = test_transferring_to_collected_commitments ctxt in - let* () = test_transferring_to_collected_fees ctxt in - let* () = test_transferring_to_burned ctxt in - test_transferring_to_frozen_bonds ctxt - -let check_giver_balances ctxt ctxt' giver amount = - let open Lwt_result_wrap_syntax in - let*@ _, bal_giver = Token.Internal_for_tests.balance ctxt giver in - let*@ _, bal_giver' = Token.Internal_for_tests.balance ctxt' giver in - let*? add_bal_giver'_amount = bal_giver' +? amount in - Assert.equal_tez ~loc:__LOC__ bal_giver add_bal_giver'_amount - -let test_transferring_from_infinite_source ctxt giver expected_bupds = - let open Lwt_result_wrap_syntax in - (* Transferring zero must not return balance updates. *) - let*@ _, bupds = Token.transfer ctxt giver `Burned Tez.zero in - let* () = Assert.equal_bool ~loc:__LOC__ (bupds = []) true in - (* Test transferring a non null amount. *) - let amount = random_amount () in - let*@ _, bupds = Token.transfer ctxt giver `Burned amount in - let expected_bupds = - expected_bupds amount - @ Receipt.[item Burned (Credited amount) Block_application] - in - let* () = Assert.equal_bool ~loc:__LOC__ (bupds = expected_bupds) true in - return_unit - -(* Returns the balance of [account] if [account] is allocated, and returns - [Tez.zero] otherwise. *) -let balance_no_fail ctxt account = - let open Lwt_result_wrap_syntax in - let*@ ctxt, allocated = - Token.Internal_for_tests.allocated ctxt (account :> Token.container) - in - if allocated then wrap (Token.Internal_for_tests.balance ctxt account) - else return (ctxt, Tez.zero) - -let test_transferring_from_container ctxt giver amount expected_bupds = - let open Lwt_result_wrap_syntax in - let* ctxt, balance = balance_no_fail ctxt giver in - let* () = Assert.equal_tez ~loc:__LOC__ balance Tez.zero in - (* Test transferring from an empty account. *) - let*!@ res = Token.transfer ctxt giver `Burned Tez.one in - let error_title = - match giver with - | `Contract _ -> "Balance too low" - | `Frozen_bonds _ -> "Storage error (fatal internal error)" - | _ -> "Underflowing tez subtraction" - in - let* () = Assert.proto_error_with_info ~loc:__LOC__ res error_title in - (* Transferring zero must be a noop, and must not return balance updates. *) - let*@ ctxt', bupds = Token.transfer ctxt giver `Burned Tez.zero in - let* () = Assert.equal_bool ~loc:__LOC__ (ctxt == ctxt' && bupds = []) true in - (* Test transferring everything. *) - let*@ ctxt, _ = Token.transfer ctxt `Minted giver amount in - let*@ ctxt', bupds = Token.transfer ctxt giver `Burned amount in - let* () = check_giver_balances ctxt ctxt' giver amount in - let expected_bupds = - expected_bupds @ Receipt.[item Burned (Credited amount) Block_application] - in - let* () = Assert.equal_bool ~loc:__LOC__ (bupds = expected_bupds) true in - (* Test transferring a smaller amount. *) - let*@ ctxt, _ = Token.transfer ctxt `Minted giver amount in - let* () = - match giver with - | `Frozen_bonds _ -> - let*!@ res = Token.transfer ctxt giver `Burned amount in - let error_title = "Partial spending of frozen bonds" in - Assert.proto_error_with_info ~loc:__LOC__ res error_title - | _ -> - let*@ ctxt', bupds = Token.transfer ctxt giver `Burned amount in - let* () = check_giver_balances ctxt ctxt' giver amount in - Assert.equal_bool ~loc:__LOC__ (bupds = expected_bupds) true - in - (* Test transferring more than available. *) - let*@ ctxt, balance = Token.Internal_for_tests.balance ctxt giver in - let*!@ res = Token.transfer ctxt giver `Burned (balance +! Tez.one) in - let error_title = - match giver with - | `Contract _ -> "Balance too low" - | `Frozen_bonds _ -> "Partial spending of frozen bonds" - | _ -> "Underflowing tez subtraction" - in - Assert.proto_error_with_info ~loc:__LOC__ res error_title - -let test_transferring_from_contract ctxt = - let pkh, _pk, _sk = Signature.generate_key () in - let giver = Contract.Implicit pkh in - let amount = random_amount () in - test_transferring_from_container - ctxt - (`Contract giver) - amount - Receipt.[item (Contract giver) (Debited amount) Block_application] - -let test_transferring_from_collected_commitments ctxt = - let amount = random_amount () in - let bpkh = Blinded_public_key_hash.zero in - test_transferring_from_container - ctxt - (`Collected_commitments bpkh) - amount - Receipt.[item (Commitments bpkh) (Debited amount) Block_application] - -let test_transferring_from_collected_fees ctxt = - let amount = random_amount () in - test_transferring_from_container - ctxt - `Block_fees - amount - Receipt.[item Block_fees (Debited amount) Block_application] - -let test_transferring_from_frozen_bonds ctxt = - let pkh, _pk, _sk = Signature.generate_key () in - let contract = Contract.Implicit pkh in - let sc_rollup = sc_rollup () in - let bond_id = Bond_id.Sc_rollup_bond_id sc_rollup in - let amount = random_amount () in - test_transferring_from_container - ctxt - (`Frozen_bonds (contract, bond_id)) - amount - Receipt. - [ - item - (Frozen_bonds (contract, bond_id)) - (Debited amount) - Block_application; - ] - -let test_transferring_from_giver () = - let open Lwt_result_wrap_syntax in - Random.init 0 ; - let* ctxt, _ = create_context () in - let* () = - test_transferring_from_infinite_source ctxt `Invoice (fun am -> - Receipt.[item Invoice (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Bootstrap (fun am -> - Receipt.[item Bootstrap (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Initial_commitments (fun am -> - Receipt.[item Initial_commitments (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Revelation_rewards (fun am -> - Receipt.[item Nonce_revelation_rewards (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Attesting_rewards (fun am -> - Receipt.[item Attesting_rewards (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Baking_rewards (fun am -> - Receipt.[item Baking_rewards (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Baking_bonuses (fun am -> - Receipt.[item Baking_bonuses (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source ctxt `Minted (fun am -> - Receipt.[item Minted (Debited am) Block_application]) - in - let* () = - test_transferring_from_infinite_source - ctxt - `Liquidity_baking_subsidies - (fun am -> - Receipt.[item Liquidity_baking_subsidies (Debited am) Block_application]) - in - let* () = test_transferring_from_contract ctxt in - let* () = test_transferring_from_collected_commitments ctxt in - let* () = test_transferring_from_collected_fees ctxt in - test_transferring_from_frozen_bonds ctxt - -let cast_to_container_type x = - match x with - | `Burned | `Invoice | `Bootstrap | `Initial_commitments | `Minted - | `Liquidity_baking_subsidies -> - None - | `Contract _ as x -> Some x - | `Collected_commitments _ as x -> Some x - | `Block_fees as x -> Some x - | `Frozen_bonds _ as x -> Some x - -(** Generates all combinations of constructors. *) -let build_test_cases () = - let open Lwt_result_wrap_syntax in - let* ctxt, pkh = create_context () in - let origin = `Contract (Contract.Implicit pkh) in - let user1, _, _ = Signature.generate_key () in - let user1c = `Contract (Contract.Implicit user1) in - let user2, _, _ = Signature.generate_key () in - let user2c = `Contract (Contract.Implicit user2) in - let baker1, baker1_pk, _ = Signature.generate_key () in - let baker1c = `Contract (Contract.Implicit baker1) in - let baker2, baker2_pk, _ = Signature.generate_key () in - let baker2c = `Contract (Contract.Implicit baker2) in - (* Allocate contracts for user1, user2, baker1, and baker2. *) - let*@ ctxt, _ = Token.transfer ctxt origin user1c (random_amount ()) in - let*@ ctxt, _ = Token.transfer ctxt origin user2c (random_amount ()) in - let*@ ctxt, _ = Token.transfer ctxt origin baker1c (random_amount ()) in - let*@ ctxt, _ = Token.transfer ctxt origin baker2c (random_amount ()) in - (* Configure baker1, and baker2 as delegates by self-delegation, for which - revealing their manager key is a prerequisite. *) - let*@ ctxt = Contract.reveal_manager_key ctxt baker1 baker1_pk in - let*@ ctxt = - Contract.Delegate.set ctxt (Contract.Implicit baker1) (Some baker1) - in - let*@ ctxt = Contract.reveal_manager_key ctxt baker2 baker2_pk in - let*@ ctxt = - Contract.Delegate.set ctxt (Contract.Implicit baker2) (Some baker2) - (* Let user1 delegate to baker2. *) - in - let*@ ctxt = - Contract.Delegate.set ctxt (Contract.Implicit user1) (Some baker2) - in - let sc_rollup1 = sc_rollup () in - let bond_id1 = Bond_id.Sc_rollup_bond_id sc_rollup1 in - let sc_rollup2 = sc_rollup () in - let bond_id2 = Bond_id.Sc_rollup_bond_id sc_rollup2 in - let user1ic = Contract.Implicit user1 in - let baker2ic = Contract.Implicit baker2 in - let giver_list = - [ - (`Invoice, random_amount ()); - (`Bootstrap, random_amount ()); - (`Initial_commitments, random_amount ()); - (`Minted, random_amount ()); - (`Liquidity_baking_subsidies, random_amount ()); - (`Collected_commitments Blinded_public_key_hash.zero, random_amount ()); - (`Block_fees, random_amount ()); - (user1c, random_amount ()); - (user2c, random_amount ()); - (baker1c, random_amount ()); - (baker2c, random_amount ()); - (`Frozen_bonds (user1ic, bond_id1), random_amount ()); - (`Frozen_bonds (baker2ic, bond_id2), random_amount ()); - ] - in - let receiver_list = - [ - `Collected_commitments Blinded_public_key_hash.zero; - `Block_fees; - user1c; - user2c; - baker1c; - baker2c; - `Frozen_bonds (user1ic, bond_id1); - `Frozen_bonds (baker2ic, bond_id2); - `Burned; - ] - in - return (ctxt, List.product giver_list receiver_list) - -let check_giver_balances ctxt ctxt' giver amount = - let open Lwt_result_syntax in - match cast_to_container_type giver with - | None -> return_unit - | Some giver -> check_giver_balances ctxt ctxt' giver amount - -let check_receiver_balances ctxt ctxt' receiver amount = - let open Lwt_result_syntax in - match cast_to_container_type receiver with - | None -> return_unit - | Some receiver -> check_receiver_balances ctxt ctxt' receiver amount - -let check_balances ctxt ctxt' giver receiver amount = - let open Lwt_result_wrap_syntax in - match (cast_to_container_type giver, cast_to_container_type receiver) with - | None, None -> return_unit - | Some giver, Some receiver when giver = receiver -> - (* giver and receiver are the same contract *) - let*@ _, bal_receiver = Token.Internal_for_tests.balance ctxt receiver in - let*@ _, bal_receiver' = - Token.Internal_for_tests.balance ctxt' receiver - in - Assert.equal_tez ~loc:__LOC__ bal_receiver bal_receiver' - | Some giver, None -> check_giver_balances ctxt ctxt' giver amount - | None, Some receiver -> check_receiver_balances ctxt ctxt' receiver amount - | Some giver, Some receiver -> - let* () = check_giver_balances ctxt ctxt' giver amount in - check_receiver_balances ctxt ctxt' receiver amount - -let test_all_combinations_of_givers_and_receivers () = - let open Lwt_result_wrap_syntax in - Random.init 0 ; - let* ctxt, cases = build_test_cases () in - List.iter_es - (fun ((giver, amount), receiver) -> - let* ctxt = - match cast_to_container_type giver with - | None -> return ctxt - | Some giver -> - let*@ ctxt, _ = Token.transfer ctxt `Minted giver amount in - return ctxt - in - let*@ ctxt', _ = Token.transfer ctxt giver receiver amount in - check_balances ctxt ctxt' giver receiver amount) - cases - -(** [coalesce (account, Credited am1, origin) (account, Credited am2, origin) - = Some (account, Credited (am1+am2), origin)] - - [coalesce (account, Debited am1, origin) (account, Debited am2, origin) - = Some (account, Debited (am1+am2), origin)] - - Fails if bu1 and bu2 have different accounts or different origins, or - if one is a credit while the other is a debit. *) -let coalesce_balance_updates bu1 bu2 = - let open Receipt in - let (Balance_update_item (bu1_bal, bu1_balupd, bu1_origin)) = bu1 in - let (Balance_update_item (bu2_bal, bu2_balupd, bu2_origin)) = bu2 in - assert (bu1_origin = bu2_origin) ; - let token1 = token_of_balance bu1_bal in - let token2 = token_of_balance bu2_bal in - let Refl = - match Receipt.Token.eq token1 token2 with - | None -> assert false - | Some refl -> refl - in - assert (bu1_bal = bu2_bal) ; - match (bu1_balupd, bu2_balupd) with - | Credited bu1_am, Credited bu2_am -> - let bu_am = - match Receipt.Token.add token1 bu1_am bu2_am with - | Ok am -> am - | _ -> assert false - in - item bu1_bal (Credited bu_am) bu1_origin - | Debited bu1_am, Debited bu2_am -> - let bu_am = - match Receipt.Token.add token1 bu1_am bu2_am with - | Ok am -> am - | _ -> assert false - in - item bu1_bal (Debited bu_am) bu1_origin - | Credited _, Debited _ | Debited _, Credited _ -> assert false - -(** Check that elt has the same balance in ctxt1 and ctxt2. *) -let check_balances_are_consistent ctxt1 ctxt2 elt = - let open Lwt_result_syntax in - match elt with - | #Token.Internal_for_tests.container_with_balance as elt -> - let* _, elt_bal1 = Token.Internal_for_tests.balance ctxt1 elt in - let* _, elt_bal2 = Token.Internal_for_tests.balance ctxt2 elt in - assert (elt_bal1 = elt_bal2) ; - return_unit - | `Frozen_deposits _ | `Unstaked_frozen_deposits _ | `Invoice | `Bootstrap - | `Initial_commitments | `Minted | `Liquidity_baking_subsidies | `Burned -> - return_unit - -(** Test that [transfer_n] is equivalent to n debits followed by n credits. *) -let test_transfer_n ctxt (giver : ([< Token.container] * Tez.t) list) - (receiver : [< Token.container]) = - let open Lwt_result_syntax in - (* Run transfer_n. *) - let* ctxt1, bal_updates1 = Token.transfer_n ctxt giver receiver in - (* Debit all givers. *) - let* ctxt, debit_logs = - List.fold_left_es - (fun (ctxt, bal_updates) (giver, am) -> - let* ctxt, debit_logs = Token.transfer ctxt giver `Burned am in - return (ctxt, bal_updates @ debit_logs)) - (ctxt, []) - giver - in - (* remove burning balance updates *) - let debit_logs = - List.filter - (fun b -> - match b with - | Receipt.Balance_update_item (Burned, _, _) -> false - | _ -> true) - debit_logs - in - (* Credit the receiver for each giver. *) - let* ctxt2, credit_logs = - List.fold_left_es - (fun (ctxt, bal_updates) (_, am) -> - let* ctxt, credit_logs = Token.transfer ctxt `Minted receiver am in - return (ctxt, bal_updates @ credit_logs)) - (ctxt, []) - giver - in - (* remove minting balance updates *) - let credit_logs = - List.filter - (fun b -> - match b with - | Receipt.Balance_update_item (Minted, _, _) -> false - | _ -> true) - credit_logs - in - (* Check equivalence of balance updates. *) - let credit_logs = - match credit_logs with - | [] -> [] - | head :: tail -> [List.fold_left coalesce_balance_updates head tail] - in - assert (bal_updates1 = debit_logs @ credit_logs) ; - (* Check balances are the same in ctxt1 and ctxt2. *) - let* () = - List.(iter_es (check_balances_are_consistent ctxt1 ctxt2) (map fst giver)) - in - check_balances_are_consistent ctxt1 ctxt2 receiver - -let test_transfer_n_with_no_giver () = - let open Lwt_result_wrap_syntax in - Random.init 0 ; - let* ctxt, pkh = create_context () in - let*@ () = test_transfer_n ctxt [] `Block_fees in - let receiver = `Contract (Contract.Implicit pkh) in - let*@ () = test_transfer_n ctxt [] receiver in - return_unit - -let test_transfer_n_with_several_givers () = - let open Lwt_result_wrap_syntax in - Random.init 0 ; - let* ctxt, pkh = create_context () in - let origin = `Contract (Contract.Implicit pkh) in - let user1, _, _ = Signature.generate_key () in - let user1c = `Contract (Contract.Implicit user1) in - let user2, _, _ = Signature.generate_key () in - let user2c = `Contract (Contract.Implicit user2) in - let user3, _, _ = Signature.generate_key () in - let user3c = `Contract (Contract.Implicit user3) in - let user4, _, _ = Signature.generate_key () in - let user4c = `Contract (Contract.Implicit user4) in - (* Allocate contracts for user1, user2, user3, and user4. *) - let amount = - match Tez.of_mutez 1000L with None -> assert false | Some x -> x - in - let*@ ctxt, _ = Token.transfer ctxt origin user1c amount in - let*@ ctxt, _ = Token.transfer ctxt origin user2c amount in - let*@ ctxt, _ = Token.transfer ctxt origin user3c amount in - let*@ ctxt, _ = Token.transfer ctxt origin user4c (random_amount ()) in - let givers = - [ - (user2c, random_amount ()); - (user3c, random_amount ()); - (user4c, random_amount ()); - ] - in - let*@ () = test_transfer_n ctxt givers user1c in - let*@ () = - test_transfer_n ctxt ((user1c, random_amount ()) :: givers) user1c - in - return_unit - -let () = - register_test ~title:"transfer - balances" test_simple_balances ; - register_test ~title:"transfer - balance updates" test_simple_balance_updates ; - register_test ~title:"transfer - test allocated" test_allocated ; - register_test - ~title:"transfer - test transfer to receiver" - test_transferring_to_receiver ; - register_test - ~title:"transfer - test transfer from giver" - test_transferring_from_giver ; - register_test - ~title:"transfer - test all (givers x receivers)" - test_all_combinations_of_givers_and_receivers ; - register_test - ~title:"transfer - test from no giver to a receiver" - test_transfer_n_with_no_giver ; - register_test - ~title:"transfer - test from n givers to a receiver" - test_transfer_n_with_several_givers diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/dune b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/dune deleted file mode 100644 index fefb3bf80c8bfc5c3dc1438d7cf4f2ac4152b312..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/dune +++ /dev/null @@ -1,63 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_protocol_test_integration_validate_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - tezos-protocol-019-PtParisB.protocol - qcheck-alcotest - octez-protocol-019-PtParisB-libs.client - octez-libs.test-helpers - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.base-test-helpers - tezos-protocol-019-PtParisB.parameters - octez-protocol-019-PtParisB-libs.plugin) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_protocol_019_PtParisB - -open Tezos_client_019_PtParisB - -open Tezos_test_helpers - -open Tezos_019_PtParisB_test_helpers - -open Tezos_base_test_helpers - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_protocol_plugin_019_PtParisB) - (modules - generator_descriptors - generators - manager_operation_helpers - test_1m_restriction - test_covalidity - test_manager_operation_validation - test_mempool - test_sanity - test_validation_batch - valid_operations_generators - validate_helpers)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_integration_validate_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generator_descriptors.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generator_descriptors.ml deleted file mode 100644 index a6261135a2579cc813b19963702bdca6f2004962..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generator_descriptors.ml +++ /dev/null @@ -1,873 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Validate_helpers - -type dbl_attestation_state = { - temporary : (Block.t * Block.t) option; - slashable_preattestations : - (Kind.preattestation operation * Kind.preattestation operation) list; - slashable_attestations : - (Kind.attestation operation * Kind.attestation operation) list; -} - -type state = { - block : Block.t; - pred : Block.t option; - bootstraps : public_key_hash list; - delegates : (public_key_hash * public_key_hash option) list; - voters : Contract.t list; - seed_nonce_to_reveal : (Raw_level.t * Nonce_hash.t) list; - commitments : secret_account list; - protocol_hashes : Protocol_hash.t list; - slashable_bakes : (block_header * block_header) list; - vdf : bool; - dbl_attestation : dbl_attestation_state; - manager : Manager.infos; -} - -let init_manager_state bootstraps block = - let open Manager in - let ctxt = - { - block; - bootstraps; - originated_contract = None; - sc_rollup = None; - zk_rollup = None; - } - in - let accounts = - {sources = []; dest = None; del = None; sc = None; zk = None} - in - {ctxt; accounts; flags = all_enabled} - -let init_dbl_attestation_state = - { - temporary = None; - slashable_preattestations = []; - slashable_attestations = []; - } - -(** Initialize the state according to [state] initialisation - for each operation kind. - - When adding a new operation kind, if such an initialization is - required, it should occur here. *) -let init_state block ~voters ~(bootstraps : Contract.t list) = - let bootstraps = - List.map - (function Contract.Implicit pkh -> pkh | _ -> assert false) - bootstraps - in - { - block; - pred = None; - bootstraps; - delegates = List.map (fun pkh -> (pkh, None)) bootstraps; - voters; - seed_nonce_to_reveal = []; - commitments = []; - protocol_hashes = []; - slashable_bakes = []; - vdf = false; - dbl_attestation = init_dbl_attestation_state; - manager = init_manager_state bootstraps block; - } - -type cycle_index = On of int | From of int - -type descriptor = { - parameters : Parameters.t -> Parameters.t; - required_cycle : Parameters.t -> int; - required_block : Parameters.t -> int; - prelude : - cycle_index * (state -> (packed_operation list * state) tzresult Lwt.t); - opt_prelude : - (cycle_index * (state -> (packed_operation list * state) tzresult Lwt.t)) - option; - candidates_generator : state -> packed_operation list tzresult Lwt.t; -} - -(** Each voting period lasts a whole cycle in the generation of valid operations. *) -let voting_context_params params = - let cycles_per_voting_period = 1l in - let constants = Parameters.{params.constants with cycles_per_voting_period} in - {params with constants} - -let ballot_exploration_prelude state = - let open Lwt_result_syntax in - let* ctxt = - let+ i = Incremental.begin_construction state.block in - Incremental.alpha_ctxt i - in - let blocks_per_cycle = Alpha_context.Constants.blocks_per_cycle ctxt in - let rem = - Int32.rem state.block.Block.header.Block_header.shell.level blocks_per_cycle - in - if rem = 0l then - match state.voters with - | voter :: voters -> - let* prop = Op.proposals (B state.block) voter [get_n protos 0] in - let* props = - List.map_es - (fun voter -> - Op.proposals (B state.block) voter [Protocol_hash.zero]) - voters - in - return (prop :: props, state) - | _ -> assert false - else return ([], state) - -let activate_descriptor = - let open Lwt_result_syntax in - { - parameters = - (fun params -> - let commitments = - List.map - (fun {blinded_public_key_hash; amount; _} -> - Commitment.{blinded_public_key_hash; amount}) - secrets - in - {params with commitments}); - required_cycle = (fun _params -> 1); - required_block = (fun _params -> 0); - prelude = - (On 1, fun state -> return ([], {state with commitments = secrets})); - opt_prelude = None; - candidates_generator = - (fun state -> - let gen s = - Op.activation (B state.block) (Ed25519 s.account) s.activation_code - in - List.map_es gen state.commitments); - } - -(** During the first voting period in the setup of valid operations generations, - a proposal must win the proposal period -- hence [ballot_exploration_prelude] - takes place during the first cycle. *) -let ballot_exploration_descriptor = - { - parameters = voting_context_params; - required_cycle = - (fun params -> Int32.to_int params.constants.cycles_per_voting_period); - required_block = (fun _params -> 0); - prelude = (On 1, ballot_exploration_prelude); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen contract = - let* voting_period_info = - Context.Vote.get_current_period (B state.block) - in - assert (voting_period_info.voting_period.kind = Exploration) ; - let ballot = pick_one ballots in - Op.ballot (B state.block) contract Protocol_hash.zero ballot - in - List.map_es gen state.voters); - } - -let proposal_descriptor = - let open Lwt_result_syntax in - { - parameters = voting_context_params; - required_cycle = (fun _ -> 0); - required_block = (fun _ -> 0); - prelude = - (On 0, fun state -> return ([], {state with protocol_hashes = protos})); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen contract = - let* voting_period_info = - Context.Vote.get_current_period (B state.block) - in - assert (voting_period_info.voting_period.kind = Proposal) ; - Op.proposals (B state.block) contract [Protocol_hash.zero] - in - List.map_es gen state.voters); - } - -(** [Promotion] is the 4th voting period, it requires 3 voting period - to last and be successful. [voting_context_params] set a - voting_period to 1 cycle. To generate a [Ballot] for this - promotion period: - - - the first period should conclude in a proposal wining -- 3 cycles - before generating the [Ballot], the proposal period must succeed:[ - ballot_exploration_prelude], - - - the exploration must conclude in a supermajority for this - proposal -- 2 cycles before generating the [Ballot], the - exploration period must succeed., and - - - the cooldown must last -- 1 cycle before generating the - [Ballot]. *) -let ballot_promotion_descriptor = - { - parameters = voting_context_params; - required_cycle = - (fun params -> 3 * Int32.to_int params.constants.cycles_per_voting_period); - required_block = (fun _ -> 0); - prelude = (On 3, ballot_exploration_prelude); - opt_prelude = - Some - ( On 2, - fun state -> - let open Lwt_result_syntax in - let* ctxt = - let+ incr = Incremental.begin_construction state.block in - Incremental.alpha_ctxt incr - in - let blocks_per_cycle = - Alpha_context.Constants.blocks_per_cycle ctxt - in - let rem = - Int32.rem - state.block.Block.header.Block_header.shell.level - blocks_per_cycle - in - if rem = 0l then - let* ops = - List.map_es - (fun voter -> - Op.ballot (B state.block) voter Protocol_hash.zero Vote.Yay) - state.voters - in - return (ops, state) - else return ([], state) ); - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen contract = - let* voting_period_info = - Context.Vote.get_current_period (B state.block) - in - assert (voting_period_info.voting_period.kind = Promotion) ; - let ballot = Stdlib.List.hd ballots in - Op.ballot (B state.block) contract Protocol_hash.zero ballot - in - List.map_es gen state.voters); - } - -let seed_nonce_descriptor = - { - parameters = - (fun params -> - assert (params.constants.blocks_per_cycle > 3l) ; - let blocks_per_commitment = - Int32.(div params.constants.blocks_per_cycle 3l) - in - let constants = {params.constants with blocks_per_commitment} in - {params with constants}); - required_cycle = (fun _ -> 1); - required_block = (fun _ -> 0); - prelude = - ( On 1, - fun state -> - let open Lwt_result_syntax in - let b = state.block in - let* seed_nonce_to_reveal = - match - b.Block.header.Block_header.protocol_data.contents.seed_nonce_hash - with - | None -> return state.seed_nonce_to_reveal - | Some nonce_hash -> - let level = - Raw_level.of_int32_exn b.Block.header.Block_header.shell.level - in - return ((level, nonce_hash) :: state.seed_nonce_to_reveal) - in - return ([], {state with seed_nonce_to_reveal}) ); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen (level, nonce_hash) = - assert (List.length state.seed_nonce_to_reveal >= 3) ; - let nonce = - WithExceptions.Option.to_exn ~none:Not_found - @@ Registered_nonces.get nonce_hash - in - return (Op.seed_nonce_revelation (B state.block) level nonce) - in - List.map_es gen state.seed_nonce_to_reveal); - } - -(** The heads on which two slashable attestations or preattestation - should be made are from the previous level. Hence, the temporary - field of a double_evidence_state is used to transmit them to the - next level in order to make the slashable operations. *) -let register_temporary ba bb state : (Block.t * Block.t) option * state = - let pred_forks = state.dbl_attestation.temporary in - let temporary = Some (ba, bb) in - let dbl_attestation = {state.dbl_attestation with temporary} in - (pred_forks, {state with dbl_attestation}) - -(** During the slashable period, at each level, two different heads - for the same round are baked by the same baker. At the next level, - a delegate that either preattests or attests both heads makes a - pair of slashable pre- or attestations. - - The pair of heads is placed in the temporary of the - double_evidence_state. If a pair of heads was already in this - field, hence they were baked at the previous level. - - Consequently, two pairs of slashable operations: two attestations - and two preattestation, can be made by two distinct attestations. Each - pair is ordered in operation_hash order. Consequently, each pair - can appear in a denunciation operation and will be valid. *) -let dbl_attestation_prelude state = - let open Lwt_result_syntax in - let* head_A = Block.bake ~policy:(By_round 0) state.block in - let* addr = pick_addr_attester (B state.block) in - let ctr = Contract.Implicit addr in - let* operation = Op.transaction (B state.block) ctr ctr Tez.one_mutez in - let* head_B = Block.bake ~policy:(By_round 0) state.block ~operation in - let heads, state = register_temporary head_A head_B state in - match heads with - | None -> return ([], state) - | Some (b1, b2) -> - let* delegate1, delegate2 = pick_two_attesters (B b1) in - let* op1 = Op.raw_preattestation ~delegate:delegate1 b1 in - let* op2 = Op.raw_preattestation ~delegate:delegate1 b2 in - let op1, op2 = - let comp = - Operation_hash.compare (Operation.hash op1) (Operation.hash op2) - in - assert (comp <> 0) ; - if comp < 0 then (op1, op2) else (op2, op1) - in - let slashable_preattestations = - (op1, op2) :: state.dbl_attestation.slashable_preattestations - in - let* op3 = Op.raw_attestation ~delegate:delegate2 b1 in - let* op4 = Op.raw_attestation ~delegate:delegate2 b2 in - let op3, op4 = - let comp = - Operation_hash.compare (Operation.hash op3) (Operation.hash op4) - in - assert (comp <> 0) ; - if comp < 0 then (op3, op4) else (op4, op3) - in - let slashable_attestations = - (op3, op4) :: state.dbl_attestation.slashable_attestations - in - let dbl_attestation = - { - state.dbl_attestation with - slashable_preattestations; - slashable_attestations; - } - in - return ([], {state with dbl_attestation}) - -let double_consensus_descriptor = - { - parameters = Fun.id; - required_cycle = (fun _params -> 2); - required_block = (fun _ -> 0); - prelude = (From 2, dbl_attestation_prelude); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen_dbl_pre (op1, op2) = - Op.double_preattestation (Context.B state.block) op1 op2 - in - let gen_dbl_end (op1, op2) = - Op.double_attestation (Context.B state.block) op1 op2 - in - let candidates_pre = - List.map gen_dbl_pre state.dbl_attestation.slashable_preattestations - in - let candidates_end = - List.map gen_dbl_end state.dbl_attestation.slashable_attestations - in - return (candidates_pre @ candidates_end)); - } - -let double_baking_descriptor = - { - parameters = Fun.id; - required_cycle = (fun _params -> Constants_repr.max_slashing_period); - required_block = (fun _ -> 0); - prelude = - ( From 2, - fun state -> - let open Lwt_result_syntax in - let order_block_header bh1 bh2 = - let hash1 = Block_header.hash bh1 in - let hash2 = Block_header.hash bh2 in - let c = Block_hash.compare hash1 hash2 in - if c < 0 then (bh1, bh2) else (bh2, bh1) - in - let* ctxt = - let+ incr = Incremental.begin_construction state.block in - Incremental.alpha_ctxt incr - in - let blocks_per_cycle = - Alpha_context.Constants.blocks_per_cycle ctxt - in - let rem = - Int32.rem - state.block.Block.header.Block_header.shell.level - blocks_per_cycle - in - if rem = 0l then return ([], state) - else - let* baker1, _baker2 = - Context.get_first_different_bakers (B state.block) - in - let* addr = pick_addr_attester (B state.block) in - let ctr = Contract.Implicit addr in - let* operation = - Op.transaction (B state.block) ctr ctr Tez.one_mutez - in - let* ba = - Block.bake ~policy:(By_account baker1) ~operation state.block - in - let* bb = Block.bake ~policy:(By_account baker1) state.block in - let ba, bb = order_block_header ba.Block.header bb.Block.header in - let slashable_bakes = (ba, bb) :: state.slashable_bakes in - return ([], {state with slashable_bakes}) ); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen (bh1, bh2) = - return (Op.double_baking (B state.block) bh1 bh2) - in - List.map_es gen state.slashable_bakes); - } - -(** A drain delegate operation is valid when, preserved_cycle before, the - delegate has updated its key. This key must then has enough fund in order to - be revealed. - - At the first level of preserved cycle in the past, the key is funded by a - bootstrap account. At the second level, it reveals and at the third the - delegate updates its key to this key. *) -let drain_delegate_prelude state = - let open Lwt_result_syntax in - let* ctxt = - let+ incr = Incremental.begin_construction state.block in - Incremental.alpha_ctxt incr - in - let blocks_per_cycle = Alpha_context.Constants.blocks_per_cycle ctxt in - let rem = - Int32.rem state.block.Block.header.Block_header.shell.level blocks_per_cycle - in - if rem = 0l then - (* Create (n / 2) consensus keys *) - let delegates = - List.mapi - (fun i -> function - | (delegate, None) as del -> - if i mod 2 = 0 then - let acc = Account.new_account () in - (delegate, Some acc.pkh) - else del - | del -> del (* should not happen but apparently does...*)) - state.delegates - in - let dels = - List.filter_map - (function _del, None -> None | del, Some ck -> Some (del, ck)) - delegates - in - let* ops = - List.fold_left_es - (fun ops (del, ck) -> - let* {Account.pk; _} = Account.find ck in - let* op = - Op.update_consensus_key (B state.block) (Contract.Implicit del) pk - in - return (op :: ops)) - [] - dels - in - let state = {state with delegates} in - return (ops, state) - else return ([], state) - -let drain_delegate_descriptor = - { - parameters = Fun.id; - required_cycle = (fun params -> params.constants.consensus_rights_delay + 1); - required_block = (fun _ -> 0); - prelude = - ( On (init_params.constants.consensus_rights_delay + 1), - drain_delegate_prelude ); - opt_prelude = None; - candidates_generator = - (fun state -> - let gen (delegate, consensus_key_opt) = - let open Lwt_result_syntax in - match consensus_key_opt with - | None -> return_none - | Some consensus_key -> - let* op = - Op.drain_delegate - (B state.block) - ~consensus_key - ~delegate - ~destination:consensus_key - in - return_some op - in - List.filter_map_es gen state.delegates); - } - -let vdf_revelation_descriptor = - let open Lwt_result_syntax in - { - parameters = - (fun params -> - {params with constants = {params.constants with vdf_difficulty = 750L}}); - required_cycle = (fun _ -> 1); - required_block = - (fun params -> Int32.to_int params.constants.nonce_revelation_threshold); - prelude = (On 2, fun state -> return ([], {state with vdf = true})); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let* seed_status = Context.get_seed_computation (B state.block) in - let* csts = Context.get_constants (B state.block) in - match seed_status with - | Nonce_revelation_stage | Computation_finished -> assert false - | Vdf_revelation_stage info -> - (* generate the VDF discriminant and challenge *) - let discriminant, challenge = - Alpha_context.Seed.generate_vdf_setup - ~seed_discriminant:info.seed_discriminant - ~seed_challenge:info.seed_challenge - in - (* compute the VDF solution (the result and the proof ) *) - let solution = - (* generate the result and proof *) - Environment.Vdf.prove - discriminant - challenge - csts.parametric.vdf_difficulty - in - return [Op.vdf_revelation (B state.block) solution]); - } - -let preattestation_descriptor = - let open Lwt_result_syntax in - { - parameters = Fun.id; - required_cycle = (fun _ -> 1); - required_block = (fun _ -> 1); - prelude = (On 1, fun state -> return ([], state)); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen (delegate, ck_opt) = - let* slots_opt = Context.get_attester_slot (B state.block) delegate in - let delegate = Option.value ~default:delegate ck_opt in - match slots_opt with - | None -> return_none - | Some slots -> ( - match slots with - | [] -> return_none - | _ :: _ -> - let* op = Op.preattestation ~delegate state.block in - return_some op) - in - List.filter_map_es gen state.delegates); - } - -let attestation_descriptor = - let open Lwt_result_syntax in - { - parameters = Fun.id; - required_cycle = (fun _ -> 1); - required_block = (fun _ -> 1); - prelude = (On 1, fun state -> return ([], state)); - opt_prelude = None; - candidates_generator = - (fun state -> - let open Lwt_result_syntax in - let gen (delegate, ck_opt) = - let* slots_opt = Context.get_attester_slot (B state.block) delegate in - let delegate = Option.value ~default:delegate ck_opt in - match slots_opt with - | None -> return_none - | Some slots -> ( - match slots with - | [] -> return_none - | _ :: _ -> - let* op = Op.attestation ~delegate state.block in - return_some op) - in - List.filter_map_es gen state.delegates); - } - -module Manager = Manager_operation_helpers - -let required_nb_account = 7 - -(** Convertion from [manager_state] to a {! Manager_operation_helper.infos}. *) -let infos_of_state source block infos : Manager.infos = - let open Manager in - let ({ctxt; accounts; flags} : infos) = infos in - let ctxt : ctxt = {ctxt with block} in - let accounts = {accounts with sources = [source]} in - {ctxt; accounts; flags} - -(** Updating a [manager_state] according to a {! Manager_operation_helper.infos}. *) -let update_state_with_infos {Manager.ctxt; accounts; flags} - {Manager.ctxt = ctxt2; accounts = accounts2; _} = - let ctxt = - { - ctxt with - originated_contract = ctxt2.originated_contract; - sc_rollup = ctxt2.sc_rollup; - zk_rollup = ctxt2.zk_rollup; - } - in - let accounts = - { - accounts with - dest = accounts2.dest; - del = accounts2.del; - sc = accounts2.sc; - zk = accounts2.zk; - } - in - {Manager.ctxt; accounts; flags} - -(** According to a [Manager.infos] and a block [b], create and fund - the required contracts and accounts on [b]. In additions to the - initiation performed by {! Manager_operation_helper.init_infos}, it - registers a list of funded sources. *) -let manager_prelude (infos : Manager.infos) b = - let open Lwt_result_syntax in - let nb_sources = List.length infos.ctxt.bootstraps in - let* ops_by_bootstrap = - List.map_es - (fun bootstrap -> - let bootstrap = Contract.Implicit bootstrap in - let* counter = Context.Contract.counter (B b) bootstrap in - return (bootstrap, counter, [])) - (List.take_n nb_sources infos.ctxt.bootstraps) - in - let add bootstrap counter ops ops_by_bootstrap = - List.map - (fun (bootstrap', counter', ops') -> - if bootstrap' = bootstrap then - (bootstrap, Manager_counter.succ counter, ops) - else (bootstrap', counter', ops')) - ops_by_bootstrap - in - let batches block ops_by_bootstrap = - List.fold_left_es - (fun acc (source, _counter, operations) -> - match operations with - | [] -> return (List.rev acc) - | _ -> - let* batch = Op.batch_operations ~source (B block) operations in - return (batch :: acc)) - [] - ops_by_bootstrap - in - let create_and_fund sources ops_by_bootstrap = - let account = Account.new_account () in - let n = nb_sources - Stdlib.List.length sources in - let bootstrap, counter, ops = Stdlib.List.nth ops_by_bootstrap (n - 1) in - let amount = Tez.of_mutez (Int64.of_int 150000) in - let+ op, counter = - Manager.fund_account_op b bootstrap account.pkh amount counter - in - (account :: sources, add bootstrap counter (op :: ops) ops_by_bootstrap) - in - let* sources, src_operations = - List.fold_left_es - (fun (acc_accounts, acc_ops) _ -> create_and_fund acc_accounts acc_ops) - ([], ops_by_bootstrap) - (1 -- nb_sources) - in - let* operations = batches b src_operations in - let infos = {infos with accounts = {infos.accounts with sources}} in - let* infos2 = - Manager.init_infos - Manager.ctxt_req_default - b - (List.take_n required_nb_account infos.ctxt.bootstraps) - in - let state = update_state_with_infos infos infos2 in - return (operations, state) - -(** Build a manager operation according to the information in [infos] - on [block] for each source in the [manager_state] guaranteeing - that they are not conflicting. *) -let manager_candidates block infos batch_max_size = - let open Lwt_result_syntax in - let params = - List.map - (fun src -> - let m = gen_bounded_int 1 batch_max_size in - let kd = pick_n m Manager.revealed_subjects in - (src, kd)) - infos.Manager.accounts.sources - in - let gen (source, ks) = - let infos = infos_of_state source block infos in - let* reveal = - Manager.mk_reveal (Manager.operation_req_default Manager.K_Reveal) infos - in - let* operations = - List.map_es - (fun kd -> Manager.select_op (Manager.operation_req_default kd) infos) - ks - in - let* operations = return (reveal :: operations) in - Op.batch_operations - ~recompute_counters:true - ~source:(Contract.Implicit source.pkh) - (B block) - operations - in - List.map_es gen params - -let manager_descriptor max_batch_size nb_accounts = - { - parameters = - (fun params -> - let ctxt_req_default = Manager.ctxt_req_default in - let hard_gas_limit_per_block = - Some (Gas.Arith.integral_of_int_exn ((nb_accounts + 1) * 5_200_000)) - in - let ctxt_req = {ctxt_req_default with hard_gas_limit_per_block} in - Manager.manager_parameters params ctxt_req); - required_cycle = (fun _ -> 1); - required_block = (fun _ -> 1); - prelude = - ( On 1, - fun state -> - let open Lwt_result_syntax in - let* ops, manager = manager_prelude state.manager state.block in - let state = {state with manager} in - return (ops, state) ); - opt_prelude = None; - candidates_generator = - (fun state -> manager_candidates state.block state.manager max_batch_size); - } - -type op_kind = - | KAttestation - | KPreattestation - | KBallotExp - | KBallotProm - | KProposals - | KNonce - | KVdf - | KActivate - | KDbl_consensus - | KDbl_baking - | KDrain - | KManager - -let op_kind_of_packed_operation op = - let (Operation_data {contents; _}) = op.protocol_data in - match contents with - | Single (Preattestation _) -> KPreattestation - | Single (Attestation _) -> KAttestation - | Single (Seed_nonce_revelation _) -> KNonce - | Single (Vdf_revelation _) -> KVdf - | Single (Double_attestation_evidence _) -> KDbl_consensus - | Single (Double_preattestation_evidence _) -> KDbl_consensus - | Single (Double_baking_evidence _) -> KDbl_baking - | Single (Activate_account _) -> KActivate - | Single (Proposals _) -> KProposals - | Single (Ballot _) -> KBallotExp - | Single (Drain_delegate _) -> KDrain - | Single (Manager_operation _) -> KManager - | Cons (Manager_operation _, _) -> KManager - | Single (Failing_noop _) -> assert false - -let pp_op_kind fmt kind = - Format.fprintf - fmt - (match kind with - | KManager -> "manager" - | KAttestation -> "attestation" - | KPreattestation -> "preattestation" - | KBallotExp -> "ballot" - | KBallotProm -> "ballot" - | KProposals -> "proposals" - | KNonce -> "nonce" - | KVdf -> "vdf_revelation" - | KActivate -> "activate_account" - | KDbl_consensus -> "double_consensus" - | KDbl_baking -> "double_baking" - | KDrain -> "drain_delegate") - -let descriptor_of ~nb_bootstrap ~max_batch_size = function - | KManager -> manager_descriptor max_batch_size nb_bootstrap - | KAttestation -> attestation_descriptor - | KPreattestation -> preattestation_descriptor - | KBallotExp -> ballot_exploration_descriptor - | KBallotProm -> ballot_promotion_descriptor - | KProposals -> proposal_descriptor - | KNonce -> seed_nonce_descriptor - | KVdf -> vdf_revelation_descriptor - | KActivate -> activate_descriptor - | KDbl_consensus -> double_consensus_descriptor - | KDbl_baking -> double_baking_descriptor - | KDrain -> drain_delegate_descriptor - -let descriptors_of ~nb_bootstrap ~max_batch_size = - List.map (descriptor_of ~nb_bootstrap ~max_batch_size) - -(** A context is in a unique voting period. *) -let voting_kinds = [KProposals; KBallotExp; KBallotProm] - -(** A context either wait for nonce revelation or vdf revelation - but not both at the same time. *) -let nonce_generation_kinds = [KNonce; KVdf] - -(** All kind list, used in the sanity check.*) -let non_exclusive_kinds = - [ - KManager; - KAttestation; - KPreattestation; - KActivate; - KDbl_consensus; - KDbl_baking; - KDrain; - ] - -let all_kinds = voting_kinds @ nonce_generation_kinds @ non_exclusive_kinds diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generator_descriptors.mli b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generator_descriptors.mli deleted file mode 100644 index f9931fee84e2f19cfd9933ee8cf9d0e1a4f9a6be..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generator_descriptors.mli +++ /dev/null @@ -1,161 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Validate_helpers - -(** {2 Generation state} *) - -(** The state to generate valid double pre- and attestation evidence - contains a temporary state for making the slashable evidence, and - the lists of slashables operations, one for each kind: - preattestation and attestation. *) -type dbl_attestation_state = { - temporary : (Block.t * Block.t) option; - slashable_preattestations : - (Kind.preattestation operation * Kind.preattestation operation) list; - slashable_attestations : - (Kind.attestation operation * Kind.attestation operation) list; -} - -(** Generic generation state collecting - information to generate any kind of operation. - - For example, {!Manager.infos} for manager - or voters (Contract.t list) for voting operations... - - When adding a new operation kind, [state] might be extended if a - new kind of information is required for this new kind valid - operations generation. *) -type state = { - block : Block.t; - pred : Block.t option; - bootstraps : public_key_hash list; - delegates : (public_key_hash * public_key_hash option) list; - voters : Contract.t list; - seed_nonce_to_reveal : (Raw_level.t * Nonce_hash.t) list; - commitments : secret_account list; - protocol_hashes : Protocol_hash.t list; - slashable_bakes : (block_header * block_header) list; - vdf : bool; - dbl_attestation : dbl_attestation_state; - manager : Manager.infos; -} - -(** The initialization of a [state] requires the [voters] contracts -- - the contracts allowed to vote -- and the [bootstraps] contracts. *) -val init_state : - Block.t -> voters:Contract.t list -> bootstraps:Contract.t list -> state - -(** {2 Descriptor for valid operations generation} *) - -(** Each prelude action either takes place on a specific cycle or - from a specific cycle to the end a the context setting. *) -type cycle_index = On of int | From of int - -(** Descriptors are specific to operation kinds, [op_kind]. A - descriptor provides the information and functions used in the - context setup to generate valid operations of its kind and a - generator for such operations. - - - [parameters] enables setting constants in the initial context. - - - [required_cycle] is the number of cycles in the context setup - before generating valid operations of this kind. - - - [required_block] the number of blocks in the last cycle. - - - [prelude] is a set of actions that either gather information in - the setup [state] or perform operations in the setup blocks or both - that have to be performed according to a [cycle_index]. - - - [opt_prelude] is an optional prelude. - - - [candidates_generator] generates operations of the descriptor - [op_kind] according to the information in [state] that are valid - upon [state.block]. *) -type descriptor = { - parameters : Parameters.t -> Parameters.t; - required_cycle : Parameters.t -> int; - required_block : Parameters.t -> int; - prelude : - cycle_index * (state -> (packed_operation list * state) tzresult Lwt.t); - opt_prelude : - (cycle_index * (state -> (packed_operation list * state) tzresult Lwt.t)) - option; - candidates_generator : state -> packed_operation list tzresult Lwt.t; -} - -(** {2 Operation kinds} *) - -(** When adding a new operation: - - a new op_kind [k] should extend the [op_kind] type, - - a [descriptor] defined, - - [descriptor_of] must associate this new descriptor to [k], - - [k] must be added to [all_kinds], - - If the validity of [k] operations is not exclusive with the - validity of other [op_kind], [k] must be added to - [non_exclusive_kinds]. Otherwise, see, for example, how voting - operation op_kinds are handled in {! test_covalidity.tests}. *) -type op_kind = - | KAttestation - | KPreattestation - | KBallotExp - | KBallotProm - | KProposals - | KNonce - | KVdf - | KActivate - | KDbl_consensus - | KDbl_baking - | KDrain - | KManager - -val pp_op_kind : Format.formatter -> op_kind -> unit - -(** This sanity function returns the [op_kind] associated to - an [packed_operation].*) -val op_kind_of_packed_operation : packed_operation -> op_kind - -(** Associate to each [op_kind] a [descriptor]. Some descriptors are - parametrized by the number of bootstraps and the maximum size of a - batch.*) -val descriptor_of : - nb_bootstrap:int -> max_batch_size:int -> op_kind -> descriptor - -(** Given a list of [op_kind] returns the list of corresponding - descriptors as provided by [descriptor_of] for each [op_kind]. - Some descriptors are parametrized by the number of bootstraps and - the maximum size of a batch.*) -val descriptors_of : - nb_bootstrap:int -> max_batch_size:int -> op_kind list -> descriptor list - -(** List of all [op_kind] that are non exclusive (i.e. no voting -operation kind or nonce revelation kind) *) -val non_exclusive_kinds : op_kind trace - -(** List of all [op_kind] used for sanity check. *) -val all_kinds : op_kind list diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generators.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generators.ml deleted file mode 100644 index 60f1659e74a4bb9311b308435bb84fb1cfc44efd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/generators.ml +++ /dev/null @@ -1,258 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Manager_operation_helpers - -let lwt_run f = - match Lwt_main.run f with - | Error err -> - QCheck.Test.fail_reportf "@.Lwt_main.run error: %a@." pp_print_trace err - | Ok v -> v - -(** {2 Datatypes} *) - -(** Constraints on generated values. - - {ul - {li [Free] states that nothing has to be generated} - - {li [Pure n] generate n} - - {li [Less {n;origin}] (resp Greater) states the expected - constraints for the generated values that must be lesser (resp - greater) than [n] and shrink toward [origin] in case of error} - - {li [Range {min;max;origin}] states the expected constraints for - the generated values that must be between [min] and [max] and - shrink toward [origin] in case of error.}} *) -type cstrs = - | Free - | Pure of int - | Less of {n : int; origin : int} - | Greater of {n : int; origin : int} - | Range of {min : int; max : int; origin : int} - -(** Gas frequency. *) -type gas_freq = { - low : int; - max : int; - high : int; - zero : int; - custom : int * cstrs; -} - -(** Operation constraints. *) -type operation_cstrs = { - counter : cstrs; - fee : cstrs; - gas_limit : gas_freq; - storage_limit : cstrs; - force_reveal : bool option; - amount : cstrs; -} - -(** Context constraints. *) -type ctxt_cstrs = { - hard_gas_limit_per_block : cstrs; - src_cstrs : cstrs; - dest_cstrs : cstrs; - del_cstrs : cstrs; - sc_cstrs : cstrs; - zk_cstrs : cstrs; -} -(** {2 Default values} *) - -(** Default constraint. *) -let default_cstrs = Free - -(** Default gas frequency. *) -let default_gas_freq = - {low = 0; max = 0; high = 1; zero = 0; custom = (0, Free)} - -(** Default constraints for operation. *) -let default_operation_cstrs = - { - counter = default_cstrs; - fee = default_cstrs; - gas_limit = default_gas_freq; - storage_limit = default_cstrs; - force_reveal = None; - amount = default_cstrs; - } - -(** Default constraints for context. *) -let default_ctxt_cstrs = - { - hard_gas_limit_per_block = default_cstrs; - src_cstrs = default_cstrs; - dest_cstrs = default_cstrs; - del_cstrs = default_cstrs; - sc_cstrs = default_cstrs; - zk_cstrs = default_cstrs; - } - -(** {2 Generators} *) - -(** Generator of positive integers. *) -let gen_pos : cstrs -> int option QCheck2.Gen.t = - fun c -> - let open QCheck2.Gen in - match c with - | Free -> pure None - | Pure n -> pure (Some n) - | Less {n; origin} -> - let+ v = int_range ~origin 0 n in - Some v - | Greater {n; origin} -> - let+ v = int_range ~origin n max_int in - Some v - | Range {min; max; origin} -> - let+ v = int_range ~origin min max in - Some v - -(** Generator for Z.t that is used for gas limit. *) -let gen_z : cstrs -> Z.t option QCheck2.Gen.t = - fun cstrs -> - let open QCheck2.Gen in - let+ v = gen_pos cstrs in - Option.map Z.of_int v - -(** Generator for Manager_counter.t. *) -let gen_counter : cstrs -> Manager_counter.t option QCheck2.Gen.t = - fun cstrs -> - let open QCheck2.Gen in - let+ v = gen_pos cstrs in - Option.map Manager_counter.Internal_for_tests.of_int v - -(** Generator for Tez.t. *) -let gen_tez : cstrs -> Tez.t option QCheck2.Gen.t = - fun cstrs -> - let open QCheck2.Gen in - let+ amount = gen_pos cstrs in - match amount with - | Some amount -> - let amount = Int64.of_int amount in - Tez.of_mutez amount - | None -> None - -(** Generator for gas integral. *) -let gen_gas_integral : cstrs -> Gas.Arith.integral option QCheck2.Gen.t = - fun cstrs -> - let open QCheck2.Gen in - let+ v = gen_pos cstrs in - Option.map Gas.Arith.integral_of_int_exn v - -(** Generator for Op.gas_limit. *) -let gen_gas_limit : gas_freq -> Op.gas_limit option QCheck2.Gen.t = - fun gas_freq -> - let open QCheck2.Gen in - frequency - [ - (gas_freq.low, return (Some Op.Low)); - (gas_freq.max, return (Some Op.Max)); - (gas_freq.high, return (Some Op.High)); - (gas_freq.zero, return (Some Op.Zero)); - (let freq, cstrs = gas_freq.custom in - ( freq, - let+ gas = gen_gas_integral cstrs in - match gas with None -> None | Some g -> Some (Op.Custom_gas g) )); - ] - -(** Generator for manager_operation_kind. *) -let gen_kind : - manager_operation_kind list -> manager_operation_kind QCheck2.Gen.t = - fun subjects -> QCheck2.Gen.oneofl subjects - -(** Generator for mode. *) -let gen_mode : mode QCheck2.Gen.t = - QCheck2.Gen.oneofl [Construction; Mempool; Application] - -(** Generator for operation requirements. *) -let gen_operation_req : - operation_cstrs -> - manager_operation_kind list -> - operation_req QCheck2.Gen.t = - fun {counter; fee; gas_limit; storage_limit; force_reveal; amount} subjects -> - let open QCheck2.Gen in - let* kind = gen_kind subjects in - let* counter = gen_counter counter in - let* fee = gen_tez fee in - let* gas_limit = gen_gas_limit gas_limit in - let* storage_limit = gen_z storage_limit in - let+ amount = gen_tez amount in - {kind; counter; fee; gas_limit; storage_limit; force_reveal; amount} - -(** Generator for a pair of operations with the same source and - sequential counters.*) -let gen_2_operation_req : - operation_cstrs -> - manager_operation_kind list -> - (operation_req * operation_req) QCheck2.Gen.t = - fun op_cstrs subjects -> - let open QCheck2.Gen in - let* op1 = - gen_operation_req {op_cstrs with force_reveal = Some true} subjects - in - let counter = - match op1.counter with - | Some x -> Manager_counter.Internal_for_tests.to_int x - | None -> 1 - in - let op_cstr = - { - {op_cstrs with counter = Pure (counter + 2)} with - force_reveal = Some false; - } - in - let+ op2 = gen_operation_req op_cstr subjects in - (op1, op2) - -(** Generator for context requirement. *) -let gen_ctxt_req : ctxt_cstrs -> ctxt_req QCheck2.Gen.t = - fun { - hard_gas_limit_per_block; - src_cstrs; - dest_cstrs; - del_cstrs; - sc_cstrs; - zk_cstrs; - } -> - let open QCheck2.Gen in - let* hard_gas_limit_per_block = gen_gas_integral hard_gas_limit_per_block in - let* fund_src = gen_tez src_cstrs in - let* fund_dest = gen_tez dest_cstrs in - let* fund_del = gen_tez del_cstrs in - let* fund_sc = gen_tez sc_cstrs in - let+ fund_zk = gen_tez zk_cstrs in - { - hard_gas_limit_per_block; - fund_src; - fund_dest; - fund_del; - reveal_accounts = true; - fund_sc; - fund_zk; - flags = all_enabled; - } - -(** {2 Wrappers} *) - -let wrap ~name ?print ?(count = 1) ?check ~(gen : 'a QCheck2.Gen.t) - (f : 'a -> bool tzresult Lwt.t) = - Qcheck2_helpers.qcheck_make_result_lwt - ~name - ?print - ~count - ?check - ~extract:Lwt_main.run - ~pp_error:pp_print_trace - ~gen - f - -let wrap_mode infos op mode = validate_diagnostic ~mode infos op diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/manager_operation_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/manager_operation_helpers.ml deleted file mode 100644 index 069adeb22330aff8ac848cabd9fcad556b3a5508..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/manager_operation_helpers.ml +++ /dev/null @@ -1,1408 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Tez_helpers - -(** {2 Constants} *) - -(** Hard gas limit *) - -let gb_limit = Gas.Arith.(integral_of_int_exn 100_000) - -let half_gb_limit = Gas.Arith.(integral_of_int_exn 50_000) - -let default_fund = Tez.of_mutez_exn 400_000_000_000L - -(** {2 Datatypes} *) - -(** Context abstraction in a test. *) -type ctxt = { - block : Block.t; - bootstraps : public_key_hash list; - originated_contract : Contract_hash.t option; - sc_rollup : Sc_rollup.t option; - zk_rollup : Zk_rollup.t option; -} - -(** Accounts manipulated in the tests. By convention, each field name - specifies the role of the account in a test. It is the case in most - of the tests. In operations smart contructors, it happens that in - impossible case, [source] is used as a dummy value. In some test that - requires a second source, [del] will be used as the second source. *) -type accounts = { - sources : Account.t list; - dest : Account.t option; - del : Account.t option; - sc : Account.t option; - zk : Account.t option; -} - -(** Feature flags requirements for a context setting for a test. *) -type feature_flags = {dal : bool; scoru_arith : bool; zkru : bool} - -(** Infos describes the information of the setting for a test: the - context and used accounts. *) -type infos = {ctxt : ctxt; accounts : accounts; flags : feature_flags} - -(** This type should be extended for each new manager_operation kind - added in the protocol. See - [test_manager_operation_validation.ensure_kind] for more - information on how we ensure that this type is extended for each - new manager_operation kind. *) -type manager_operation_kind = - | K_Transaction - | K_Origination - | K_Register_global_constant - | K_Delegation - | K_Undelegation - | K_Self_delegation - | K_Set_deposits_limit - | K_Update_consensus_key - | K_Increase_paid_storage - | K_Reveal - | K_Transfer_ticket - | K_Sc_rollup_origination - | K_Sc_rollup_publish - | K_Sc_rollup_cement - | K_Sc_rollup_add_messages - | K_Sc_rollup_refute - | K_Sc_rollup_timeout - | K_Sc_rollup_execute_outbox_message - | K_Sc_rollup_recover_bond - | K_Dal_publish_commitment - | K_Zk_rollup_origination - | K_Zk_rollup_publish - | K_Zk_rollup_update - -(** The requirements for a tested manager operation. *) -type operation_req = { - kind : manager_operation_kind; - counter : Manager_counter.t option; - fee : Tez.t option; - gas_limit : Op.gas_limit option; - storage_limit : Z.t option; - force_reveal : bool option; - amount : Tez.t option; -} - -(** The requirements for a context setting for a test. *) -type ctxt_req = { - hard_gas_limit_per_block : Gas.Arith.integral option; - fund_src : Tez.t option; - fund_dest : Tez.t option; - fund_del : Tez.t option; - reveal_accounts : bool; - fund_sc : Tez.t option; - fund_zk : Tez.t option; - flags : feature_flags; -} - -(** Validation mode. - - FIXME: https://gitlab.com/tezos/tezos/-/issues/3365 - This type should be replaced by the one defined - in validation, type mode in `validate_operation`, when it would - include the distinction between Contruction and Application. *) -type mode = Construction | Mempool | Application - -(** {2 Default values} *) -let all_enabled = {dal = true; scoru_arith = true; zkru = true} - -let disabled_dal = {all_enabled with dal = false} - -let disabled_scoru_arith = {all_enabled with scoru_arith = false} - -let disabled_zkru = {all_enabled with zkru = false} - -let ctxt_req_default_to_flag flags = - { - hard_gas_limit_per_block = None; - fund_src = Some default_fund; - fund_dest = Some Tez.one; - fund_del = Some default_fund; - reveal_accounts = true; - fund_sc = Some Tez.one; - fund_zk = Some Tez.one; - flags; - } - -let ctxt_req_default = ctxt_req_default_to_flag all_enabled - -let operation_req_default kind = - { - kind; - counter = None; - fee = None; - gas_limit = None; - storage_limit = None; - force_reveal = None; - amount = None; - } - -(** {2 String_of data} *) -let kind_to_string = function - | K_Transaction -> "Transaction" - | K_Delegation -> "Delegation" - | K_Undelegation -> "Undelegation" - | K_Self_delegation -> "Self-delegation" - | K_Set_deposits_limit -> "Set deposits limit" - | K_Update_consensus_key -> "Update consensus key" - | K_Origination -> "Origination" - | K_Register_global_constant -> "Register global constant" - | K_Increase_paid_storage -> "Increase paid storage" - | K_Reveal -> "Revelation" - | K_Transfer_ticket -> "Transfer_ticket" - | K_Sc_rollup_origination -> "Sc_rollup_origination" - | K_Sc_rollup_publish -> "Sc_rollup_publish" - | K_Sc_rollup_cement -> "Sc_rollup_cement" - | K_Sc_rollup_timeout -> "Sc_rollup_timeout" - | K_Sc_rollup_refute -> "Sc_rollup_refute" - | K_Sc_rollup_add_messages -> "Sc_rollup_add_messages" - | K_Sc_rollup_execute_outbox_message -> "Sc_rollup_execute_outbox_message" - | K_Sc_rollup_recover_bond -> "Sc_rollup_recover_bond" - | K_Dal_publish_commitment -> "Dal_publish_commitment" - | K_Zk_rollup_origination -> "Zk_rollup_origination" - | K_Zk_rollup_publish -> "Zk_rollup_publish" - | K_Zk_rollup_update -> "Zk_rollup_update" - -(** {2 Pretty-printers} *) -let pp_opt pp v = - let open Format in - pp_print_option ~none:(fun fmt () -> fprintf fmt "None") pp v - -let pp_operation_req pp - {kind; counter; fee; gas_limit; storage_limit; force_reveal; amount} = - Format.fprintf - pp - "@[Operation_req:@,\ - kind: %s@,\ - counter: %a@,\ - fee: %a@,\ - gas_limit: %a@,\ - storage_limit: %a@,\ - force_reveal: %a@,\ - amount: %a@,\ - @]" - (kind_to_string kind) - (pp_opt Manager_counter.pp) - counter - (pp_opt Tez.pp) - fee - (pp_opt Op.pp_gas_limit) - gas_limit - (pp_opt Z.pp_print) - storage_limit - (pp_opt (fun fmt -> Format.fprintf fmt "%b")) - force_reveal - (pp_opt Tez.pp) - amount - -let pp_2_operation_req pp (op_req1, op_req2) = - Format.fprintf - pp - "[ %a,@ and %a,@ @]" - pp_operation_req - op_req1 - pp_operation_req - op_req2 - -let pp_ctxt_req pp - { - hard_gas_limit_per_block; - fund_src; - fund_dest; - fund_del; - reveal_accounts; - fund_sc; - fund_zk; - flags; - } = - Format.fprintf - pp - "@[Ctxt_req:@,\ - hard_gas_limit_per_block:%a@,\ - fund_src: %a tz@,\ - fund_dest: %a tz@,\ - fund_del: %a tz@,\ - reveal_accounts: %b tz@,\ - fund_sc: %a tz@,\ - fund_zk: %a tz@,\ - dal_flag: %a@,\ - scoru_arith_flag: %a@,\ - zkru_flag: %a@,\ - @]" - (pp_opt Gas.Arith.pp_integral) - hard_gas_limit_per_block - (pp_opt Tez.pp) - fund_src - (pp_opt Tez.pp) - fund_dest - (pp_opt Tez.pp) - fund_del - reveal_accounts - (pp_opt Tez.pp) - fund_sc - (pp_opt Tez.pp) - fund_zk - Format.pp_print_bool - flags.dal - Format.pp_print_bool - flags.scoru_arith - Format.pp_print_bool - flags.zkru - -let pp_mode pp = function - | Construction -> Format.fprintf pp "Construction" - | Mempool -> Format.fprintf pp "Mempool" - | Application -> Format.fprintf pp "Block" - -(** {2 Short-cuts} *) -let contract_of (account : Account.t) = Contract.Implicit account.pkh - -(** Make a [mempool_mode], aka a boolean, as used in incremental from - a [mode]. *) -let mempool_mode_of = function Mempool -> true | _ -> false - -let get_pk infos source = - let open Lwt_result_syntax in - let+ account = Context.Contract.manager infos source in - account.pk - -(** Operation for specific context. *) -let self_delegate block pkh = - let open Lwt_result_syntax in - let contract = Contract.Implicit pkh in - let* operation = - Op.delegation ~force_reveal:true (B block) contract (Some pkh) - in - let* block = Block.bake block ~operation in - let* del_opt_new = Context.Contract.delegate_opt (B block) contract in - let* del = Assert.get_some ~loc:__LOC__ del_opt_new in - let+ () = Assert.equal_pkh ~loc:__LOC__ del pkh in - block - -let delegation block source delegate = - let open Lwt_result_syntax in - let delegate_pkh = delegate.Account.pkh in - let contract_source = contract_of source in - let* operation = - Op.delegation - ~force_reveal:true - (B block) - contract_source - (Some delegate_pkh) - in - let* block = Block.bake block ~operation in - let* del_opt_new = Context.Contract.delegate_opt (B block) contract_source in - let* del = Assert.get_some ~loc:__LOC__ del_opt_new in - let* () = Assert.equal_pkh ~loc:__LOC__ del delegate_pkh in - return block - -let originate_sc_rollup block rollup_account = - let open Lwt_result_syntax in - let rollup_contract = contract_of rollup_account in - let kind = Sc_rollup.Kind.Example_arith in - let* rollup_origination, sc_rollup = - Sc_rollup_helpers.origination_op - ~force_reveal:true - (B block) - rollup_contract - kind - in - let+ block = - Block.bake ~allow_manager_failures:true ~operation:rollup_origination block - in - (block, sc_rollup) - -module ZKOperator = Dummy_zk_rollup.Operator (struct - let batch_size = 10 -end) - -let originate_zk_rollup block rollup_account = - let open Lwt_result_syntax in - let rollup_contract = contract_of rollup_account in - let _prover_pp, public_parameters = Lazy.force ZKOperator.lazy_pp in - let* rollup_origination, zk_rollup = - Op.zk_rollup_origination - ~force_reveal:true - (B block) - rollup_contract - ~public_parameters - ~circuits_info: - (Zk_rollup.Account.SMap.of_seq @@ Kzg.SMap.to_seq ZKOperator.circuits) - ~init_state:ZKOperator.init_state - ~nb_ops:1 - in - let+ block = - Block.bake ~allow_manager_failures:true ~operation:rollup_origination block - in - (block, zk_rollup) - -(** {2 Setting's context construction} *) - -let fund_account_op block bootstrap account fund counter = - let open Lwt_result_wrap_syntax in - let* fund = - match fund with - | None -> return Tez.one - | Some fund -> - let* source_balance = Context.Contract.balance (B block) bootstrap in - if Tez.(fund > source_balance) then - let*?@ result = Tez.(source_balance -? one) in - return result - else return fund - in - let+ op = - Op.transaction - ~counter - ~gas_limit:Op.High - (B block) - bootstrap - (Contract.Implicit account) - fund - in - (op, Manager_counter.succ counter) - -let fund_account block bootstrap account fund = - let open Lwt_result_syntax in - let* counter = Context.Contract.counter (B block) bootstrap in - let* operation, (_counter : Manager_counter.t) = - fund_account_op block bootstrap account fund counter - in - let*! b = Block.bake ~operation block in - match b with Error _ -> failwith "Funding account error" | Ok b -> return b - -(** Set the constants according to a [ctxt_req] in an existing parameters. *) -let manager_parameters : Parameters.t -> ctxt_req -> Parameters.t = - fun params {hard_gas_limit_per_block; flags; _} -> - let hard_gas_limit_per_block = - match hard_gas_limit_per_block with - | Some gb -> gb - | None -> Default_parameters.constants_mainnet.hard_gas_limit_per_block - in - let dal = {params.constants.dal with feature_enable = flags.dal} in - let sc_rollup = - {params.constants.sc_rollup with arith_pvm_enable = flags.scoru_arith} - in - let zk_rollup = {params.constants.zk_rollup with enable = flags.zkru} in - let constants = - {params.constants with hard_gas_limit_per_block; dal; zk_rollup; sc_rollup} - in - {params with constants} - -(** Initialize a context with the constants extracted from a context requirements - and 7 bootstrap accounts. *) -let init_ctxt_only ctxtreq = - let open Lwt_result_syntax in - let initial_params = - Tezos_protocol_019_PtParisB_parameters.Default_parameters - .parameters_of_constants - {Context.default_test_constants with consensus_threshold = 0} - in - let* _cryptobox = - Dal_helpers.mk_cryptobox initial_params.constants.dal.cryptobox_parameters - in - let* block, contracts = - Context.init_with_parameters_n (manager_parameters initial_params ctxtreq) 7 - in - return - ( block, - List.map - (function Contract.Implicit pkh -> pkh | Originated _ -> assert false) - contracts ) - -(** Build a generic setting for a test according to a context requirement - on an existing context with 7 bootstraps accounts. *) -let init_infos : - ctxt_req -> Block.t -> public_key_hash list -> infos tzresult Lwt.t = - fun ctxtreq block bootstraps -> - let { - fund_src; - fund_dest; - fund_del; - fund_sc; - fund_zk; - flags; - reveal_accounts; - _; - } = - ctxtreq - in - let open Lwt_result_syntax in - let create_and_fund ?originate_rollup block bootstrap fund = - match fund with - | None -> return (block, None, None) - | Some _ -> - let account = Account.new_account () in - let* block = fund_account block bootstrap account.pkh fund in - let* block, rollup = - match originate_rollup with - | None -> return (block, None) - | Some f -> - let+ block, rollup = f block account in - (block, Some rollup) - in - return (block, Some account, rollup) - in - let reveal_accounts_operations b l = - List.filter_map_es - (function - | None -> return_none - | Some account -> - let* op = Op.revelation ~gas_limit:Low (B b) account.Account.pk in - return_some op) - l - in - let get_bootstrap bootstraps n = - Contract.Implicit (Stdlib.List.nth bootstraps n) - in - let source = Account.new_account () in - let* block = - fund_account block (get_bootstrap bootstraps 0) source.pkh fund_src - in - let* block, dest, _ = - create_and_fund block (get_bootstrap bootstraps 1) fund_dest - in - let* block, del, _ = - create_and_fund block (get_bootstrap bootstraps 2) fund_del - in - let* block, sc, sc_rollup = - if flags.scoru_arith then - create_and_fund - ~originate_rollup:originate_sc_rollup - block - (get_bootstrap bootstraps 4) - fund_sc - else return (block, None, None) - in - let* block, zk, zk_rollup = - if flags.zkru then - create_and_fund - ~originate_rollup:originate_zk_rollup - block - (get_bootstrap bootstraps 5) - fund_zk - else return (block, None, None) - in - let* create_contract_hash, originated_contract = - Op.contract_origination_hash - (B block) - (get_bootstrap bootstraps 6) - ~fee:Tez.zero - ~script:Op.dummy_script - in - let* reveal_operations = - if reveal_accounts then - reveal_accounts_operations block [Some source; dest; del] - else return_nil - in - let operations = create_contract_hash :: reveal_operations in - let+ block = Block.bake ~operations block in - let ctxt = - { - block; - bootstraps; - originated_contract = Some originated_contract; - sc_rollup; - zk_rollup; - } - in - {ctxt; accounts = {sources = [source]; dest; del; sc; zk}; flags} - -(** The generic setting for a test is built up according to a context - requirement. It provides a context and accounts where the accounts - have been created and funded according to the context - requirements.*) -let init_ctxt : ctxt_req -> infos tzresult Lwt.t = - fun ctxtreq -> - let open Lwt_result_syntax in - let* block, bootstraps = init_ctxt_only ctxtreq in - init_infos ctxtreq block bootstraps - -(** return the first source from the list of sources in [infos] accounts. *) -let get_source infos = - match infos.accounts.sources with source :: _ -> source | [] -> assert false - -(** In addition of building up a context according to a context - requirement, source is self-delegated. - - see [init_ctxt] description. *) -let ctxt_with_self_delegation : ctxt_req -> infos tzresult Lwt.t = - fun ctxt_req -> - let open Lwt_result_syntax in - let* infos = init_ctxt ctxt_req in - let+ block = self_delegate infos.ctxt.block (get_source infos).pkh in - let ctxt = {infos.ctxt with block} in - {infos with ctxt} - -(** In addition of building up a context accordning to a context - requirement, source delegates to del. - - See [init_ctxt] description. *) -let ctxt_with_delegation : ctxt_req -> infos tzresult Lwt.t = - fun ctxt_req -> - let open Lwt_result_syntax in - let* infos = init_ctxt ctxt_req in - let* delegate = - match infos.accounts.del with - | None -> failwith "Delegate account should be funded" - | Some a -> return a - in - let* block = delegation infos.ctxt.block delegate delegate in - let+ block = delegation block (get_source infos) delegate in - let ctxt = {infos.ctxt with block} in - {infos with ctxt} - -let default_init_ctxt () = init_ctxt ctxt_req_default - -let default_init_with_flags flags = init_ctxt (ctxt_req_default_to_flag flags) - -let default_ctxt_with_self_delegation () = - ctxt_with_self_delegation ctxt_req_default - -let default_ctxt_with_delegation () = ctxt_with_delegation ctxt_req_default - -(** {2 Smart constructors} *) - -(** Smart constructors to forge manager operations according to - operation requirements in a test setting. *) - -let mk_transaction (oinfos : operation_req) (infos : infos) = - Op.transaction - ?force_reveal:oinfos.force_reveal - ?counter:oinfos.counter - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - (contract_of (get_source infos)) - (contract_of - (match infos.accounts.dest with - | None -> get_source infos - | Some dest -> dest)) - (match oinfos.amount with None -> Tez.zero | Some amount -> amount) - -let mk_delegation (oinfos : operation_req) (infos : infos) = - Op.delegation - ?force_reveal:oinfos.force_reveal - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - (contract_of (get_source infos)) - (Some - (match infos.accounts.del with - | None -> (get_source infos).pkh - | Some delegate -> delegate.pkh)) - -let mk_undelegation (oinfos : operation_req) (infos : infos) = - Op.delegation - ?force_reveal:oinfos.force_reveal - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - (contract_of (get_source infos)) - None - -let mk_self_delegation (oinfos : operation_req) (infos : infos) = - Op.delegation - ?force_reveal:oinfos.force_reveal - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - (contract_of (get_source infos)) - (Some (get_source infos).pkh) - -let mk_origination (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let+ op, _ = - Op.contract_origination - ?force_reveal:oinfos.force_reveal - ?counter:oinfos.counter - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - ~script:Op.dummy_script - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - op - -let mk_register_global_constant (oinfos : operation_req) (infos : infos) = - Op.register_global_constant - ?force_reveal:oinfos.force_reveal - ?counter:oinfos.counter - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - ~source:(contract_of (get_source infos)) - ~value:(Script_repr.lazy_expr (Expr.from_string "Pair 1 2")) - -let mk_set_deposits_limit (oinfos : operation_req) (infos : infos) = - Op.set_deposits_limit - ?force_reveal:oinfos.force_reveal - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - ?counter:oinfos.counter - (B infos.ctxt.block) - (contract_of (get_source infos)) - None - -let mk_update_consensus_key (oinfos : operation_req) (infos : infos) = - Op.update_consensus_key - ?force_reveal:oinfos.force_reveal - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - ?counter:oinfos.counter - (B infos.ctxt.block) - (contract_of (get_source infos)) - (match infos.accounts.dest with - | None -> (get_source infos).pk - | Some dest -> dest.pk) - -let mk_increase_paid_storage (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* destination = - match infos.ctxt.originated_contract with - | None -> - failwith - "infos should be initialized with an origniated contract to be able \ - to add an increase_paid_storage operation." - | Some c -> return c - in - Op.increase_paid_storage - ?force_reveal:oinfos.force_reveal - ?counter:oinfos.counter - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - ~source:(contract_of (get_source infos)) - ~destination - Z.one - -let mk_reveal (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* pk = get_pk (B infos.ctxt.block) (contract_of (get_source infos)) in - Op.revelation - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - pk - -let sc_rollup_of = - let open Lwt_result_syntax in - function - | Some sc_rollup -> return sc_rollup - | None -> failwith "Sc_rollup not created in this context" - -let zk_rollup_of = - let open Lwt_result_syntax in - function - | Some zk_rollup -> return zk_rollup - | None -> failwith "Zk_rollup not created in this context" - -let mk_transfer_ticket (oinfos : operation_req) (infos : infos) = - Op.transfer_ticket - ?fee:oinfos.fee - ?force_reveal:oinfos.force_reveal - ?counter:oinfos.counter - ?gas_limit:oinfos.gas_limit - ?storage_limit:oinfos.storage_limit - (B infos.ctxt.block) - ~source:(contract_of (get_source infos)) - ~contents:(Script.lazy_expr (Expr.from_string "1")) - ~ty:(Script.lazy_expr (Expr.from_string "nat")) - ~ticketer: - (contract_of - (match infos.accounts.sc with - | None -> get_source infos - | Some tx -> tx)) - ~amount:Ticket_amount.one - ~destination: - (contract_of - (match infos.accounts.dest with - | None -> get_source infos - | Some dest -> dest)) - ~entrypoint:Entrypoint.default - -let mk_sc_rollup_origination (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let+ op, _ = - let kind = Sc_rollup.Kind.Example_arith in - Sc_rollup_helpers.origination_op - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - kind - in - op - -let sc_dummy_commitment = - let number_of_ticks = - match Sc_rollup.Number_of_ticks.of_value 3000L with - | None -> assert false - | Some x -> x - in - Sc_rollup.Commitment. - { - predecessor = Sc_rollup.Commitment.Hash.zero; - inbox_level = Raw_level.of_int32_exn Int32.zero; - number_of_ticks; - compressed_state = Sc_rollup.State_hash.zero; - } - -let mk_sc_rollup_publish (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* sc_rollup = sc_rollup_of infos.ctxt.sc_rollup in - Op.sc_rollup_publish - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - sc_rollup - sc_dummy_commitment - -let mk_sc_rollup_cement (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* sc_rollup = sc_rollup_of infos.ctxt.sc_rollup in - Op.sc_rollup_cement - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - sc_rollup - -let mk_sc_rollup_refute (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* sc_rollup = sc_rollup_of infos.ctxt.sc_rollup in - let refutation : Sc_rollup.Game.refutation = - Move {choice = Sc_rollup.Tick.initial; step = Dissection []} - in - Op.sc_rollup_refute - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - sc_rollup - (match infos.accounts.dest with - | None -> (get_source infos).pkh - | Some dest -> dest.pkh) - refutation - -let mk_sc_rollup_add_messages (oinfos : operation_req) (infos : infos) = - Op.sc_rollup_add_messages - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - [""] - -let mk_sc_rollup_timeout (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* sc_rollup = sc_rollup_of infos.ctxt.sc_rollup in - Op.sc_rollup_timeout - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - sc_rollup - (Sc_rollup.Game.Index.make - (get_source infos).pkh - (match infos.accounts.dest with - | None -> (get_source infos).pkh - | Some dest -> dest.pkh)) - -let mk_sc_rollup_execute_outbox_message (oinfos : operation_req) (infos : infos) - = - let open Lwt_result_syntax in - let* sc_rollup = sc_rollup_of infos.ctxt.sc_rollup in - Op.sc_rollup_execute_outbox_message - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - sc_rollup - (Sc_rollup.Commitment.hash_uncarbonated sc_dummy_commitment) - ~output_proof:"" - -let mk_sc_rollup_return_bond (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* sc_rollup = sc_rollup_of infos.ctxt.sc_rollup in - let source, staker = - match contract_of (get_source infos) with - | Implicit staker as source -> (source, staker) - | _ -> assert false - in - Op.sc_rollup_recover_bond - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - source - sc_rollup - staker - -let mk_dal_publish_commitment (oinfos : operation_req) (infos : infos) = - let slot_index = Alpha_context.Dal.Slot_index.zero in - let commitment = Alpha_context.Dal.Slot.Commitment.zero in - let commitment_proof = Alpha_context.Dal.Slot.Commitment_proof.zero in - let slot = - Dal.Operations.Publish_commitment.{slot_index; commitment; commitment_proof} - in - Op.dal_publish_commitment - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - slot - -let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let _prover_pp, public_parameters = Lazy.force ZKOperator.lazy_pp in - let* op, _ = - Op.zk_rollup_origination - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - ~public_parameters - ~circuits_info: - (Zk_rollup.Account.SMap.of_seq @@ Kzg.SMap.to_seq ZKOperator.circuits) - ~init_state:ZKOperator.init_state - ~nb_ops:1 - in - return op - -let mk_zk_rollup_publish (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let open Zk_rollup.Operation in - let* zk_rollup = zk_rollup_of infos.ctxt.zk_rollup in - let l2_op = - {ZKOperator.Internal_for_tests.false_op with rollup_id = zk_rollup} - in - let* op = - Op.zk_rollup_publish - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - ~zk_rollup - ~ops:[(l2_op, None)] - in - return op - -let mk_zk_rollup_update (oinfos : operation_req) (infos : infos) = - let open Lwt_result_syntax in - let* zk_rollup = zk_rollup_of infos.ctxt.zk_rollup in - let update = Lazy.force ZKOperator.Internal_for_tests.lazy_update_data in - let* op = - Op.zk_rollup_update - ?fee:oinfos.fee - ?gas_limit:oinfos.gas_limit - ?counter:oinfos.counter - ?storage_limit:oinfos.storage_limit - ?force_reveal:oinfos.force_reveal - (B infos.ctxt.block) - (contract_of (get_source infos)) - ~zk_rollup - ~update - in - return op - -(** {2 Helpers for generation of generic check tests by manager operation} *) - -(** Generic forge for any kind of manager operation according to - operation requirements in a specific test setting. *) -let select_op (op_req : operation_req) (infos : infos) = - let mk_op = - match op_req.kind with - | K_Transaction -> mk_transaction - | K_Origination -> mk_origination - | K_Register_global_constant -> mk_register_global_constant - | K_Delegation -> mk_delegation - | K_Undelegation -> mk_undelegation - | K_Self_delegation -> mk_self_delegation - | K_Set_deposits_limit -> mk_set_deposits_limit - | K_Update_consensus_key -> mk_update_consensus_key - | K_Increase_paid_storage -> mk_increase_paid_storage - | K_Reveal -> mk_reveal - | K_Transfer_ticket -> mk_transfer_ticket - | K_Sc_rollup_origination -> mk_sc_rollup_origination - | K_Sc_rollup_publish -> mk_sc_rollup_publish - | K_Sc_rollup_cement -> mk_sc_rollup_cement - | K_Sc_rollup_refute -> mk_sc_rollup_refute - | K_Sc_rollup_add_messages -> mk_sc_rollup_add_messages - | K_Sc_rollup_timeout -> mk_sc_rollup_timeout - | K_Sc_rollup_execute_outbox_message -> mk_sc_rollup_execute_outbox_message - | K_Sc_rollup_recover_bond -> mk_sc_rollup_return_bond - | K_Dal_publish_commitment -> mk_dal_publish_commitment - | K_Zk_rollup_origination -> mk_zk_rollup_origination - | K_Zk_rollup_publish -> mk_zk_rollup_publish - | K_Zk_rollup_update -> mk_zk_rollup_update - in - mk_op op_req infos - -let make_test - ~(register_test : - title:string -> - ?additional_tags:string trace -> - ?slow:bool -> - (unit -> (unit, tztrace) result Lwt.t) -> - unit) name test (subjects : manager_operation_kind list) info_builder = - List.iter - (fun kind -> - let title = sf "%s: %s" name (kind_to_string kind) in - register_test ~title @@ fun () -> - let open Lwt_syntax in - let* infos = info_builder () in - let infos = - match infos with - | Error errs -> - Tezt.Test.fail "Error: %a" Error_monad.pp_print_trace errs - | Ok infos -> infos - in - test infos kind) - subjects - -let make_test_batched - ~(register_test : - title:string -> - ?additional_tags:string trace -> - ?slow:bool -> - (unit -> (unit, tztrace) result Lwt.t) -> - unit) name test subjects info_builder = - List.iter - (fun kind1 -> - let k1s = kind_to_string kind1 in - List.iter - (fun kind2 -> - let title = sf "%s: [%s ; %s]" name k1s (kind_to_string kind2) in - register_test ~title @@ fun () -> - let* infos = info_builder () in - let infos = - match infos with - | Error errs -> - Tezt.Test.fail "Error: %a" Error_monad.pp_print_trace errs - | Ok infos -> infos - in - test infos kind1 kind2) - subjects) - subjects - -(** {2 Diagnostic helpers.} *) - -(** The purpose of diagnostic helpers is to state the correct - observation according to the validate result of a test. *) - -(** For a manager operation a [probes] contains the values required - for observing its validate success. Its source, fees (sum for a - batch), gas_limit (sum of gas_limit of the batch), and the - increment of the counters aka 1 for a single operation, n for a - batch of n manager operations. *) -type probes = { - source : Signature.Public_key_hash.t; - fee : Tez.t; - gas_limit : Gas.Arith.integral; - nb_counter : int; -} - -let rec contents_infos : - type kind. kind Kind.manager contents_list -> probes tzresult Lwt.t = - fun op -> - let open Lwt_result_syntax in - match op with - | Single (Manager_operation {source; fee; gas_limit; _}) -> - return {source; fee; gas_limit; nb_counter = 1} - | Cons (Manager_operation manop, manops) -> - let* probes = contents_infos manops in - let*? fee = manop.fee +? probes.fee in - let gas_limit = Gas.Arith.add probes.gas_limit manop.gas_limit in - let nb_counter = succ probes.nb_counter in - let* () = Assert.equal_pkh ~loc:__LOC__ manop.source probes.source in - return {fee; source = probes.source; gas_limit; nb_counter} - -(** Computes a [probes] from a list of manager contents. *) -let manager_content_infos op = - let (Operation_data {contents; _}) = op.protocol_data in - match contents with - | Single (Manager_operation _) as op -> contents_infos op - | Cons (Manager_operation _, _) as op -> contents_infos op - | _ -> failwith "Should only handle manager operation" - -(** We need a way to get the available gas in a context of type - block. *) -let available_gas = function - | Context.I inc -> Some (Gas.block_level (Incremental.alpha_ctxt inc)) - | B _ -> None - -(** Computes the witness value in a state. The witness values are the - the initial balance of source, its initial counter and the - available gas in the state. The available gas is computed only - when the context is an incremental one. *) -let witness ctxt source = - let open Lwt_result_syntax in - let* b_in = Context.Contract.balance ctxt source in - let* c_in = Context.Contract.counter ctxt source in - let g_in = available_gas ctxt in - return (b_in, c_in, g_in) - -(** According to the witness in pre-state and the probes, computes the - expected outputs. In any mode, when the source is not deallocated, - the expected witness: - - the balance of source should be the one in the pre-state minus - the fee of probes, - - the counter of source should be the one in the pre-state plus - the number of counter in probes. - - Concerning the expected available gas in the block: - - In [Application] mode, it cannot be computed, so we do not expect - any, - - In [Mempool] mode, it is the remaining gas after removing the gas - of probes gas from an empty block, - - In the [Construction] mode, it is the remaining gas after removing - the gas of probes from the available gas in the pre-state.*) -let expected_witness witness probes ~mode ctxt = - let open Lwt_result_syntax in - let b_in, c_in, g_in = witness in - let*? b_expected = b_in -? probes.fee in - let c_expected = - Manager_counter.Internal_for_tests.add c_in probes.nb_counter - in - let* g_expected = - match (g_in, mode) with - | Some g_in, Construction -> - return_some (Gas.Arith.sub g_in (Gas.Arith.fp probes.gas_limit)) - | _, Mempool -> - let* c = Context.get_constants ctxt in - return_some - (Gas.Arith.sub - (Gas.Arith.fp c.parametric.hard_gas_limit_per_block) - (Gas.Arith.fp probes.gas_limit)) - | None, Application -> return_none - | Some _, Application -> - failwith "In application mode witness should not care about gas level" - | None, Construction -> - failwith "In Construction mode the witness should return a gas level" - in - return (b_expected, c_expected, g_expected) - -(** The validity of a test in positve case, observes that validation - of a manager operation implies the fee payment. This observation - differs according to the validation calling [mode] (see type mode - for more details) and that the [source] has been [deallocated]. - Given the values of witness in the pre-state, the probes of the - operation probes and the values of witness in the post-state, if - the validation succeeds while deallocating the [source], [source] - must be unallocated in the post-state. - - In case of successful validation Without deallocation, then we - observe in the post-state: - - The balance of source decreases at least by fee of probes when the - application has succeeded, - - Its counter in the pre-state increases by the number of counter of - probes. - - The remaining gas in the pre-state decreases at least by the gas - of probes, in [Construction] and [Mempool] mode. - - In [Mempool] mode, the remaining gas in the pre-state is always - the available gas in an empty block. - - In the [Application] mode, we do not perform any check on the - available gas. *) -let observe ~mode ~deallocated ctxt_pre ctxt_post op = - let open Lwt_result_wrap_syntax in - let check_deallocated ctxt contract = - let* actxt = - let+ i = - match ctxt with - | Context.B b -> Incremental.begin_construction b - | I i -> return i - in - Incremental.alpha_ctxt i - in - let*!@ res = Contract.must_be_allocated actxt contract in - match res with - | Ok () -> - failwith - "%a should have been deallocated@." - Signature.Public_key_hash.pp - (Context.Contract.pkh contract) - | Error - [ - Environment.Ecoproto_error (Contract_storage.Empty_implicit_contract _); - ] -> - return_unit - | Error errs -> - failwith "unexpected error, got %a@." Error_monad.pp_print_trace errs - in - let check_still_allocated ctxt_pre ctxt_post probes contract = - let* witness_in = witness ctxt_pre contract in - let* b_out, c_out, g_out = witness ctxt_post contract in - let* b_expected, c_expected, g_expected = - expected_witness witness_in probes ~mode ctxt_post - in - let b_cmp = - Assert.equal - ~loc:__LOC__ - Tez.( <= ) - "Balance decreases at least by fees" - Tez.pp - in - let* () = b_cmp b_out b_expected in - let* () = - Assert.equal - Manager_counter.equal - ~loc:__LOC__ - "Counter incrementation" - Manager_counter.pp - c_out - c_expected - in - let g_msg = - match mode with - | Application -> "Gas consumption (application)" - | Mempool -> "Gas consumption (mempool)" - | Construction -> "Gas consumption (construction)" - in - match g_expected with - | None -> Assert.is_none ~loc:__LOC__ ~pp:Gas.Arith.pp g_out - | Some g_expected -> - let* g_out = Assert.get_some ~loc:__LOC__ g_out in - Assert.equal - ~loc:__LOC__ - Gas.Arith.( <= ) - g_msg - Gas.Arith.pp - g_out - g_expected - in - let* probes = manager_content_infos op in - let contract = Contract.Implicit probes.source in - if deallocated then check_deallocated ctxt_post contract - else check_still_allocated ctxt_pre ctxt_post probes contract - -let observe_list ~mode ~deallocated ctxt_pre ctxt_post ops = - List.iter_es (fun op -> observe ~mode ~deallocated ctxt_pre ctxt_post op) ops - -let validate_operations_effects inc_in ops = - let open Lwt_result_syntax in - List.fold_left_es - (fun inc op -> - let* inc_out = - Incremental.add_operation ~allow_manager_failure:true inc op - in - return inc_out) - inc_in - ops - -(** In [Construction] and [Mempool] mode, the pre-state provide an - incremental, whereas in the [Application] mode, it is the block in - the setting context of the test. *) -let pre_state_of_mode ~mode infos = - let open Lwt_result_syntax in - match mode with - | Construction | Mempool -> - let* inc = Incremental.begin_construction infos.ctxt.block in - return (Context.I inc) - | Application -> return (Context.B infos.ctxt.block) - -(** In [Construction] and [Mempool] mode, the post-state is - incrementally built upon a pre-state, whereas in the [Application] - mode it is obtained by baking. *) -let post_state_of_mode ?(_only_validate = false) ~mode ctxt ops infos = - let open Lwt_result_syntax in - match (mode, ctxt) with - | (Construction | Mempool), Context.I inc_pre -> - let* inc_post = validate_operations_effects inc_pre ops in - let* block = Incremental.finalize_block inc_post in - return (Context.I inc_post, {infos with ctxt = {infos.ctxt with block}}) - | Application, Context.B b -> - let+ block = - Block.bake - ~allow_manager_failures:true - ~baking_mode:Application - ~operations:ops - b - in - (Context.B block, {infos with ctxt = {infos.ctxt with block}}) - | Application, Context.I _ -> - failwith "In Application mode, context should not be an Incremental" - | (Construction | Mempool), Context.B _ -> - failwith "In (Partial) Contruction mode, context should not be a Block" - -(** A positive test builds a pre-state from a mode, and a setting - context, then it computes a post-state from the mode, the setting - context and the operations. Finally, it observes the result - according to the [emptying] status for each operation. - - See [observe] for more details on the observational validation. - If the operation validation succeeds but should be deallocated, - then [deallocated ] must be set. - - Default mode is [Construction]. *) -let validate_diagnostic ?(deallocated = false) ?(mode = Construction) - (infos : infos) ops = - let open Lwt_result_syntax in - let* ctxt_pre = pre_state_of_mode ~mode infos in - let* ctxt_post, infos = post_state_of_mode ~mode ctxt_pre ops infos in - let* () = observe_list ~mode ~deallocated ctxt_pre ctxt_post ops in - return infos - -let add_operations ~expect_failure inc_in ops = - let open Lwt_result_syntax in - let* last, ops = - match List.rev ops with - | op :: rev_ops -> return (op, List.rev rev_ops) - | [] -> failwith "Empty list of operations given to add_operations" - in - let* inc = - List.fold_left_es - (fun inc op -> - let* inc = Incremental.validate_operation inc op in - return inc) - inc_in - ops - in - Incremental.validate_operation inc last ~expect_failure - -(** [validate_ko_diagnostic] wraps the [expect_failure] when [op] - validate failed. It is used in test that expects validate of the - last operation of a list of operations to fail. *) -let validate_ko_diagnostic ?(mode = Construction) (infos : infos) ops - expect_failure = - let open Lwt_result_syntax in - match mode with - | Construction | Mempool -> - let* i = - Incremental.begin_construction - infos.ctxt.block - ~mempool_mode:(mempool_mode_of mode) - in - let* (_ : Incremental.t) = add_operations ~expect_failure i ops in - return_unit - | Application -> ( - let*! res = - Block.bake - ~allow_manager_failures:true - ~baking_mode:Application - ~operations:ops - infos.ctxt.block - in - match res with - | Error tr -> expect_failure tr - | _ -> failwith "Block application was expected to fail") - -(** List of operation kinds that must run on generic tests. This list - should be extended for each new manager_operation kind. *) -let subjects = - [ - K_Transaction; - K_Origination; - K_Register_global_constant; - K_Delegation; - K_Undelegation; - K_Self_delegation; - K_Set_deposits_limit; - K_Update_consensus_key; - K_Increase_paid_storage; - K_Reveal; - K_Transfer_ticket; - K_Sc_rollup_origination; - K_Sc_rollup_publish; - K_Sc_rollup_cement; - K_Sc_rollup_add_messages; - K_Sc_rollup_refute; - K_Sc_rollup_timeout; - K_Sc_rollup_execute_outbox_message; - K_Sc_rollup_recover_bond; - K_Dal_publish_commitment; - K_Zk_rollup_origination; - K_Zk_rollup_publish; - K_Zk_rollup_update; - ] - -let is_consumer = function - | K_Set_deposits_limit | K_Update_consensus_key | K_Increase_paid_storage - | K_Reveal | K_Self_delegation | K_Delegation | K_Undelegation - | K_Sc_rollup_add_messages | K_Sc_rollup_origination | K_Sc_rollup_refute - | K_Sc_rollup_timeout | K_Sc_rollup_cement | K_Sc_rollup_publish - | K_Sc_rollup_execute_outbox_message | K_Sc_rollup_recover_bond - | K_Dal_publish_commitment | K_Zk_rollup_origination | K_Zk_rollup_publish - | K_Zk_rollup_update -> - false - | K_Transaction | K_Origination | K_Register_global_constant - | K_Transfer_ticket -> - true - -let gas_consumer_in_validate_subjects, not_gas_consumer_in_validate_subjects = - List.partition is_consumer subjects - -let revealed_subjects = - List.filter (function K_Reveal -> false | _ -> true) subjects - -let is_disabled flags = function - | K_Transaction | K_Origination | K_Register_global_constant | K_Delegation - | K_Undelegation | K_Self_delegation | K_Set_deposits_limit - | K_Update_consensus_key | K_Increase_paid_storage | K_Reveal - | K_Transfer_ticket -> - false - | K_Sc_rollup_origination | K_Sc_rollup_publish | K_Sc_rollup_cement - | K_Sc_rollup_add_messages | K_Sc_rollup_refute | K_Sc_rollup_timeout - | K_Sc_rollup_execute_outbox_message | K_Sc_rollup_recover_bond -> - flags.scoru_arith = false - | K_Dal_publish_commitment -> flags.dal = false - | K_Zk_rollup_origination | K_Zk_rollup_publish | K_Zk_rollup_update -> - flags.zkru = false diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_1m_restriction.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_1m_restriction.ml deleted file mode 100644 index 43d220772836c1641664d56bf6efdd81fd2dea7c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_1m_restriction.ml +++ /dev/null @@ -1,216 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (validate manager) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/validate/main.exe \ - -- --file test_1m_restriction.ml - Subject: 1M restriction in validation of manager operation. -*) - -open Protocol -open Manager_operation_helpers -open Generators - -let register_test = - Tezt_helpers.register_test - ~__FILE__ - ~file_tags:["1m"; "validation"; "operation"] - -let count = 100 - -(** Local default values for the tests. *) -let ctxt_cstrs_default = - { - default_ctxt_cstrs with - src_cstrs = Pure 1500000; - dest_cstrs = Pure 15000; - del_cstrs = Pure 150000; - sc_cstrs = Pure 15000; - zk_cstrs = Pure 15000; - } - -let op_cstrs_default b = - { - default_operation_cstrs with - fee = Range {min = 0; max = 1_000; origin = 1_000}; - force_reveal = Some b; - amount = Range {min = 0; max = 10_000; origin = 10_000}; - } - -let print_one_op (ctxt_req, op_req, mode) = - Format.asprintf - "@[Generator printer:@,%a@,%a@,%a@]" - pp_ctxt_req - ctxt_req - pp_operation_req - op_req - pp_mode - mode - -let print_two_ops (ctxt_req, op_req, op_req', mode) = - Format.asprintf - "@[Generator printer:@,%a@,%a@,%a@,%a@]" - pp_ctxt_req - ctxt_req - pp_operation_req - op_req - pp_operation_req - op_req' - pp_mode - mode - -let print_ops_pair (ctxt_req, op_req, mode) = - Format.asprintf - "@[Generator printer:@,%a@,%a@,%a@]" - pp_ctxt_req - ctxt_req - pp_2_operation_req - op_req - pp_mode - mode - -(** The application of a valid operation succeeds, at least, to perform - the fee payment. *) -let positive_tests = - let gen = - QCheck2.Gen.triple - (Generators.gen_ctxt_req ctxt_cstrs_default) - (Generators.gen_operation_req (op_cstrs_default true) subjects) - Generators.gen_mode - in - wrap - ~count - ~print:print_one_op - ~name:"positive validated op" - ~gen - (fun (ctxt_req, operation_req, mode) -> - let open Lwt_result_syntax in - let* infos = init_ctxt ctxt_req in - let* op = select_op operation_req infos in - let* (_ : infos) = wrap_mode infos [op] mode in - return_true) - -(** Under 1M restriction, neither a block nor a prevalidator's valid - pool should contain two operations with the same manager. It - raises a Manager_restriction error. *) -let two_op_from_same_manager_tests = - let open Lwt_result_syntax in - let gen = - QCheck2.Gen.quad - (Generators.gen_ctxt_req ctxt_cstrs_default) - (Generators.gen_operation_req (op_cstrs_default true) subjects) - (Generators.gen_operation_req (op_cstrs_default false) revealed_subjects) - Generators.gen_mode - in - let expect_failure = function - | [ - Environment.Ecoproto_error - (Validate_errors.Manager.Manager_restriction _); - ] -> - return_unit - | err -> - failwith - "Error trace:@,\ - \ %a does not match the \ - [Validate_errors.Manager.Manager_restriction] error" - Error_monad.pp_print_trace - err - in - wrap - ~count - ~print:print_two_ops - ~name:"check conflicts between managers." - ~gen - (fun (ctxt_req, operation_req, operation_req2, mode) -> - let* infos = init_ctxt ctxt_req in - let* op1 = select_op operation_req infos in - let* op2 = select_op operation_req2 infos in - let* () = validate_ko_diagnostic ~mode infos [op1; op2] expect_failure in - return_true) - -(** Under 1M restriction, a batch of two operations cannot be replaced - by two single operations. *) -let batch_is_not_singles_tests = - let open Lwt_result_syntax in - let gen = - QCheck2.Gen.triple - (Generators.gen_ctxt_req ctxt_cstrs_default) - (Generators.gen_2_operation_req - (op_cstrs_default false) - revealed_subjects) - Generators.gen_mode - in - let expect_failure _ = return_unit in - wrap - ~count - ~print:print_ops_pair - ~name:"batch is not sequence of Single" - ~gen - (fun (ctxt_req, operation_req, mode) -> - let* infos = init_ctxt ctxt_req in - let* op1 = select_op (fst operation_req) infos in - let* op2 = select_op (snd operation_req) infos in - let source = contract_of (get_source infos) in - let* batch = - Op.batch_operations ~source (B infos.ctxt.block) [op1; op2] - in - let* (_ : infos) = validate_diagnostic ~mode infos [batch] in - let* () = validate_ko_diagnostic ~mode infos [op1; op2] expect_failure in - return_true) - -(** The applications of two covalid operations in a certain context - succeed, at least, to perform the fee payment of both, in whatever - application order. *) -let conflict_free_tests = - let gen = - QCheck2.Gen.quad - (Generators.gen_ctxt_req ctxt_cstrs_default) - (Generators.gen_operation_req (op_cstrs_default true) revealed_subjects) - (Generators.gen_operation_req (op_cstrs_default true) revealed_subjects) - Generators.gen_mode - in - wrap - ~count - ~print:print_two_ops - ~name:"under 1M, co-valid ops commute" - ~gen - (fun (ctxt_req, operation_req, operation_req', mode) -> - let open Lwt_result_syntax in - let* infos = init_ctxt ctxt_req in - let* op1 = select_op operation_req infos in - let infos2 = - { - infos with - accounts = - { - infos.accounts with - sources = - (match infos.accounts.del with - | None -> assert false - | Some s -> [s]); - }; - } - in - let* op2 = select_op operation_req' infos2 in - let* (_ : infos) = validate_diagnostic ~mode infos [op1; op2] in - let* (_ : infos) = validate_diagnostic ~mode infos [op2; op1] in - return_true) - -open Qcheck2_helpers - -let tests : (string * [`Quick | `Slow] * (unit -> unit Lwt.t)) trace = - qcheck_wrap_lwt - [ - positive_tests; - two_op_from_same_manager_tests; - batch_is_not_singles_tests; - conflict_free_tests; - ] - -let () = List.iter (fun (s, _, f) -> register_test ~title:s f) tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_covalidity.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_covalidity.ml deleted file mode 100644 index 2632fc770f8f7e9f7265da9b07886f01487f9ebd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_covalidity.ml +++ /dev/null @@ -1,143 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (validate manager) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/validate/main.exe \ - -- --file test_covalidity.ml - Subject: Validation of operation. -*) -open Validate_helpers - -open Generator_descriptors -open Valid_operations_generators -open Protocol -open Alpha_context - -let register_test = - Tezt_helpers.register_test ~__FILE__ ~file_tags:["validation"; "operation"] - -(** Values of number of bootstraps to create.*) - -let default_nb_bootstrap = 7 - -let nb_permutations = 30 - -let op_of_voting_period : Voting_period.kind -> op_kind = - let open Voting_period in - function - | Proposal -> KProposals - | Exploration -> KBallotExp - | Promotion -> KBallotProm - | _ -> assert false - -type seed_gen = Nonce | Vdf - -let pp_seed fmt = function - | Nonce -> Format.fprintf fmt "nonce" - | Vdf -> Format.fprintf fmt "vdf" - -let op_of_seed_gen = function Nonce -> KNonce | Vdf -> KVdf - -let is_not_preattestation op = - let open Protocol.Alpha_context in - let (Operation_data {contents; _}) = op.protocol_data in - match contents with Single (Preattestation _) -> false | _ -> true - -module OpkindMap = Map.Make (struct - type t = op_kind - - let compare = compare -end) - -let partition_op_kind op_kinds = - List.fold_left - (fun map op_kind -> - OpkindMap.update - op_kind - (function None -> Some 1 | Some c -> Some (succ c)) - map) - OpkindMap.empty - op_kinds - -let print_candidates candidates = - Format.printf - "@\n@[%d operations generated:@ %a@]@." - (List.length candidates) - Format.( - pp_print_list ~pp_sep:pp_print_cut (fun fmt (op, c) -> - Format.fprintf fmt "%d: %a" c pp_op_kind op)) - (List.map op_kind_of_packed_operation candidates - |> partition_op_kind |> OpkindMap.bindings) - -(** Test that for the set of covalid operations which kinds belongs to [ks] in a - state, any permutation is covalid and can be baked into a valid block. *) -let covalid_permutation_and_bake ks nb_bootstrap = - let open Lwt_result_syntax in - let* state, candidates = - covalid ks ~nb_bootstrap ~max_batch_size:Operation_generator.max_batch_size - in - print_candidates candidates ; - let* () = sequential_validate state.block candidates in - let rec loop = function - | 0 -> return_unit - | n -> - let operations = - QCheck2.Gen.shuffle_l candidates - |> QCheck2.Gen.generate1 - |> List.sort Protocol.Alpha_context.Operation.compare_by_passes - |> List.rev_filter is_not_preattestation - in - (* Ensure that we can validate and apply this permutation *) - let* (_ : Block.t) = - Block.bake ~allow_manager_failures:true state.block ~operations - in - loop (pred n) - in - loop nb_permutations - -(** {2 Tests} *) - -let name voting_period reveal = - Format.asprintf - "scenario: '%a' period, '%a' seed" - Voting_period.pp_kind - voting_period - pp_seed - reveal - -(** Test [covalid_permutation_and_bake]. *) -let test_covalid voting_period seed_gen = - Generators.wrap - ~name:(name voting_period seed_gen) - ~gen:QCheck2.Gen.unit - (fun () -> - let open Lwt_result_syntax in - let ks = - op_of_voting_period voting_period - :: op_of_seed_gen seed_gen :: non_exclusive_kinds - in - let* () = covalid_permutation_and_bake ks default_nb_bootstrap in - return_true) - -let tests = - (* Create a list of all permutation of voting period and all - possible nonce generation *) - let voting_periods = [Voting_period.Proposal; Exploration; Promotion] in - let nonce_gens = [Nonce; Vdf] in - List.fold_left - (fun acc voting_period -> - List.fold_left - (fun acc nonce_gen -> test_covalid voting_period nonce_gen :: acc) - acc - nonce_gens) - [] - voting_periods - |> Qcheck2_helpers.qcheck_wrap_lwt - -let () = List.iter (fun (s, _, f) -> register_test ~title:s f) tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_manager_operation_validation.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_manager_operation_validation.ml deleted file mode 100644 index fa3b48188a3614ee16d52cc7b5638ed09dba6c7d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_manager_operation_validation.ml +++ /dev/null @@ -1,617 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (validate manager) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/validate/main.exe \ - -- --file test_manager_operation_validation.ml - Subject: Validation of manager operation. -*) - -open Protocol -open Alpha_context -open Manager_operation_helpers - -let register_test = - Tezt_helpers.register_test_es - ~__FILE__ - ~file_tags:["validation"; "manager_operation"] - -(** {2 Negative tests assert the case where validate must fail} *) - -(** Validate fails if the gas limit is too low. - - This test asserts that the validation of a manager operation - with a too low gas limit fails at validate with an - [Gas_quota_exceeded_init_deserialize] error. - This test applies on manager operations that do not - consume gas in their specific part of validate. *) -let low_gas_limit_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [ - Environment.Ecoproto_error - Validate_errors.Manager.Gas_quota_exceeded_init_deserialize; - Environment.Ecoproto_error Raw_context.Operation_quota_exceeded; - ] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_low_gas_limit infos kind = - let open Lwt_result_syntax in - let* op = - select_op - { - (operation_req_default kind) with - gas_limit = Some Op.Low; - force_reveal = Some true; - } - infos - in - low_gas_limit_diagnostic infos [op] - -(** Validate fails if the gas limit is too high. - - This test asserts that the validation of a manager operation with - a gas limit too high fails at validate with an [Gas_limit_too_high] - error. It applies on every kind of manager operation. *) -let high_gas_limit_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error Gas.Gas_limit_too_high] -> return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_high_gas_limit infos kind = - let open Lwt_result_syntax in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - gas_limit = - Some (Op.Custom_gas (Gas.Arith.integral_of_int_exn 10_000_000)); - } - infos - in - high_gas_limit_diagnostic infos [op] - -(** Validate fails if the storage limit is too high. - - This test asserts that a manager operation with a storage limit - too high fails at validation with [Storage_limit_too_high] error. - It applies to every kind of manager operation. *) -let high_storage_limit_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error Fees_storage.Storage_limit_too_high] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_high_storage_limit infos kind = - let open Lwt_result_syntax in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - storage_limit = Some (Z.of_int max_int); - } - infos - in - high_storage_limit_diagnostic infos [op] - -(** Validate fails if the counter is in the future. - - This test asserts that the validation of - a manager operation with a counter in the - future -- aka greater than the successor of the manager counter - stored in the current context -- fails with [Counter_in_the_future] error. - It applies to every kind of manager operation. *) -let high_counter_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error (Contract_storage.Counter_in_the_future _)] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_high_counter infos kind = - let open Lwt_result_syntax in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - counter = Some (Manager_counter.Internal_for_tests.of_int max_int); - } - infos - in - high_counter_diagnostic infos [op] - -(** Validate fails if the counter is in the past. - - This test asserts that the validation of a manager operation with a - counter in the past -- aka smaller than the successor of the - manager counter stored in the current context -- fails with - [Counter_in_the_past] error. It applies to every kind of manager - operation. *) -let low_counter_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error (Contract_storage.Counter_in_the_past _)] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_low_counter infos kind = - let open Lwt_result_syntax in - let* current_counter = - Context.Contract.counter - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - counter = - Some (Manager_counter.Internal_for_tests.add current_counter (-1)); - } - infos - in - low_counter_diagnostic infos [op] - -(** Validate fails if the source is not allocated. - - This test asserts that the validation of a manager operation which - manager contract is not allocated fails with - [Empty_implicit_contract] error. It applies on every kind of - manager operation. *) -let not_allocated_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error (Contract_storage.Empty_implicit_contract _)] - -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_not_allocated infos kind = - let open Lwt_result_syntax in - let* op = - select_op - {(operation_req_default kind) with force_reveal = Some false} - { - infos with - accounts = {infos.accounts with sources = [Account.(new_account ())]}; - } - in - not_allocated_diagnostic infos [op] - -(** Validate fails if the source is unrevealed. - - This test asserts that a manager operation with an unrevealed source - contract fails at validation with [Unrevealed_manager_key]. - It applies on every kind of manager operation except [Revelation]. *) -let unrevealed_key_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [ - Environment.Ecoproto_error - (Contract_manager_storage.Unrevealed_manager_key _); - ] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_unrevealed_key infos kind = - let open Lwt_result_syntax in - let* op = - select_op - {(operation_req_default kind) with force_reveal = Some false} - infos - in - unrevealed_key_diagnostic infos [op] - -(** Validate fails if the source balance is not enough to pay the fees. - - This test asserts that validation of a manager operation fails if the - source balance is lesser than the manager operation fee. - It applies on every kind of manager operation. *) -let high_fee_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [ - Environment.Ecoproto_error (Contract_storage.Balance_too_low _); - Environment.Ecoproto_error (Tez_repr.Subtraction_underflow _); - ] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_high_fee infos kind = - let open Lwt_result_wrap_syntax in - let*?@ fee = Tez.(one +? default_fund) in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - fee = Some fee; - } - infos - in - high_fee_diagnostic infos [op] - -(** Validate fails if the fee payment empties the balance of a - delegated implicit contract. - - This test asserts that in case that: - - the source is a delegated implicit contract, and - - the fee is the exact balance of source. - then, validate fails with [Empty_implicit_delegated_contract] error. - It applies to every kind of manager operation except [Revelation].*) -let emptying_delegated_implicit_diagnostic (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match errs with - | [ - Environment.Ecoproto_error - (Contract_storage.Empty_implicit_delegated_contract _); - ] -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure - -let test_empty_implicit infos kind = - let open Lwt_result_syntax in - let* fee = - Context.Contract.balance - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some false; - fee = Some fee; - } - infos - in - emptying_delegated_implicit_diagnostic infos [op] - -(** Validate fails if there is not enough available gas in the block. - - This test asserts that validate fails with: - - [Gas_limit_too_high;Block_quota_exceeded] in mempool mode, - - [Block_quota_exceeded] in other mode - with gas limit exceeds the available gas in the block. - It applies to every kind of manager operation. *) -let exceeding_block_gas_diagnostic ~mode (infos : infos) op = - let open Lwt_result_syntax in - let expect_failure errs = - match (errs, mode) with - | ( [Environment.Ecoproto_error Gas.Block_quota_exceeded], - (Construction | Application) ) -> - return_unit - | ( [ - Environment.Ecoproto_error Gas.Gas_limit_too_high; - Environment.Ecoproto_error Gas.Block_quota_exceeded; - ], - Mempool ) -> - (* In mempool_mode, batch that exceed [operation_gas_limit] needs - to be refused. [Gas.Block_quota_exceeded] only return a - temporary error. [Gas.Gas_limit_too_high], which is a - permanent error, is added to the error trace to ensure that - the batch is refused. *) - return_unit - | err, _ -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - validate_ko_diagnostic infos op expect_failure ~mode - -let test_exceeding_block_gas ~mode infos kind = - let open Lwt_result_syntax in - let* operation = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - gas_limit = - Some - (Op.Custom_gas - (Gas.Arith.add gb_limit Gas.Arith.(integral_of_int_exn 1))); - } - infos - in - exceeding_block_gas_diagnostic ~mode infos [operation] - -(** {2 Positive tests} *) - -(** Tests that validate succeeds when: - - it empties the balance of a self_delegated implicit source, - - it empties the balance of an undelegated implicit source, and - - in case: - - the counter is the successor of the one stored in the context, - - the fee is lesser than the balance, - - the storage limit is lesser than the maximum authorized storage, - - the gas limit is: - - lesser than the available gas in the block, - - less than the maximum gas consumable by an operation, and - - greater than the minimum gas consumable by an operation. - - Notice that in the first two cases only validate succeeds while - in the last case, the full application also succeeds. - In the case of emptying the balance of an undelegated implicit source, - we observe in the output context that the source is deallocated. - - Otherwise, we observe in the output context that: - - the counter is the successor of the one stored in the initial context, - - the balance is at least decreased by fee, - - the available gas in the block decreased at least gas limit. *) - -(** Fee payment*) -let test_validate infos kind = - let open Lwt_result_syntax in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - amount = Some Tez.one; - } - infos - in - let* (_ : infos) = validate_diagnostic infos [op] in - return_unit - -(** Fee payment that emptying a self_delegated implicit. *) -let test_emptying_self_delegate infos kind = - let open Lwt_result_syntax in - let* fee = - Context.Contract.balance - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some false; - fee = Some fee; - } - infos - in - let* (_ : infos) = validate_diagnostic infos [op] in - return_unit - -let test_empty_undelegate infos kind = - let open Lwt_result_syntax in - let* fee = - Context.Contract.balance - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - fee = Some fee; - gas_limit = Some Op.High; - } - infos - in - let* (_ : infos) = validate_diagnostic ~deallocated:true infos [op] in - return_unit - -(** No gas consumer with the minimal gas limit for manager operations - passes validate. *) -let test_low_gas_limit_no_consumer infos kind = - let open Lwt_result_syntax in - let* op = - select_op - { - (operation_req_default kind) with - force_reveal = Some true; - gas_limit = Some Op.Low; - } - infos - in - let* (_ : infos) = validate_diagnostic infos [op] in - return_unit - -(* Feature flags.*) - -(* Select the error according to the positionned flag. - We assume that only one feature is disabled. *) -let flag_expect_failure flags errs = - let open Lwt_result_syntax in - match errs with - | [ - Environment.Ecoproto_error - Validate_errors.Manager.Sc_rollup_arith_pvm_disabled; - ] - when flags.scoru_arith = false -> - return_unit - | [Environment.Ecoproto_error Dal_errors.Dal_feature_disabled] - when flags.dal = false -> - return_unit - | [ - Environment.Ecoproto_error Validate_errors.Manager.Zk_rollup_feature_disabled; - ] - when flags.zkru = false -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - -(* Tests that operations depending on feature flags are not valid - when the flag is set as disable. - - See [is_disabled] and the [flags] in `manager_operation_helpers`. - We assume that only one flag is set at false in flag. - - In order to forge Scoru or Dal operation when the corresponding - feature is disable, we use a [infos_op] with default requirements, - so that we have a Sc_rollup.t. *) -let test_feature_flags infos kind = - let open Lwt_result_syntax in - let* counter = - Context.Contract.counter - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let* op = - select_op - { - {(operation_req_default kind) with force_reveal = Some true} with - counter = Some counter; - } - infos - in - let flags = infos.flags in - if is_disabled flags kind then - validate_ko_diagnostic infos [op] (flag_expect_failure flags) - else - let* (_ : infos) = validate_diagnostic infos [op] in - return_unit - -let () = - let mk_default () = default_init_ctxt () in - let mk_reveal () = - init_ctxt {ctxt_req_default with reveal_accounts = false} - in - let mk_deleg () = default_ctxt_with_delegation () in - let mk_gas () = - init_ctxt {ctxt_req_default with hard_gas_limit_per_block = Some gb_limit} - in - let mk_self_deleg () = default_ctxt_with_self_delegation () in - let mk_flags flags () = - let open Lwt_result_syntax in - let* infos_op = default_init_ctxt () in - let* infos = default_init_with_flags flags in - let infos = - { - infos with - ctxt = - { - infos.ctxt with - sc_rollup = infos_op.ctxt.sc_rollup; - zk_rollup = infos_op.ctxt.zk_rollup; - }; - } - in - return infos - in - let all = subjects in - let gas_consum = gas_consumer_in_validate_subjects in - let not_gas_consum = not_gas_consumer_in_validate_subjects in - let revealed = revealed_subjects in - List.iter - (fun (name, f, subjects, info_builder) -> - make_test ~register_test name f subjects info_builder) - [ - (* Expected validation failure *) - ("gas limit too low", test_low_gas_limit, gas_consum, mk_default); - ("gas limit too high", test_high_gas_limit, all, mk_default); - ("storage limit too high", test_high_storage_limit, all, mk_default); - ("counter too high", test_high_counter, all, mk_default); - ("counter too low", test_low_counter, all, mk_default); - ("unallocated source", test_not_allocated, all, mk_default); - ("unrevealed source", test_unrevealed_key, revealed, mk_reveal); - ("balance too low for fee payment", test_high_fee, all, mk_default); - ("empty delegate source", test_empty_implicit, revealed, mk_deleg); - ( "too much gas consumption in block", - test_exceeding_block_gas ~mode:Construction, - all, - mk_gas ); - (* Expected validation success *) - ("fees are taken when valid", test_validate, all, mk_default); - ("empty self-delegate", test_emptying_self_delegate, all, mk_self_deleg); - ( "too much gas consumption in mempool", - test_exceeding_block_gas ~mode:Mempool, - all, - mk_gas ); - ("empty undelegated source", test_empty_undelegate, all, mk_default); - ( "minimal gas for manager", - test_low_gas_limit_no_consumer, - not_gas_consum, - mk_default ); - (* TODO: https://gitlab.com/tezos/tezos/-/issues/6967 - Delete the test when not useful for sure. *) - (* ("dal disabled", test_feature_flags, all, mk_flags disabled_dal); *) - ( "scoru arith disabled", - test_feature_flags, - [K_Sc_rollup_origination], - mk_flags disabled_scoru_arith ); - ("zkru disabled", test_feature_flags, all, mk_flags disabled_zkru); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_mempool.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_mempool.ml deleted file mode 100644 index 052fad4efc85ac8e68ef70bc4075109ec3f43102..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_mempool.ml +++ /dev/null @@ -1,394 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/validate/main.exe \ - -- --file test_mempool.ml - Subject: Integration > Validate > Mempool mode -*) - -open Protocol -open Alpha_context -module Mempool = Mempool_validation - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["validation"; "mempool"] - -let extract_values ctxt (b : Block.t) = - let predecessor_level = - Level.from_raw ctxt (Raw_level.of_int32_exn b.header.shell.level) - in - let fitness = - Fitness.from_raw b.header.shell.fitness |> function - | Ok v -> v - | Error _ -> assert false - in - let predecessor_round = Fitness.round fitness in - let predecessor_hash = b.header.shell.predecessor in - (predecessor_level, predecessor_round, predecessor_hash) - -let op_with_hash op = (Operation.hash_packed op, op) - -let expect_ok_added ~__LOC__ x = - match x with - | Ok (mempool, Mempool.Added) -> mempool - | _ -> Format.kasprintf Stdlib.failwith "%s: expected added" __LOC__ - -let expect_conflict ~__LOC__ x = - match (x : ('a, Mempool.add_error) result) with - | Error (Add_conflict _) -> () - | _ -> Format.kasprintf Stdlib.failwith "%s: expected conflict" __LOC__ - -let expect_conflict_handled ~__LOC__ kind x = - match (x : (Mempool.t * Mempool.add_result, Mempool.add_error) result) with - | Ok (mempool, kind') when kind = kind' -> mempool - | _ -> - Format.kasprintf Stdlib.failwith "%s: expected handled conflict" __LOC__ - -let handler_always_keep ~existing_operation:_ ~new_operation:_ = `Keep - -let handler_always_replace ~existing_operation:_ ~new_operation:_ = `Replace - -let assert_empty_mempool ~__LOC__ mempool = - let operations = Mempool.operations mempool in - Assert.equal_bool - ~loc:__LOC__ - true - (Environment.Operation_hash.Map.is_empty operations) - -let assert_operation_present_in_mempool ~__LOC__ mempool ophl = - let operations = Mempool.operations mempool in - let resulting_mempool_operations = - Environment.Operation_hash.Map.bindings operations - |> List.map fst - |> List.sort Operation_hash.compare - in - let expected_operations = List.sort Operation_hash.compare ophl in - Assert.assert_equal_list - ~loc:__LOC__ - Operation_hash.equal - "operations present in mempool" - Operation_hash.pp - resulting_mempool_operations - expected_operations - -let test_simple () = - let open Lwt_result_syntax in - let* block, (c1, c2) = Context.init2 () in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash = - extract_values ctxt block - in - let vs, mempool = - Mempool.init - ctxt - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash - in - let* op1 = Op.transaction (B block) c1 c2 Tez.one_cent in - let op1 = op_with_hash op1 in - let* op1' = Op.transaction (B block) c1 c2 Tez.one in - let op1' = op_with_hash op1' in - let* op2 = Op.transaction (B block) c2 c1 Tez.one in - let op2 = op_with_hash op2 in - let*! res = Mempool.add_operation vs mempool op1 in - let mempool = expect_ok_added ~__LOC__ res in - let*! res = Mempool.add_operation vs mempool op2 in - let mempool = expect_ok_added ~__LOC__ res in - let*! res = Mempool.add_operation vs mempool op1' in - let () = expect_conflict ~__LOC__ res in - return_unit - -let test_imcompatible_mempool () = - let open Lwt_result_syntax in - let* block, _ = Context.init1 ~consensus_threshold:0 () in - let* block = Block.bake block in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash = - extract_values ctxt block - in - let (_vs : Mempool.validation_info), mempool1 = - Mempool.init - ctxt - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash - in - (* Create a second mempool on a different block *) - let* block2 = Block.bake block in - let* ctxt2 = - let+ incr = Incremental.begin_construction block2 in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash2 = - extract_values ctxt2 block2 - in - let (_vs : Mempool.validation_info), mempool2 = - Mempool.init - ctxt2 - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash:predecessor_hash2 - in - let () = - match Mempool.merge mempool1 mempool2 with - | Error Mempool.Incompatible_mempool -> () - | Error (Merge_conflict _) -> - Format.kasprintf - Stdlib.failwith - "%s: expected incompatible mempool" - __LOC__ - | Ok _ -> Format.kasprintf Stdlib.failwith "%s: expected conflict" __LOC__ - in - return_unit - -let test_merge () = - let open Lwt_result_syntax in - let* block, (c1, c2) = Context.init2 () in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash = - extract_values ctxt block - in - let vs, mempool_i = - Mempool.init - ctxt - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash - in - (* Build two mempool with a conflicting operation and check that the - merge fails and succeeds when a conflict handler is provided *) - let* op1 = Op.transaction (B block) c1 c2 Tez.one_cent in - let op1 = op_with_hash op1 in - let* op2 = Op.transaction (B block) c2 c1 Tez.one in - let op2 = op_with_hash op2 in - let*! res = Mempool.add_operation vs mempool_i op1 in - let mempool1 = expect_ok_added ~__LOC__ res in - let*! res = Mempool.add_operation vs mempool_i op2 in - let mempool2 = expect_ok_added ~__LOC__ res in - let merged_non_conflicting_mempool = - match Mempool.merge mempool1 mempool2 with - | Ok mempool -> mempool - | _ -> - Format.kasprintf Stdlib.failwith "%s: expected succesful merge" __LOC__ - in - let* op1' = Op.transaction (B block) c1 c2 Tez.one in - let op1' = op_with_hash op1' in - let*! res = Mempool.add_operation vs mempool_i op1' in - let mempool3 = expect_ok_added ~__LOC__ res in - let*! res = Mempool.add_operation vs mempool3 op2 in - let mempool3 = expect_ok_added ~__LOC__ res in - let () = - match Mempool.merge merged_non_conflicting_mempool mempool3 with - | Error (Merge_conflict _) -> () - | _ -> Format.kasprintf Stdlib.failwith "%s: expected conflict" __LOC__ - in - let merged_mempool_replace = - match - Mempool.merge - ~conflict_handler:handler_always_replace - merged_non_conflicting_mempool - mempool3 - with - | Ok mempool -> mempool - | _ -> - Format.kasprintf Stdlib.failwith "%s: expected succesful merge" __LOC__ - in - let* () = - assert_operation_present_in_mempool - ~__LOC__ - merged_mempool_replace - (List.map fst [op1'; op2]) - in - let merged_mempool_keep = - match - Mempool.merge - ~conflict_handler:handler_always_keep - merged_non_conflicting_mempool - mempool3 - with - | Ok mempool -> mempool - | _ -> - Format.kasprintf Stdlib.failwith "%s: expected succesful merge" __LOC__ - in - let* () = - assert_operation_present_in_mempool - ~__LOC__ - merged_mempool_keep - (List.map fst [op1; op2]) - in - (* Check that merging a mempool with itself is a success and returns - the identity *) - let* () = - match Mempool.merge mempool1 mempool1 with - | Ok mempool -> - let expected_operations = - Environment.Operation_hash.Map.bindings (Mempool.operations mempool1) - |> List.map fst - in - assert_operation_present_in_mempool ~__LOC__ mempool expected_operations - | Error _ -> assert false - in - return_unit - -let test_add_invalid_operation () = - let open Lwt_result_syntax in - let* block, c1 = Context.init1 () in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash = - extract_values ctxt block - in - let vs, mempool_i = - Mempool.init - ctxt - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash - in - let* op1 = Op.transaction (B block) c1 c1 ~gas_limit:Zero Tez.one_cent in - let op1 = op_with_hash op1 in - let*! res = Mempool.add_operation vs mempool_i op1 in - match res with - | Error (Mempool.Validation_error _) -> return_unit - | Error _ -> Stdlib.failwith "unexpected error" - | Ok _ -> Stdlib.failwith "unexpected success" - -let test_add_and_replace () = - let open Lwt_result_syntax in - let* block, (c1, c2) = Context.init2 () in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash = - extract_values ctxt block - in - let info, mempool_i = - Mempool.init - ctxt - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash - in - (* Try adding a conflicting operation using both handler strategy *) - let* op1 = Op.transaction (B block) c1 c2 Tez.one_cent in - let op1 = op_with_hash op1 in - let* op1' = Op.transaction (B block) c1 c2 Tez.one in - let op1' = op_with_hash op1' in - let*! res = Mempool.add_operation info mempool_i op1 in - let mempool = expect_ok_added ~__LOC__ res in - let*! res = Mempool.add_operation info mempool op1' in - let () = expect_conflict ~__LOC__ res in - let*! res = - Mempool.add_operation - ~conflict_handler:handler_always_keep - info - mempool - op1' - in - let final_mempool = expect_conflict_handled ~__LOC__ Unchanged res in - let* () = - assert_operation_present_in_mempool ~__LOC__ final_mempool [fst op1] - in - let*! res = - Mempool.add_operation - ~conflict_handler:handler_always_replace - info - mempool - op1' - in - let final_mempool = - expect_conflict_handled ~__LOC__ (Replaced {removed = fst op1}) res - in - let* () = - assert_operation_present_in_mempool ~__LOC__ final_mempool [fst op1'] - in - return_unit - -let test_remove_operation () = - let open Lwt_result_syntax in - let* block, (c1, c2) = Context.init2 () in - let* ctxt = - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let predecessor_level, predecessor_round, predecessor_hash = - extract_values ctxt block - in - let info, mempool_i = - Mempool.init - ctxt - Chain_id.zero - ~predecessor_level - ~predecessor_round - ~predecessor_hash - in - let* op1 = Op.transaction (B block) c1 c2 Tez.one_cent in - let op1 = op_with_hash op1 in - let* op2 = Op.transaction (B block) c1 c2 Tez.one in - let op2 = op_with_hash op2 in - (* Add one operation to the mempoolg *) - let*! res = Mempool.add_operation info mempool_i op1 in - let mempool = expect_ok_added ~__LOC__ res in - let* () = assert_operation_present_in_mempool ~__LOC__ mempool [fst op1] in - (* Try removing unknown operation and check that the mempool is unchanged *) - let mempool = Mempool.remove_operation mempool (fst op2) in - let* () = assert_operation_present_in_mempool ~__LOC__ mempool [fst op1] in - (* Try removing known operation and ensure that the mempool is empty *) - let empty_mempool = Mempool.remove_operation mempool (fst op1) in - assert_empty_mempool ~__LOC__ empty_mempool - -let () = - List.iter - (fun (title, f) -> register_test ~title f) - [ - ("simple", test_simple); - ("incompatible mempool", test_imcompatible_mempool); - ("merge", test_merge); - ("adding invalid operation", test_add_invalid_operation); - ("adding operation with conflict handler", test_add_and_replace); - ("remove operations", test_remove_operation); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_sanity.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_sanity.ml deleted file mode 100644 index 17e103ef812f978eacecbdfd558cb57473af0244..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_sanity.ml +++ /dev/null @@ -1,145 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (validate manager) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/validate/main.exe \ - -- --file test_sanity.ml - Subject: Validation of operation. -*) - -open Protocol -open Alpha_context -open Manager_operation_helpers - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["validation"; "operation"] - -(** The goal of this test is to ensure that [select_op] generate the - wanted kind of manager operation - - Note: if a new manager operation kind is added in the protocol, - [Manager_operation_helpers.manager_operation_kind] should be - extended. You will also have to extend - [Manager_operation_helpers.select_op] with a new `mk` for this new - operation. Finally the list [Manager_operation_helpers.subjects] - should also be extended to run the validate test on the new manager - operation kind. *) -let ensure_kind infos kind = - let open Lwt_result_syntax in - let* op = - select_op - {(operation_req_default kind) with force_reveal = Some false} - infos - in - let (Operation_data {contents; _}) = op.protocol_data in - match contents with - | Single (Manager_operation {operation; _}) -> ( - match (operation, kind) with - | Transaction _, K_Transaction - | Reveal _, K_Reveal - | Origination _, K_Origination - | Delegation _, K_Delegation - | Delegation _, K_Undelegation - | Delegation _, K_Self_delegation - | Register_global_constant _, K_Register_global_constant - | Set_deposits_limit _, K_Set_deposits_limit - | Update_consensus_key _, K_Update_consensus_key - | Increase_paid_storage _, K_Increase_paid_storage - | Transfer_ticket _, K_Transfer_ticket - | Sc_rollup_originate _, K_Sc_rollup_origination - | Sc_rollup_add_messages _, K_Sc_rollup_add_messages - | Sc_rollup_cement _, K_Sc_rollup_cement - | Sc_rollup_publish _, K_Sc_rollup_publish - | Sc_rollup_refute _, K_Sc_rollup_refute - | Sc_rollup_timeout _, K_Sc_rollup_timeout - | Sc_rollup_execute_outbox_message _, K_Sc_rollup_execute_outbox_message - | Sc_rollup_recover_bond _, K_Sc_rollup_recover_bond - | Dal_publish_commitment _, K_Dal_publish_commitment - | Zk_rollup_origination _, K_Zk_rollup_origination - | Zk_rollup_publish _, K_Zk_rollup_publish - | Zk_rollup_update _, K_Zk_rollup_update -> - return_unit - | ( ( Transaction _ | Origination _ | Register_global_constant _ - | Delegation _ | Set_deposits_limit _ | Update_consensus_key _ - | Increase_paid_storage _ | Reveal _ | Transfer_ticket _ - | Sc_rollup_originate _ | Sc_rollup_publish _ | Sc_rollup_cement _ - | Sc_rollup_add_messages _ | Sc_rollup_refute _ | Sc_rollup_timeout _ - | Sc_rollup_execute_outbox_message _ | Sc_rollup_recover_bond _ - | Dal_publish_commitment _ | Zk_rollup_origination _ - | Zk_rollup_publish _ | Zk_rollup_update _ ), - _ ) -> - assert false) - | Single _ -> assert false - | Cons _ -> assert false - -let ensure_manager_operation_coverage () = - let open Lwt_result_syntax in - let* infos = default_init_ctxt () in - List.iter_es (fun kind -> ensure_kind infos kind) subjects - -open Generator_descriptors -open Valid_operations_generators - -(** This test ensures that it exists a valid operation generator for - each operation. - - Note: When adding a new operation, one should refer to {! - Generator_descriptor} to see how to add its valid operation - generator. *) -let covalidation_sanity () = - let open Lwt_result_syntax in - let max_batch_size = 1 in - let nb_bootstrap = 7 in - List.iter_es - (fun kind -> - let* _, candidates = covalid [kind] ~nb_bootstrap ~max_batch_size in - match List.hd candidates with - | None -> - failwith "no candidates was generated for kind '%a'" pp_op_kind kind - | Some {protocol_data = Operation_data {contents; _}; _} -> ( - match (contents, kind) with - | Single (Preattestation _), KPreattestation -> return_unit - | Single (Preattestation _), _ -> assert false - | Single (Attestation _), KAttestation -> return_unit - | Single (Attestation _), _ -> assert false - | Single (Seed_nonce_revelation _), KNonce -> return_unit - | Single (Seed_nonce_revelation _), _ -> assert false - | Single (Vdf_revelation _), KVdf -> return_unit - | Single (Vdf_revelation _), _ -> assert false - | Single (Double_attestation_evidence _), KDbl_consensus -> - return_unit - | Single (Double_attestation_evidence _), _ -> assert false - | Single (Double_preattestation_evidence _), KDbl_consensus -> - return_unit - | Single (Double_preattestation_evidence _), _ -> assert false - | Single (Double_baking_evidence _), KDbl_baking -> return_unit - | Single (Double_baking_evidence _), _ -> assert false - | Single (Activate_account _), KActivate -> return_unit - | Single (Activate_account _), _ -> assert false - | Single (Proposals _), KProposals -> return_unit - | Single (Proposals _), _ -> assert false - | Single (Ballot _), (KBallotExp | KBallotProm) -> return_unit - | Single (Ballot _), _ -> assert false - | Single (Drain_delegate _), KDrain -> return_unit - | Single (Drain_delegate _), _ -> assert false - | Single (Manager_operation _), KManager - | Cons (Manager_operation _, _), KManager -> - return_unit - | Single (Manager_operation _), _ | Cons (Manager_operation _, _), _ - -> - assert false - | Single (Failing_noop _), _ -> assert false)) - all_kinds - -let () = - register_test - ~title:"manager operation coverage" - ensure_manager_operation_coverage - -let () = register_test ~title:"covalidation coverage" covalidation_sanity diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_validation_batch.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_validation_batch.ml deleted file mode 100644 index e4788463d16fa7813df9f705cf2b44361ca12671..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/test_validation_batch.ml +++ /dev/null @@ -1,575 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (validate manager) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/integration/validate/main.exe \ - -- --file test_validation_batch.ml - Subject: Validation of batched manager operation. - - There may be overlap with - [lib_protocol/test/integration/operations/test_combined_operations.ml]. -*) - -open Protocol -open Alpha_context -open Manager_operation_helpers -open Error_helpers - -let register_test = - Tezt_helpers.register_test_es ~__FILE__ ~file_tags:["validation"; "batch"] - -let make_test = make_test ~register_test - -let make_test_batched = make_test_batched ~register_test - -(** {2 Tests on operation batches} *) - -let batch_in_the_middle infos kind1 kind2 = - let open Lwt_result_syntax in - let* counter = - Context.Contract.counter - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let counter = Manager_counter.succ counter in - let* operation1 = - select_op - { - (operation_req_default kind1) with - force_reveal = Some false; - counter = Some counter; - } - infos - in - let counter = Manager_counter.succ counter in - let* reveal = - mk_reveal - { - (operation_req_default K_Reveal) with - fee = Some Tez.one_mutez; - counter = Some counter; - } - infos - in - let counter = Manager_counter.succ counter in - let* operation2 = - select_op - { - (operation_req_default kind2) with - force_reveal = Some false; - counter = Some counter; - } - infos - in - let* batch = - Op.batch_operations - ~recompute_counters:false - ~source:(contract_of (get_source infos)) - (Context.B infos.ctxt.block) - [operation1; reveal; operation2] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - validate_ko_diagnostic infos [batch] expect_failure - -let batch_two_reveals infos kind = - let open Lwt_result_syntax in - let* counter = - Context.Contract.counter - (B infos.ctxt.block) - (contract_of (get_source infos)) - in - let counter = Manager_counter.succ counter in - let* reveal = - mk_reveal - { - (operation_req_default K_Reveal) with - fee = Some Tez.one_mutez; - counter = Some counter; - } - infos - in - let counter = Manager_counter.succ counter in - let* reveal1 = - mk_reveal - { - (operation_req_default K_Reveal) with - fee = Some Tez.one_mutez; - counter = Some counter; - } - infos - in - let counter = Manager_counter.succ counter in - let* operation = - select_op - { - (operation_req_default kind) with - force_reveal = Some false; - counter = Some counter; - } - infos - in - let* batch = - Op.batch_operations - ~recompute_counters:false - ~source:(contract_of (get_source infos)) - (Context.B infos.ctxt.block) - [reveal; reveal1; operation] - in - let expect_failure = expect_incorrect_reveal_position ~loc:__LOC__ in - validate_ko_diagnostic infos [batch] expect_failure - -let batch_two_sources infos kind1 kind2 = - let open Lwt_result_syntax in - let source = contract_of (get_source infos) in - let* counter = Context.Contract.counter (B infos.ctxt.block) source in - let counter = Manager_counter.succ counter in - let* operation1 = - select_op - { - (operation_req_default kind1) with - force_reveal = Some true; - counter = Some counter; - } - infos - in - let source2 = - match infos.accounts.del with None -> assert false | Some s -> s - in - let infos = - {infos with accounts = {infos.accounts with sources = [source2]}} - in - let* operation2 = - select_op - {(operation_req_default kind2) with force_reveal = Some false} - infos - in - let* batch = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [operation1; operation2] - in - let expect_failure = - Error_helpers.expect_inconsistent_sources - ~loc:__LOC__ - ~first_source:source - ~source:(contract_of source2) - in - validate_ko_diagnostic infos [batch] expect_failure - -(** Counters in a batch should be a sequence from the successor of - the stored counter associated to source in the initial context. *) -let batch_incons_counters infos kind1 kind2 = - let open Lwt_result_syntax in - let source = contract_of (get_source infos) in - let* counter = Context.Contract.counter (B infos.ctxt.block) source in - let fee = Some Tez.one_mutez in - let op_infos = operation_req_default K_Reveal in - let op_infos = {{op_infos with fee} with counter = Some counter} in - let* reveal = mk_reveal op_infos infos in - let counter0 = counter in - let counter = Manager_counter.succ counter in - let counter2 = Manager_counter.succ counter in - let counter3 = Manager_counter.succ counter2 in - let operation counter kind = - select_op - { - (operation_req_default kind) with - counter = Some counter; - force_reveal = Some false; - } - infos - in - let op_counter = operation counter in - let op_counter0 = operation counter0 in - let op_counter2 = operation counter2 in - let op_counter3 = operation counter3 in - let* op1 = op_counter kind1 in - let* op2 = op_counter kind2 in - let* batch_same = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op1; op2] - in - let* op1 = op_counter2 kind1 in - let* op2 = op_counter3 kind2 in - let* batch_in_the_future = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op1; op2] - in - let* op1 = op_counter kind1 in - let* op2 = op_counter3 kind2 in - let* batch_missing_one = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op1; op2] - in - let* op1 = op_counter2 kind1 in - let* op2 = op_counter kind2 in - let* batch_inverse = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op1; op2] - in - let* op1 = op_counter0 kind1 in - let* op2 = op_counter kind2 in - let* batch_in_the_past = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op1; op2] - in - let* i = Incremental.begin_construction infos.ctxt.block in - let test_inconsistent_counters ~__LOC__ ~before_wrong_counter ~wrong_counter - op = - let expect_failure = - (* Remember that [select_op] actually builds an operation - using the successor of the counter argument. *) - Error_helpers.expect_inconsistent_counters - ~loc:__LOC__ - ~source - ~previous_counter:(Manager_counter.succ before_wrong_counter) - ~counter:(Manager_counter.succ wrong_counter) - in - let* (_ : Incremental.t) = Incremental.add_operation ~expect_failure i op in - return_unit - in - let* () = - test_inconsistent_counters - ~__LOC__ - ~before_wrong_counter:counter - ~wrong_counter:counter - batch_same - in - let* () = - test_inconsistent_counters - ~__LOC__ - ~before_wrong_counter:counter0 - ~wrong_counter:counter2 - batch_in_the_future - in - let* () = - test_inconsistent_counters - ~__LOC__ - ~before_wrong_counter:counter - ~wrong_counter:counter3 - batch_missing_one - in - let* () = - test_inconsistent_counters - ~__LOC__ - ~before_wrong_counter:counter0 - ~wrong_counter:counter2 - batch_inverse - in - test_inconsistent_counters - ~__LOC__ - ~before_wrong_counter:counter0 - ~wrong_counter:counter0 - batch_in_the_past - -(** A batch that consumes all the balance for fees can only face the total - consumption at the end of the batch. *) -let batch_emptying_balance_in_the_middle infos kind1 kind2 = - let open Lwt_result_syntax in - let source = contract_of (get_source infos) in - let* counter = Context.Contract.counter (B infos.ctxt.block) source in - let* init_bal = Context.Contract.balance (B infos.ctxt.block) source in - let counter = counter in - let* reveal = - mk_reveal - {(operation_req_default K_Reveal) with counter = Some counter} - infos - in - let counter = Manager_counter.succ counter in - let operation fee = - select_op - { - (operation_req_default kind1) with - force_reveal = Some false; - counter = Some counter; - fee = Some fee; - } - infos - in - let counter = Manager_counter.succ counter in - let operation2 fee = - select_op - { - (operation_req_default kind2) with - force_reveal = Some false; - counter = Some counter; - fee = Some fee; - } - infos - in - let* op_case1 = operation init_bal in - let* op2_case1 = operation2 Tez.zero in - let* case1 = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op_case1; op2_case1] - in - let* i = Incremental.begin_construction infos.ctxt.block in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error (Contract_storage.Empty_implicit_contract _)] - -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - let* (_ : Incremental.t) = - Incremental.add_operation i case1 ~expect_failure - in - return_unit - -(** A batch that consumes all the balance for fees only at the end of - the batch passes validate.*) -let batch_empty_at_end infos kind1 kind2 = - let open Lwt_result_wrap_syntax in - let source = contract_of (get_source infos) in - let* counter = Context.Contract.counter (B infos.ctxt.block) source in - let* init_bal = Context.Contract.balance (B infos.ctxt.block) source in - let half_init_bal = Tez_helpers.(init_bal /! 2L) in - let* reveal = - mk_reveal - {(operation_req_default K_Reveal) with counter = Some counter} - infos - in - let counter = Manager_counter.succ counter in - let operation fee = - select_op - { - (operation_req_default kind1) with - force_reveal = Some false; - counter = Some counter; - fee = Some fee; - } - infos - in - let counter = Manager_counter.succ counter in - let operation2 fee = - select_op - { - (operation_req_default kind2) with - force_reveal = Some false; - counter = Some counter; - fee = Some fee; - } - infos - in - let* op_case2 = operation Tez.zero in - let* op2_case2 = operation2 init_bal in - let* op_case3 = operation half_init_bal in - let* op2_case3 = operation2 half_init_bal in - let* case3 = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op_case3; op2_case3] - in - let* case2 = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op_case2; op2_case2] - in - let* (_ : infos) = validate_diagnostic ~deallocated:true infos [case2] in - let* (_ : infos) = validate_diagnostic ~deallocated:true infos [case3] in - return_unit - -(** Simple reveal followed by a transaction. *) -let batch_reveal_transaction infos = - let open Lwt_result_syntax in - let source = contract_of (get_source infos) in - let* counter = Context.Contract.counter (B infos.ctxt.block) source in - let counter = counter in - let fee = Tez.one_mutez in - let* reveal = - mk_reveal - { - (operation_req_default K_Reveal) with - fee = Some fee; - counter = Some counter; - } - infos - in - let counter = Manager_counter.succ counter in - let* transaction = - mk_transaction - { - (operation_req_default K_Reveal) with - counter = Some counter; - force_reveal = Some false; - } - infos - in - let* batch = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; transaction] - in - let* (_ : Incremental.t) = Incremental.begin_construction infos.ctxt.block in - let* (_ : infos) = validate_diagnostic infos [batch] in - return_unit - -(** A batch of manager operation must not exceed the initial available gas in the block. *) -let batch_exceeding_block_gas ~mempool_mode infos kind1 kind2 = - let open Lwt_result_syntax in - let source = contract_of (get_source infos) in - let* counter = Context.Contract.counter (B infos.ctxt.block) source in - let g_limit = Gas.Arith.add gb_limit Gas.Arith.(integral_of_int_exn 1) in - let half_limit = - Gas.Arith.add half_gb_limit Gas.Arith.(integral_of_int_exn 1) - in - let* reveal = - mk_reveal - {(operation_req_default K_Reveal) with counter = Some counter} - infos - in - let counter = Manager_counter.succ counter in - let operation gas_limit = - select_op - { - (operation_req_default kind1) with - force_reveal = Some false; - counter = Some counter; - gas_limit = Some (Custom_gas gas_limit); - } - infos - in - let counter = Manager_counter.succ counter in - let operation2 gas_limit = - select_op - { - (operation_req_default kind2) with - force_reveal = Some false; - counter = Some counter; - gas_limit = Some (Custom_gas gas_limit); - } - infos - in - let* op_case1 = operation g_limit in - let* op2_case1 = operation2 Gas.Arith.zero in - let* op_case2 = operation half_limit in - let* op2_case2 = operation2 g_limit in - let* op_case3 = operation half_limit in - let* op2_case3 = operation2 half_limit in - let* case1 = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op_case1; op2_case1] - in - let* case3 = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op_case3; op2_case3] - in - let* case2 = - Op.batch_operations - ~recompute_counters:false - ~source - (Context.B infos.ctxt.block) - [reveal; op_case2; op2_case2] - in - let* i = Incremental.begin_construction infos.ctxt.block ~mempool_mode in - let expect_failure errs = - match errs with - | [Environment.Ecoproto_error Gas.Block_quota_exceeded] - when not mempool_mode -> - return_unit - | [ - Environment.Ecoproto_error Gas.Gas_limit_too_high; - Environment.Ecoproto_error Gas.Block_quota_exceeded; - ] - when mempool_mode -> - return_unit - | err -> - failwith - "Error trace:@, %a does not match the expected one" - Error_monad.pp_print_trace - err - in - let* (_ : Incremental.t) = - Incremental.add_operation i case1 ~expect_failure - in - let* (_ : Incremental.t) = - Incremental.add_operation i case3 ~expect_failure - in - let* (_ : Incremental.t) = - Incremental.add_operation i case2 ~expect_failure - in - return_unit - -let () = - let mk_default () = default_init_ctxt () in - let mk_high_gas_limit () = - init_ctxt {ctxt_req_default with hard_gas_limit_per_block = Some gb_limit} - in - let revealed = revealed_subjects in - let () = - register_test ~title:"batch reveal and transaction" @@ fun () -> - let* infos = default_init_ctxt () in - let infos = - match infos with - | Error errs -> Tezt.Test.fail "Error: %a" Error_monad.pp_print_trace errs - | Ok infos -> infos - in - batch_reveal_transaction infos - in - List.iter - (fun (name, f, subjects, info_builder) -> - make_test name f subjects info_builder) - [("batch two reveals", batch_two_reveals, revealed, mk_default)] ; - List.iter - (fun (name, f, subjects, info_builder) -> - make_test_batched name f subjects info_builder) - [ - ("reveal in the middle", batch_in_the_middle, revealed, mk_default); - ("batch two sources", batch_two_sources, revealed, mk_default); - ("batch incons. counters", batch_incons_counters, revealed, mk_default); - ( "empty balance in middle of batch", - batch_emptying_balance_in_the_middle, - revealed, - mk_default ); - ("empty balance at end of batch", batch_empty_at_end, revealed, mk_default); - ( "too much gas consumption", - batch_exceeding_block_gas ~mempool_mode:false, - revealed, - mk_high_gas_limit ); - ( "too much gas consumption (mempool)", - batch_exceeding_block_gas ~mempool_mode:true, - revealed, - mk_high_gas_limit ); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/valid_operations_generators.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/valid_operations_generators.ml deleted file mode 100644 index 488e0a2142074b5a189a3506584b40fe9eb80186..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/valid_operations_generators.ml +++ /dev/null @@ -1,252 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context -open Generator_descriptors - -(** {2 Building the Setup} *) - -(** Setup for generating valid operation of several kind of - operations. It gathers the following information to setup - {! Generator_descriptor.state} into which valid operations - can be generated: - - [nb_cycles] the total number of cycles to bake, - - [nb_blocks] the number of blocks to bake in the last cycle, - - [params] the constants required, and - - [prelude] that associates to each cycle to bake a list of - {! Generator_descriptors.descriptor} prelude functions. *) -type setup = { - prelude : - (int * (state -> (packed_operation list * state) tzresult Lwt.t) list) list; - nb_cycles : int; - nb_blocks : int; - params : Parameters.t; -} - -(** Select the prelude actions of a specific cycle in a setup prelude. *) -let prelude_on_cycle (c : int) - (actions : - (int * (state -> (packed_operation list * state) tzresult Lwt.t) list) - list) : (state -> (packed_operation list * state) tzresult Lwt.t) list = - match List.filter (fun (c1, _actions) -> c = c1) actions with - | (c1, actions) :: _ -> - assert (c = c1) ; - actions - | [] -> [] - -(** Knowing the total number of required cycles, normalize a prelude - on the list of the pair of a cycle and prelude actions. *) -let normalize_preludes nb_cycles (descr : descriptor) = - let normalize prelude = - match prelude with - | On n, actions -> [(nb_cycles - n, actions)] - | From n, actions -> - List.fold_left - (fun acc i -> acc @ [(nb_cycles - n + i, actions)]) - [] - (1 -- n) - in - let prim = normalize descr.prelude in - match descr.opt_prelude with - | Some prelude -> normalize prelude @ prim - | None -> prim - -(** Insert a normalized prelude in a prelude of a setup.*) -let rec insert_normalize_preludes - ((n, action) : - int * (state -> (packed_operation list * state) tzresult Lwt.t)) - (preludes : - (int * (state -> (packed_operation list * state) tzresult Lwt.t) list) - list) = - match preludes with - | [] -> [(n, [action])] - | (m, actions) :: rest -> - if m = n then (m, actions @ [action]) :: rest - else (m, actions) :: insert_normalize_preludes (n, action) rest - -(** Produce a setup prelude from a list of descriptor and a nb of - cycles*) -let compose_preludes nb_cycles descrs = - let normalized_preludes = List.map (normalize_preludes nb_cycles) descrs in - List.fold_left - (fun acc pre -> - List.fold_left (fun acc pr -> insert_normalize_preludes pr acc) acc pre) - [] - normalized_preludes - -(** Agregate the parameters of several {! Generator_descriptors.descriptor}.*) -let initiated_params descrs nb_accounts = - let consensus_committee_size = nb_accounts in - let initial_params = - Tezos_protocol_019_PtParisB_parameters.Default_parameters - .parameters_of_constants - { - Context.default_test_constants with - consensus_threshold = 0; - consensus_committee_size; - dal = - { - Context.default_test_constants.dal with - cryptobox_parameters = - { - Context.default_test_constants.dal.cryptobox_parameters with - number_of_shards = consensus_committee_size; - }; - }; - } - in - let descrs_params = List.map (fun descr -> descr.parameters) descrs in - List.fold_left (fun acc f -> f acc) initial_params descrs_params - -(** Make a [setup] from a list of {! Generator_descriptors.descriptor}. The required number of - cycles and number of blocks in the last cycle are the maximum of - required cycle and number of block in the descriptors list. The - prelude is the composition of the composition of the descriptors - preludes list -- see [compose_preludes]. The parameters are the agregation of the - descriptors parameters -- see [initiated_params]. *) -let setup_of descrs nb_accounts = - let params = initiated_params descrs nb_accounts in - let max_list l = List.fold_left max 0 l in - let required_cycle_list l = - List.map (fun descr -> descr.required_cycle params) l - in - let required_block_list l = - List.map (fun descr -> descr.required_block params) l - in - let sorted_descrs = - List.sort - (fun pre1 pre2 -> - Int.compare (pre1.required_cycle params) (pre2.required_cycle params)) - descrs - in - let nb_cycles = max_list (required_cycle_list descrs) in - let nb_blocks = max_list (required_block_list descrs) in - let prelude = compose_preludes nb_cycles sorted_descrs in - {prelude; nb_cycles; nb_blocks; params} - -(** From a number of accounts and a list of descriptors set up the - prelude state. - - Thanks to the setup computing for the list of descriptors -- see [setup_of] --, - initiates a context with the setup parameters, and the number of - accounts. Initiate a state that will be fulfilled during the - preludes. During the required number of cycles of the setup, bakes - each cycle with the setup prelude by selecting the actions to - perform on it. On the last cycle, bake the required number of - blocks of the setup. Finally, adds the delegates at the end of - the prelude in the state. *) -let init nb_accounts descrs = - let open Lwt_result_syntax in - let setup = setup_of descrs nb_accounts in - let* initial_block, bootstraps = - Context.init_with_parameters_n setup.params nb_accounts - in - let* voters = Context.Vote.get_listings (B initial_block) in - let* initial_voters = - List.map_es (fun (c, _) -> return (Contract.Implicit c)) voters - in - let my_bake selected_preludes_for_cycle state = - let* state, operations = - List.fold_left_es - (fun (state, ops) prelude -> - let+ ops', state = prelude state in - let ops = ops' @ ops in - (state, ops)) - (state, []) - selected_preludes_for_cycle - in - let b = state.block in - let operations = - List.sort (fun op1 op2 -> Operation.compare_by_passes op2 op1) operations - in - let+ block = Block.bake ~operations b in - {state with block; pred = Some b} - in - let my_bake_n cycle n state = - List.fold_left_es - (fun state _ -> - let selected_preludes = prelude_on_cycle cycle setup.prelude in - my_bake selected_preludes state) - state - (1 -- n) - in - let my_bake_until_cycle_end cycle state = - let current_level = state.block.Block.header.shell.level in - let current_level = - Int32.rem current_level setup.params.constants.blocks_per_cycle - in - let delta = - Int32.sub setup.params.constants.blocks_per_cycle current_level - in - my_bake_n cycle (Int32.to_int delta) state - in - let* state = - List.fold_left_es - (fun state cycle -> my_bake_until_cycle_end cycle state) - (init_state initial_block ~voters:initial_voters ~bootstraps) - (Stdlib.List.init setup.nb_cycles Fun.id) - in - let my_bake_n_default n state = - List.fold_left_es - (fun state _ -> - let pred = state.block in - let+ block = Block.bake state.block in - {state with block; pred = Some pred}) - state - (1 -- n) - in - let* state = - if setup.nb_blocks >= 1 then my_bake_n_default setup.nb_blocks state - else return state - in - return state - -(** In a state, generates all the valid operations of a list of kinds. *) -let candidates state kinds nb_bootstrap max_batch_size = - let open Lwt_result_syntax in - let* candidates = - List.fold_left_es - (fun acc k -> - let* candidates = - (descriptor_of k ~nb_bootstrap ~max_batch_size).candidates_generator - state - in - let acc = acc @ candidates in - return acc) - [] - kinds - in - return candidates - -(** From a list of kind of operations generates all the valid - operations of this kind and the generation state. *) -let covalid ks ~nb_bootstrap ~max_batch_size = - let open Lwt_result_syntax in - let* state = - init nb_bootstrap (descriptors_of ~nb_bootstrap ~max_batch_size ks) - in - let* candidates = candidates state ks nb_bootstrap max_batch_size in - return (state, candidates) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/validate_helpers.ml b/src/proto_019_PtParisB/lib_protocol/test/integration/validate/validate_helpers.ml deleted file mode 100644 index 3b46a81c6d8cea65df377af22ac7e15957119200..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/validate/validate_helpers.ml +++ /dev/null @@ -1,399 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -module Registered_nonces = Nonce -open Protocol -open Alpha_context -module Manager = Manager_operation_helpers - -(** {2 Helpers} *) - -(** {3 Randomness } *) - -let gen_bounded_int min max = QCheck2.Gen.(generate1 @@ int_range min max) - -let pick_one l = QCheck2.Gen.(generate1 @@ oneofl l) - -let pick_n (n : int) (l : 'a list) : 'a list = - List.take_n n QCheck2.Gen.(generate1 @@ shuffle_l l) - -(** {3 Helpers for lists } *) - -let get_n l n = - assert (List.length l > n) ; - Stdlib.List.nth l n - -let mycombine l1 l2 = - let sz_dels = List.length l1 in - let sz_phs = List.length l2 in - let dels, phs = - if sz_dels = sz_phs then (l1, l2) - else if sz_dels < sz_phs then (l1, List.take_n sz_dels l2) - else (List.take_n sz_phs l1, l2) - in - Stdlib.List.combine dels phs - -(** {3 Global Values}*) - -let ballots = Vote.[Yay; Nay; Pass] - -let protos = - List.map - (fun s -> Protocol_hash.of_b58check_exn s) - [ - "ProtoALphaALphaALphaALphaALphaALphaALpha61322gcLUGH"; - "ProtoALphaALphaALphaALphaALphaALphaALphabc2a7ebx6WB"; - "ProtoALphaALphaALphaALphaALphaALphaALpha84efbeiF6cm"; - "ProtoALphaALphaALphaALphaALphaALphaALpha91249Z65tWS"; - "ProtoALphaALphaALphaALphaALphaALphaALpha537f5h25LnN"; - "ProtoALphaALphaALphaALphaALphaALphaALpha5c8fefgDYkr"; - "ProtoALphaALphaALphaALphaALphaALphaALpha3f31feSSarC"; - "ProtoALphaALphaALphaALphaALphaALphaALphabe31ahnkxSC"; - "ProtoALphaALphaALphaALphaALphaALphaALphabab3bgRb7zQ"; - "ProtoALphaALphaALphaALphaALphaALphaALphaf8d39cctbpk"; - "ProtoALphaALphaALphaALphaALphaALphaALpha3b981byuYxD"; - "ProtoALphaALphaALphaALphaALphaALphaALphaa116bccYowi"; - "ProtoALphaALphaALphaALphaALphaALphaALphacce68eHqboj"; - "ProtoALphaALphaALphaALphaALphaALphaALpha225c7YrWwR7"; - "ProtoALphaALphaALphaALphaALphaALphaALpha58743cJL6FG"; - "ProtoALphaALphaALphaALphaALphaALphaALphac91bcdvmJFR"; - "ProtoALphaALphaALphaALphaALphaALphaALpha1faaadhV7oW"; - "ProtoALphaALphaALphaALphaALphaALphaALpha98232gD94QJ"; - "ProtoALphaALphaALphaALphaALphaALphaALpha9d1d8cijvAh"; - "ProtoALphaALphaALphaALphaALphaALphaALphaeec52dKF6Gx"; - "ProtoALphaALphaALphaALphaALphaALphaALpha841f2cQqajX"; - ] - -type secret_account = { - blinded_public_key_hash : Blinded_public_key_hash.t; - account : Signature.Ed25519.Public_key_hash.t; - activation_code : Blinded_public_key_hash.activation_code; - amount : Tez.t; -} - -let secrets = - (* Exported from proto_019_PtParisB client - TODO : remove when relocated to lib_crypto *) - let read_key mnemonic email password = - match Tezos_client_base.Bip39.of_words mnemonic with - | None -> assert false - | Some t -> - (* TODO: unicode normalization (NFKD)... *) - let passphrase = Bytes.(cat (of_string email) (of_string password)) in - let sk = Tezos_client_base.Bip39.to_seed ~passphrase t in - let sk = Bytes.sub sk 0 32 in - let sk : Signature.Secret_key.t = - Ed25519 - (Data_encoding.Binary.of_bytes_exn - Signature.Ed25519.Secret_key.encoding - sk) - in - let pk = Signature.Secret_key.to_public_key sk in - let pkh = Signature.Public_key.hash pk in - (pkh, pk, sk) - in - List.map - (fun (mnemonic, secret, amount, pkh, password, email) -> - let pkh', pk, sk = read_key mnemonic email password in - let pkh = Signature.Ed25519.Public_key_hash.of_b58check_exn pkh in - assert (Signature.Public_key_hash.equal (Ed25519 pkh) pkh') ; - let activation_code = - Stdlib.Option.get - (Blinded_public_key_hash.activation_code_of_hex secret) - in - let bpkh = Blinded_public_key_hash.of_ed25519_pkh activation_code pkh in - let account = Account.{pkh = Ed25519 pkh; pk; sk} in - Account.add_account account ; - { - blinded_public_key_hash = bpkh; - account = pkh; - activation_code; - amount = - WithExceptions.Option.to_exn - ~none:(Invalid_argument "tez conversion") - (Tez.of_mutez (Int64.of_string amount)); - }) - [ - ( [ - "envelope"; - "hospital"; - "mind"; - "sunset"; - "cancel"; - "muscle"; - "leisure"; - "thumb"; - "wine"; - "market"; - "exit"; - "lucky"; - "style"; - "picnic"; - "success"; - ], - "0f39ed0b656509c2ecec4771712d9cddefe2afac", - "23932454669343", - "tz1MawerETND6bqJqx8GV3YHUrvMBCDasRBF", - "z0eZHQQGKt", - "cjgfoqmk.wpxnvnup@tezos.example.org" ); - ( [ - "flag"; - "quote"; - "will"; - "valley"; - "mouse"; - "chat"; - "hold"; - "prosper"; - "silk"; - "tent"; - "cruel"; - "cause"; - "demise"; - "bottom"; - "practice"; - ], - "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4", - "72954577464032", - "tz1X4maqF9tC1Yn4jULjHRAyzjAtc25Z68TX", - "MHErskWPE6", - "oklmcktr.ztljnpzc@tezos.example.org" ); - ( [ - "library"; - "away"; - "inside"; - "paper"; - "wise"; - "focus"; - "sweet"; - "expose"; - "require"; - "change"; - "stove"; - "planet"; - "zone"; - "reflect"; - "finger"; - ], - "411dfef031eeecc506de71c9df9f8e44297cf5ba", - "217487035428349", - "tz1SWBY7rWMutEuWS54Pt33MkzAS6eWkUuTc", - "0AO6BzQNfN", - "ctgnkvqm.kvtiybky@tezos.example.org" ); - ( [ - "cruel"; - "fluid"; - "damage"; - "demand"; - "mimic"; - "above"; - "village"; - "alpha"; - "vendor"; - "staff"; - "absent"; - "uniform"; - "fire"; - "asthma"; - "milk"; - ], - "08d7d355bc3391d12d140780b39717d9f46fcf87", - "4092742372031", - "tz1amUjiZaevaxQy5wKn4SSRvVoERCip3nZS", - "9kbZ7fR6im", - "bnyxxzqr.tdszcvqb@tezos.example.org" ); - ( [ - "opera"; - "divorce"; - "easy"; - "myself"; - "idea"; - "aim"; - "dash"; - "scout"; - "case"; - "resource"; - "vote"; - "humor"; - "ticket"; - "client"; - "edge"; - ], - "9b7cad042fba557618bdc4b62837c5f125b50e56", - "17590039016550", - "tz1Zaee3QBtD4ErY1SzqUvyYTrENrExu6yQM", - "suxT5H09yY", - "iilkhohu.otnyuvna@tezos.example.org" ); - ( [ - "token"; - "similar"; - "ginger"; - "tongue"; - "gun"; - "sort"; - "piano"; - "month"; - "hotel"; - "vote"; - "undo"; - "success"; - "hobby"; - "shell"; - "cart"; - ], - "124c0ca217f11ffc6c7b76a743d867c8932e5afd", - "26322312350555", - "tz1geDUUhfXK1EMj7VQdRjug1MoFe6gHWnCU", - "4odVdLykaa", - "kwhlglvr.slriitzy@tezos.example.org" ); - ( [ - "shield"; - "warrior"; - "gorilla"; - "birth"; - "steak"; - "neither"; - "feel"; - "only"; - "liberty"; - "float"; - "oven"; - "extend"; - "pulse"; - "suffer"; - "vapor"; - ], - "ac7a2125beea68caf5266a647f24dce9fea018a7", - "244951387881443", - "tz1h3nY7jcZciJgAwRhWcrEwqfVp7VQoffur", - "A6yeMqBFG8", - "lvrmlbyj.yczltcxn@tezos.example.org" ); - ( [ - "waste"; - "open"; - "scan"; - "tip"; - "subway"; - "dance"; - "rent"; - "copper"; - "garlic"; - "laundry"; - "defense"; - "clerk"; - "another"; - "staff"; - "liar"; - ], - "2b3e94be133a960fa0ef87f6c0922c19f9d87ca2", - "80065050465525", - "tz1VzL4Xrb3fL3ckvqCWy6bdGMzU2w9eoRqs", - "oVZqpq60sk", - "rfodmrha.zzdndvyk@tezos.example.org" ); - ( [ - "fiber"; - "next"; - "property"; - "cradle"; - "silk"; - "obey"; - "gossip"; - "push"; - "key"; - "second"; - "across"; - "minimum"; - "nice"; - "boil"; - "age"; - ], - "dac31640199f2babc157aadc0021cd71128ca9ea", - "3569618927693", - "tz1RUHg536oRKhPLFfttcB5gSWAhh4E9TWjX", - "FfytQTTVbu", - "owecikdy.gxnyttya@tezos.example.org" ); - ( [ - "print"; - "labor"; - "budget"; - "speak"; - "poem"; - "diet"; - "chunk"; - "eternal"; - "book"; - "saddle"; - "pioneer"; - "ankle"; - "happy"; - "only"; - "exclude"; - ], - "bb841227f250a066eb8429e56937ad504d7b34dd", - "9034781424478", - "tz1M1LFbgctcPWxstrao9aLr2ECW1fV4pH5u", - "zknAl3lrX2", - "ettilrvh.zsrqrbud@tezos.example.org" ); - ] - -(** {3 Context Manipulations } *) - -let pick_two_attesters ctxt = - let open Lwt_result_syntax in - let module V = Plugin.RPC.Validators in - let* attesters = Context.get_attesters ctxt in - match attesters with - | a :: b :: _ -> return (a.V.consensus_key, b.V.consensus_key) - | _ -> assert false - -let pick_addr_attester ctxt = - let open Lwt_result_syntax in - let module V = Plugin.RPC.Validators in - let* attesters = Context.get_attesters ctxt in - match attesters with a :: _ -> return a.V.consensus_key | _ -> assert false - -let init_params = - Tezos_protocol_019_PtParisB_parameters.Default_parameters - .parameters_of_constants - {Context.default_test_constants with consensus_threshold = 0} - -let delegates_of_block block = - let open Lwt_result_syntax in - let+ validators = Context.get_attesters (B block) in - List.map - (fun Plugin.RPC.Validators.{consensus_key; slots; _} -> - (consensus_key, slots)) - validators - -(** Sequential validation of an operation list. *) -let sequential_validate ?(mempool_mode = true) block operations = - let open Lwt_result_syntax in - let* inc = Incremental.begin_construction ~mempool_mode block in - let* (_inc : Incremental.t) = - List.fold_left_es - (fun acc op -> Incremental.validate_operation acc op) - inc - operations - in - return_unit diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/README.md b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/README.md deleted file mode 100644 index 62f2267ad645a4bcad328af7c0044e41ad9bc59f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# About -This folder contains example test kernels, used for running `SCORU WASM` integration tests. - -The test kernels have been built from [tezos/kernel](https://gitlab.com/trili/kernel.git), then manually edited to take into account a change in naming introduced by [this MR](https://gitlab.com/tezos/tezos/-/merge_requests/6914). - -```terminal -wasm2wat ${OLD_KERNEL} -o tmp.wat -sed -i -e 's/kernel_next/kernel_run/g' -e 's/rollup_safe_core/smart_rollup_core/g' tmp.wast -wat2wasm tmp.wat -o {OLD_KERNEL} -``` - -# Available kernels -It is possible to build the test kernels manually, and verify that they are bit-for-bit identical. - -## Prerequisites -You will need `docker`, `git` and `wasm-strip` installed, alongside either `bash` or `zsh`. -- `wasm-strip` is part of the [WebAssembly Binary Toolkit](https://github.com/WebAssembly/wabt). - -Next, clone the *tezos/kernel* repository: -``` shell -git clone https://gitlab.com/tezos/kernel.git wasm_kernel -cd wasm_kernel -``` -and then follow the instructions below for the required kernel. - -## [computation.wasm](./computation.wasm) -The computation kernel performs a simple computation (addition) on each call to its `kernel_run` entrypoint. -It keeps the result on the heap, and therefore uses the allocator. It makes no use of any *PVM host-capabilities*. - -It is designed to be small enough to be able to originate directly within a boot sector, but also large enough to be -used with the *gather-floppies* mechanism. - -To build the `computation.wasm` kernel, run the following from the checked-out `tezos/kernel` repo: -``` shell -git checkout 60e2dedc2b5debb9a6add98038e52e4cd0a358a6 - -# Load the required rust toolchain dockerfile -source scripts/cargo-docker.sh - -cargo build -p test_kernel --target wasm32-unknown-unknown --release \ - --no-default-features --features none,wee_alloc - -# computation_kernel.wasm is a 1.6M wasm binary. -cp target/wasm32-unknown-unknown/release/test_kernel.wasm computation_kernel.wasm - -# Strips binary down to 9.7K -wasm-strip computation_kernel.wasm -``` -# echo.wasm - -`echo.wasm` is the result of `wat2wasm echo.wast`. - -This simple kernel writes the external messages it receives in its outbox. - -To achieve that, it needs to take the encoding of the inputs into -account to extract the payload to push into the outbox. - -# tx-kernel.wasm -The `tx-kernel` is a TORU-like program for transacting in a wasm rollup. - -To build, run the following from the checked-out `tezos/kernel` repo: -```shell -git checkout 69f69144764dcd59dcc1fd144bf6e8f707f0431e - -# Load the required rust toolchain dockerfile -source scripts/cargo-docker.sh - -cargo make wasm-tx-kernel - -cp target/wasm32-unknown-unknown/release/kernel_core.wasm tx-kernel.wasm - -wasm-strip tx-kernel.wasm -``` diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/computation.wasm b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/computation.wasm deleted file mode 100644 index 1ea01d0f154dfd5fe8b8d2f6f0738629ccb9b23f..0000000000000000000000000000000000000000 Binary files a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/computation.wasm and /dev/null differ diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/echo.wasm b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/echo.wasm deleted file mode 100644 index 383db3bebf9adb36eac791f54ea6a70e18835827..0000000000000000000000000000000000000000 Binary files a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/echo.wasm and /dev/null differ diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/echo.wast b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/echo.wast deleted file mode 100644 index 99026dba63a0e414aaa49f87cd0c18a0c1c8a5f6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/echo.wast +++ /dev/null @@ -1,106 +0,0 @@ -(module - - (type $read_t (func (param i32 i32 i32) (result i32))) - (type $write_t (func (param i32 i32) (result i32))) - (type $store_w_t (func (param i32 i32 i32 i32 i32) (result i32))) - - (import "smart_rollup_core" "read_input" (func $read_input (type $read_t))) - (import "smart_rollup_core" "write_output" (func $write_output (type $write_t))) - (import "smart_rollup_core" "store_write" - (func $store_write (type $store_w_t))) - - (data (i32.const 100) "/kernel/env/reboot") - (data (i32.const 120) "\00\01") ;;Start_of_level - (data (i32.const 122) "\00\02") ;;End_of_level - (data (i32.const 124) "\00\00") ;;Internal Transfer - (data (i32.const 126) "\01") ;;External - - (memory 1) - (export "mem" (memory 0)) - - (func $set_reboot_flag (param $input_offset i32) ;;location of input - (local $eol i32) - (local $input_header i32) - - (local.set $eol (i32.load16_u (i32.const 122))) - (local.set $input_header - (i32.load16_u (local.get $input_offset))) - (i32.ne (local.get $eol) (local.get $input_header)) - (if (then - (call $store_write - (i32.const 100) ;; offset - (i32.const 18) ;; key size - (i32.const 0) ;; offset in the durable storage page - (i32.const 100) ;; offset in memory for the value (placeholder here) - (i32.const 0)) ;; size of the value in memory (placeholder here) - (drop))) - ) - - ;; Internal message representation - ;; (see Data_encoding.Binary.describe Sc_rollup_inbox_message_repr.encoding): - ;; - Tag (1B) `t1` - ;; - Tag (1B) `t2` - ;; - Payload (variable) `payload`, expected as a Byte - ;; + Tag (1B) `tb` - ;; + Size (4B) `size_b` - ;; + bytes (variable) - ;; - Sender (20B) `sender` - ;; - Source (21B) `source` - ;; - Destination (20B) `destination` - ;; - ;; payload = len - (t1 + t2 + tb + size_b + sender + source + destination) - ;; ==> payload = len - (1 + 1 + 1 + 4 + 20 + 21 + 20) - ;; ==> payload = len - 68 - ;; and starts at offset 7 from the input - - (func $internal_payload_size (param $input_size i32) (result i32) - (i32.sub (local.get $input_size) (i32.const 68))) ;; tag - - (func $write_message (param $input_offset i32) (param $size i32) - (local $internal i32) - (local $external i32) - (local $message_tag i32) - (local $internal_transfer_tag i32) - (local $payload_size i32) - - (local.set $external (i32.load8_u (i32.const 126))) - (local.set $internal (i32.load16_u (i32.const 124))) - (local.set $message_tag - (i32.load8_u (local.get $input_offset))) - (local.set $internal_transfer_tag - (i32.load16_u (local.get $input_offset))) - (local.set $payload_size - (call $internal_payload_size (local.get $size))) - - (if - (i32.eq (local.get $message_tag) (local.get $external)) - (then - (call $write_output - (i32.add (local.get $input_offset) (i32.const 1)) ;;Remove the header - (i32.sub (local.get $size) (i32.const 1))) ;;Size without the header - (drop)) - (else - (if - (i32.eq (local.get $internal_transfer_tag) (local.get $internal)) - (then - (call $write_output ;;See comment for the internal message representation - (i32.add (local.get $input_offset) (i32.const 7)) - (local.get $payload_size)) - (drop)) - ) - ) - ) - ) - - (func (export "kernel_run") - (local $size i32) - (local.set $size (call $read_input - (i32.const 220) ;; info_addr - (i32.const 260) ;; dst - (i32.const 3600))) ;; max_bytes - - (call $write_message (i32.const 260) - (local.get $size)) - (call $set_reboot_flag (i32.const 260)) - ) -) diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/no_parse_bad_fingerprint.wasm b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/no_parse_bad_fingerprint.wasm deleted file mode 100644 index fba1f191b6ed6a5ddb68d628afa7d2ff06255a6f..0000000000000000000000000000000000000000 Binary files a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/no_parse_bad_fingerprint.wasm and /dev/null differ diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/no_parse_random.wasm b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/no_parse_random.wasm deleted file mode 100644 index a817ec8df9ad75e79b53236642c5fa768b130f6c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/no_parse_random.wasm +++ /dev/null @@ -1 +0,0 @@ -2@Cϯ(haSPi9 g&4 \ No newline at end of file diff --git a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/tx-kernel.wasm b/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/tx-kernel.wasm deleted file mode 100644 index c67d6bbf46747fc97bb6e61658835c100d17bf98..0000000000000000000000000000000000000000 Binary files a/src/proto_019_PtParisB/lib_protocol/test/integration/wasm_kernel/tx-kernel.wasm and /dev/null differ diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/dune b/src/proto_019_PtParisB/lib_protocol/test/pbt/dune deleted file mode 100644 index c2f4b959eb705f9b59d3045e9f6bbd011613d485..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/dune +++ /dev/null @@ -1,84 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_protocol_test_pbt_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-libs.micheline - octez-protocol-019-PtParisB-libs.client - tezos-protocol-019-PtParisB.protocol - octez-libs.tezos-context.merkle_proof_encoding - octez-libs.test-helpers - octez-protocol-019-PtParisB-libs.test-helpers - octez-alcotezt - qcheck-alcotest - tezos-benchmark - tezos-benchmark-019-PtParisB - tezos-benchmark-type-inference-019-PtParisB - octez-protocol-019-PtParisB-libs.smart-rollup - octez-libs.crypto-dal - octez-libs.base-test-helpers - tezos-protocol-019-PtParisB.parameters) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_micheline - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB - -open Tezos_test_helpers - -open Tezos_019_PtParisB_test_helpers - -open Octez_alcotezt - -open Tezos_benchmark_019_PtParisB - -open Tezos_benchmark_type_inference_019_PtParisB - -open Tezos_smart_rollup_019_PtParisB - -open Tezos_crypto_dal - -open Tezos_base_test_helpers - -open Tezos_protocol_019_PtParisB_parameters) - (modules - liquidity_baking_pbt - saturation_fuzzing - test_merkle_list - test_gas_properties - test_sampler - test_script_comparison - test_script_roundtrip - test_tez_repr - test_bitset - test_sc_rollup_tick_repr - test_sc_rollup_encoding - test_sc_rollup_inbox - test_refutation_game - test_carbonated_map - test_zk_rollup_encoding - test_dal_slot_proof - test_compare_operations - test_operation_encoding - test_balance_updates_encoding - test_bytes_conversion)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_pbt_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/liquidity_baking_pbt.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/liquidity_baking_pbt.ml deleted file mode 100644 index 127472f70c0de0ef8cf70190d9bba032023e0ddb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/liquidity_baking_pbt.ml +++ /dev/null @@ -1,327 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: pbt for liquidity baking - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file liquidity_baking_pbt.ml - Subject: Test liquidity baking contracts using randomly generated inputs. -*) - -open Protocol -open Alpha_context -open Liquidity_baking_machine - -(** We use the “machines” provided by the {! Liquidity_baking_machine} - module. Because using the [ConcreteMachine] (hence, the {! - ValidationMachine} too) is slow, we implement the following - test-suit architecture: - - - One {v QCheck2 v}-based test is used to validate consistency of - the {! SymbolicMachine} wrt. the [ConcreteMachine], thanks to - the {! ValidationMachine}. - - The rest of the tests use the {! SymbolicMachine} in order to be - more effective. *) - -(** [all_true l] waits for all promises of [l], and returns [true] iff - they all resolve to [true]. *) -let all_true = List.for_all_ep Fun.id - -let extract_qcheck_tzresult : unit tzresult Lwt.t -> bool = - fun p -> - match Lwt_main.run p with - | Ok () -> true - | Error err -> QCheck2.Test.fail_reportf "@\n%a@." pp_print_trace err - -let rec run_and_check check scenarios env state = - match scenarios with - | step :: rst -> - let state' = SymbolicMachine.step step env state in - assert (check state state') ; - run_and_check check rst env state' - | [] -> state - -let one_balance_decreases c env state state' = - let xtz = SymbolicMachine.get_xtz_balance c state in - let tzbtc = SymbolicMachine.get_tzbtc_balance c env state in - let lqt = SymbolicMachine.get_liquidity_balance c env state in - let xtz' = SymbolicMachine.get_xtz_balance c state' in - let tzbtc' = SymbolicMachine.get_tzbtc_balance c env state' in - let lqt' = SymbolicMachine.get_liquidity_balance c env state' in - xtz' < xtz || tzbtc' < tzbtc || lqt' < lqt - || (xtz' = xtz && tzbtc' = tzbtc && lqt' = lqt) - -let get_float_balances env state = - let xtz = - Int64.to_float @@ SymbolicMachine.get_xtz_balance env.cpmm_contract state - in - let tzbtc = - Int.to_float - @@ SymbolicMachine.get_tzbtc_balance env.cpmm_contract env state - in - let lqt = - Int.to_float @@ SymbolicMachine.get_cpmm_total_liquidity env state - in - (xtz, tzbtc, lqt) - -(** [is_remove_liquidity_consistent env state state'] returns [true] - iff, when the liquidity pool decreased in [state'], then the - fraction of tzbtc and xtz returned to the liquidity provider is - lesser or equal than the fraction of lqt burnt. *) -let is_remove_liquidity_consistent env state state' = - let xtz, tzbtc, lqt = get_float_balances env state in - let xtz', tzbtc', lqt' = get_float_balances env state' in - if lqt' < lqt then - let flqt = (lqt -. lqt') /. lqt in - let fxtz = (xtz -. xtz') /. xtz in - let ftzbtc = (tzbtc -. tzbtc') /. tzbtc in - fxtz <= flqt && ftzbtc <= flqt - else true - -(** [is_share_price_increasing env state state'] returns [true] iff - the product of supplies (tzbtc, and xtz) increases. - - See https://blog.nomadic-labs.com/progress-report-on-the-verification-of-liquidity-baking-smart-contracts.html#evolution-of-the-product-of-supplies *) -let is_share_price_increasing env state state' = - let xtz, tzbtc, lqt = get_float_balances env state in - let xtz', tzbtc', lqt' = get_float_balances env state' in - xtz *. tzbtc /. (lqt *. lqt) <= xtz' *. tzbtc' /. (lqt' *. lqt') - -(** [positive_pools env state] returns [true] iff the three pools of - the CPMM (as identified in [env]) are strictly positive in - [state]. *) -let positive_pools env state = - let xtz = SymbolicMachine.get_xtz_balance env.cpmm_contract state in - let tzbtc = SymbolicMachine.get_tzbtc_balance env.cpmm_contract env state in - let lqt = SymbolicMachine.get_cpmm_total_liquidity env state in - 0L < xtz && 0 < tzbtc && 0 < lqt - -(** [validate_xtz_balance c env (blk, state)] returns [true] iff the - tez balance for the contract [c] is the same in [blk] and in - [state]. *) -let validate_xtz_balance : - Contract.t -> ValidationMachine.t -> bool tzresult Lwt.t = - fun contract state -> - let open Lwt_result_syntax in - let* expected = ValidationMachine.Symbolic.get_xtz_balance contract state in - let* amount = ValidationMachine.Concrete.get_xtz_balance contract state in - return (amount = expected) - -(** [validate_tzbtc_balance c env (blk, state)] returns [true] iff the - tzbtc balance for the contract [c] is the same in [blk] and in - [state]. *) -let validate_tzbtc_balance : - Contract.t -> Contract.t env -> ValidationMachine.t -> bool tzresult Lwt.t = - fun contract env state -> - let open Lwt_result_syntax in - let* expected = - ValidationMachine.Symbolic.get_tzbtc_balance contract env state - in - let* amount = - ValidationMachine.Concrete.get_tzbtc_balance contract env state - in - return (expected = amount) - -(** [validate_liquidity_balance c env (blk, state)] returns [true] if - the contract [c] holds the same amount of liquidity in [blk] and - [state]. *) -let validate_liquidity_balance : - Contract.t -> Contract.t env -> ValidationMachine.t -> bool tzresult Lwt.t = - fun contract env state -> - let open Lwt_result_syntax in - let* expected = - ValidationMachine.Symbolic.get_liquidity_balance contract env state - in - let* amount = - ValidationMachine.Concrete.get_liquidity_balance contract env state - in - return (expected = amount) - -(** [validate_balances c env (blk, state)] returns true iff the - contract [c] holds the same amount of tez, tzbtc and liquidity in - [blk] and [state]. *) -let validate_balances : - Contract.t -> Contract.t env -> ValidationMachine.t -> bool tzresult Lwt.t = - fun contract env combined_state -> - all_true - [ - validate_xtz_balance contract combined_state; - validate_tzbtc_balance contract env combined_state; - validate_liquidity_balance contract env combined_state; - ] - -(** [validate_cpmm_total_liquidity env state] returns true iff the - CPMM has distributed the same amount of liquidity tokens in its - concrete and symbolic parts of [state]. *) -let validate_cpmm_total_liquidity env state = - let open Lwt_result_syntax in - let* concrete_cpmm_total_liquidity = - ValidationMachine.Concrete.get_cpmm_total_liquidity env state - in - let* ghost_cpmm_total_liquidity = - ValidationMachine.Symbolic.get_cpmm_total_liquidity env state - in - return (concrete_cpmm_total_liquidity = ghost_cpmm_total_liquidity) - -(** [validate_consistency env (blk, state)] checks if the accounts in - [env] (the CPMM and the implicit accounts) share the same balances - in [blk] and [state]. *) -let validate_consistency : - Contract.t env -> ValidationMachine.t -> bool tzresult Lwt.t = - (* We do not try to validate the xtz balance of [holder] in this - function. Indeed, they are hard to predict due to allocation - fees, and security deposits. *) - fun env state -> - all_true - (validate_cpmm_total_liquidity env state - :: validate_balances env.cpmm_contract env state - :: List.map - (fun account -> validate_balances account env state) - env.implicit_accounts) - -(** [validate_storage env blk] returns [true] iff the storage of the - CPMM contract is consistent wrt. to its actual balances (tez, - tzbtc, and liquidity). *) -let validate_storage : - Contract.t env -> ConcreteMachine.t -> bool tzresult Lwt.t = - fun env blk -> - let open Lwt_result_syntax in - let* cpmm_storage = - Cpmm_repr.Storage.get (B blk) ~contract:env.cpmm_contract - in - all_true - [ - (* 1. Check the CPMM's [xtzPool] is equal to the actual CPMM balance *) - (let* cpmm_xtz = ConcreteMachine.get_xtz_balance env.cpmm_contract blk in - return (cpmm_xtz = Tez.to_mutez cpmm_storage.xtzPool)); - (* 2. Check the CPMM’s [lqtTotal] is correct wrt. liquidity contract *) - (let* liquidity_storage = - Lqt_fa12_repr.Storage.get (B blk) ~contract:env.liquidity_contract - in - return (cpmm_storage.lqtTotal = liquidity_storage.totalSupply)); - (* 3. Check the CPMM’s [tokenPool] is correct *) - (let* cpmm_tzbtc = - ConcreteMachine.get_tzbtc_balance env.cpmm_contract env blk - in - return (Z.to_int cpmm_storage.tokenPool = cpmm_tzbtc)); - ] - -(** [machine_validation_tests] is a list of asynchronous tests aiming - at asserting the correctness and consistencies of the machines - themselves. *) -let machine_validation_tests = - let open Lwt_result_syntax in - [ - QCheck2.Test.make - ~count:10 - ~name:"Concrete/Symbolic Consistency" - ~print:Liquidity_baking_generator.print_scenario - (Liquidity_baking_generator.gen_scenario 1_000_000 1_000_000 10) - (fun (specs, scenario) -> - extract_qcheck_tzresult - (let invariant = validate_consistency in - let* state, env = ValidationMachine.build ~invariant specs in - let* (_ : ValidationMachine.t) = - ValidationMachine.run ~invariant scenario env state - in - return_unit)); - QCheck2.Test.make - ~count:10 - ~name:"Storage consistency" - ~print:Liquidity_baking_generator.print_scenario - (Liquidity_baking_generator.gen_scenario 1_000_000 1_000_000 10) - (fun (specs, scenario) -> - extract_qcheck_tzresult - (let invariant = validate_storage in - let* state, env = ConcreteMachine.build ~invariant specs in - let* (_ : Block.t) = - ConcreteMachine.run ~invariant scenario env state - in - return_unit)); - QCheck2.Test.make - ~count:50_000 - ~name:"Positive pools" - ~print:Liquidity_baking_generator.print_scenario - (Liquidity_baking_generator.gen_scenario 1_000_000 1_000_000 50) - (fun (specs, scenario) -> - extract_qcheck_tzresult - (let invariant = positive_pools in - let state, env = SymbolicMachine.build ~invariant specs in - let (_ : SymbolicMachine.t) = - SymbolicMachine.run ~invariant scenario env state - in - return_unit)); - ] - -(** [economic_tests] is a list of asynchronous tests aiming at - asserting the good economic properties of the Liquidity Baking - feature. *) -let economic_tests = - [ - QCheck2.Test.make - ~count:50_000 - ~name:"No global gain" - ~print:Liquidity_baking_generator.print_adversary_scenario - (Liquidity_baking_generator.gen_adversary_scenario 1_000_000 1_000_000 50) - (fun (specs, attacker, scenario) -> - let state, env = SymbolicMachine.build ~subsidy:0L specs in - let (_ : SymbolicMachine.t) = - run_and_check (one_balance_decreases attacker env) scenario env state - in - true); - QCheck2.Test.make - ~count:50_000 - ~name:"Remove liquidities is consistent" - ~print:Liquidity_baking_generator.print_scenario - (Liquidity_baking_generator.gen_scenario 1_000_000 1_000_000 50) - (fun (specs, scenario) -> - let state, env = SymbolicMachine.build ~subsidy:0L specs in - let (_ : SymbolicMachine.t) = - run_and_check (is_remove_liquidity_consistent env) scenario env state - in - true); - QCheck2.Test.make - ~count:50_000 - ~name:"Share price only increases" - ~print:Liquidity_baking_generator.print_scenario - (Liquidity_baking_generator.gen_scenario 1_000_000 1_000_000 50) - (fun (specs, scenario) -> - let state, env = SymbolicMachine.build ~subsidy:0L specs in - let (_ : SymbolicMachine.t) = - run_and_check (is_share_price_increasing env) scenario env state - in - true); - ] - -let () = - let open Qcheck2_helpers in - Alcotest.run - ~__FILE__ - Protocol.name - [ - ("Machines Cross-Validation", qcheck_wrap machine_validation_tests); - ("Economic Properties", qcheck_wrap economic_tests); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/saturation_fuzzing.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/saturation_fuzzing.ml deleted file mode 100644 index 426b2c7b5cfaeb25eb7e34cdb5e6e2d5281454ca..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/saturation_fuzzing.ml +++ /dev/null @@ -1,202 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file saturation_fuzzing.ml - Subject: Operations in Saturation_repr -*) - -open Protocol.Saturation_repr -open Qcheck2_helpers - -(** A generator that returns a [t] that cannot be [saturated] *) -let unsatured_gen = of_option_gen @@ QCheck2.Gen.(map of_int_opt int) - -(** The general generator for [t]: generates both unsaturated values - and [saturated]. *) -let t_gen : may_saturate t QCheck2.Gen.t = - QCheck2.Gen.(frequency [(1, return saturated); (4, unsatured_gen)]) - -(* Test. - * Tests that [add] commutes. - *) -let test_add_commutes = - QCheck2.Test.make - ~name:"t1 + t2 = t2 + t1" - (QCheck2.Gen.pair t_gen t_gen) - (fun (t1, t2) -> - let t1_plus_t2 = add t1 t2 in - let t2_plus_t1 = add t2 t1 in - qcheck_eq ~pp t1_plus_t2 t2_plus_t1) - -(* Test. - * Tests that [mul] commutes. - *) -let test_mul_commutes = - QCheck2.Test.make - ~name:"t1 * t2 = t2 * t1" - (QCheck2.Gen.pair t_gen t_gen) - (fun (t1, t2) -> - let t1_times_t2 = mul t1 t2 in - let t2_times_t1 = mul t2 t1 in - qcheck_eq ~pp t1_times_t2 t2_times_t1) - -(* Test. - * Tests that [zero] is neutral for [add]. - *) -let test_add_zero = - QCheck2.Test.make ~name:"t + 0 = t" t_gen (fun t -> - let t_plus_zero = add t zero in - qcheck_eq' ~pp ~expected:t ~actual:t_plus_zero ()) - -(* Test. - * Tests that t1 + t2 >= t1 - *) -let test_add_neq = - QCheck2.Test.make - ~name:"t1 + t2 >= t1" - (QCheck2.Gen.pair t_gen t_gen) - (fun (t1, t2) -> - let t1_plus_t2 = add t1 t2 in - t1_plus_t2 >= t1) - -(* Test. - * Tests that 1 is neutral for [mul]. - *) -let test_mul_one = - let one = safe_int 1 in - QCheck2.Test.make ~name:"t * 1 = t" t_gen (fun t -> - let t_times_one = mul t one in - qcheck_eq' ~pp ~expected:t ~actual:t_times_one ()) - -(* Test. - * Tests that [t] times [0] equals [0]. - *) -let test_mul_zero = - QCheck2.Test.make ~name:"t * 0 = 0" t_gen (fun t -> - let t_times_zero = mul t zero in - qcheck_eq' ~pp ~expected:zero ~actual:t_times_zero ()) - -(* Test. - * Tests that [t] [sub] [zero] equals [t]. - *) -let test_sub_zero = - QCheck2.Test.make ~name:"t - 0 = t" t_gen (fun t -> - let t_sub_zero = sub t zero in - qcheck_eq' ~pp ~expected:t ~actual:t_sub_zero ()) - -(* Test. - * Tests that [t] [sub] [t] equals [zero]. - *) -let test_sub_itself = - QCheck2.Test.make ~name:"t - t = 0" t_gen (fun t -> - let t_sub_t = sub t t in - qcheck_eq' ~pp ~expected:zero ~actual:t_sub_t ()) - -(* Test. - * Tests that t1 - t2 <= t1 - *) -let test_sub_neq = - QCheck2.Test.make - ~name:"t1 - t2 <= t1" - (QCheck2.Gen.pair t_gen t_gen) - (fun (t1, t2) -> - let t1_minus_t2 = sub t1 t2 in - t1_minus_t2 <= t1) - -(* Test. - * Tests that (t1 + t2) - t2 <= t1 - *) -let test_add_sub = - QCheck2.Test.make - ~name:"(t1 + t2) - t2 <= t1" - (QCheck2.Gen.pair t_gen t_gen) - (fun (t1, t2) -> - let lhs = sub (add t1 t2) t2 in - lhs <= t1) - -(* Test. - * Tests that (t1 - t2) + t2 >= t1 - *) -let test_sub_add = - QCheck2.Test.make - ~name:"(t1 - t2) + t2 >= t1" - (QCheck2.Gen.pair t_gen t_gen) - (fun (t1, t2) -> - let lhs = add (sub t1 t2) t2 in - lhs >= t1) - -(* Test. - * Tests that [saturated] >= t - *) -let test_leq_saturated = - QCheck2.Test.make ~name:"t <= saturated" t_gen (fun t -> saturated >= t) - -(* Test. - * Tests that [zero] <= t - *) -let test_geq_zero = QCheck2.Test.make ~name:"t >= 0" t_gen (fun t -> zero <= t) - -(* Test. - * Tests that [sqrt (t * t) = t] - *) -let test_squared_sqrt = - QCheck2.Test.make ~name:"sqrt t² = t" t_gen (fun t -> - mul t t = saturated || sqrt (mul t t) = t) - -(* Test. - * Tests that [(sqrt t) * (sqrt t) <= t] - *) -let test_sqrt_squared = - QCheck2.Test.make ~name:"(sqrt t)² <= t <= (succ (sqrt t))²" t_gen (fun t -> - mul (sqrt t) (sqrt t) <= t && t <= mul (succ (sqrt t)) (succ (sqrt t))) - -let tests_add = [test_add_commutes; test_add_zero; test_add_neq] - -let tests_mul = [test_mul_commutes; test_mul_one; test_mul_zero] - -let tests_sub = [test_sub_zero; test_sub_itself; test_sub_neq] - -let tests_add_sub = [test_add_sub; test_sub_add] - -let tests_boundaries = [test_leq_saturated; test_geq_zero] - -let tests_sqrt = [test_sqrt_squared; test_squared_sqrt] - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [ - ("add", qcheck_wrap tests_add); - ("mul", qcheck_wrap tests_mul); - ("sub", qcheck_wrap tests_sub); - ("add and sub", qcheck_wrap tests_add_sub); - ("sqrt", qcheck_wrap tests_sqrt); - ("<= and >=", qcheck_wrap tests_boundaries); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_balance_updates_encoding.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_balance_updates_encoding.ml deleted file mode 100644 index b130db5a5ed5cb3ddca46925427a0b44cc1be157..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_balance_updates_encoding.ml +++ /dev/null @@ -1,208 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_balance_updates_encoding.ml - Subject: Encoding for balance_updates -*) - -open Protocol -open QCheck2 -open Qcheck2_helpers - -(** {2 Generators} *) -let default_delegate = - let pkh, _, _ = Signature.generate_key () in - pkh - -let default_contract = - let pkh, _, _ = Signature.generate_key () in - Contract_repr.Implicit pkh - -let contract = Receipt_repr.Contract default_contract - -let unstaked_frozen_staker = - let open Gen in - oneofl - [ - Unstaked_frozen_staker_repr.Shared default_delegate; - Unstaked_frozen_staker_repr.Single - (Contract_repr.Implicit default_delegate, default_delegate); - Unstaked_frozen_staker_repr.Single (default_contract, default_delegate); - ] - -let frozen_staker = - let open Gen in - oneofl - [ - Frozen_staker_repr.shared_between_stakers ~delegate:default_delegate; - Frozen_staker_repr.baker default_delegate; - Frozen_staker_repr.single_staker - ~staker:default_contract - ~delegate:default_delegate; - Frozen_staker_repr.baker_edge default_delegate; - ] - -let deposits = - let open Gen in - let+ staker = frozen_staker in - Receipt_repr.Deposits staker - -let lost_attesting_rewards = - let pkh, _, _ = Signature.generate_key () in - Receipt_repr.Lost_attesting_rewards (pkh, false, false) - -let unstaked_deposits = - let open Gen in - let+ staker = unstaked_frozen_staker in - Receipt_repr.Unstaked_deposits (staker, Cycle_repr.root) - -let commitments = Receipt_repr.Commitments Blinded_public_key_hash.zero - -let frozen_bonds = - let pkh, _, _ = Signature.generate_key () in - let bond_id = - Bond_id_repr.Sc_rollup_bond_id - (Sc_rollup_repr.Address.of_b58check_exn - "sr1JPVatbbPoGp4vb6VfQ1jzEPMrYFcKq6VG") - in - Receipt_repr.Frozen_bonds (Contract_repr.Implicit pkh, bond_id) - -let generate_balance = - let open Gen in - let open Receipt_repr in - oneof - [ - return contract; - return Block_fees; - deposits; - unstaked_deposits; - return Nonce_revelation_rewards; - return Attesting_rewards; - return Baking_rewards; - return Baking_bonuses; - return Storage_fees; - return Double_signing_punishments; - return lost_attesting_rewards; - return Liquidity_baking_subsidies; - return Burned; - return commitments; - return Bootstrap; - return Invoice; - return Initial_commitments; - return Minted; - return frozen_bonds; - return Sc_rollup_refutation_punishments; - return Sc_rollup_refutation_rewards; - ] - -let generate_balance_update = - let open Gen in - let open Receipt_repr in - let* i = big_nat in - let tez = Tez_repr.of_mutez_exn (Int64.of_int i) in - oneofl [Debited tez; Credited tez] - -let generate_update_origin = - let open Gen in - let open Receipt_repr in - oneofl [Block_application; Protocol_migration; Subsidy; Simulation] - -let generate_balance_updates : Receipt_repr.balance_updates Gen.t = - Gen.list - (Gen.map - (fun (balance, balance_update, update_origin) -> - Receipt_repr.item balance balance_update update_origin) - (Gen.tup3 - generate_balance - generate_balance_update - generate_update_origin)) - -(** {2 Tests} *) -let eq balance_updates1 balance_updates2 = - let open Receipt_repr in - let res = - List.for_all2 - ~when_different_lengths:() - (fun (Balance_update_item (b1, bu1, uo1)) - (Balance_update_item (b2, bu2, uo2)) -> - (let token1 = token_of_balance b1 in - let token2 = token_of_balance b2 in - match Token.eq token1 token2 with - | None -> false - | Some Refl -> ( - compare b1 b2 = 0 - && - match (bu1, bu2) with - | Debited tz1, Debited tz2 | Credited tz1, Credited tz2 -> - Token.equal token1 tz1 tz2 - | Debited tz1, Credited tz2 | Credited tz1, Debited tz2 -> - Token.is_zero token1 tz1 && Token.is_zero token1 tz2)) - && compare_update_origin uo1 uo2 = 0) - balance_updates1 - balance_updates2 - in - match res with Ok b -> b | Error _ -> false - -let test_balance_updates encoding = - let gen = generate_balance_updates in - test_roundtrip ~count:2000 ~title:"Balance_updates" ~gen ~eq encoding - -let test_binary_balance_updates encoding1 encoding2 = - let gen = generate_balance_updates in - test_roundtrip_through_binary - ~count:2000 - ~title:"Balance_updates" - ~gen - ~eq - encoding1 - encoding2 - -let () = - let qcheck_wrap = qcheck_wrap ~rand:(Random.State.make_self_init ()) in - Alcotest.run - ~__FILE__ - (Protocol.name ^ ": Operation_encoding") - [ - ( "roundtrip", - qcheck_wrap [test_balance_updates Receipt_repr.balance_updates_encoding] - ); - ( "legacy : roundtrip", - qcheck_wrap - [ - test_balance_updates - Receipt_repr.balance_updates_encoding_with_legacy_attestation_name; - ] ); - ( "roundtrip 2 encodings", - qcheck_wrap - [ - test_binary_balance_updates - Receipt_repr.balance_updates_encoding - Receipt_repr.balance_updates_encoding_with_legacy_attestation_name; - ] ); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_bitset.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_bitset.ml deleted file mode 100644 index 01614e5efe2d7f802ace0d64504eecc73b4c7581..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_bitset.ml +++ /dev/null @@ -1,125 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_bitset.ml - Subject: Bitset structure -*) - -open Qcheck2_helpers -open Protocol.Bitset - -let gen_ofs = QCheck2.Gen.int_bound (64 * 10) - -let value_of res = - match res with - | Ok v -> v - | Error e -> - Alcotest.failf - "An unxpected error %a occurred when generating Bitset.t" - Environment.Error_monad.pp_trace - e - -let gen_storage = - let open QCheck2.Gen in - let* int_vector = list @@ int_bound 64 in - from_list int_vector |> value_of |> return - -let test_get_set (c, ofs) = - List.for_all - (fun ofs' -> - let open Result_syntax in - value_of - @@ let* c' = add c ofs in - let* v = mem c ofs' in - let* v' = mem c' ofs' in - return (if ofs = ofs' then v' = true else v = v')) - (0 -- 63) - -let test_inter (c1, c2) = - let c3 = inter c1 c2 in - List.for_all - (fun ofs -> - let open Result_syntax in - value_of - @@ let* v1 = mem c1 ofs in - let* v2 = mem c2 ofs in - let* v3 = mem c3 ofs in - return ((v1 && v2) = v3)) - (0 -- 63) - -let test_diff (c1, c2) = - let c3 = diff c1 c2 in - List.for_all - (fun ofs -> - let open Result_syntax in - value_of - @@ let* v1 = mem c1 ofs in - let* v2 = mem c2 ofs in - let* v3 = mem c3 ofs in - return ((v1 && not v2) = v3)) - (0 -- 63) - -let test_fill = - let two = Z.of_int 2 in - fun length -> - let f1 = fill ~length |> value_of |> to_z in - let f2 = from_list (0 -- (length - 1)) |> value_of |> to_z in - let f3 = Z.(pow two length |> pred) in - Z.equal f1 f2 && Z.equal f2 f3 - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [ - ( "quantity", - qcheck_wrap - [ - QCheck2.Test.make - ~count:10000 - ~name:"get set" - QCheck2.Gen.(pair gen_storage gen_ofs) - test_get_set; - QCheck2.Test.make - ~count:10000 - ~name:"inter" - QCheck2.Gen.(pair gen_storage gen_storage) - test_inter; - QCheck2.Test.make - ~count:10000 - ~name:"diff" - QCheck2.Gen.(pair gen_storage gen_storage) - test_diff; - QCheck2.Test.make - ~count:10000 - ~name:"fill" - QCheck2.Gen.(small_nat) - test_fill; - ] ); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_bytes_conversion.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_bytes_conversion.ml deleted file mode 100644 index ed505ff0e20db165ab00109e2fdf2a5c75a47b1c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_bytes_conversion.ml +++ /dev/null @@ -1,215 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 DaiLambda, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: pbt for bytes <=> nat/int conversions - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_bytes_conversion.ml - Subject: Test the conversions between bytes and int/nat -*) - -let failwith = Stdlib.failwith - -open Protocol -open Script_int -open Script_bytes - -let gen_n = - let open QCheck2.Gen in - let* n1 = int in - let+ n2 = int in - Z.(abs (of_int n1 * of_int n2)) - -let gen_z = - let open QCheck2.Gen in - let* n1 = int in - let+ n2 = int in - Z.(of_int n1 * of_int n2) - -let gen_bytes = - let open QCheck2.Gen in - bytes_size small_nat - -let test_bytes_nat_conversion_unit () = - let test z h = - (* nat => bytes *) - let (`Hex h') = Hex.of_bytes (bytes_of_nat_be (abs (of_zint z))) in - if h <> h' then - failwith (Format.asprintf "%a => %s <> %s" Z.pp_print z h' h) ; - (* bytes => nat *) - let z' = to_zint @@ nat_of_bytes_be (Hex.to_bytes_exn (`Hex h)) in - if Z.Compare.(z <> z') then - failwith (Format.asprintf "%a <> %a <= %s" Z.pp_print z Z.pp_print z' h) ; - (* "00" ^ bytes => nat *) - let h'' = "00" ^ h in - let z'' = to_zint @@ nat_of_bytes_be (Hex.to_bytes_exn (`Hex h'')) in - if Z.Compare.(z <> z'') then - failwith (Format.asprintf "%a <> %a <= %s" Z.pp_print z Z.pp_print z' h) - in - let test' h = test (Z.of_string ("0x" ^ h)) h in - test (Z.of_int 0) "" ; - test' "123456" ; - test' "010000000000000000" - -(* Tests of nat => bytes *) -let test_bytes_of_nat_random () = - let gen = - let open QCheck2.Gen in - let* n = gen_n in - let+ leading_bytes = small_nat in - (n, leading_bytes) - in - QCheck_alcotest.to_alcotest - @@ QCheck2.Test.make ~name:"bytes_of_nat" gen - @@ fun (n, leading_zeros) -> - let bytes = bytes_of_nat_be @@ abs (of_zint n) in - (* [bytes_of_nat] encodes any [nat] to the shortest representation in [bytes], - without leading zeros. *) - if Bytes.length bytes > 0 then assert (Bytes.get bytes 0 <> '\000') ; - (* [nat_of_bytes @@ bytes_of_nat n = n] *) - Z.Compare.(to_zint (nat_of_bytes_be bytes) = n) - (* Leading zero chars do not affect the decoding *) - && - let leading_zeros = Bytes.make leading_zeros '\000' in - Z.Compare.(to_zint (nat_of_bytes_be (Bytes.cat leading_zeros bytes)) = n) - -(* Tests of bytes => nat *) -let test_nat_of_bytes_random () = - QCheck_alcotest.to_alcotest - @@ QCheck2.Test.make ~name:"nat_of_bytes" gen_bytes - @@ fun b -> - (* [nat_of_bytes] decodes any [bytes] to a [nat] *) - let n = nat_of_bytes_be b in - (* [bytes_of_nat] encodes the [nat] back to the original [bytes] - but without its leading zeros. - *) - Z.Compare.(to_zint n >= Z.zero) - && - let b' = bytes_of_nat_be n in - let diff = Bytes.length b - Bytes.length b' in - let leading_zeros = Bytes.make diff '\000' in - b = Bytes.cat leading_zeros b' - -let test_bytes_int_conversion_unit () = - let test z h = - let z = Z.of_string z in - (* int => bytes *) - let (`Hex h') = Hex.of_bytes (bytes_of_int_be (of_zint z)) in - if h <> h' then - failwith (Format.asprintf "%a => %s <> %s" Z.pp_print z h' h) ; - (* bytes => int *) - let z' = to_zint @@ int_of_bytes_be (Hex.to_bytes_exn (`Hex h)) in - if Z.Compare.(z <> z') then - failwith (Format.asprintf "%a <> %a <= %s" Z.pp_print z Z.pp_print z' h) ; - (* ("00"|"ff") ^ bytes => int - Adding 00 or ff prefixes (00 for positive and ff for negative ints) - must not change the decoding. *) - let h'' = if Z.Compare.(z < Z.zero) then "ff" ^ h else "00" ^ h in - let z'' = to_zint @@ int_of_bytes_be (Hex.to_bytes_exn (`Hex h'')) in - if Z.Compare.(z <> z'') then - failwith (Format.asprintf "%a <> %a <= %s" Z.pp_print z Z.pp_print z' h) - in - test "0" "" ; - test "1" "01" ; - test "-1" "ff" ; - test "127" "7f" ; - test "-128" "80" ; - test "128" "0080" ; - test "-129" "ff7f" ; - test "0x8000" "008000" ; - test "-33024" "ff7f00" ; - test "0x010000000000000000" "010000000000000000" ; - test "-0x010000000000000000" "ff0000000000000000" ; - test "0xcd9e7dbee9425ffc" "00cd9e7dbee9425ffc" (* once failed due to a bug *) - -(* Tests of int => bytes *) -let test_bytes_of_int_random () = - let gen = - let open QCheck2.Gen in - let* z = gen_z in - let+ leading_bytes = small_nat in - (z, leading_bytes) - in - QCheck_alcotest.to_alcotest - @@ QCheck2.Test.make ~name:"bytes_of_int" gen - @@ fun (z, leading_bytes) -> - (* [bytes_of_int] must encode any [int] to [bytes]. *) - let bytes = bytes_of_int_be @@ of_zint z in - (* [bytes_of_int] must return the shortest encoding: at most 1 char of zero - or '\255's at the head. *) - (if Bytes.length bytes >= 2 then - match (Bytes.get bytes 0, Bytes.get bytes 1) with - | '\000', '\000' | '\255', '\255' -> assert false - | _ -> ()) ; - (* [int_of_bytes @@ bytes_of_int z = z] *) - (let z' = to_zint @@ int_of_bytes_be bytes in - Z.Compare.(z = z')) - (* [int_of_bytes] must ignore the leading zeros for 0 and positive ints - and '\255's for negatives *) - && - let leading_bytes = - Bytes.make leading_bytes (if Z.Compare.(z < Z.zero) then '\255' else '\000') - in - Z.Compare.(to_zint @@ int_of_bytes_be (Bytes.cat leading_bytes bytes) = z) - -(* Tests of bytes => int *) -let test_int_of_bytes_random () = - QCheck_alcotest.to_alcotest - @@ QCheck2.Test.make ~name:"int_of_bytes" gen_bytes - @@ fun b -> - (* [int_of_bytes] decodes any [bytes] to a [int] *) - let i = int_of_bytes_be b in - (* [bytes_of_int] must encode the [int] back to the original [bytes] - but without its leading zeros for 0 and positive [int]s and '\255' - for negatives. *) - let b' = bytes_of_int_be i in - let diff = Bytes.length b - Bytes.length b' in - let leading_bytes = - Bytes.make diff (if Z.Compare.(to_zint i < Z.zero) then '\255' else '\000') - in - b = Bytes.cat leading_bytes b' - -let tests = - [ - ( "bytes_nat_conv", - [ - ("unit", `Quick, test_bytes_nat_conversion_unit); - test_bytes_of_nat_random (); - test_nat_of_bytes_random (); - ] ); - ( "bytes_int_conv", - [ - ("unit", `Quick, test_bytes_int_conversion_unit); - test_bytes_of_int_random (); - test_int_of_bytes_random (); - ] ); - ] - -let () = - Alcotest.run - ~__FILE__ - (Protocol.name ^ ": bytes and int/nat conversion ") - tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_carbonated_map.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_carbonated_map.ml deleted file mode 100644 index 084945f5a5a9d1a2edc23c9e20ce19a26da67e9c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_carbonated_map.ml +++ /dev/null @@ -1,547 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_carbonated_map.ml - Subject: Operations in Carbonated_map -*) - -open Qcheck2_helpers -open QCheck2 -open Protocol - -let new_ctxt () = - let open Lwt_result_syntax in - let* block, _contract = Context.init1 () in - let* incr = Incremental.begin_construction block in - return @@ Incremental.alpha_ctxt incr - -module Compare_int = struct - type t = int - - let compare = Int.compare - - let compare_cost _ = Saturation_repr.safe_int 10 -end - -module CM = - Carbonated_map.Make - (struct - type context = Alpha_context.context - - let consume = Alpha_context.Gas.consume - end) - (Compare_int) - -let unsafe_new_context () = - Result.value_f - ~default:(fun () -> Stdlib.failwith "Failed to create context") - (Lwt_main.run @@ new_ctxt ()) - -let int_map_gen = - let ctxt = unsafe_new_context () in - Gen.small_list (Gen.pair Gen.small_int Gen.small_int) - |> Gen.map (fun kvs -> - let merge_overlap ctxt x y = Ok (x + y, ctxt) in - match CM.of_list ctxt ~merge_overlap kvs with - | Ok (map, _) -> map - | Error _ -> Stdlib.failwith "Failed to construct map") - -let pp_int_map fmt map = - let open Lwt_result_wrap_syntax in - let pp = - Assert.pp_print_list (fun fmt (k, v) -> Format.fprintf fmt "(%d, %d)" k v) - in - Lwt_main.run - (let open Lwt_result_syntax in - let* ctxt = new_ctxt () in - let*?@ kvs, _ = CM.to_list ctxt map in - return kvs) - |> Result.value_f ~default:(fun () -> assert false) - |> Format.fprintf fmt "%a" pp - -let int_map_test name f = - Test.make - ~print:(Format.asprintf "%a" pp_int_map) - ~count:100 - ~name - int_map_gen - (fun map -> match f map with Ok b -> b | Error _ -> false) - -let int_map_pair_test name f = - Test.make - ~print:(fun (map1, map2) -> - Format.asprintf "(%a, %a)" pp_int_map map1 pp_int_map map2) - ~count:100 - ~name - (Gen.pair int_map_gen int_map_gen) - (fun (map1, map2) -> match f map1 map2 with Ok b -> b | Error _ -> false) - -let unit_test name f = - Alcotest.test_case name `Quick (fun () -> - match f () with Ok b -> assert b | _ -> assert false) - -type Environment.Error_monad.error += Dummy_error - -let dummy_fail = Error (Environment.Error_monad.trace_of_error Dummy_error) - -let assert_map_contains ctxt map expected = - let open Result_syntax in - let* kvs, _ctxt = CM.to_list ctxt map in - Ok (List.sort compare kvs = List.sort compare expected) - -let assert_equal_map ctxt map expected = - let open Result_syntax in - let* kvs, ctxt = CM.to_list ctxt expected in - assert_map_contains ctxt map kvs - -(** Test that the size of an empty map is 0. *) -let test_empty = - unit_test "Size of empty map is 0" (fun () -> Ok (CM.size CM.empty = 0)) - -(** Test adding a new element *) -let test_update_add = - let open Result_syntax in - unit_test "Update add" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(1, 1); (2, 2); (3, 3)] - in - let update_replace ctxt key value map = - CM.update ctxt key (fun ctxt _ -> Ok (Some value, ctxt)) map - in - let* map, ctxt = update_replace ctxt 4 4 map in - assert_map_contains ctxt map [(1, 1); (2, 2); (3, 3); (4, 4)] - -(** Test replacing an existing element. *) -let test_update_replace = - let open Result_syntax in - unit_test "Update replace" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(1, 1); (2, 2); (3, 3)] - in - let update_replace ctxt key value map = - CM.update ctxt key (fun ctxt _ -> Ok (Some value, ctxt)) map - in - let* map, ctxt = update_replace ctxt 1 42 map in - assert_map_contains ctxt map [(1, 42); (2, 2); (3, 3)] - -(** Test merging when ignoring new overlapping keys. *) -let test_merge_overlaps_left = - let open Result_syntax in - unit_test "Merge overlaps left" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun ctxt left _ -> Ok (left, ctxt)) - [(1, 1); (2, 2); (3, 3); (1, 11); (2, 22); (3, 33); (4, 44)] - in - assert_map_contains ctxt map [(1, 1); (2, 2); (3, 3); (4, 44)] - -(** Test merging when replacing the element of a new overlapping key. *) -let test_merge_overlaps_right = - let open Result_syntax in - unit_test "Merge overlap replace" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun ctxt _ right -> Ok (right, ctxt)) - [(1, 1); (2, 2); (3, 3); (1, 11); (2, 22); (3, 33); (4, 44)] - in - assert_map_contains ctxt map [(1, 11); (2, 22); (3, 33); (4, 44)] - -(** Test merging when combining elements of overlapping keys. *) -let test_merge_overlaps_add = - let open Result_syntax in - unit_test "Merge overlap by adding" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun ctxt left right -> Ok (left + right, ctxt)) - [(1, 1); (2, 2); (3, 3); (1, 1); (2, 2); (3, 3); (4, 4)] - in - assert_map_contains ctxt map [(1, 2); (2, 4); (3, 6); (4, 4)] - -(** Test update with merging elements of new and existing keys by adding them. *) -let test_update_merge = - let open Result_syntax in - unit_test "Update with merge add" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(1, 1); (2, 2); (3, 3)] - in - let update_merge ctxt key new_value map = - CM.update - ctxt - key - (fun ctxt existing -> - match existing with - | None -> Ok (Some new_value, ctxt) - | Some old_value -> Ok (Some (new_value + old_value), ctxt)) - map - in - let* map, ctxt = update_merge ctxt 1 1 map in - let* map, ctxt = update_merge ctxt 4 4 map in - assert_map_contains ctxt map [(1, 2); (2, 2); (3, 3); (4, 4)] - -(** Test merging two maps when keeping the original value for overlapping keys. *) -let test_merge_map_keep_existing = - let open Result_syntax in - unit_test "Merge overlap keep existing" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map1, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(1, "a"); (2, "b"); (3, "c")] - in - let* map2, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(2, "b'"); (3, "c'"); (4, "d'")] - in - let* map, ctxt = - CM.merge ctxt ~merge_overlap:(fun ctxt left _ -> Ok (left, ctxt)) map1 map2 - in - assert_map_contains ctxt map [(1, "a"); (2, "b"); (3, "c"); (4, "d'")] - -(** Test merging two maps when replacing the value for overlapping keys. *) -let test_merge_map_replace_existing = - let open Result_syntax in - unit_test "Merge overlap replace existing" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map1, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(1, "a"); (2, "b"); (3, "c")] - in - let* map2, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(2, "b'"); (3, "c'"); (4, "d'")] - in - let* map, ctxt = - CM.merge - ctxt - ~merge_overlap:(fun ctxt _ right -> Ok (right, ctxt)) - map1 - map2 - in - assert_map_contains ctxt map [(1, "a"); (2, "b'"); (3, "c'"); (4, "d'")] - -(** Test deleting existing and non-existing keys. *) -let test_update_delete = - let open Result_syntax in - unit_test "Update delete" @@ fun () -> - let ctxt = unsafe_new_context () in - let* map, ctxt = - CM.of_list - ctxt - ~merge_overlap:(fun _ _ _ -> dummy_fail) - [(1, 1); (2, 2); (3, 3)] - in - let delete ctxt key map = - CM.update ctxt key (fun ctxt _ -> Ok (None, ctxt)) map - in - let* map, ctxt = delete ctxt 1 map in - let* map, ctxt = delete ctxt 4 map in - assert_map_contains ctxt map [(2, 2); (3, 3)] - -(** Test that merging [empty] with a map returns the same map. *) -let test_empty_left_identity_for_merge = - let open Result_syntax in - int_map_test "Empty map is left identity for merge" @@ fun map -> - let ctxt = unsafe_new_context () in - let* map', ctxt = - CM.merge ctxt ~merge_overlap:(fun _ _ _ -> dummy_fail) map CM.empty - in - assert_equal_map ctxt map map' - -(** Test that merging a map with [empty] returns the same map. *) -let test_empty_right_identity_for_merge = - let open Result_syntax in - int_map_test "Empty map is right identity for merge" @@ fun map -> - let ctxt = unsafe_new_context () in - let* map', ctxt = - CM.merge ctxt ~merge_overlap:(fun _ _ _ -> dummy_fail) CM.empty map - in - assert_equal_map ctxt map map' - -(** Test that [size] returns the number of key value pairs of a map. *) -let test_size = - let open Result_syntax in - int_map_test "Size returns the number of elements" @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, _ = CM.to_list ctxt map in - return Compare.List_length_with.(kvs = CM.size map) - -(** Test that all keys of a map are found. *) -let test_find_existing = - let open Result_syntax in - int_map_test "Find all elements" @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, _ = CM.to_list ctxt map in - let* (_ : CM.context) = - List.fold_left_e - (fun ctxt (k, v) -> - let* v_opt, ctxt = CM.find ctxt k map in - match v_opt with Some v' when v = v' -> Ok ctxt | _ -> dummy_fail) - ctxt - kvs - in - return_true - -(** Test that find returns [None] for non-existing keys. *) -let test_find_non_existing = - let open Result_syntax in - int_map_test "Should not find non-existing" @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, _ = CM.to_list ctxt map in - let key = 42 in - let* v_opt, _ = CM.find ctxt key map in - match List.find_opt (fun (k, _) -> k = key) kvs with - | Some (_, value) -> Ok (Some value = v_opt) - | None -> Ok (None = v_opt) - -(** Test that [to_list] followed by [of_list] returns the same map. *) -let test_to_list_of_list = - let open Result_syntax in - int_map_test "To-list/of-list roundtrip" @@ fun map -> - let ctxt = unsafe_new_context () in - let merge_overlap ctxt x y = Ok (x + y, ctxt) in - let* kvs, ctxt = CM.to_list ctxt map in - let* map', ctxt = CM.of_list ctxt ~merge_overlap kvs in - assert_equal_map ctxt map map' - -(** Test that merging two maps is equivalent to merging the concatenated - key-value lists of both maps. *) -let test_merge_against_list = - let open Result_syntax in - int_map_pair_test "Merge compared with list operation" @@ fun map1 map2 -> - let ctxt = unsafe_new_context () in - let merge_overlap ctxt x y = Ok (x + y, ctxt) in - let* kvs1, ctxt = CM.to_list ctxt map1 in - let* kvs2, ctxt = CM.to_list ctxt map2 in - let* map_merged1, ctxt = CM.merge ctxt ~merge_overlap map1 map2 in - let* map_merged2, ctxt = CM.of_list ~merge_overlap ctxt (kvs1 @ kvs2) in - assert_equal_map ctxt map_merged1 map_merged2 - -(** Test that merging a map with itself does not alter its size. *) -let test_size_merge_self = - let open Result_syntax in - int_map_test "Size should not change when map is merging with itself" - @@ fun map -> - let ctxt = unsafe_new_context () in - let size1 = CM.size map in - let* map2, _ = - CM.merge - ctxt - ~merge_overlap:(fun ctxt left right -> Ok (left + right, ctxt)) - map - map - in - let size2 = CM.size map2 in - Ok (size1 = size2) - -(** Test that merging with a failing merge operation yields an error. *) -let test_merge_fail = - int_map_test "Merging with failing merge-overlap" @@ fun map -> - let ctxt = unsafe_new_context () in - Result.return - (match CM.merge ctxt ~merge_overlap:(fun _ _ _ -> dummy_fail) map map with - | Ok _ when CM.size map = 0 -> true - | Ok _ -> false - | Error _ -> true) - -(** Test that adding one key-value pair to a map increases its size by one iff - the key already exists. *) -let test_size_add_one = - let open Result_syntax in - int_map_test "Add a new element increases size by one" @@ fun map -> - let ctxt = unsafe_new_context () in - let key = 42 in - let* val_opt, ctxt = CM.find ctxt key map in - let* map', _ctxt = - CM.update - ctxt - key - (fun ctxt existing -> - match existing with - | None -> Ok (Some 42, ctxt) - | Some old_value -> Ok (Some old_value, ctxt)) - map - in - let size = CM.size map in - let size' = CM.size map' in - match val_opt with - | None -> Ok (size' = size + 1) - | Some _ -> Ok (size' = size) - -(** Test that mapping over a map is equivalent to mapping over the list of - key-value pairs and reconstructing the map. That is, the following diagram - commutes: - - [map] ----to_list---> [list] - | | - [map_e f] [List.map f] - | | - v v - [map] --- to_list --> [list] -*) -let test_map = - let open Result_syntax in - int_map_test "Test that map commutes with mapping over list" @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, ctxt = CM.to_list ctxt map in - let* map', ctxt = CM.map_e ctxt (fun ctxt _ x -> Ok (x + 1, ctxt)) map in - let kvs' = List.map (fun (k, v) -> (k, v + 1)) kvs in - assert_map_contains ctxt map' kvs' - -(** Test that folding over an empty map does not invoke the accumulator - function. *) -let test_fold_empty = - let open Result_syntax in - unit_test "Fold empty" @@ fun () -> - let ctxt = unsafe_new_context () in - let* x, _ = CM.fold_e ctxt (fun _ctxt _acc _k _v -> dummy_fail) 0 CM.empty in - Ok (x = 0) - -(** Test that folding over a map is equivalent to folding over the corresponding - list of key-value pairs. That is, the following diagram commutes: - - [map] -- to_list --> [list] - | | - [fold_e f z] [List.fold_left f z] - | | - res <----- id -----> res -*) -let test_fold = - let open Result_syntax in - int_map_test "Test that fold commutes with folding over a list" @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, ctxt = CM.to_list ctxt map in - let sum = List.fold_left (fun sum (k, v) -> k + v + sum) 0 kvs in - let* sum', _ = - CM.fold_e ctxt (fun ctxt sum k v -> Ok (k + v + sum, ctxt)) 0 map - in - Ok (sum = sum') - -(** Test that all key-value pairs can be collected by a fold. And that the - order is the same as for [to_list]. *) -let test_fold_to_list = - let open Result_syntax in - int_map_test "Test that fold collecting the elements agrees with to-list" - @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, ctxt = CM.to_list ctxt map in - let* kvs', _ = - CM.fold_e ctxt (fun ctxt kvs k v -> Ok ((k, v) :: kvs, ctxt)) [] map - in - Ok (kvs = List.rev kvs') - -(** Test that mapping with a failing function fails iff the list is non-empty. *) -let test_map_fail = - int_map_test "Test map with failing function" @@ fun map -> - let ctxt = unsafe_new_context () in - Result.return - (match CM.map_e ctxt (fun _ctxt _key _val -> dummy_fail) map with - | Ok _ when CM.size map = 0 -> true - | Error _ -> true - | Ok _ -> false) - -(** Test that removing an existing key from a map decreases its size by one. *) -let test_size_remove_one = - let open Result_syntax in - int_map_test "Remove new element decreases size by one" @@ fun map -> - let ctxt = unsafe_new_context () in - let* kvs, ctxt = CM.to_list ctxt map in - let key = match kvs with (k, _) :: _ -> k | _ -> 42 in - let* val_opt, ctxt = CM.find ctxt key map in - let* map', _ctxt = CM.update ctxt key (fun ctxt _ -> Ok (None, ctxt)) map in - let size = CM.size map in - let size' = CM.size map' in - match val_opt with - | None -> Ok (size' = size) - | Some _ -> Ok (size' = size - 1) - -let qcheck_tests = - [ - test_size; - test_to_list_of_list; - test_empty_left_identity_for_merge; - test_empty_right_identity_for_merge; - test_size_merge_self; - test_size_add_one; - test_size_remove_one; - test_merge_against_list; - test_merge_fail; - test_find_non_existing; - test_find_existing; - test_map; - test_fold; - test_fold_to_list; - test_map_fail; - ] - -let unit_tests = - [ - test_empty; - test_update_add; - test_update_replace; - test_merge_overlaps_left; - test_merge_overlaps_right; - test_merge_overlaps_add; - test_update_merge; - test_merge_map_keep_existing; - test_merge_map_replace_existing; - test_update_delete; - test_fold_empty; - ] - -let tests ~rand = qcheck_wrap ~rand qcheck_tests @ unit_tests - -let () = - (* Ensure deterministic results. *) - let rand = Random.State.make [|0x1337533D; 71287309; 397060904|] in - Alcotest.run ~__FILE__ Protocol.name [("Carbonated map", tests ~rand)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_compare_operations.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_compare_operations.ml deleted file mode 100644 index 9782e829dc91b5e2dcb0bad48e8a2c83e841857e..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_compare_operations.ml +++ /dev/null @@ -1,102 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Operation compare) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_compare_operations.ml - Subject: Valid operations Comparison -*) - -open Protocol -open Alpha_context -open Operation_generator -open QCheck2 - -let lt = -1 - -let gt = 1 - -let eq = 0 - -let cmp_op op1 op2 res = Compare.Int.equal (Operation.compare op1 op2) res - -(** A strict order has an equality predicate that is symmetric, - reflexive and transitive and an lt (and gt) predicates that is - antisymmetric and transitive. - - Testing that Operation.compare is a strict order on - operations is then testing that it is symmetric, transitive and - reflexive, when Operation.compare x y = 0; that it is transitive - when Operation.compare x y = -1 and Operation.compare x y = -1; and - that Operation.compare x y = - (Operation.compare y x) when differ - from 0. *) -let eq_sym op1 op2 = if cmp_op op1 op2 eq then assert (cmp_op op2 op1 eq) - -let eq_refl op = assert (cmp_op op op eq) - -let eq_trans op1 op2 op3 = - if cmp_op op1 op2 eq && cmp_op op2 op3 eq then assert (cmp_op op1 op3 eq) - -let lt_antisym op1 op2 = if cmp_op op1 op2 lt then assert (cmp_op op2 op1 gt) - -let lt_trans op1 op2 op3 = - if cmp_op op1 op2 lt && cmp_op op2 op3 lt then assert (cmp_op op1 op3 lt) - -let gt_trans op1 op2 op3 = - if cmp_op op1 op2 gt && cmp_op op2 op3 gt then assert (cmp_op op1 op3 gt) - -let gt_antisym op1 op2 = if cmp_op op1 op2 gt then assert (cmp_op op2 op1 lt) - -(** Testing that Operation.compare is a strict order on operations. *) -let strorder op1 op2 op3 = - eq_sym op1 op2 ; - eq_refl op1 ; - eq_trans op1 op2 op3 ; - lt_antisym op1 op2 ; - lt_trans op1 op2 op3 ; - gt_trans op1 op2 op3 ; - gt_antisym op1 op2 - -let test_compare_is_strorder = - Test.make - ~name:"Compare operations is a strict total order" - (Gen.triple generate_operation generate_operation generate_operation) - (fun ((k1, op1), (k2, op2), (k3, op3)) -> - try - strorder op1 op2 op3 ; - true - with exn -> - Format.eprintf "%a vs. %a vs. %a@." pp_kind k1 pp_kind k2 pp_kind k3 ; - raise exn) - -let tests = [test_compare_is_strorder] - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [("Compare_operations", Qcheck2_helpers.qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_dal_slot_proof.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_dal_slot_proof.ml deleted file mode 100644 index f43943d33e34da00c07dabd7500f7b5dc73953ef..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_dal_slot_proof.ml +++ /dev/null @@ -1,264 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: PBT for refutation proofs of Dal - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_dal_slot_proof.ml - Subject: Refutation proof-related functions of Dal -*) - -open Protocol - -module Make (Parameters : sig - val name : string - - val count : int - - val dal_parameters : Alpha_context.Constants.Parametric.dal -end) = -struct - module ARG = struct - include Parameters - - let cryptobox = - Lazy.from_fun @@ fun () -> - Dal_helpers.mk_cryptobox Parameters.dal_parameters.cryptobox_parameters - end - - open Dal_helpers.Make (ARG) - - (* Introduce some intermediate types. *) - - (** The slot is not confirmed (skipped) iff the boolean is [true]. *) - type slot_skipped = bool - - type level = int - - type slots = level * slot_skipped list - - type levels = slots list - - (** Given a list of {!levels}, where each element is of type {!slots} = {!slot} - list, and where each slot is a boolean, this function populates an - empty slots_history skip list and a corresponding history_cache as follows: - - the function starts from a given [start_level] (default is 1) - - levels are incremented by 2 (to allow having levels without confirmed slots - for test purpose). - - every element in the list of levels represents the slots of a single level. - - each slot of a given level is not confirmed iff the boolean is true. *) - let populate_slots_history (levels_data : levels) = - let open Lwt_result_wrap_syntax in - (* Make and insert a slot. *) - let slot_data = - Bytes.init - Parameters.(dal_parameters.cryptobox_parameters.slot_size) - (fun _i -> 'x') - in - let* polynomial = dal_mk_polynomial_from_slot slot_data in - let* cryptobox = Lazy.force ARG.cryptobox in - let*? commitment = dal_commit cryptobox polynomial in - (* Insert the slots of a level. *) - let add_slots (cell, cache, slots_info) (level, slots_data) = - let curr_level = Raw_level_repr.of_int32_exn (Int32.of_int level) in - let slots_headers = - List.mapi - (fun sindex skip_slot -> - let index = - Option.value_f - (Dal_slot_index_repr.of_int_opt - ~number_of_slots:Parameters.(dal_parameters.number_of_slots) - sindex) - ~default:(fun () -> assert false) - in - ( Dal_slot_repr.Header. - {id = {published_level = curr_level; index}; commitment}, - skip_slot )) - slots_data - in - let attested_slots_headers = - List.filter_map - (fun (slot, skip_slot) -> if skip_slot then None else Some slot) - slots_headers - in - let*?@ cell, cache = - Dal_slot_repr.History.add_confirmed_slot_headers - ~number_of_slots:Parameters.dal_parameters.number_of_slots - cell - cache - curr_level - attested_slots_headers - in - let slots_info = - List.fold_left - (fun slots_info (slot, skip_slot) -> - (polynomial, slot, skip_slot) :: slots_info) - slots_info - slots_headers - in - return (cell, cache, slots_info) - in - - (* Insert the slots of all the levels. *) - let add_levels = List.fold_left_es add_slots in - add_levels (genesis_history, genesis_history_cache, []) levels_data - - (** This function returns the (correct) information of a page to - prove that it is confirmed, or None if the page's slot is skipped. *) - let request_confirmed_page (poly, slot, skip_slot) = - let open Lwt_result_syntax in - if skip_slot then - (* We cannot check that a page of an unconfirmed slot is confirmed. *) - return_none - else - let* page_info, page_id = mk_page_info slot poly in - return_some (page_info, page_id) - - (** This function returns information of a page to prove that it is - unconfirmed, if the page's slot is skipped, the information look correct - (but the slot is not confirmed). Otherwise, we increment the publish_level - field to simulate a non confirmed slot (as for even levels, no slot is - confirmed. See {!populate_slots_history}). *) - let request_unconfirmed_page (poly, slot, skip_slot) = - let open Lwt_result_syntax in - let open Dal_slot_repr.Header in - if skip_slot then - let level = slot.id.published_level in - let* _page_info, page_id = mk_page_info ~level slot poly in - (* We should not provide the page's info if we want to build an - unconfirmation proof. *) - return_some (None, page_id) - else return_none - - (** This helper function allows to test DAL's {!produce_proof} and - {!verify_proof} functions, using the data constructed from - {!populate_slots_history} above. *) - let helper_check_pbt_pages last_cell last_cache slots_info ~page_to_request - ~check_produce ~check_verify = - let open Lwt_result_syntax in - List.iter_es - (fun item -> - let* mk_test = page_to_request item in - match mk_test with - | None -> return_unit - | Some (page_info, page_id) -> - produce_and_verify_proof - last_cell - ~get_history:(get_history last_cache) - ~page_info - ~page_id - ~check_produce - ~check_verify) - slots_info - - (** Making some confirmation pages tests for slots that are confirmed. *) - let test_confirmed_pages (levels_data : levels) = - let open Lwt_result_syntax in - let* last_cell, last_cache, slots_info = - populate_slots_history levels_data - in - helper_check_pbt_pages - last_cell - last_cache - slots_info - ~page_to_request:request_confirmed_page - ~check_produce:(successful_check_produce_result ~__LOC__ `Confirmed) - ~check_verify:(successful_check_verify_result ~__LOC__ `Confirmed) - - (** Making some unconfirmation pages tests for slots that are confirmed. *) - let test_unconfirmed_pages (levels_data : levels) = - let open Lwt_result_syntax in - let* last_cell, last_cache, slots_info = - populate_slots_history levels_data - in - helper_check_pbt_pages - last_cell - last_cache - slots_info - ~page_to_request:request_unconfirmed_page - ~check_produce:(successful_check_produce_result ~__LOC__ `Unconfirmed) - ~check_verify:(successful_check_verify_result ~__LOC__ `Unconfirmed) - - let tests = - let gen_dal_config : levels QCheck2.Gen.t = - QCheck2.Gen.( - let nb_slots = 0 -- Parameters.(dal_parameters.number_of_slots) in - let nb_levels = 4 -- 30 in - let* start_level = - let* n = small_nat in - return (n + 1) - (* skip level 0 by adding 1 *) - in - (* The slot is confirmed iff the boolean is true *) - let slot = bool in - let slots = list_size nb_slots slot in - (* For each level, we generate the gap/delta w.r.t. the previous level, - and the slots' flags (confirmed or not). *) - let* list = list_size nb_levels slots in - List.mapi - (fun i slots -> - let level = start_level + i in - (level, slots)) - list - |> return) - in - [ - Tztest.tztest_qcheck2 - ~name:"Pbt tests: confirmed pages" - ~count:Parameters.count - gen_dal_config - test_confirmed_pages; - Tztest.tztest_qcheck2 - ~name:"Pbt tests: unconfirmed pages" - ~count:Parameters.count - gen_dal_config - test_unconfirmed_pages; - ] - - let tests = - [ - ( Format.sprintf - "[%s: %s] Dal slots refutation" - Protocol.name - Parameters.name, - tests ); - ] -end - -let () = - let open Tezos_protocol_019_PtParisB_parameters.Default_parameters in - let module Test = Make (struct - let name = "test" - - let count = 5 - - let dal_parameters = {constants_test.dal with number_of_slots = 24} - end) in - Alcotest_lwt.run - ~__FILE__ - (Protocol.name ^ ": Dal slots refutation game") - Test.tests - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_gas_properties.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_gas_properties.ml deleted file mode 100644 index e4b3cb3f33cdf5c4a41a76ae365315c61db13bde..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_gas_properties.ml +++ /dev/null @@ -1,144 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (gas properties) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_gas_properties.ml - Subject: Arithmetic properties around gas. -*) - -open Protocol -open Qcheck2_helpers - -(** Extract a Tezos result for compatibility with QCheck2. *) -let extract_qcheck_result = function - | Ok pure_result -> pure_result - | Error err -> - Format.printf "@\n%a@." Environment.Error_monad.pp_trace err ; - false - -(** [Gas.free] is the neutral element of gas addition: [any_cost +@ Gas.free = Gas.free +@ any_cost = any_cost]. *) -let test_free_neutral (start, any_cost) = - let open Alpha_context in - extract_qcheck_result - (let open Result_syntax in - let* free_first = Gas.consume start Gas.free in - let* branch1 = Gas.consume free_first any_cost in - let* cost_first = Gas.consume start any_cost in - let+ branch2 = Gas.consume cost_first Gas.free in - let equal_consumption_from_start t1 t2 = - Gas.Arith.( - qcheck_eq - ~pp - ~eq:equal - (Gas.consumed ~since:start ~until:t1) - (Gas.consumed ~since:start ~until:t2)) - in - equal_consumption_from_start branch1 branch2 - && equal_consumption_from_start branch1 cost_first) - -(** Consuming [Gas.free] is equivalent to consuming nothing. *) -let test_free_consumption start = - let open Alpha_context in - extract_qcheck_result - (let open Result_syntax in - let+ after_empty_consumption = Gas.consume start Gas.free in - Gas.Arith.( - qcheck_eq - ~pp - ~eq:equal - (Gas.consumed ~since:start ~until:after_empty_consumption) - zero)) - -(** Consuming [cost1] then [cost2] is equivalent to consuming - [Gas.(cost1 +@ cost2)]. *) -let test_consume_commutes (start, cost1, cost2) = - let open Alpha_context in - extract_qcheck_result - (let open Result_syntax in - let* after_cost1 = Gas.consume start cost1 in - let* branch1 = Gas.consume after_cost1 cost2 in - let+ branch2 = Gas.consume start Gas.(cost1 +@ cost2) in - Gas.Arith.( - qcheck_eq - ~pp - ~eq:equal - (Gas.consumed ~since:start ~until:branch1) - (Gas.consumed ~since:start ~until:branch2))) - -(** Arbitrary context with a gas limit of 100_000_000. *) -let context_gen : Alpha_context.t QCheck2.Gen.t = - QCheck2.Gen.return - (Lwt_main.run - (let open Lwt_result_syntax in - let* b, _contract = Context.init1 () in - let+ inc = Incremental.begin_construction b in - Alpha_context.Gas.set_limit - (Incremental.alpha_ctxt inc) - Alpha_context.Gas.Arith.(fp (integral_of_int_exn 100_000_000))) - |> function - | Ok a -> a - | Error _ -> assert false) - -(** This arbitrary could be improved (pretty printer and shrinker) if there was a way to convert a [cost] back to an [int]. Otherwise one needs to write a custom [arbitrary] instance, but I wanted to stick to the former design of this test for the time being. *) -let gas_cost_gen : Alpha_context.Gas.cost QCheck2.Gen.t = - let open Alpha_context.Gas in - let open QCheck2.Gen in - let rand = 0 -- 1000 in - let safe_rand = map Saturation_repr.safe_int rand in - oneof - [ - map atomic_step_cost safe_rand; - map step_cost safe_rand; - map alloc_cost safe_rand; - map alloc_bytes_cost rand; - map alloc_mbytes_cost rand; - map read_bytes_cost rand; - map write_bytes_cost rand; - ] - -let tests = - [ - QCheck2.Test.make - ~count:1000 - ~name:"Consuming commutes" - QCheck2.Gen.(triple context_gen gas_cost_gen gas_cost_gen) - test_consume_commutes; - QCheck2.Test.make - ~count:1000 - ~name:"Consuming [free] consumes nothing" - context_gen - test_free_consumption; - QCheck2.Test.make - ~count:1000 - ~name:"[free] is the neutral element of Gas addition" - QCheck2.Gen.(pair context_gen gas_cost_gen) - test_free_neutral; - ] - -let () = - Alcotest.run ~__FILE__ Protocol.name [("gas properties", qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_merkle_list.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_merkle_list.ml deleted file mode 100644 index 69fbe99a7c73c9cc61d794dc0386fb334fad1b47..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_merkle_list.ml +++ /dev/null @@ -1,144 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_merkle_list.ml - Subject: Tx rollup l2 encoding -*) - -open Qcheck2_helpers - -(* ------ generators -------------------------------------------------------- *) - -let input : bytes list QCheck2.Gen.t = - let open QCheck2.Gen in - list_size (2 -- 100) bytes_gen - -let valid_pos l = - let open QCheck2.Gen in - let* pos = 0 -- (List.length l - 1) in - return pos - -let invalid_pos l = - let open QCheck2.Gen in - let* choice = bool in - let* pos = - if choice then -20 -- -1 - else - let len = List.length l in - len -- (2 * len) - in - return pos - -let input_and_pos : (int * bytes list) QCheck2.Gen.t = - let open QCheck2.Gen in - let* l = input in - let* pos = valid_pos l in - return (pos, l) - -let input_and_pos_and_wrong_pos : (int * int * bytes list) QCheck2.Gen.t = - let open QCheck2.Gen in - let* l = input in - let* pos = valid_pos l in - let* wrong_pos = invalid_pos l in - return (pos, wrong_pos, l) - -(* ------ tests ------------------------------------------------------------- *) - -let test_scons_scons_tr_equiv ~count = - let open Merkle_list_helper in - QCheck2.Test.make ~count ~name:"scons_scons_tr_equiv" input (fun input -> - let snoc = List.fold_left snoc nil input in - let snoc_tr = List.fold_left snoc_tr nil input in - Internal_for_tests.equal snoc snoc_tr) - -let test_scons_compute_equiv ~count = - let open Merkle_list_helper in - QCheck2.Test.make ~count ~name:"scons_compute_equiv" input (fun input -> - let snoc = List.fold_left snoc nil input |> root in - let compute = compute input in - Hash.equal snoc compute) - -let test_of_list_compute_equiv ~count = - let open Merkle_list_helper in - QCheck2.Test.make ~count ~name:"of_list_compute_equiv" input (fun input -> - Hash.equal (root (of_list input)) (compute input)) - -let test_of_list_snoc_tr_equiv ~count = - let open Merkle_list_helper in - QCheck2.Test.make ~count ~name:"of_list_snoc_tr_equiv" input (fun input -> - let of_list = of_list input in - let snoc_tr = List.fold_left snoc_tr nil input in - Merkle_list_helper.Internal_for_tests.equal of_list snoc_tr) - -let ok_exn = function Ok x -> x | Error _ -> raise (Invalid_argument "ok_exn") - -let test_check_path ~count = - let open Merkle_list_helper in - QCheck2.Test.make ~count ~name:"check_path" input_and_pos (fun (pos, input) -> - let tree = List.fold_left snoc nil input in - let hash = root tree in - let path = ok_exn @@ compute_path tree pos in - ok_exn @@ check_path path pos (Stdlib.List.nth input pos) hash) - -let test_check_path_wrong ~count = - let open Merkle_list_helper in - QCheck2.Test.make - ~count - ~name:"check_path_wrong" - input_and_pos_and_wrong_pos - (fun (pos, wrong_pos, input) -> - let tree = List.fold_left snoc nil input in - let hash = root tree in - let path = ok_exn @@ compute_path tree pos in - match check_path path wrong_pos (Stdlib.List.nth input pos) hash with - | Ok b -> not b - | Error _ -> true) - -let () = - let qcheck_wrap = qcheck_wrap ~rand:(Random.State.make_self_init ()) in - Alcotest.run - ~__FILE__ - Protocol.name - [ - ( "scons_equiv", - qcheck_wrap - [ - test_scons_scons_tr_equiv ~count:1000; - test_scons_compute_equiv ~count:1000; - ] ); - ( "of_list_equiv", - qcheck_wrap - [ - test_of_list_compute_equiv ~count:1000; - test_of_list_snoc_tr_equiv ~count:1000; - ] ); - ( "check_path", - qcheck_wrap - [test_check_path ~count:1000; test_check_path_wrong ~count:1000] ); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_operation_encoding.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_operation_encoding.ml deleted file mode 100644 index c2206c1feddd0ba15478240c697fae0dc2ab0fc1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_operation_encoding.ml +++ /dev/null @@ -1,71 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_operation_encoding.ml - Subject: Encoding for operations -*) - -open Protocol -open QCheck2 -open Qcheck2_helpers - -(** {2 Generators} *) -let generate_operation = - let open Gen in - let+ _kind, (_hash, op) = Operation_generator.generate_operation in - op - -(** {2 Tests} *) - -let test_operation encoding = - let open Alpha_context in - let gen = generate_operation in - let eq {shell = s1; protocol_data = Operation_data d1} - {shell = s2; protocol_data = Operation_data d2} = - let o1 : _ Operation.t = {shell = s1; protocol_data = d1} in - let o2 : _ Operation.t = {shell = s2; protocol_data = d2} in - match Operation.equal o1 o2 with None -> false | Some Eq -> true - in - test_roundtrip ~count:2000 ~title:"Operation.t" ~gen ~eq encoding - -let () = - let qcheck_wrap = qcheck_wrap ~rand:(Random.State.make_self_init ()) in - Alcotest.run - ~__FILE__ - (Protocol.name ^ ": Operation_encoding") - [ - ( "roundtrip", - qcheck_wrap [test_operation Alpha_context.Operation.encoding] ); - ( "legacy : roundtrip", - qcheck_wrap - [ - test_operation - Alpha_context.Operation.encoding_with_legacy_attestation_name; - ] ); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_refutation_game.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_refutation_game.ml deleted file mode 100644 index 7e7c4b94193090904b23246ad34e0c2b994c7272..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_refutation_game.ml +++ /dev/null @@ -1,1648 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: PBT for the SCORU refutation game - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_refutation_game.ml - Subject: SCORU refutation game -*) -open Protocol - -open Alpha_context -open Sc_rollup -open Qcheck2_helpers -open Sc_rollup_helpers - -(** {2 Utils} *) - -let qcheck_make_lwt = qcheck_make_lwt ~extract:Lwt_main.run - -let qcheck_make_lwt_res ?print ?count ~name ~gen f = - qcheck_make_result - ~pp_error:Error_monad.pp_print_trace - ?print - ?count - ~name - ~gen - (fun a -> Lwt_main.run (f a)) - -let tick_to_int_exn ?(__LOC__ = __LOC__) t = - WithExceptions.Option.get ~loc:__LOC__ (Tick.to_int t) - -let number_of_ticks_of_int64_exn ?(__LOC__ = __LOC__) n = - WithExceptions.Option.get ~loc:__LOC__ (Number_of_ticks.of_value n) - -let game_status_of_refute_op_result = function - | [ - Apply_results.Operation_metadata - { - contents = - Single_result - (Manager_operation_result - { - operation_result = - Applied (Sc_rollup_refute_result {game_status; _}); - _; - }); - }; - ] -> - game_status - | _ -> assert false - -let list_assoc (key : Tick.t) list = List.assoc ~equal:( = ) key list - -let print_dissection_chunk = Format.asprintf "%a" Dissection_chunk.pp - -let print_dissection = Format.asprintf "%a" Game.pp_dissection - -let print_our_states _ = "" - -(** Assert that the computation fails with the given message. *) -let assert_fails_with ~__LOC__ (res : unit Environment.Error_monad.tzresult) - expected_err = - match res with - | Error trace -> - let expected_trace = - Environment.Error_monad.trace_of_error expected_err - in - if expected_trace = trace then Lwt.return_true - else - let pp = Environment.Error_monad.pp_trace in - QCheck2.Test.fail_reportf - "@[Expected reason: %a@;Actual reason: %a@]" - pp - expected_trace - pp - trace - | Ok () -> Lwt.return_false - -let initial_of_dissection dissection = - List.hd dissection |> WithExceptions.Option.get ~loc:__LOC__ - -(** Modify the last section of a dissection. *) -let rec modify_stop f dissection = - match dissection with - | [] -> assert false - | [chunk] -> [f chunk] - | x :: xs -> - let xs = modify_stop f xs in - x :: xs - -(** Modify the first section of a dissection. *) -let modify_start f dissection = - match dissection with - | chunk :: xs -> f chunk :: xs - | [] -> (* The dissection can not be empty. *) assert false - -(** Checks that the [dissection] is valid regarding the function - {!Sc_rollup_game_repr.check_dissection}. *) -let valid_dissection ~default_number_of_sections ~start_chunk ~stop_chunk - dissection = - Game.Internal_for_tests.check_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - dissection - |> Result.is_ok - -(** [disputed_sections ~our_states dissection] returns the list of sections - in the [dissection] on which the player dissecting disagree with. - It uses [our_states], an assoc list between tick and state hashes to - compare opponent's claims against our point of view. *) -let disputed_sections ~our_states dissection = - let agree_on_state tick their_state = - let our_state = list_assoc tick our_states in - Option.equal State_hash.equal our_state their_state - in - let rec traverse acc = function - | Dissection_chunk.( - {state_hash = their_start_state; tick = start_tick} as a) - :: ({state_hash = their_stop_state; tick = stop_tick} as b) - :: dissection -> - let rst = b :: dissection in - if agree_on_state start_tick their_start_state then - (* It's a disputed section if we agree on the start state but disagree - on the stop. *) - if agree_on_state stop_tick their_stop_state then traverse acc rst - else - let disputed_section = (a, b) in - traverse (disputed_section :: acc) rst - else traverse acc rst - | _ -> acc - in - traverse [] dissection - -let pick_disputed_sections disputed_sections = - QCheck2.Gen.oneofl disputed_sections - -let single_tick_disputed_sections disputed_sections = - List.filter_map - (fun disputed_section -> - let Dissection_chunk.({tick = a_tick; _}, {tick = b_tick; _}) = - disputed_section - in - let distance = Tick.distance a_tick b_tick in - if Z.Compare.(distance = Z.one) then Some disputed_section else None) - disputed_sections - -let final_dissection ~our_states dissection = - let disputed_sections = disputed_sections ~our_states dissection in - let single_tick_disputed_sections = - single_tick_disputed_sections disputed_sections - in - Compare.List_length_with.(single_tick_disputed_sections > 0) - -(** Build a non-random dissection from [start_chunk] to [stop_chunk] using - [our_states] as the state hashes for each tick. *) -let build_dissection ~number_of_sections ~start_chunk ~stop_chunk ~our_states = - let open Lwt_result_syntax in - let state_of_tick ?start_state:_ tick = - return @@ list_assoc tick our_states - in - let state_hash_of_eval_state = Fun.id in - let our_stop_chunk = - Dissection_chunk. - {stop_chunk with state_hash = list_assoc stop_chunk.tick our_states} - in - (* TODO: https://gitlab.com/tezos/tezos/-/issues/3491 - - This dissection's building does not check the number of sections. Checks should - be added to verify that we don't generate invalid dissection and test the - incorrect cases. *) - Lwt_main.run - @@ let*! r = - Game_helpers.( - make_dissection - ~state_of_tick - ~state_hash_of_eval_state - ~start_chunk - ~our_stop_chunk - @@ default_new_dissection - ~start_chunk - ~our_stop_chunk - ~default_number_of_sections:number_of_sections) - in - Lwt.return @@ WithExceptions.Result.get_ok ~loc:__LOC__ r - -let originate_rollup originator block = - let open Lwt_result_syntax in - let* origination_operation, sc_rollup = - Sc_rollup_helpers.origination_op (B block) originator Kind.Example_arith - in - let* block = Block.bake ~operations:[origination_operation] block in - let* inbox = Context.Sc_rollup.inbox (B block) in - let+ genesis_info = Context.Sc_rollup.genesis_info (B block) sc_rollup in - (block, sc_rollup, inbox, genesis_info) - -(** [create_ctxt ()] creates a context where an arith rollup was originated, - and both [account1] and [account2] owns enough tez to stake on a - commitment. *) -let create_ctxt () = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Lwt_main.run - @@ - let open Lwt_result_syntax in - let* block, (account1, account2, account3) = - Context.init3 - ~sc_rollup_arith_pvm_enable:true - ~consensus_threshold:0 - ~bootstrap_balances:[100_000_000_000L; 100_000_000_000L; 100_000_000_000L] - () - in - let* block, sc_rollup, inbox, genesis_info = - originate_rollup account3 block - in - return (block, sc_rollup, inbox, genesis_info, (account1, account2, account3)) - -(** {2 Context free generators} *) - -(** Generate a {!State_hash.t}. - - We use a dirty hack {!QCheck2.Gen.make_primitive} to remove the - automatic shrinking. Shrinking on the states in a dissection can - be confusing, it can leads to a shrunk list with the same states in - each cell. -*) -let gen_random_hash = - let open QCheck2.Gen in - let gen = - let* x = bytes_fixed_gen 32 in - return @@ State_hash.of_bytes_exn x - in - (* This is not beautiful, but there is currently no other way to - remove the shrinker. *) - make_primitive - ~gen:(fun rand -> generate1 ~rand gen) - ~shrink:(fun _ -> Seq.empty) - -(** Generate the number of sections in the dissection. *) -let gen_num_sections = - let open Tezos_protocol_019_PtParisB_parameters.Default_parameters in - let testnet = constants_test.sc_rollup.number_of_sections_in_dissection in - let mainnet = constants_mainnet.sc_rollup.number_of_sections_in_dissection in - let sandbox = constants_sandbox.sc_rollup.number_of_sections_in_dissection in - QCheck2.Gen.( - frequency - [(5, pure mainnet); (4, pure testnet); (2, pure sandbox); (1, 4 -- 100)]) - -(** Generate a tick. *) -let gen_tick ?(lower_bound = 0) ?(upper_bound = 10_000) () = - let open QCheck2.Gen in - let+ tick = lower_bound -- upper_bound in - tick_of_int_exn ~__LOC__ tick - -(** Generate two chunks consisting in valid boundaries for a dissection *) -let gen_wasm_pvm_dissection_boundaries kind = - let open QCheck2.Gen in - let open Alpha_context in - let* broken = bool in - let* state_hash = gen_random_hash in - let* base = Z.of_int <$> 0 -- 10_000 in - let* len = - Z.of_int - <$> - match kind with - | `Kernel_run -> pure 1 - | `Short -> 2 -- 32 - | `Large -> 1_000 -- 10_000 - in - let+ offset = - if broken then 1 -- Z.to_int Sc_rollup.Wasm_2_0_0PVM.ticks_per_snapshot - else pure 0 - in - let start_tick = - Sc_rollup.Tick.of_z @@ Z.(base * Sc_rollup.Wasm_2_0_0PVM.ticks_per_snapshot) - in - let stop_tick = - Sc_rollup.Tick.of_z - @@ Z.( - ((base + len) * Sc_rollup.Wasm_2_0_0PVM.ticks_per_snapshot) - + Z.of_int offset) - in - let start_chunk = - Sc_rollup.Dissection_chunk. - {tick = start_tick; state_hash = Some State_hash.zero} - in - let stop_chunk = - Sc_rollup.Dissection_chunk.{tick = stop_tick; state_hash = Some state_hash} - in - (start_chunk, stop_chunk) - -(** [gen_arith_pvm_messages ~gen_size] is a `correct list` generator. - It generates a list of strings that are either integers or `+` to be - consumed by the arithmetic PVM. - If a `+` is found then the previous two element of the stack are poped - then added and the result is pushed to the stack. In particular, - lists like `[1 +]` are incorrect. *) -let gen_arith_pvm_messages ~gen_size = - let open QCheck2.Gen in - (* To preserve the correctness invariant, genlist is a recursive generator - that produce a pair `(stack_size, state_list)` where state_list is a - correct list of integers and `+` and consuming it will produce a `stack` - of length `stack_size`. - For example a result can be `(3, [1; 2; +; 3; +; 2; 2; +; 1;]). - Consuming the list will produce the stack`[6; 4; 1]` which has length 3. *) - let produce_inputs self fuel = - match fuel with - | 0 -> map (fun x -> (1, [string_of_int x])) small_nat - | n -> - (* The generator has two branches. - 1. with frequency 1 adds integers to state_list and increases the - corresponding stack_size. - 2. With frequency 2, at each step, it looks at the inductive result - [(self (n - 1)) = (stack_size, state_list)]. - - If the stack_size is smaller than 2 then it adds an integer to the - state_list and increases the stack_size. Otherwise, it adds a plus - to the state_list and decreases the stack_size. *) - frequency - [ - ( 2, - map2 - (fun x (stack_size, state_list) -> - if stack_size >= 2 then (stack_size - 1, "+" :: state_list) - else (stack_size + 1, string_of_int x :: state_list)) - small_nat - (self (n / 2)) ); - ( 1, - map2 - (fun x (i, y) -> (i + 1, string_of_int x :: y)) - small_nat - (self (n / 2)) ); - ] - in - let+ inputs = sized_size gen_size @@ fix produce_inputs in - snd inputs |> List.rev |> String.concat " " - -(** Generate a list of level and associated arith pvm messages. *) -let gen_arith_pvm_payloads_for_levels ~start_level ~max_level = - gen_payloads_for_levels - ~start_level - ~max_level - (gen_arith_pvm_messages ~gen_size:(QCheck2.Gen.pure 0)) - -(** Dissection helpers and tests *) -module Dissection = struct - (** Generate an initial *valid* dissection. The validity comes from a - mirrored implementation of {!Sc_rollup_game_repr.initial}. *) - let gen_initial_dissection ?ticks () = - let open QCheck2.Gen in - let* child_state = gen_random_hash and* parent_state = gen_random_hash in - let* ticks = - let+ ticks = - match ticks with - | None -> frequency [(1, pure 0); (9, 1 -- 1_000)] - | Some distance -> pure distance - in - Z.of_int ticks - in - let* initial_tick = gen_tick () in - if Z.Compare.(ticks = Z.zero) then - pure - [ - Dissection_chunk.{state_hash = Some child_state; tick = initial_tick}; - Dissection_chunk.{state_hash = None; tick = Tick.next initial_tick}; - ] - else - let tick = Tick.jump initial_tick ticks in - pure - [ - Dissection_chunk.{state_hash = Some parent_state; tick = initial_tick}; - Dissection_chunk.{state_hash = Some child_state; tick}; - Dissection_chunk.{state_hash = None; tick = Tick.next tick}; - ] - - (** Generate a *valid* dissection. - It returns the dissection alongside the dissected start_chunk and - stop_chunk, but also the number of sections used to generate the - dissection. *) - let gen_dissection ~number_of_sections ~our_states dissection = - let open QCheck2.Gen in - let disputed_sections = disputed_sections ~our_states dissection in - assert (Compare.List_length_with.(disputed_sections > 0)) ; - let+ start_chunk, stop_chunk = pick_disputed_sections disputed_sections in - let dissection = - build_dissection ~number_of_sections ~start_chunk ~stop_chunk ~our_states - in - (dissection, start_chunk, stop_chunk) - - let gen_initial_dissection_ticks = QCheck2.Gen.(0 -- 1_000) - - let gen_nonfinal_initial_dissection_ticks = QCheck2.Gen.(3 -- 1_000) - - (** Given an initial tick and state_hash: generates random state hashes for - every others [ticks]. - Having [our_states] provide the state hashes you believe to - be true. You can then generate a dissection from another one when - you disagree with some sections. *) - let gen_our_states start_chunk ticks = - let open QCheck2.Gen in - let Dissection_chunk.{tick = initial_tick; state_hash = initial_state_hash} - = - start_chunk - in - let initial_state_hash = - WithExceptions.Option.get ~loc:__LOC__ initial_state_hash - in - let initial_tick_int = tick_to_int_exn initial_tick in - let rec aux acc i = - if i < 0 then return acc - else if i = 0 then return ((initial_tick, initial_state_hash) :: acc) - else - let* state_hash = gen_random_hash in - let tick = tick_of_int_exn (i + initial_tick_int) in - aux ((tick, state_hash) :: acc) (i - 1) - in - aux [] ticks - - (** {3 Dissection tests} *) - - let count = 300 - - (** Test the validity of dissection generated by {!gen_dissection} on - an initial dissection generated by {!gen_initial_dissection}. - It is a self test that'll help detect issues in subsequent tests; - in case the generator does not produce valid dissections. *) - let test_valid_gen_dissection = - let open QCheck2 in - let gen = - let open Gen in - let* number_of_sections = gen_num_sections in - let* ticks = gen_initial_dissection_ticks in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - if final_dissection ~our_states dissection then - (* The initial dissection could not be dissected. *) - return (dissection, None, number_of_sections, our_states) - else - let* new_dissection, start_hash, stop_hash = - gen_dissection ~number_of_sections ~our_states dissection - in - return - ( dissection, - Some (new_dissection, start_hash, stop_hash), - number_of_sections, - our_states ) - in - let print = - Print.( - quad - print_dissection - (option - (triple - print_dissection - print_dissection_chunk - print_dissection_chunk)) - int - print_our_states) - in - qcheck_make_lwt - ~count - ~name:"gen_dissection produces a valid dissection" - ~print - ~gen - (fun (dissection, new_dissection, default_number_of_sections, our_states) - -> - let open Lwt_syntax in - match new_dissection with - | None -> return (final_dissection ~our_states dissection) - | Some (new_dissection, start_chunk, stop_chunk) -> - return - @@ valid_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - new_dissection) - - (** Truncate a [dissection] and expect the - {!Sc_rollup_game_repr.check_dissection} to fail with an invalid - number of sections, where [expected_number_of_sections] is expected. *) - let truncate_and_check_error dissection start_chunk stop_chunk - default_number_of_sections expected_number_of_sections = - let truncated_dissection = - match dissection with - | x :: _ :: z :: rst -> x :: z :: rst - | _ -> - (* If the dissection is valid, this case can not be reached. *) - assert false - in - let expected_len = Z.of_int expected_number_of_sections in - let expected_reason = - Dissection_chunk.Dissection_number_of_sections_mismatch - {expected = expected_len; given = Z.pred expected_len} - in - assert_fails_with - ~__LOC__ - (Game.Internal_for_tests.check_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - truncated_dissection) - expected_reason - - (** Test that if a dissection is smaller than the default number of - sections, the length is equal to (distance + 1) of the dissected - section. *) - let test_truncated_small_dissection = - let open QCheck2 in - qcheck_make_lwt - ~count - ~name: - "distance < nb_of_sections => (len dissection = succ (dist dissection))" - ~gen: - (let open Gen in - let* number_of_sections = gen_num_sections in - let* ticks = 3 -- (number_of_sections - 1) in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - let* new_dissection, start_hash, stop_hash = - gen_dissection ~number_of_sections ~our_states dissection - in - return - (new_dissection, start_hash, stop_hash, number_of_sections, ticks)) - (fun ( dissection, - start_chunk, - stop_chunk, - default_number_of_sections, - distance ) -> - let expected_len = distance in - truncate_and_check_error - dissection - start_chunk - stop_chunk - default_number_of_sections - expected_len) - - (** Test that if the distance in the dissected section is larger than - the default number of sections, the dissection length is exactly the - default number of sections. *) - let test_truncated_large_dissection = - let open QCheck2 in - qcheck_make_lwt - ~count - ~name:"distance >= nb_of_sections => (len dissection = nb_of_sections" - ~gen: - (let open Gen in - let* number_of_sections = gen_num_sections in - let* ticks = number_of_sections -- 1_000 in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - let* new_dissection, start_chunk, stop_chunk = - gen_dissection ~number_of_sections ~our_states dissection - in - return (new_dissection, start_chunk, stop_chunk, number_of_sections)) - (fun (dissection, start_chunk, stop_chunk, default_number_of_sections) -> - truncate_and_check_error - dissection - start_chunk - stop_chunk - default_number_of_sections - default_number_of_sections) - - (** Test that we can not change the start chunk of a section when we produce - a dissection. *) - let test_immutable_start_chunk = - let open QCheck2 in - qcheck_make_lwt - ~count - ~name:"dissection.start_chunk can not change" - ~gen: - (let open Gen in - let* number_of_sections = gen_num_sections in - let* ticks = gen_nonfinal_initial_dissection_ticks in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - let* new_dissection, start_chunk, stop_chunk = - gen_dissection ~number_of_sections ~our_states dissection - in - let* new_state_hash = gen_random_hash in - return - ( new_dissection, - start_chunk, - stop_chunk, - number_of_sections, - new_state_hash )) - (fun ( dissection, - start_chunk, - stop_chunk, - default_number_of_sections, - new_state_hash ) -> - (* Check that we can not change the start hash. *) - let dissection_with_different_start = - modify_start - (fun chunk -> - Dissection_chunk.{chunk with state_hash = Some new_state_hash}) - dissection - in - assert_fails_with - ~__LOC__ - (Game.Internal_for_tests.check_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - dissection_with_different_start) - (Dissection_chunk.Dissection_start_hash_mismatch - {expected = start_chunk.state_hash; given = Some new_state_hash})) - - (** Test that we can not produce a dissection that agrees with the stop hash. - Otherwise, there would be nothing to dispute. *) - let test_stop_hash_must_change = - let open QCheck2 in - qcheck_make_lwt - ~count - ~name:"dissection.stop_chunk must change" - ~gen: - (let open Gen in - let* number_of_sections = gen_num_sections in - let* ticks = gen_nonfinal_initial_dissection_ticks in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - let* new_dissection, start_chunk, stop_chunk = - gen_dissection ~number_of_sections ~our_states dissection - in - return (new_dissection, start_chunk, stop_chunk, number_of_sections)) - (fun (dissection, start_chunk, stop_chunk, default_number_of_sections) -> - let open Lwt_syntax in - let check_failure_on_same_stop_hash stop_hash = - let invalid_dissection = - modify_stop - (fun chunk -> - Dissection_chunk.{chunk with state_hash = stop_hash}) - dissection - in - let stop_chunk = - Dissection_chunk.{stop_chunk with state_hash = stop_hash} - in - assert_fails_with - ~__LOC__ - (Game.Internal_for_tests.check_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - invalid_dissection) - (Dissection_chunk.Dissection_stop_hash_mismatch stop_hash) - in - let* b1 = check_failure_on_same_stop_hash None in - let* b2 = check_failure_on_same_stop_hash stop_chunk.state_hash in - return (b1 && b2)) - - (** Test that we can not produce a dissection modifying the starting - end last point of a section. *) - let test_immutable_start_and_stop_ticks = - let open QCheck2 in - qcheck_make_lwt - ~count - ~name: - "start_chunk.tick and stop_chunk.tick can not change in the dissection" - ~gen: - (let open Gen in - let* number_of_sections = gen_num_sections in - let* ticks = gen_nonfinal_initial_dissection_ticks in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - let* new_dissection, start_chunk, stop_chunk = - gen_dissection ~number_of_sections ~our_states dissection - in - return (new_dissection, start_chunk, stop_chunk, number_of_sections)) - (fun (dissection, start_chunk, stop_chunk, default_number_of_sections) -> - let open Lwt_syntax in - let expected_error dissection = - match (List.hd dissection, List.last_opt dissection) with - | Some Dissection_chunk.{tick = a_tick; _}, Some {tick = b_tick; _} -> - Dissection_chunk.Dissection_edge_ticks_mismatch - { - dissection_start_tick = a_tick; - dissection_stop_tick = b_tick; - chunk_start_tick = start_chunk.tick; - chunk_stop_tick = stop_chunk.tick; - } - | _ -> assert false - in - let modify_tick modify_X dissection = - let invalid_dissection = - modify_X - (fun chunk -> - Dissection_chunk.{chunk with tick = Tick.next chunk.tick}) - dissection - in - let expected_error = expected_error invalid_dissection in - assert_fails_with - ~__LOC__ - (Game.Internal_for_tests.check_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - invalid_dissection) - expected_error - in - (* We modify the start tick and expect the failure. *) - let* b1 = modify_tick modify_start dissection in - (* We modify the stop tick and expect the failure. *) - let* b2 = modify_tick modify_stop dissection in - return (b1 && b2)) - - (** Test that a valid dissection must have a proper distribution of the - sections. That is, a section should not be geq than half of the - dissected section's distance. *) - let test_badly_distributed_dissection = - let open QCheck2 in - qcheck_make_lwt - ~count - ~name:"dissection must be well distributed" - ~gen: - (let open Gen in - (* The test is not general enough to support all kind of number of - sections. *) - let number_of_sections = - Tezos_protocol_019_PtParisB_parameters.Default_parameters - .constants_mainnet - .sc_rollup - .number_of_sections_in_dissection - in - let* picked_section = 0 -- (number_of_sections - 2) in - let* ticks = 100 -- 1_000 in - let* dissection = gen_initial_dissection ~ticks () in - let* our_states = - gen_our_states (initial_of_dissection dissection) (succ ticks) - in - let* new_dissection, start_chunk, stop_chunk = - gen_dissection ~number_of_sections ~our_states dissection - in - return - ( new_dissection, - start_chunk, - stop_chunk, - number_of_sections, - picked_section )) - (fun ( dissection, - start_chunk, - stop_chunk, - default_number_of_sections, - picked_section ) -> - (* We put a distance of [1] in every section. Then, we put the - distance's left in the [picked_section], it will create - an invalid section. *) - let distance = - Z.succ @@ Tick.distance start_chunk.tick stop_chunk.tick - in - let max_section_length = - Z.(distance - of_int default_number_of_sections) - in - let section_length = Z.one in - - (* Replace the distance of the first [k] sections by [section_length]. - In practice, when [k = 0], we're at the last section of the - dissection. *) - let rec replace_distances tick k = function - | a :: b :: xs -> - let b, tick = - if k = 0 then - let tick = Tick.jump tick max_section_length in - (Dissection_chunk.{b with tick}, tick) - else - let tick = Tick.jump tick section_length in - (Dissection_chunk.{b with tick}, tick) - in - a :: replace_distances tick (k - 1) (b :: xs) - | xs -> xs - in - let invalid_dissection = - replace_distances start_chunk.tick picked_section dissection - in - let dist = Tick.distance start_chunk.tick stop_chunk.tick in - let half_dist = Z.div dist (Z.of_int 2) in - assert_fails_with - ~__LOC__ - (Game.Internal_for_tests.check_dissection - ~default_number_of_sections - ~start_chunk - ~stop_chunk - invalid_dissection) - (Dissection_chunk.Dissection_invalid_distribution half_dist)) - - let tests = - ( "Dissection", - qcheck_wrap - [ - test_valid_gen_dissection; - test_truncated_small_dissection; - test_truncated_large_dissection; - test_immutable_start_chunk; - test_stop_hash_must_change; - test_immutable_start_and_stop_ticks; - test_badly_distributed_dissection; - ] ) -end - -(** {2. ArithPVM utils} *) - -let construct_inbox_proto block list_of_messages contract = - Sc_rollup_helpers.Protocol_inbox_with_ctxt.fill_inbox - block - list_of_messages - contract - -(** Construct the inbox for the protocol side. *) -let construct_inbox_proto block list_of_messages contract = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Lwt_main.run - @@ construct_inbox_proto block list_of_messages contract - -(** Kind of strategy a player can play - - The cheaters will have their own version of inputs. This way, they - can produce valid proofs regarding their inboxes, but discarded by - the protocol. -*) -type strategy = - | Random (** A random player will execute its own random vision of inputs. *) - | Perfect - (** A perfect player, never lies, always win. - GSW 73-9 2014-2015 mindset. *) - | Lazy (** A lazy player will not execute all messages. *) - | Eager (** A eager player will not cheat until a certain point. *) - | Keen (** A keen player will execute more messages. *) - | SOL_hater (** A SOL hater will not execute the SOL input. *) - | EOL_hater (** A EOL hater will not execute the EOL input. *) - | Info_hater (** A Info per level hater will corrupt the infos. *) - | Nostalgic - (** A nostalgic player will execute messages at origination level. *) - -let pp_strategy fmt = function - | Random -> Format.pp_print_string fmt "Random" - | Perfect -> Format.pp_print_string fmt "Perfect" - | Lazy -> Format.pp_print_string fmt "Lazy" - | Eager -> Format.pp_print_string fmt "Eager" - | Keen -> Format.pp_print_string fmt "Keen" - | SOL_hater -> Format.pp_print_string fmt "SOL hater" - | EOL_hater -> Format.pp_print_string fmt "EOL hater" - | Info_hater -> Format.pp_print_string fmt "Info per level hater" - | Nostalgic -> Format.pp_print_string fmt "Nostalgic" - -type player = { - pkh : Signature.Public_key_hash.t; - contract : Contract.t; - strategy : strategy; - game_player : Game.player; -} - -let pp_player ppf {pkh; contract = _; strategy; game_player} = - Format.fprintf - ppf - "pkh: %a@,strategy: %a@,game_player: %s" - Signature.Public_key_hash.pp_short - pkh - pp_strategy - strategy - (if Game.player_equal game_player Alice then "Alice" else "Bob") - -type player_client = { - player : player; - states : (Tick.t * State_hash.t) list; - final_tick : Tick.t; - inbox : Sc_rollup_helpers.Node_inbox.t; - payloads_per_levels : payloads_per_level list; - metadata : Metadata.t; - context : Tezos_context_memory.Context_binary.t; -} - -let pp_player_client ppf - { - player; - states = _; - final_tick; - inbox = _; - payloads_per_levels = _; - metadata = _; - context = _; - } = - Format.fprintf - ppf - "@[player:@,%a@]@,final tick: %a@" - pp_player - player - Tick.pp - final_tick - -module Player_client = struct - (** Construct an inbox based on [list_of_messages] in the player context. *) - let construct_inbox ~inbox list_of_messages = - let history = Sc_rollup.Inbox.History.empty ~capacity:10000L in - let payloads_histories = Payloads_histories.empty in - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Sc_rollup_helpers.Node_inbox.fill_inbox - ~inbox_creation_level:Raw_level.root - {inbox; history; payloads_histories} - list_of_messages - - (** Generate [our_states] for [payloads_per_levels] based on the strategy. - It needs [start_level] and [max_level] in case it will need to generate - new inputs. *) - let gen_our_states ~metadata strategy ~start_level ~max_level - payloads_per_levels = - let open QCheck2.Gen in - let eval_inputs (payloads_per_levels : payloads_per_level list) = - Lwt_main.run - @@ - let open Lwt_result_syntax in - let inputs_per_levels = - List.map (fun {inputs; _} -> inputs) payloads_per_levels - in - let*! r = - Sc_rollup_helpers.Arith_pvm_eval.eval_inputs_from_initial_state - ~metadata - inputs_per_levels - in - Lwt.return @@ WithExceptions.Result.get_ok ~loc:__LOC__ r - in - match strategy with - | Perfect -> - (* The perfect player does not lie, evaluates correctly the inputs. *) - let _state, tick, our_states = eval_inputs payloads_per_levels in - return (tick, our_states, payloads_per_levels) - | Random -> - (* Random player generates its own list of inputs. *) - let* new_payloads_per_levels = - gen_arith_pvm_payloads_for_levels ~start_level ~max_level - in - let _state, tick, our_states = eval_inputs new_payloads_per_levels in - return (tick, our_states, new_payloads_per_levels) - | Lazy -> - (* Lazy player removes inputs from [payloads_per_levels]. *) - let n = List.length payloads_per_levels in - let* remove_k = 1 -- n in - let new_inputs = List.take_n (n - remove_k) payloads_per_levels in - let _state, tick, our_states = eval_inputs new_inputs in - return (tick, our_states, new_inputs) - | Eager -> - (* Eager player executes correctly the inbox until a certain point. *) - let* corrupt_at_level = 0 -- (List.length payloads_per_levels - 1) in - let payloads_per_level = - Stdlib.List.nth payloads_per_levels corrupt_at_level - |> fun {payloads; _} -> List.length payloads - in - let* corrupt_at_k = 0 -- payloads_per_level in - let payloads_per_levels = - List.mapi - (fun l payloads_per_level -> - if l = corrupt_at_level then - let inputs = - List.mapi - (fun k input -> - if k = corrupt_at_k then - make_input - ~inbox_level:(Raw_level.of_int32_exn 42l) - ~message_counter:(Z.of_int 42) - (make_external_inbox_message "foo") - else input) - payloads_per_level.inputs - in - {payloads_per_level with inputs} - else payloads_per_level) - payloads_per_levels - in - let _state, tick, our_states = eval_inputs payloads_per_levels in - return (tick, our_states, payloads_per_levels) - | Keen -> - (* Keen player will add more inputs. *) - let* offset = 1 -- 5 in - let* new_payloads_per_levels = - gen_arith_pvm_payloads_for_levels - ~start_level:max_level - ~max_level:(max_level + offset) - in - let new_payloads_per_levels = - payloads_per_levels @ new_payloads_per_levels - in - let _state, tick, our_states = eval_inputs new_payloads_per_levels in - return (tick, our_states, new_payloads_per_levels) - | SOL_hater -> - let new_payloads_per_levels = - List.map - (fun payloads_per_level -> - { - payloads_per_level with - inputs = Stdlib.List.tl payloads_per_level.inputs; - }) - payloads_per_levels - in - let _state, tick, our_states = eval_inputs new_payloads_per_levels in - return (tick, our_states, new_payloads_per_levels) - | EOL_hater -> - let new_payloads_per_levels = - List.map - (fun payloads_per_level -> - let inputs = - let rev_inputs = List.rev payloads_per_level.inputs in - let without_eol = Stdlib.List.tl rev_inputs in - List.rev without_eol - in - {payloads_per_level with inputs}) - payloads_per_levels - in - let _state, tick, our_states = eval_inputs new_payloads_per_levels in - return (tick, our_states, new_payloads_per_levels) - | Info_hater -> - let* corrupt_at_l = 0 -- List.length payloads_per_levels in - let dumb_timestamp = Timestamp.of_seconds 42L in - let dumb_predecessor = Block_hash.zero in - - let new_payloads_per_levels = - List.mapi - (fun l payloads_per_level -> - if l = corrupt_at_l then - { - payloads_per_level with - predecessor_timestamp = dumb_timestamp; - predecessor = dumb_predecessor; - } - else payloads_per_level) - payloads_per_levels - in - let _state, tick, our_states = eval_inputs new_payloads_per_levels in - return (tick, our_states, new_payloads_per_levels) - | Nostalgic -> - (* [payloads_per_levels] starts at [orignation_level + 1], the nostalgic - player will execute messages at [origination_level]. *) - let* messages = - small_list (gen_arith_pvm_messages ~gen_size:(pure 0)) - in - let payloads_at_origination = - Sc_rollup_helpers.wrap_messages metadata.origination_level messages - in - let new_payloads_per_levels = - payloads_at_origination :: payloads_per_levels - in - let _state, tick, our_states = eval_inputs new_payloads_per_levels in - return (tick, our_states, new_payloads_per_levels) - - (** [gen ~inbox ~rollup ~origination_level ~start_level ~max_level player - payloads_per_levels] generates a {!player_client} based on - its {!player.strategy}. *) - let gen ~inbox ~rollup ~origination_level ~start_level ~max_level player - payloads_per_levels = - let open QCheck2.Gen in - let ctxt : Context_helpers.In_memory.Tree.t = - Arith_pvm_eval.make_empty_context () - in - let metadata = Sc_rollup.Metadata.{address = rollup; origination_level} in - let* tick, our_states, payloads_per_levels = - gen_our_states - ~metadata - player.strategy - ~start_level - ~max_level - payloads_per_levels - in - let inbox = construct_inbox ~inbox payloads_per_levels in - return - { - player; - final_tick = tick; - states = our_states; - inbox; - payloads_per_levels; - metadata; - context = ctxt; - } -end - -(** [create_commitment ~predecessor ~inbox_level ~our_states] creates - a commitment using [our_states] as the vision of ticks. *) -let create_commitment ~predecessor ~inbox_level ~our_states = - let open Lwt_syntax in - let inbox_level = Int32.of_int inbox_level |> Raw_level.of_int32_exn in - let+ compressed_state = - match List.last_opt our_states with - | None -> - (* No tick evaluated. *) - Arith_pvm_eval.initial_hash - | Some (_, state) -> return state - in - - let number_of_ticks = - match our_states with - | [] -> Number_of_ticks.zero - | _ -> - List.length our_states - 1 - |> Int64.of_int |> number_of_ticks_of_int64_exn - in - Commitment.{compressed_state; inbox_level; predecessor; number_of_ticks} - -(** [operation_publish_commitment block rollup lcc inbox_level p1_client] - creates a commitment and stake on it. *) -let operation_publish_commitment ctxt rollup predecessor inbox_level - player_client = - let open Lwt_result_syntax in - let*! commitment = - create_commitment ~predecessor ~inbox_level ~our_states:player_client.states - in - let* op = - Op.sc_rollup_publish ctxt player_client.player.contract rollup commitment - in - return (op, commitment) - -(** [build_proof ~player_client start_tick game] builds a valid proof - regarding the vision [player_client] has. The proof refutes the - [start_tick]. *) -let build_proof ~player_client start_tick (game : Game.t) = - let open Lwt_result_syntax in - (* We start a game on a commitment that starts at [Tick.initial], the fuel - is necessarily [start_tick]. *) - let fuel = tick_to_int_exn start_tick in - let metadata = player_client.metadata in - let inputs_per_levels = - List.map (fun {inputs; _} -> inputs) player_client.payloads_per_levels - in - let*! r = - Arith_pvm_eval.eval_inputs_from_initial_state - ~metadata - ~fuel - inputs_per_levels - in - let state, _, _ = WithExceptions.Result.get_ok ~loc:__LOC__ r in - let pvm_with_context_and_state = - Sc_rollup_helpers.make_pvm_with_context_and_state - (module Arith_pvm) - ~state - ~context:player_client.context - ~reveal:(fun _ -> assert false) - ~inbox:player_client.inbox - (* No messages are added between [game.start_level] and the current level - so we can take the existing inbox of players. Otherwise, we should find the - inbox of [start_level]. *) - () - in - let*! proof = - Sc_rollup.Proof.produce - ~metadata - pvm_with_context_and_state - game.inbox_level - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - in - return (WithExceptions.Result.get_ok ~loc:__LOC__ proof) - -(** [next_move ~number_of_sections ~player_client game] produces - the next move in the refutation game. - - If there is a disputed section where the distance is one tick, it - produces a proof. Otherwise, provides another dissection. -*) -let next_move ~player_client (game : Game.t) = - let open Lwt_result_syntax in - match game.game_state with - | Dissecting {dissection; default_number_of_sections} -> ( - let disputed_sections = - disputed_sections ~our_states:player_client.states dissection - in - assert (Compare.List_length_with.(disputed_sections > 0)) ; - let single_tick_disputed_sections = - single_tick_disputed_sections disputed_sections - in - match single_tick_disputed_sections with - | (start_chunk, _stop_chunk) :: _ -> - let tick = start_chunk.tick in - let+ proof = build_proof ~player_client tick game in - Game.(Move {choice = tick; step = Proof proof}) - | [] -> - (* If we reach this case, there is necessarily a disputed section. *) - let start_chunk, stop_chunk = Stdlib.List.hd disputed_sections in - let dissection = - build_dissection - ~number_of_sections:default_number_of_sections - ~start_chunk - ~stop_chunk - ~our_states:player_client.states - in - return - Game.( - Move {choice = start_chunk.tick; step = Dissection dissection})) - | Final_move {agreed_start_chunk; refuted_stop_chunk = _} -> - let tick = agreed_start_chunk.tick in - let+ proof = build_proof ~player_client tick game in - Game.(Move {choice = tick; step = Proof proof}) - -type game_result_for_tests = Defender_wins | Refuter_wins - -(** Play until there is an {!game_result_for_tests}. - - A game result can happen if: - - A valid refutation was provided to the protocol and it succeeded to - win the game. - - A player played an invalid refutation and was rejected by the - protocol. -*) -let play_until_game_result ~refuter_client ~defender_client ~rollup block = - let rec play ~player_turn ~opponent block = - let open Lwt_result_syntax in - let* games = - Context.Sc_rollup.ongoing_games_for_staker - (B block) - rollup - player_turn.player.pkh - in - let game_opt = List.hd games in - let game, _, _ = WithExceptions.Option.get ~loc:__LOC__ game_opt in - let* refutation = next_move ~player_client:player_turn game in - let* incr = Incremental.begin_construction block in - let* operation_refutation = - Op.sc_rollup_refute - (I incr) - player_turn.player.contract - rollup - opponent.player.pkh - refutation - in - let* incr = Incremental.add_operation incr operation_refutation in - match game_status_of_refute_op_result (Incremental.rev_tickets incr) with - | Ongoing -> - let* block = Incremental.finalize_block incr in - play ~player_turn:opponent ~opponent:player_turn block - | Ended (Loser {reason = _; loser}) -> - if loser = Account.pkh_of_contract_exn refuter_client.player.contract - then return Defender_wins - else return Refuter_wins - | Ended Draw -> - QCheck2.Test.fail_reportf "Game ended in a draw, which is unexpected" - in - play ~player_turn:refuter_client ~opponent:defender_client block - -(** Generate two {!player}s with a given strategy. *) -let make_players ~p1_strategy ~contract1 ~p2_strategy ~contract2 = - let pkh1 = Account.pkh_of_contract_exn contract1 in - let pkh2 = Account.pkh_of_contract_exn contract2 in - let ({alice; bob = _} : Game.Index.t) = Game.Index.make pkh1 pkh2 in - let player1, player2 = - if Signature.Public_key_hash.equal alice pkh1 then Game.(Alice, Bob) - else Game.(Bob, Alice) - in - ( { - pkh = pkh1; - contract = contract1; - strategy = p1_strategy; - game_player = player1; - }, - { - pkh = pkh2; - contract = contract2; - strategy = p2_strategy; - game_player = player2; - } ) - -(** [gen_game ~p1_strategy ~p2_strategy] generates a context where a rollup - was originated. - It generates inputs for the rollup, and creates the players' interpretation - of these inputs in a {!player_client} for [p1_strategy] and [p2_strategy]. -*) -let gen_game ~p1_strategy ~p2_strategy = - let open QCheck2.Gen in - (* If there is no good player, we do not care about the result. *) - assert (p1_strategy = Perfect || p2_strategy = Perfect) ; - let block, rollup, inbox, genesis_info, (contract1, contract2, contract3) = - create_ctxt () - in - let p1, p2 = make_players ~p1_strategy ~contract1 ~p2_strategy ~contract2 in - - (* Create a context with a rollup originated. *) - let commitment_period = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_mainnet - .sc_rollup - .commitment_period_in_blocks - in - let origination_level = - Raw_level.to_int32 genesis_info.level |> Int32.to_int - in - let start_level = origination_level + 1 in - let max_level = start_level + commitment_period in - let* payloads_per_levels = - gen_arith_pvm_payloads_for_levels ~start_level ~max_level - in - - let block, payloads_per_levels = - construct_inbox_proto block payloads_per_levels contract3 - in - - let* p1_client = - Player_client.gen - ~inbox - ~origination_level:genesis_info.level - ~start_level - ~max_level - ~rollup - p1 - payloads_per_levels - in - let* p2_client = - Player_client.gen - ~inbox - ~origination_level:genesis_info.level - ~start_level - ~max_level - ~rollup - p2 - payloads_per_levels - in - let* p1_start = bool in - let commitment_level = origination_level + commitment_period in - return - ( block, - rollup, - commitment_level, - genesis_info.commitment_hash, - p1_client, - p2_client, - p1_start, - payloads_per_levels ) - -(** Shrinker is really slow. Deactivating it. *) -let gen_game ~p1_strategy ~p2_strategy = - let open QCheck2.Gen in - make_primitive - ~gen:(fun rand -> generate1 ~rand (gen_game ~p1_strategy ~p2_strategy)) - ~shrink:(fun _ -> Seq.empty) - -(** [prepare_game block rollup lcc commitment_level p1_client p2_client contract - list_of_messages] prepares a context where [p1_client] and [p2_client] - are in conflict for one commitment. *) -let prepare_game ~p1_start block rollup lcc commitment_level p1_client p2_client - = - let open Lwt_result_syntax in - let* p1_op, p1_commitment = - operation_publish_commitment (B block) rollup lcc commitment_level p1_client - in - let* p2_op, p2_commitment = - operation_publish_commitment (B block) rollup lcc commitment_level p2_client - in - let commit_then_commit_and_refute ~defender_op ~refuter_op refuter - refuter_commitment defender defender_commitment = - let refutation = - Sc_rollup.Game.Start - { - player_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated refuter_commitment; - opponent_commitment_hash = - Sc_rollup.Commitment.hash_uncarbonated defender_commitment; - } - in - let* start_game = - Op.sc_rollup_refute - (B block) - refuter.player.contract - rollup - defender.player.pkh - refutation - in - let* refuter_batch = - Op.batch_operations - ~recompute_counters:true - ~source:refuter.player.contract - (B block) - [refuter_op; start_game] - in - let* block = Block.bake ~operations:[defender_op; refuter_batch] block in - return (block, refuter, defender) - in - if p1_start then - commit_then_commit_and_refute - ~defender_op:p2_op - ~refuter_op:p1_op - p1_client - p1_commitment - p2_client - p2_commitment - else - commit_then_commit_and_refute - ~defender_op:p1_op - ~refuter_op:p2_op - p2_client - p2_commitment - p1_client - p1_commitment - -let check_distribution = function - | fst :: snd :: rst -> - let open Dissection_chunk in - let dist = Tick.distance fst.tick snd.tick in - let _, min_len, max_len = - List.fold_left - (fun (previous_tick, min_len, max_len) chunk -> - let dist = Tick.distance previous_tick chunk.tick in - (* We only consider length that are greater or equal than - the snapshot size. The last one may not be as big, if - the PVM was stuck. *) - if Compare.Z.(dist < Sc_rollup.Wasm_2_0_0PVM.ticks_per_snapshot) - then (chunk.tick, min_len, max_len) - else (chunk.tick, Z.min min_len dist, Z.max max_len dist)) - (snd.tick, dist, dist) - rst - in - Z.(max_len - min_len <= Sc_rollup.Wasm_2_0_0PVM.ticks_per_snapshot) - | _ -> true - -let test_wasm_dissection name kind = - qcheck_make_lwt_res - ~count:1_000_000 - ~name - ~print:(fun (start_chunk, stop_chunk) -> - Format.asprintf - "dissection from %a to %a" - Dissection_chunk.pp - start_chunk - Dissection_chunk.pp - stop_chunk) - ~gen:(gen_wasm_pvm_dissection_boundaries kind) - (fun (start_chunk, stop_chunk) -> - let open Lwt_result_syntax in - let+ dissection = - Game_helpers.( - make_dissection - ~state_of_tick:(fun ?start_state:_ _ -> - return_some Sc_rollup.State_hash.zero) - ~state_hash_of_eval_state:Fun.id - ~start_chunk - ~our_stop_chunk:stop_chunk - @@ Wasm.new_dissection - ~start_chunk - ~our_stop_chunk:stop_chunk - ~default_number_of_sections:32) - in - if kind <> `Kernel_run then assert (check_distribution dissection) ; - match - Wasm_2_0_0PVM.Protocol_implementation.check_dissection - ~default_number_of_sections:32 - ~start_chunk - ~stop_chunk:{stop_chunk with state_hash = Some State_hash.zero} - dissection - with - | Ok () -> true - | Error e -> - Format.printf - "dissection %a caused errors %a\n" - Game.pp_dissection - dissection - Environment.Error_monad.pp_trace - e ; - false) - -(** Create a test of [p1_strategy] against [p2_strategy]. One of them - must be a {!Perfect} player, otherwise, we do not care about which - cheater wins. *) -let test_game ?(count = 10) ~p1_strategy ~p2_strategy () = - let name = - Format.asprintf - "%a against %a" - pp_strategy - p1_strategy - pp_strategy - p2_strategy - in - qcheck_make_lwt_res - ~print:(fun ( _block, - _rollup, - _commitment_level, - _lcc, - p1_client, - p2_client, - p1_start, - _payloads_per_levels ) -> - Format.asprintf - "@[@,@[p1:@,%a@]@,@[p2:@,%a@]@,%s@,@]" - pp_player_client - p1_client - pp_player_client - p2_client - (if p1_start then "p1" else "p2")) - ~count - ~name - ~gen:(gen_game ~p1_strategy ~p2_strategy) - (fun ( block, - rollup, - commitment_level, - lcc, - p1_client, - p2_client, - p1_start, - _list_of_messages ) -> - let open Lwt_result_syntax in - (* Otherwise, there is no conflict. *) - QCheck2.assume - (not - (let p1_head = List.last_opt p1_client.states in - let p2_head = List.last_opt p2_client.states in - Option.equal - (fun (t1, state_hash1) (t2, state_hash2) -> - Tick.equal t1 t2 && State_hash.equal state_hash1 state_hash2) - p1_head - p2_head)) ; - let* block, refuter, defender = - prepare_game - ~p1_start - block - rollup - lcc - commitment_level - p1_client - p2_client - in - let* game_result = - play_until_game_result - ~rollup - ~refuter_client:refuter - ~defender_client:defender - block - in - match game_result with - | Defender_wins -> return (defender.player.strategy = Perfect) - | Refuter_wins -> return (refuter.player.strategy = Perfect)) - -let test_perfect_against_random = - test_game ~p1_strategy:Perfect ~p2_strategy:Random () - -let test_perfect_against_lazy = - test_game ~p1_strategy:Perfect ~p2_strategy:Lazy () - -let test_perfect_against_eager = - test_game ~p1_strategy:Perfect ~p2_strategy:Eager () - -let test_perfect_against_keen = - test_game ~p1_strategy:Perfect ~p2_strategy:Keen () - -let test_perfect_against_sol_hater = - test_game ~p1_strategy:Perfect ~p2_strategy:SOL_hater () - -let test_perfect_against_eol_hater = - test_game ~p1_strategy:Perfect ~p2_strategy:EOL_hater () - -let _test_perfect_against_info_hater = - test_game ~p1_strategy:Perfect ~p2_strategy:Info_hater () - -let test_perfect_against_nostalgic = - test_game ~p1_strategy:Perfect ~p2_strategy:Nostalgic ~count:5 () - -(* This test will behave as a regression test. *) -let test_cut_at_level = - let open QCheck2 in - Test.make - ~name:"cut at level properly cuts" - ~print:(fun (origination_level, commit_inbox_level, input_level) -> - Format.asprintf - "origination_level: %a, commit_inbox_level: %a, input_level: %a" - Raw_level_repr.pp - origination_level - Raw_level_repr.pp - commit_inbox_level - Raw_level_repr.pp - input_level) - Gen.( - let level = - map - (fun i -> Raw_level_repr.of_int32_exn (Int32.of_int i)) - (0 -- 1_000_000) - in - triple level level level) - (fun (origination_level, commit_inbox_level, input_level) -> - let input : Sc_rollup_PVM_sig.input = - Inbox_message - { - inbox_level = input_level; - message_counter = Z.zero; - payload = Sc_rollup_inbox_message_repr.unsafe_of_string "foo"; - } - in - let input_cut = - Sc_rollup_proof_repr.Internal_for_tests.cut_at_level - ~origination_level - ~commit_inbox_level - input - in - let should_be_none = - Raw_level_repr.( - input_level <= origination_level || commit_inbox_level < input_level) - in - match input_cut with - | Some _input -> not should_be_none - | None -> should_be_none) - -let tests = - ( "Refutation", - qcheck_wrap - [ - test_wasm_dissection "dissection is one kernel_run" `Kernel_run; - test_wasm_dissection "dissection shorter than 32 kernel_run" `Short; - test_wasm_dissection "dissection larger than 32 kernel_run" `Large; - test_perfect_against_random; - test_perfect_against_lazy; - test_perfect_against_keen; - test_perfect_against_eager; - test_perfect_against_sol_hater; - test_perfect_against_eol_hater; - (* TODO: https://gitlab.com/tezos/tezos/-/issues/6839 - an issue with the generator / assume of this test makes it run for ~15 minutes. - Disactivating until we find the root cause. *) - (* test_perfect_against_info_hater; *) - test_perfect_against_nostalgic; - test_cut_at_level; - ] ) - -(** {2 Entry point} *) - -let tests = [tests; Dissection.tests] - -let () = Alcotest.run ~__FILE__ (Protocol.name ^ ": Refutation_game") tests diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sampler.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sampler.ml deleted file mode 100644 index 0179c53bfb2e625bc49e9af08ec56a044d0a6440..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sampler.ml +++ /dev/null @@ -1,271 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_sampler.ml - Subject: Operations in Saturation_repr -*) - -open Qcheck2_helpers -open Protocol.Sampler - -(* ------------------------------------------------------------------------- *) -(* Helpers *) - -module Int = struct - include Int - - let hash = Hashtbl.hash -end - -let equal_array elt_eq arr1 arr2 = - Array.length arr1 = Array.length arr2 - && Stdlib.List.for_all2 elt_eq (Array.to_list arr1) (Array.to_list arr2) - -(* Support of a distribution on Z (sorted, with potential duplicates) *) -let support cmp array = - Array.to_seq array |> Seq.map fst |> List.of_seq |> List.sort cmp - |> Array.of_list - -(* Support of a distribution on Z (sorted, without duplicates) *) -let support_uniq cmp array = - Array.to_seq array |> Seq.map fst |> List.of_seq |> List.sort_uniq cmp - |> Array.of_list - -module type Std = sig - type t - - val equal : t -> t -> bool - - val compare : t -> t -> int - - val hash : t -> int -end - -module Helpers = struct - let sample_n_times (total : int) sample = - let rec loop n acc = - if n = 0 then acc - else - let res = sample () in - loop (n - 1) (res :: acc) - in - loop total [] - - let empirical_distribution : - type a. - (module Std with type t = a) -> - nsamples:int -> - (unit -> a) -> - (a * int) array = - fun (module H) ~nsamples sampler -> - let module Table = Hashtbl.Make (H) in - let samples = sample_n_times nsamples sampler in - let table = Table.create 127 in - List.iter - (fun sample -> - let count = Option.value ~default:0 (Table.find table sample) in - Table.replace table sample (count + 1)) - samples ; - let result = Table.to_seq table |> Array.of_seq in - (* check that the support of [result] has no duplicate elements (should - be true since we use [replace]). *) - assert ( - equal_array - H.equal - (support H.compare result) - (support_uniq H.compare result)) ; - result -end - -let normalize : ('a * int) array -> ('a * Q.t) array = - fun empirical -> - let total = - Array.fold_left - (fun acc (_, weight) -> Z.add (Z.of_int weight) acc) - Z.zero - empirical - in - Array.map (fun (n, weight) -> (n, Q.(Z.of_int weight /// total))) empirical - -let pp_dist pp fmtr dist = - let l = Array.to_list dist in - Format.pp_print_list - ~pp_sep:(fun fmtr () -> Format.fprintf fmtr ",") - (fun fmtr (elt, w) -> Format.fprintf fmtr "(%a, %f)" pp elt (Q.to_float w)) - fmtr - l - -let linf (dist : ('a * Q.t) array) pmf = - Array.fold_left (fun acc (n, q) -> Q.(max acc (abs (pmf n - q)))) Q.zero dist - -(* ------------------------------------------------------------------------- *) - -let state = - Random.State.make - [| - 0x1337533D; - 71287309; - 666932349; - 719132214; - 461480042; - 387006837; - 443018964; - 450865457; - 901711679; - 833353016; - 397060904; - |] - -module Make_test (Mass : sig - include Internal_for_tests.SMass - - val to_float : t -> float -end) (S : sig - val sample : int_bound:int -> mass_bound:Mass.t -> int * Mass.t -end) = -struct - let make p = - let module Probability = Internal_for_tests.Make (Mass) in - let measure = List.mapi (fun i p -> (i, p)) p in - let total_mass = List.fold_left Mass.add Mass.zero p in - let state = Probability.create measure in - let sampler = Probability.sample state in - let empirical = - normalize - @@ Helpers.empirical_distribution - (module Int) - ~nsamples:5_000_000 - (fun () -> sampler S.sample) - in - (* We need to rescale the empirical to match that the total mass is not necessarily one. *) - let empirical = - let rescaling = Q.of_float (Mass.to_float total_mass) in - Array.map (fun (x, q) -> (x, Q.mul q rescaling)) empirical - in - (* map the mass to Q to better measure the error *) - let truth = - let array = - measure |> List.to_seq - |> Seq.map (fun (_, mass) -> Q.of_float (Mass.to_float mass)) - |> Array.of_seq - in - fun i -> array.(i) - in - let error = linf empirical truth in - let max_error = 0.001 *. Mass.to_float total_mass in - if not Q.(error < Q.of_float max_error) then - QCheck2.Test.fail_reportf - "didn't converge (%f)@.%a" - (Q.to_float error) - (pp_dist Format.pp_print_int) - empirical ; - true -end - -(* Testing the alias sampler with float-valued measures *) - -module Probability_mass_float : Internal_for_tests.SMass with type t = float = -struct - type t = float - - let encoding = Data_encoding.float - - let zero = 0.0 - - let of_int = float_of_int - - let mul = ( *. ) - - let add = ( +. ) - - let sub = ( -. ) - - let ( = ) = Float.equal - - let ( <= ) (x : t) (y : t) = x <= y - - let ( < ) (x : t) (y : t) = x < y -end - -module Test_float = - Make_test - (struct - include Probability_mass_float - - let to_float x = x - end) - (struct - let sample ~int_bound ~mass_bound = - (Random.State.int state int_bound, Random.State.float state mass_bound) - end) - -(* Testing the alias sampler with Z-valued measures *) - -module Probability_mass_z : Internal_for_tests.SMass with type t = Z.t = struct - let encoding = Data_encoding.z - - include Z - include Z.Compare -end - -module Test_z = - Make_test - (struct - include Probability_mass_z - - let to_float = Z.to_float - end) - (struct - let sample ~int_bound ~mass_bound = - ( Random.State.int state int_bound, - Z.of_int64 (Random.State.int64 state (Z.to_int64 mass_bound)) ) - end) - -let qcheck_wrap = qcheck_wrap ~rand:state - -let alias_float_test = - QCheck2.Test.make - ~count:100 - ~name:"alias_float" - QCheck2.Gen.(list_size (int_range 1 20) pfloat) - Test_float.make - -let alias_z_test = - QCheck2.Test.make - ~count:100 - ~name:"alias_z" - QCheck2.Gen.( - list_size (int_range 1 20) (nat >>= fun n -> return (Z.of_int n))) - Test_z.make - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [("sampling", qcheck_wrap [alias_float_test; alias_z_test])] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_encoding.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_encoding.ml deleted file mode 100644 index 875d24817eb10289464bd7b207e4d820ec027cf6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_encoding.ml +++ /dev/null @@ -1,348 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_sc_rollup_encoding.ml - Subject: SC rollup encoding -*) - -open Protocol -open QCheck2 -open Qcheck2_helpers - -(** {2 Generators} *) - -let gen_state_hash = - let open Gen in - let* bytes = bytes_fixed_gen Sc_rollup_repr.State_hash.size in - return (Sc_rollup_repr.State_hash.of_bytes_exn bytes) - -let gen_inbox_level = - let open Gen in - let* level = map Int32.abs int32 in - (* There is no inbox for level [0l]. *) - let level = if level = 0l then 1l else level in - return (Raw_level_repr.of_int32_exn level) - -let gen_start_level = - let open Gen in - let* level = map Int32.abs int32 in - let start_level = Raw_level_repr.of_int32_exn level in - return start_level - -let gen_commitment_hash = - let open Gen in - let* bytes = bytes_fixed_gen Sc_rollup_commitment_repr.Hash.size in - return (Sc_rollup_commitment_repr.Hash.of_bytes_exn bytes) - -let gen_number_of_ticks = - let open Gen in - let open Sc_rollup_repr.Number_of_ticks in - let* v = int64_range_gen min_value max_value in - return (WithExceptions.Option.get ~loc:__LOC__ (of_value v)) - -let gen_commitment = - let open Gen in - let* compressed_state = gen_state_hash - and* inbox_level = gen_inbox_level - and* predecessor = gen_commitment_hash - and* number_of_ticks = gen_number_of_ticks in - return - Sc_rollup_commitment_repr. - {compressed_state; inbox_level; predecessor; number_of_ticks} - -let gen_versioned_commitment = - let open Gen in - let* commitment = gen_commitment in - return (Sc_rollup_commitment_repr.to_versioned commitment) - -let gen_player = Gen.oneofl Sc_rollup_game_repr.[Alice; Bob] - -let gen_inbox level = - let open Gen in - let gen_msg = small_string ~gen:printable in - let* hd = gen_msg in - let* tail = small_list gen_msg in - let payloads = hd :: tail in - let witness_and_inbox = - let open Result_wrap_syntax in - let inbox = Sc_rollup_helpers.dumb_init_repr level in - wrap - @@ - let witness = Sc_rollup_inbox_repr.init_witness_no_history in - let witness = - Sc_rollup_inbox_repr.add_info_per_level_no_history - ~predecessor_timestamp:Time.Protocol.epoch - ~predecessor:Block_hash.zero - witness - in - let* input_messages = - List.map_e - (fun msg -> Sc_rollup_inbox_message_repr.(serialize (External msg))) - payloads - in - let* witness = - Sc_rollup_inbox_repr.add_messages_no_history input_messages witness - in - return (Sc_rollup_inbox_repr.finalize_inbox_level_no_history inbox witness) - in - return - @@ (witness_and_inbox |> function - | Ok v -> v - | Error e -> - Stdlib.failwith (Format.asprintf "%a" Error_monad.pp_print_trace e)) - -module Index = Dal_slot_index_repr - -let pack_slots_headers_by_level list = - let module ML = Map.Make (Raw_level_repr) in - let module SSH = Set.Make (struct - include Dal_slot_repr.Header - - let compare a b = Dal_slot_index_repr.compare a.id.index b.id.index - end) in - let map = - List.fold_left - (fun map (Dal_slot_repr.Header.{id = {published_level; _}; _} as sh) -> - let l = - ML.find published_level map |> Option.value ~default:SSH.empty - in - ML.add published_level (SSH.add sh l) map) - ML.empty - list - in - match ML.max_binding_opt map with - | None -> [] (* map is empty *) - | Some (max_level, _) -> - let rec loop counter map = - if Raw_level_repr.(counter >= max_level) then map - else - let counter = Raw_level_repr.succ counter in - let map = - if ML.mem counter map then map else ML.add counter SSH.empty map - in - loop counter map - in - loop Raw_level_repr.root map - |> ML.bindings - |> List.map (fun (k, ssh) -> (k, SSH.elements ssh)) - -let gen_dal_slots_history () = - let open Gen in - let open Dal_slot_repr in - let constants : Alpha_context.Constants.Parametric.t = - Tezos_protocol_019_PtParisB_parameters.Default_parameters.constants_test - in - let number_of_slots = constants.dal.number_of_slots in - (* Generate a list of (level * confirmed slot ID). *) - let* list = small_list (pair small_nat small_nat) in - let list = - List.rev_map - (fun (level, slot_index) -> - let published_level = - Raw_level_repr.( - (* use succ to avoid having a published_level = 0, as it's the - genesis cell's level in the skip list. *) - succ @@ try of_int32_exn (Int32.of_int level) with _ -> root) - in - let index = - Index.of_int_opt ~number_of_slots slot_index - |> Option.value ~default:Index.zero - in - Header.{id = {published_level; index}; commitment = Commitment.zero}) - list - in - let rec loop history = function - | [] -> return history - | (level, slot_headers) :: llist -> ( - let slot_headers = - (* Sort the list in the right ordering before adding slots to slots_history. *) - List.sort_uniq - (fun {Header.id = a; _} {id = b; _} -> - let c = - Raw_level_repr.compare a.published_level b.published_level - in - if c <> 0 then c else Index.compare a.index b.index) - slot_headers - in - History.( - add_confirmed_slot_headers_no_cache - ~number_of_slots - history - level - slot_headers) - |> function - | Ok history -> loop history llist - | Error e -> - return - @@ Stdlib.failwith - (Format.asprintf "%a" Error_monad.pp_print_trace - @@ Environment.wrap_tztrace e)) - in - pack_slots_headers_by_level list |> loop History.genesis - -let gen_inbox_history_proof inbox_level = - let open Gen in - let* inbox = gen_inbox inbox_level in - return (Sc_rollup_inbox_repr.take_snapshot inbox) - -let gen_tick = - let open Gen in - let* t = small_nat in - match Sc_rollup_tick_repr.of_int t with - | None -> assert false - | Some r -> return r - -let gen_dissection_chunk = - let open Gen in - let* state_hash = opt gen_state_hash in - let+ tick = gen_tick in - Sc_rollup_dissection_chunk_repr.{state_hash; tick} - -let gen_dissection = - let open Gen in - small_list gen_dissection_chunk - -let gen_game_state = - let open Sc_rollup_game_repr in - let open Gen in - let gen_dissecting = - let* dissection = gen_dissection in - let+ default_number_of_sections = int_range 4 100 in - Dissecting {dissection; default_number_of_sections} - in - let gen_final_move = - let* agreed_start_chunk = gen_dissection_chunk in - let+ refuted_stop_chunk = gen_dissection_chunk in - Final_move {agreed_start_chunk; refuted_stop_chunk} - in - oneof [gen_dissecting; gen_final_move] - -let gen_game = - let open Gen in - let* turn = gen_player in - let* inbox_level = gen_inbox_level in - let* start_level = gen_start_level in - let* inbox_snapshot = gen_inbox_history_proof inbox_level in - let* dal_snapshot = gen_dal_slots_history () in - let* game_state = gen_game_state in - return - Sc_rollup_game_repr. - {turn; dal_snapshot; inbox_snapshot; start_level; inbox_level; game_state} - -let gen_conflict = - let open Gen in - let other = Sc_rollup_repr.Staker.zero in - let* their_commitment = gen_commitment in - let* our_commitment = gen_commitment in - let* parent_commitment = gen_commitment_hash in - return - Sc_rollup_refutation_storage. - {other; their_commitment; our_commitment; parent_commitment} - -let gen_rollup = - let open QCheck2.Gen in - let* bytes = bytes_fixed_gen Sc_rollup_repr.Address.size in - return (Sc_rollup_repr.Address.hash_bytes [bytes]) - -let gen_inbox_message = - let open Gen in - let open Sc_rollup_inbox_message_repr in - let gen_external = - let+ s = small_string ~gen:printable in - External s - in - let gen_sol = return (Internal Start_of_level) in - let gen_eol = return (Internal End_of_level) in - let gen_deposit = - (* We won't test the encoding of these values. It's out of scope. *) - let payload = Script_repr.unit in - let sender = Contract_hash.zero in - let source = Signature.Public_key_hash.zero in - (* But the encoding of the rollup's address is our problem. *) - let+ destination = gen_rollup in - Internal (Transfer {payload; sender; source; destination}) - in - oneof [gen_external; gen_sol; gen_eol; gen_deposit] - -(** {2 Tests} *) - -let test_commitment = - test_roundtrip - ~count:1_000 - ~title:"Sc_rollup_commitment.t" - ~gen:gen_commitment - ~eq:( = ) - Sc_rollup_commitment_repr.encoding - -let test_versioned_commitment = - test_roundtrip - ~count:1_000 - ~title:"Sc_rollup_commitment.versioned" - ~gen:gen_versioned_commitment - ~eq:( = ) - Sc_rollup_commitment_repr.versioned_encoding - -let test_game = - test_roundtrip - ~count:1_000 - ~title:"Sc_rollup_game.t" - ~gen:gen_game - ~eq:Sc_rollup_game_repr.equal - Sc_rollup_game_repr.encoding - -let test_conflict = - test_roundtrip - ~count:1_000 - ~title:"Sc_rollup_refutation_storage.conflict" - ~gen:gen_conflict - ~eq:( = ) - Sc_rollup_refutation_storage.conflict_encoding - -let test_inbox_message = - test_roundtrip - ~count:1_000 - ~title:"Sc_rollup_inbox_message_repr.t" - ~gen:gen_inbox_message - ~eq:( = ) - Sc_rollup_inbox_message_repr.encoding - -let tests = - [ - test_commitment; - test_versioned_commitment; - test_game; - test_conflict; - test_inbox_message; - ] - -let () = - Alcotest.run - ~__FILE__ - (Protocol.name ^ ": SC rollup encoding") - [(": roundtrip", qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_inbox.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_inbox.ml deleted file mode 100644 index 2b371d295cbc59a5c47d53d073ee36ed8b1dd30c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_inbox.ml +++ /dev/null @@ -1,77 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_sc_rollup_inbox.ml - Subject: Smart rollup inbox -*) - -open Protocol -open Qcheck2_helpers - -let gen_block_hash = - let open QCheck2.Gen in - let gen = - let+ b = bytes_fixed_gen Block_hash.size in - Block_hash.of_bytes_exn b - in - (* This is not beautiful, but there is currently no other way to - remove the shrinker. *) - make_primitive - ~gen:(fun rand -> generate1 ~rand gen) - ~shrink:(fun _ -> Seq.empty) - -let gen_time = - let open QCheck2.Gen in - let+ s = int64 in - Time.Protocol.of_seconds s - -let gen_add_info_per_level = - let open QCheck2.Gen in - let* predecessor_timestamp = gen_time in - let* predecessor = gen_block_hash in - return (predecessor_timestamp, predecessor) - -let test_add_info_per_level = - QCheck2.Test.make - ~count:10_000 - ~name:"test_add_info_per_level" - gen_add_info_per_level - @@ fun (predecessor_timestamp, predecessor) -> - (* Test that we can indeed serialize the [Info_per_level] message for these - inputs *) - let _bytes = - Sc_rollup_inbox_message_repr.info_per_level_serialized - ~predecessor_timestamp - ~predecessor - in - true - -let tests = [test_add_info_per_level] - -let () = Alcotest.run ~__FILE__ Protocol.name [("safety", qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_tick_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_tick_repr.ml deleted file mode 100644 index 44c871aa4e5e7b39a3c144c02242f233772c0ae2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_sc_rollup_tick_repr.ml +++ /dev/null @@ -1,110 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_sc_rollup_tick_repr.ml - Subject: Operations in Tick_repr -*) - -open Protocol.Alpha_context.Sc_rollup -open QCheck2 - -(** A generator for ticks *) -let tick = - let open Gen in - let+ n = nat in - Option.value ~default:Tick.initial (Tick.of_int n) - -(** For all x, x = initial \/ x > initial. *) -let test_initial_is_bottom = - Test.make ~name:"x = initial \\/ x > initial" tick @@ fun x -> - Tick.(x = initial || x > initial) - -(** For all x, next x > x. *) -let test_next_is_monotonic = - Test.make ~name:"next x > x" tick @@ fun x -> Tick.(next x > x) - -(** Distance from self to self is zero *) -let test_distance_from_self = - Test.make ~name:"distance from x to x is 0" tick (fun x -> - Z.(equal (Tick.distance x x) zero)) - -(** Distance from non-self is non-zero. *) -let test_distance_from_non_self = - Test.make - ~name:"distance from non-self is non-zero" - (Gen.pair tick tick) - (fun (x, y) -> - let dist = Tick.distance x y in - if x = y then Compare.Z.(dist = Z.zero) else Compare.Z.(dist <> Z.zero)) - -(** Distance is symmetric . *) -let test_distance_symmetry = - Test.make - ~name:"distance is a distance (symmetry)" - (Gen.pair tick tick) - (fun (x, y) -> Z.(equal (Tick.distance x y) (Tick.distance y x))) - -(** Distance satisfies triangular inequality. *) -let test_distance_triangle_inequality = - Test.make - ~name:"distance is a distance (triangle inequality)" - (Gen.triple tick tick tick) - (fun (x, y, z) -> - Tick.(Z.(geq (distance x y + distance y z) (distance x z)))) - -(** Test that [of_int x = Some t] iff [x >= 0] *) -let test_of_int = - Test.make ~name:"of_int only accepts natural numbers" Gen.int (fun x -> - match Tick.of_int x with None -> x < 0 | Some _ -> x >= 0) - -(** Test [of_int o to_int = identity]. *) -let test_of_int_to_int = - Test.make ~name:"to_int o of_int = identity" tick @@ fun x -> - Tick.( - match to_int x with - | None -> (* by the tick generator definition. *) assert false - | Some i -> ( match of_int i with Some y -> y = x | None -> false)) - -let tests = - [ - test_next_is_monotonic; - test_initial_is_bottom; - test_distance_from_self; - test_distance_from_non_self; - test_distance_symmetry; - test_distance_triangle_inequality; - test_of_int; - test_of_int_to_int; - ] - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [("Tick_repr", Qcheck2_helpers.qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_script_comparison.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_script_comparison.ml deleted file mode 100644 index 2e7feb9104f17a0fcea82e4c8cea679418bc6ca6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_script_comparison.ml +++ /dev/null @@ -1,353 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021-2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Script_comparison - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_script_comparison.ml - Subject: PBT of the Script_comparable.compare_comparable function. -*) - -open Protocol -open Alpha_context -open Script_typed_ir -open Qcheck2_helpers - -(* Reference implementation *) - -let normalize_compare c = - let open Compare.Int in - if c > 0 then 1 else if c < 0 then -1 else 0 - -(* This reference implementation of the Michelson comparison function is a - simplified version of the Script_ir_translator.compare_comparable function - that was used in the Florence protocol, before a refactoring broke it in - Granada. *) -let rec reference_compare_comparable : type a. a comparable_ty -> a -> a -> int - = - fun ty x y -> - match (ty, x, y) with - | Unit_t, (), () -> 0 - | Never_t, _, _ -> . - | Signature_t, x, y -> normalize_compare @@ Script_signature.compare x y - | String_t, x, y -> normalize_compare @@ Script_string.compare x y - | Bool_t, x, y -> normalize_compare @@ Compare.Bool.compare x y - | Mutez_t, x, y -> normalize_compare @@ Tez.compare x y - | Key_hash_t, x, y -> - normalize_compare @@ Signature.Public_key_hash.compare x y - | Key_t, x, y -> normalize_compare @@ Signature.Public_key.compare x y - | Int_t, x, y -> normalize_compare @@ Script_int.compare x y - | Nat_t, x, y -> normalize_compare @@ Script_int.compare x y - | Timestamp_t, x, y -> normalize_compare @@ Script_timestamp.compare x y - | Address_t, x, y -> - normalize_compare @@ Script_comparable.compare_address x y - | Bytes_t, x, y -> normalize_compare @@ Compare.Bytes.compare x y - | Chain_id_t, x, y -> normalize_compare @@ Script_chain_id.compare x y - | Pair_t (tl, tr, _, YesYes), (lx, rx), (ly, ry) -> - let cl = reference_compare_comparable tl lx ly in - if Compare.Int.(cl = 0) then reference_compare_comparable tr rx ry else cl - | Or_t (tl, _, _, YesYes), L x, L y -> reference_compare_comparable tl x y - | Or_t _, L _, R _ -> -1 - | Or_t _, R _, L _ -> 1 - | Or_t (_, tr, _, YesYes), R x, R y -> reference_compare_comparable tr x y - | Option_t _, None, None -> 0 - | Option_t _, None, Some _ -> -1 - | Option_t _, Some _, None -> 1 - | Option_t (t, _, Yes), Some x, Some y -> reference_compare_comparable t x y - -(* Generation of one to three values of the same comparable type. *) - -type ex_comparable_data = - | Ex_comparable_data : 'a comparable_ty * 'a -> ex_comparable_data - -type ex_comparable_data_2 = - | Ex_comparable_data_2 : 'a comparable_ty * 'a * 'a -> ex_comparable_data_2 - -type ex_comparable_data_3 = - | Ex_comparable_data_3 : - 'a comparable_ty * 'a * 'a * 'a - -> ex_comparable_data_3 - -(* We use the Michelson samplers from lib_benchmark and turn them into QCheck2 - generators *) -module Parameters = struct - let atom_size_range : Tezos_benchmark.Base_samplers.range = - {min = 0; max = 10} - - let other_size : Tezos_benchmark.Base_samplers.range = {min = 0; max = 100} - - let parameters : Michelson_samplers.parameters = - { - base_parameters = - { - int_size = atom_size_range; - string_size = atom_size_range; - bytes_size = atom_size_range; - }; - list_size = other_size; - set_size = other_size; - map_size = other_size; - } -end - -module Crypto_samplers = -Tezos_benchmark.Crypto_samplers.Make_finite_key_pool (struct - let size = 1000 - - let algo = `Default -end) - -module Samplers : Michelson_samplers.S = - Michelson_samplers.Make (Parameters) (Crypto_samplers) - -let ex_comparable_data_sampler : - ex_comparable_data Tezos_benchmark.Base_samplers.sampler = - fun random_state -> - let size = - Tezos_benchmark.Base_samplers.sample_in_interval - ~range:{min = 1; max = 20} - random_state - in - let (Ex_comparable_ty ty) = - Samplers.Random_type.m_comparable_type ~size random_state - in - let x = Samplers.Random_value.comparable ty random_state in - Ex_comparable_data (ty, x) - -let ex_comparable_data_2_sampler : - ex_comparable_data_2 Tezos_benchmark.Base_samplers.sampler = - fun random_state -> - let size = - Tezos_benchmark.Base_samplers.sample_in_interval - ~range:{min = 1; max = 20} - random_state - in - let (Ex_comparable_ty ty) = - Samplers.Random_type.m_comparable_type ~size random_state - in - let x = Samplers.Random_value.comparable ty random_state in - let y = Samplers.Random_value.comparable ty random_state in - Ex_comparable_data_2 (ty, x, y) - -let ex_comparable_data_3_sampler : - ex_comparable_data_3 Tezos_benchmark.Base_samplers.sampler = - fun random_state -> - let size = - Tezos_benchmark.Base_samplers.sample_in_interval - ~range:{min = 1; max = 20} - random_state - in - let (Ex_comparable_ty ty) = - Samplers.Random_type.m_comparable_type ~size random_state - in - let x = Samplers.Random_value.comparable ty random_state in - let y = Samplers.Random_value.comparable ty random_state in - let z = Samplers.Random_value.comparable ty random_state in - Ex_comparable_data_3 (ty, x, y, z) - -let comparable_data_generator = - QCheck2.Gen.make_primitive ~gen:ex_comparable_data_sampler ~shrink:(fun _ -> - Seq.empty) - -let comparable_data_2_generator = - QCheck2.Gen.make_primitive ~gen:ex_comparable_data_2_sampler ~shrink:(fun _ -> - Seq.empty) - -let comparable_data_3_generator = - QCheck2.Gen.make_primitive ~gen:ex_comparable_data_3_sampler ~shrink:(fun _ -> - Seq.empty) - -(* We need a context because packing (used in one of the tests) and unparsing - (used for pretty-printing error messages) Michelson data are carbonated - operations. But since we don't care about gas consumption here we use the - same value of type context everywhere instead of threading it through the - error monad. *) - -let assert_ok = function Ok x -> x | Error _ -> assert false - -let assert_return x = assert_ok (Lwt_main.run x) - -let ctxt = - assert_return - (let open Lwt_result_syntax in - let* b, _cs = Context.init3 () in - let* v = Incremental.begin_construction b in - return (Incremental.alpha_ctxt v)) - -let unparse_comparable_ty ty = - Micheline.strip_locations - (fst (assert_ok Script_ir_unparser.(unparse_ty ~loc:() ctxt ty))) - -let unparse_comparable_data ty x = - fst (assert_return Script_ir_translator.(unparse_data ctxt Readable ty x)) - -let pack_comparable_data ty x = - fst (assert_return Script_ir_translator.(pack_data ctxt ty x)) - -let unpack_comparable_data ty bytes = - fst (assert_return (Script_interpreter_defs.unpack ctxt ~ty ~bytes)) - -let pp_comparable_ty fmt ty = - Michelson_v1_printer.print_expr fmt (unparse_comparable_ty ty) - -let pp_comparable_data ty fmt x = - Michelson_v1_printer.print_expr fmt (unparse_comparable_data ty x) - -let pp ty x y pp_c fmt c = - Format.fprintf - fmt - "Compare(ty=%a, %a, %a) = %a" - pp_comparable_ty - ty - (pp_comparable_data ty) - x - (pp_comparable_data ty) - y - pp_c - c - -let compare_through_pack ty x y = - Bytes.compare (pack_comparable_data ty x) (pack_comparable_data ty y) = 0 - -let qcheck_compare_comparable ~expected ty x y = - qcheck_eq - ~pp:(pp ty x y Format.pp_print_int) - expected - (Script_comparable.compare_comparable ty x y) - -let qcheck_compare_comparable_eq ~expected ty x y = - qcheck_eq - ~pp:(pp ty x y Format.pp_print_bool) - expected - (Script_comparable.compare_comparable ty x y = 0) - -(* Test. - * Tests that compare_comparable returns the same values than the reference - * implementation. - *) -let test_compatible_with_reference = - QCheck2.Test.make - ~name:"compatible_with_reference" - comparable_data_2_generator - (fun (Ex_comparable_data_2 (ty, x, y)) -> - qcheck_compare_comparable - ~expected:(reference_compare_comparable ty x y) - ty - x - y) - -(* Test. - * Tests that compare_comparable returns 0 iff packing then comparing the - * resulting bytes returns 0. - *) -let test_compatible_with_packing = - QCheck2.Test.make - ~name:"compatible_with_packing" - comparable_data_2_generator - (fun (Ex_comparable_data_2 (ty, x, y)) -> - qcheck_compare_comparable_eq - ~expected:(compare_through_pack ty x y) - ty - x - y) - -(* Test. - * Tests that compare_comparable is reflexive. - *) -let test_reflexivity = - QCheck2.Test.make - ~name:"reflexivity" - comparable_data_generator - (fun (Ex_comparable_data (ty, x)) -> - qcheck_compare_comparable ~expected:0 ty x x) - -(* Test. - * Tests that compare_comparable is symmetric. - *) -let test_symmetry = - QCheck2.Test.make - ~name:"symmetry" - comparable_data_2_generator - (fun (Ex_comparable_data_2 (ty, x, y)) -> - qcheck_compare_comparable - ~expected:(-Script_comparable.compare_comparable ty x y) - ty - y - x) - -(* Test. - * Tests that compare_comparable is transitive. - *) -let test_transitivity = - QCheck2.Test.make - ~name:"transitivity" - comparable_data_3_generator - (fun (Ex_comparable_data_3 (ty, x, y, z)) -> - let cxy = Script_comparable.compare_comparable ty x y in - let cyz = Script_comparable.compare_comparable ty y z in - match (cxy, cyz) with - | 0, n | n, 0 -> qcheck_compare_comparable ~expected:n ty x z - | -1, -1 -> qcheck_compare_comparable ~expected:(-1) ty x z - | 1, 1 -> qcheck_compare_comparable ~expected:1 ty x z - | _ -> QCheck2.assume_fail ()) - -(* Test. - * Tests the round-trip property for PACK and UNPACK (modulo compare_comparable). - *) -let test_pack_unpack = - QCheck2.Test.make - ~count:100_000 - (* We run this test on many more cases than the default (100) because this - is a very important property. Packing and then unpacking happens each - time data is sent from a contract to another and also each time storage - is saved at the end of a smart contract call and restored at the next - call of the same contract. Also, injectivity of packing (which is a - direct consequence of this) is an important property for big maps - (because the keys are packed and then hashed). *) - ~name:"pack_unpack" - comparable_data_generator - (fun (Ex_comparable_data (ty, x)) -> - let oty = - match option_t (-1) ty with Ok ty -> ty | Error _ -> assert false - in - qcheck_eq - ~cmp:(Script_comparable.compare_comparable oty) - ~pp:(pp_comparable_data oty) - (Some x) - (unpack_comparable_data ty (pack_comparable_data ty x))) - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [ - ("compatible_with_reference", qcheck_wrap [test_compatible_with_reference]); - ("compatible_with_packing", qcheck_wrap [test_compatible_with_packing]); - ("reflexivity", qcheck_wrap [test_reflexivity]); - ("symmetry", qcheck_wrap [test_symmetry]); - ("transitivity", qcheck_wrap [test_transitivity]); - ("pack_unpack", qcheck_wrap [test_pack_unpack]); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_script_roundtrip.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_script_roundtrip.ml deleted file mode 100644 index fa5bbf0e5d144e958bc81bbfe2b89f5c8f6acf69..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_script_roundtrip.ml +++ /dev/null @@ -1,283 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2023 Nomadic Labs *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Michelson translator and ir_size - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_script_roundtrip.ml - Subject: PBT of the roundrip property of Michelson storages. -*) - -open Protocol -open Alpha_context -open Script_typed_ir -open Qcheck2_helpers - -(* Generation of a type and value of that type. *) - -type ex_data = Ex_data : ('a, _) ty * 'a -> ex_data - -(* We use the Michelson samplers from lib_benchmark. They are later turned into - QCheck2 generators (see [data_generator]). *) -module Parameters = struct - let atom_size_range : Tezos_benchmark.Base_samplers.range = - {min = 0; max = 10} - - let other_size : Tezos_benchmark.Base_samplers.range = {min = 0; max = 2} - (* Anything larger than max=2 leads to rare very large values which - cannot be packed within Data_encoding limits. *) - - let parameters : Michelson_samplers.parameters = - { - base_parameters = - { - int_size = atom_size_range; - string_size = atom_size_range; - bytes_size = atom_size_range; - }; - list_size = other_size; - set_size = other_size; - map_size = other_size; - } -end - -module Crypto_samplers = -Tezos_benchmark.Crypto_samplers.Make_finite_key_pool (struct - let size = 1000 - - let algo = `Default -end) - -module Samplers : Michelson_samplers.S = - Michelson_samplers.Make (Parameters) (Crypto_samplers) - -let assert_some = function Some x -> x | None -> assert false - -let assert_ok = function Ok x -> x | Error _ -> assert false - -let assert_return x = assert_ok (Lwt_main.run x) - -(* We need a context because we test carbonated functions. But since - we don't care about gas consumption here we use the same value of - type context everywhere instead of threading it through the error - monad. *) - -let ctxt = - assert_return - (let open Lwt_result_syntax in - let* b, _cs = Context.init3 () in - let* v = Incremental.begin_construction b in - return (Incremental.alpha_ctxt v)) - -let ex_data_sampler : ex_data Tezos_benchmark.Base_samplers.sampler = - fun random_state -> - let size = - Tezos_benchmark.Base_samplers.sample_in_interval - ~range:{min = 1; max = 20} - random_state - in - let blacklist = function - | `TUnit | `TInt | `TNat | `TSignature | `TString | `TBytes | `TMutez - | `TKey_hash | `TKey | `TTimestamp | `TAddress | `TBool | `TPair | `TOr - | `TOption | `TList | `TSet | `TMap | `TChain_id | `TBls12_381_g1 - | `TBls12_381_g2 | `TBls12_381_fr | `TBig_map | `TTicket -> - false - | `TOperation (* Forbidden in storage *) - | `TContract (* Forbidden in storage *) - | `TSapling_transaction (* Not yet supported *) - | `TSapling_transaction_deprecated (* Not yet supported *) - | `TSapling_state (* Not yet supported *) | `TLambda (* Not yet supported *) - -> - true - in - let (Ex_ty ty) = - Samplers.Random_type.m_type ~size ~blacklist () random_state - in - let x = Samplers.Random_value.value ty random_state in - Ex_data (ty, x) - -let big_map_data_sampler : ex_data Tezos_benchmark.Base_samplers.sampler = - fun random_state -> - let size = - Tezos_benchmark.Base_samplers.sample_in_interval - ~range:{min = 1; max = 20} - random_state - in - let (Ex_comparable_ty kty) = - Samplers.Random_type.m_comparable_type ~size random_state - in - let (Ex_comparable_ty vty) = - Samplers.Random_type.m_comparable_type ~size random_state - in - let ty = assert_ok @@ big_map_t 0 kty vty in - let x = Samplers.Random_value.value ty random_state in - Ex_data (ty, x) - -(* There is no particular reason not to define proper shrinkers here, - we just haven't needed them yet. *) -let data_generator = - QCheck2.Gen.make_primitive ~gen:ex_data_sampler ~shrink:(fun _ -> Seq.empty) - -let big_map_data_generator = - QCheck2.Gen.make_primitive ~gen:ex_data_sampler ~shrink:(fun _ -> Seq.empty) - -let dummy_code unparsed_ty = - let open Micheline in - let open Michelson_v1_primitives in - strip_locations - @@ Seq - ( (), - [ - Prim ((), K_parameter, [Prim ((), T_never, [], [])], []); - Prim ((), K_storage, [unparsed_ty], []); - Prim - ( (), - K_code, - [ - Seq ((), [Prim ((), I_CAR, [], []); Prim ((), I_NEVER, [], [])]); - ], - [] ); - ] ) - -let roundtrip (ty : ('a, 'ac) ty) (x : 'a) lazy_storage_diff ctxt = - let open Lwt_result_syntax in - let dummy_address = Contract_hash.zero in - let* storage, ctxt = Script_ir_translator.unparse_data ctxt Optimized ty x in - let*? storage_type, ctxt = Script_ir_unparser.unparse_ty ~loc:() ctxt ty in - let storage = Script.lazy_expr storage in - let* code, ctxt = - Script_ir_translator.unparse_code - ctxt - Optimized - (Micheline.root (dummy_code storage_type)) - in - let code = Script.lazy_expr code in - let script = {Script.code; storage} in - let* ctxt = - Contract.raw_originate - ctxt - ~prepaid_bootstrap_storage:false - dummy_address - ~script:(script, lazy_storage_diff) - in - let* ctxt, script = Contract.get_script ctxt dummy_address in - let script = assert_some script in - let elab_conf = Script_ir_translator_config.make ~legacy:true () in - let allow_forged_tickets_in_storage = true in - let allow_forged_lazy_storage_id_in_storage = true in - let* Ex_script (Script {storage_type; storage; _}), ctxt = - Script_ir_translator.parse_script - ctxt - script - ~elab_conf - ~allow_forged_tickets_in_storage - ~allow_forged_lazy_storage_id_in_storage - in - let*? eq, _ctxt = - Gas_monad.run ctxt - @@ Script_ir_translator.ty_eq ~error_details:(Informative 0) ty storage_type - in - let safe_cast (type a ac b bc) (y : b) - (eq : ((a, ac) ty, (b, bc) ty) Script_ir_translator.eq) : a = - let Eq = eq in - y - in - let*? eq in - return @@ safe_cast storage eq - -let unparse_ty ty = - Micheline.strip_locations @@ fst @@ assert_ok - @@ Script_ir_unparser.(unparse_ty ~loc:() ctxt ty) - -let unparse_data ty x = - fst (assert_return Script_ir_translator.(unparse_data ctxt Readable ty x)) - -let value_size ty x = Script_typed_ir_size.value_size ty x - -let pp_ty fmt ty = Michelson_v1_printer.print_expr fmt (unparse_ty ty) - -let pp_data ty fmt x = Michelson_v1_printer.print_expr fmt (unparse_data ty x) - -let pp_data_with_size ty fmt x = - let nodes, size = value_size ty x in - Format.fprintf - fmt - "(%a, ty=%a, nodes=%d, size=%d)" - (pp_data ty) - x - pp_ty - ty - (Cache_memory_helpers.Nodes.to_int nodes) - (Saturation_repr.to_int size) - -let size_compare (nodes1, size1) (nodes2, size2) = - compare - (Cache_memory_helpers.Nodes.to_int nodes1, Saturation_repr.to_int size1) - (Cache_memory_helpers.Nodes.to_int nodes2, Saturation_repr.to_int size2) - -let value_size_compare ty x1 x2 = - size_compare (value_size ty x1) (value_size ty x2) - -let extract_lazy_storage_diff (ty : ('a, 'ac) ty) (x : 'a) ctxt = - let open Lwt_result_syntax in - let*? to_duplicate, ctxt = - Script_ir_translator.collect_lazy_storage ctxt ty x - in - Script_ir_translator.extract_lazy_storage_diff - ctxt - Optimized - ~temporary:false - ~to_duplicate - ~to_update:Script_ir_translator.no_lazy_storage_id - ty - x - -(* Test. - * Tests that round-tripping a contract storage through the context does not - * alter its size. - *) -let test_roundtrip_size = - QCheck2.Test.make - ~count:100 - ~name:"roundtrip_size" - data_generator - (fun (Ex_data (ty, x)) -> - let x, lazy_storage_diff, _ctxt = - assert_return @@ extract_lazy_storage_diff ty x ctxt - in - qcheck_eq - ~cmp:(value_size_compare ty) - ~pp:(pp_data_with_size ty) - x - (assert_return @@ roundtrip ty x lazy_storage_diff ctxt)) - -(* Same but on big maps. - *) -let test_roundtrip_size_big_map = - QCheck2.Test.make - ~count:100 - ~name:"roundtrip_size_big_map" - big_map_data_generator - (fun (Ex_data (ty, x)) -> - let x, lazy_storage_diff, _ctxt = - assert_return @@ extract_lazy_storage_diff ty x ctxt - in - qcheck_eq - ~cmp:(value_size_compare ty) - ~pp:(pp_data_with_size ty) - x - (assert_return @@ roundtrip ty x lazy_storage_diff ctxt)) - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [ - ("roundtrip_size", qcheck_wrap [test_roundtrip_size]); - ("roundtrip_size_big_map", qcheck_wrap [test_roundtrip_size_big_map]); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_tez_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_tez_repr.ml deleted file mode 100644 index 8be5c0f97de5722bdebf9f83041dcdb15e5449db..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_tez_repr.ml +++ /dev/null @@ -1,138 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_tez_repr.ml - Subject: Operations in Tez_repr -*) - -open Protocol.Alpha_context -open Tez_helpers - -let z_mutez_min = Z.zero - -let z_mutez_max = Z.of_int64 Int64.max_int - -let tez_to_z (tez : Tez.t) : Z.t = Z.of_int64 (Tez.to_mutez tez) - -let z_in_mutez_bounds (z : Z.t) : bool = - Z.Compare.(z_mutez_min <= z && z <= z_mutez_max) - -let compare (c' : Z.t) (c : Tez.t tzresult) : bool = - match (z_in_mutez_bounds @@ c', c) with - | true, Ok c -> - Qcheck2_helpers.qcheck_eq' - ~pp:Z.pp_print - ~expected:c' - ~actual:(tez_to_z c) - () - | true, Error _ -> - QCheck2.Test.fail_reportf - "@[Results are in Z bounds, but tez operation fails.@]" - | false, Ok _ -> - QCheck2.Test.fail_reportf - "@[Results are not in Z bounds, but tez operation did not fail.@]" - | false, Error _ -> true - -(* [prop_binop f f' (a, b)] compares the function [f] in Tez with a model - function function [f'] in [Z]. - - If [f' a' b'] falls outside Tez bounds, it is true if [f a b] has - failed. If not, it it is true if [f a b = f' a' b'] where [a'] - (resp. [b']) are [a] (resp. [b']) in [Z]. *) -let prop_binop (f : Tez.t -> Tez.t -> Tez.t tzresult) (f' : Z.t -> Z.t -> Z.t) - ((a, b) : Tez.t * Tez.t) : bool = - compare (f' (tez_to_z a) (tez_to_z b)) (f a b) - -(* [prop_binop64 f f' (a, b)] is as [prop_binop] but for binary operations - where the second operand is of type [int64]. *) -let prop_binop64 (f : Tez.t -> int64 -> Tez.t tzresult) (f' : Z.t -> Z.t -> Z.t) - ((a, b) : Tez.t * int64) : bool = - compare (f' (tez_to_z a) (Z.of_int64 b)) (f a b) - -(** Generator for int64 by conversion from int32 *) -let gen_int64_of32 : int64 QCheck2.Gen.t = - QCheck2.Gen.(map Int64.of_int32 int32) - -(** Generator for int64 mixing small positive integers, - int64s from int32 and arbitrary int64 with equal frequency *) -let gen_int64_sizes : int64 QCheck2.Gen.t = - let open QCheck2.Gen in - oneof [map Int64.of_int (int_range (-10) 10); gen_int64_of32; int64] - -(** Generator for positive int64, mixing small positive integers, - int64s from int32 and arbitrary int64 with equal frequency *) -let gen_ui64_sizes : int64 QCheck2.Gen.t = - let open QCheck2.Gen in - map - (fun i -> - let v = if i = Int64.min_int then Int64.max_int else Int64.abs i in - assert (v >= 0L) ; - v) - gen_int64_sizes - -(** Generator for tez based on [gen_tez_sizes] *) -let gen_tez_sizes = - let open QCheck2.Gen in - map Tez.of_mutez_exn gen_ui64_sizes - -let test_coherent_mul = - QCheck2.Test.make - ~name:"Tez.(*?) is coherent w.r.t. Z.(*)" - QCheck2.Gen.(pair gen_tez_sizes gen_ui64_sizes) - (prop_binop64 ( *? ) Z.( * )) - -let test_coherent_sub = - QCheck2.Test.make - ~name:"Tez.(-?) is coherent w.r.t. Z.(-)" - QCheck2.Gen.(pair gen_tez_sizes gen_tez_sizes) - (prop_binop ( -? ) Z.( - )) - -let test_coherent_add = - QCheck2.Test.make - ~name:"Tez.(+?) is coherent w.r.t. Z.(+)" - QCheck2.Gen.(pair gen_tez_sizes gen_tez_sizes) - (prop_binop ( +? ) Z.( + )) - -let test_coherent_div = - let ( /! ) a b = Ok (a /! b) in - QCheck2.Test.make - ~name:"Tez.( /! ) is coherent w.r.t. Z.(/)" - QCheck2.Gen.(pair gen_tez_sizes gen_ui64_sizes) - (fun (a, b) -> - QCheck2.assume (b > 0L) ; - prop_binop64 ( /! ) Z.( / ) (a, b)) - -let tests = - [test_coherent_mul; test_coherent_sub; test_coherent_add; test_coherent_div] - -let () = - Alcotest.run - ~__FILE__ - Protocol.name - [("Tez_repr", Qcheck2_helpers.qcheck_wrap tests)] diff --git a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_zk_rollup_encoding.ml b/src/proto_019_PtParisB/lib_protocol/test/pbt/test_zk_rollup_encoding.ml deleted file mode 100644 index 7ada302f90d9d32c1dd42caa363e5bd07fb52ffb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/pbt/test_zk_rollup_encoding.ml +++ /dev/null @@ -1,230 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Library - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/pbt/main.exe \ - -- --file test_zk_rollup_encoding.ml - Subject: Zk rollup encodings -*) - -open Protocol -open QCheck2 -open Qcheck2_helpers - -(* Generators *) - -let gen_zkr_address = - let open Gen in - let+ bytes = bytes_fixed_gen Zk_rollup_repr.Address.size in - Zk_rollup_repr.Address.of_bytes_exn bytes - -let gen_scalar = - let s = Bls12_381.Fr.random () in - Gen.return s - -let gen_l2_state = - let open Gen in - array gen_scalar - -(* Number of operations in each private batch *) -let batch_size = 10 - -(* We use fixed values for Plonk types, because it's interface - doesn't expose a quick and safe way to create them randomly. *) -module Operator = Dummy_zk_rollup.Operator (struct - let batch_size = batch_size -end) - -let nat64 = int64_range_gen 0L Int64.max_int - -let gen_zkr_account = - let open Gen in - let open Zk_rollup_account_repr in - let* state = gen_l2_state in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let circuits_info = SMap.of_seq (Kzg.SMap.to_seq Operator.circuits) in - let* nb_ops = nat in - let static = - { - public_parameters; - state_length = Array.length state; - circuits_info; - nb_ops; - } - in - let* paid_l2_operations_storage_space = nat in - let+ used_l2_operations_storage_space = - map Z.of_int @@ int_bound paid_l2_operations_storage_space - in - let dynamic = - { - state; - paid_l2_operations_storage_space = - Z.of_int paid_l2_operations_storage_space; - used_l2_operations_storage_space; - } - in - {static; dynamic} - -let gen_ticket_hash = - let open Gen in - let+ bytes = bytes_fixed_gen Script_expr_hash.size in - Ticket_hash_repr.of_bytes_exn bytes - -let gen_pkh = - let pkh, _, _ = Signature.generate_key ~algo:Ed25519 () in - Gen.return pkh - -let gen_z = - let open Gen in - sized @@ fun n -> map Z.of_bits (string_size (return n)) - -let gen_l2_op = - let open Gen in - let* op_code = nat in - let* price = - map2 - (fun id amount -> Zk_rollup_operation_repr.{id; amount}) - gen_ticket_hash - gen_z - in - let* l1_dst = gen_pkh in - let* rollup_id = gen_zkr_address in - let+ payload = array gen_scalar in - Zk_rollup_operation_repr.{op_code; price; l1_dst; rollup_id; payload} - -let gen_pending_list = - let open Gen in - let open Zk_rollup_repr in - let of_length next_index = function - | 0 -> Empty {next_index} - | length -> Pending {next_index; length} - in - map2 of_length nat64 uint16 - -(* Data-encoding roundtrip tests *) - -let test_roundtrip_address = - test_roundtrip - ~count:1_000 - ~title:"Zk_rollup.t" - ~gen:gen_zkr_address - ~eq:( = ) - Zk_rollup_repr.Address.encoding - -let test_roundtrip_state = - test_roundtrip - ~count:1_000 - ~title:"Zk_rollup_state_repr.t" - ~gen:gen_l2_state - ~eq:( = ) - Zk_rollup_state_repr.encoding - -let eq_account acc0 acc1 = - let open Zk_rollup_account_repr in - let pp_to_bytes pp = - Data_encoding.Binary.to_bytes_exn - Environment.Plonk.public_parameters_encoding - pp - in - acc0.dynamic = acc1.dynamic - && acc0.static.state_length = acc1.static.state_length - && acc0.static.circuits_info = acc1.static.circuits_info - && acc0.static.nb_ops = acc1.static.nb_ops - && pp_to_bytes acc0.static.public_parameters - = pp_to_bytes acc1.static.public_parameters - -let test_roundtrip_account = - test_roundtrip - ~count:1_000 - ~title:"Zk_rollup_account_repr.t" - ~gen:gen_zkr_account - ~eq:eq_account - Zk_rollup_account_repr.encoding - -let test_roundtrip_operation = - test_roundtrip - ~count:1_000 - ~title:"Zk_rollup_operation_repr.t" - ~gen:gen_l2_op - ~eq:( = ) - Zk_rollup_operation_repr.encoding - -let test_roundtrip_pending_list = - test_roundtrip - ~count:1_000 - ~title:"Zk_rollup_repr.pending_list" - ~gen:gen_pending_list - ~eq:( = ) - Zk_rollup_repr.pending_list_encoding - -let tests_roundtrip = - [ - test_roundtrip_address; - test_roundtrip_state; - test_roundtrip_account; - test_roundtrip_operation; - test_roundtrip_pending_list; - ] - -(* Scalar conversion tests *) - -let test_to_scalar ~count ~title ~gen to_scalar = - QCheck2.Test.make - ~count - ~name:(Format.asprintf "to_scalar %s" title) - gen - (fun input -> - try - ignore @@ to_scalar input ; - true - with _ -> false) - -let test_address_to_scalar = - test_to_scalar - ~count:1_000 - ~title:"Zk_rollup_repr.t" - ~gen:gen_zkr_address - Zk_rollup_repr.to_scalar - -let test_operation_to_scalar = - test_to_scalar - ~count:1_000 - ~title:"Zk_rollup_operation.t" - ~gen:gen_l2_op - Zk_rollup_operation_repr.to_scalar_array - -let tests_to_scalar = [test_address_to_scalar; test_operation_to_scalar] - -let () = - Alcotest.run - ~__FILE__ - (Protocol.name ^ ": ZK rollup encoding") - [ - (": roundtrip", qcheck_wrap tests_roundtrip); - (": to_scalar", qcheck_wrap tests_to_scalar); - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/accounts.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/accounts.tz deleted file mode 100644 index e18e30ac5d572038ebffd8652d167fe626989806..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/accounts.tz +++ /dev/null @@ -1,67 +0,0 @@ -{ parameter - (or (key_hash %Initialize) - (pair %Withdraw (key %from) (pair (mutez %withdraw_amount) (signature %sig)))) ; - storage (map :stored_balance key_hash mutez) ; - code { DUP ; - CAR ; - IF_LEFT - { DUP ; - DIP 2 { CDR %stored_balance ; DUP } ; - DIP { SWAP } ; - GET @opt_prev_balance ; - { IF_NONE - { DIP { AMOUNT ; SOME } ; UPDATE ; NIL operation ; PAIR } - { RENAME @previous_balance ; - AMOUNT ; - ADD ; - SOME ; - SWAP ; - UPDATE ; - NIL operation ; - PAIR } } } - { DUP ; - DUP ; - DUP ; - DUP ; - CAR %from ; - DIP 2 - { { CDR ; CAR %withdraw_amount } ; PACK ; BLAKE2B @signed_amount } ; - DIP { { CDR ; CDR %sig } } ; - CHECK_SIGNATURE ; - IF {} { PUSH string "Bad signature" ; FAILWITH } ; - DIP 2 { CDR %stored_balance ; DUP } ; - CAR %from ; - HASH_KEY @from_hash ; - DUP ; - DIP { DIP { SWAP } ; SWAP } ; - GET ; - IF_NONE - { PUSH string "Account does not exist" ; PAIR ; FAILWITH } - { RENAME @previous_balance ; - DIP { DROP } ; - DUP ; - DIP 2 { DUP ; { CDR ; CAR %withdraw_amount } ; DUP } ; - DIP { { COMPARE ; LT @not_enough } } ; - SWAP ; - IF { PUSH string "Not enough funds" ; FAILWITH } - { SUB_MUTEZ @new_balance ; - { IF_NONE { { UNIT ; FAILWITH } } {} } ; - DIP { DUP ; DIP { SWAP } } ; - DUP ; - PUSH @zero mutez 0 ; - { COMPARE ; EQ @null_balance } ; - IF { DROP ; NONE @new_balance mutez } { SOME @new_balance } ; - SWAP ; - CAR %from ; - HASH_KEY @from_hash ; - UPDATE ; - SWAP ; - DUP ; - { CDR ; CAR %withdraw_amount } ; - DIP { CAR %from ; HASH_KEY @from_hash ; IMPLICIT_ACCOUNT @from_account } ; - UNIT ; - TRANSFER_TOKENS @withdraw_transfer_op ; - NIL operation ; - SWAP ; - CONS ; - PAIR } } } } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/append.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/append.tz deleted file mode 100644 index 7e57150a302e632d756ccbfa80b28db37ca399d1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/append.tz +++ /dev/null @@ -1,10 +0,0 @@ -{ parameter (pair (list int) (list int)) ; - storage (list int) ; - code { CAR ; - UNPAIR ; - NIL int ; - SWAP ; - ITER { CONS } ; - ITER { CONS } ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/auction.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/auction.tz deleted file mode 100644 index cc5d87f8cbecd663fc4867ccad6d0214b2d5bcd2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/auction.tz +++ /dev/null @@ -1,30 +0,0 @@ -{ parameter key_hash ; - storage (pair timestamp (pair mutez key_hash)) ; - code { DUP ; - { CDR ; CAR } ; - DUP ; - NOW ; - { COMPARE ; GT } ; - IF { { UNIT ; FAILWITH } } {} ; - SWAP ; - DUP ; - CAR ; - DIP { { CDR ; CDR } } ; - AMOUNT ; - PAIR ; - SWAP ; - DIP { SWAP ; PAIR } ; - DUP ; - CAR ; - AMOUNT ; - { COMPARE ; LE } ; - IF { { UNIT ; FAILWITH } } {} ; - DUP ; - CAR ; - DIP { CDR ; IMPLICIT_ACCOUNT } ; - UNIT ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/big_map_union.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/big_map_union.tz deleted file mode 100644 index c50e2e1d130a5ec429c158e8da746c01dfb82f11..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/big_map_union.tz +++ /dev/null @@ -1,14 +0,0 @@ -{ parameter (list (pair string int)) ; - storage (pair (big_map string int) unit) ; - code { { UNPAIR ; DIP { UNPAIR } } ; - ITER { UNPAIR ; - DUP 3 ; - DUP 2 ; - GET ; - IF_NONE { PUSH int 0 } {} ; - SWAP ; - DIP { ADD ; SOME } ; - UPDATE } ; - PAIR ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/check_signature.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/check_signature.tz deleted file mode 100644 index 35ca4070d45097f22fc3c31c859e68695125155a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/check_signature.tz +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter key ; - storage (pair signature string) ; - code { DUP ; - DUP ; - DIP { CDR ; DUP ; CAR ; DIP { CDR ; PACK } } ; - CAR ; - CHECK_SIGNATURE ; - IF {} { { UNIT ; FAILWITH } } ; - CDR ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/comb-get.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/comb-get.tz deleted file mode 100644 index 7a6f7b6a361a025245f7a079c25514babd6c9fb1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/comb-get.tz +++ /dev/null @@ -1,27 +0,0 @@ -{ parameter (pair nat nat nat unit) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - PUSH nat 1 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - GET 1 ; - PUSH nat 1 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - GET 3 ; - PUSH nat 4 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - GET 5 ; - PUSH nat 2 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - GET 6 ; - UNIT ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DROP ; - UNIT ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/comb-set.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/comb-set.tz deleted file mode 100644 index a8c1dc5c2e7f5898c6157026e19ea9812ac61650..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/comb-set.tz +++ /dev/null @@ -1,13 +0,0 @@ -{ parameter unit ; - storage (pair nat nat nat unit) ; - code { CDR ; - PUSH nat 2 ; - UPDATE 1 ; - PUSH nat 12 ; - UPDATE 3 ; - PUSH nat 8 ; - UPDATE 5 ; - UNIT ; - UPDATE 6 ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/concat.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/concat.tz deleted file mode 100644 index ffc97335652b0e304695d20c8a60e468d0cfa6c0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/concat.tz +++ /dev/null @@ -1,9 +0,0 @@ -{ parameter string ; - storage string ; - code { DUP ; - DIP { CDR ; NIL string ; SWAP ; CONS } ; - CAR ; - CONS ; - CONCAT ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/conditionals.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/conditionals.tz deleted file mode 100644 index 7eea2f774d76abd4fc7470ce22ed019bc37a69a0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/conditionals.tz +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (or string (option int)) ; - storage string ; - code { CAR ; - IF_LEFT - {} - { IF_NONE - { { UNIT ; FAILWITH } } - { PUSH int 0 ; - { COMPARE ; GT } ; - IF { { UNIT ; FAILWITH } } { PUSH string "" } } } ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/cps_fact.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/cps_fact.tz deleted file mode 100644 index 58a77dd722e8809275da66f3366bb1ec880cb67a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/cps_fact.tz +++ /dev/null @@ -1,28 +0,0 @@ -{ storage nat ; - parameter nat ; - code { UNPAIR ; - DIP { SELF ; - ADDRESS ; - SENDER ; - { COMPARE ; EQ ; IF {} { DROP ; PUSH @storage nat 1 } } } ; - DUP ; - PUSH nat 1 ; - { COMPARE ; - GE ; - IF { DROP ; NIL operation ; PAIR } - { PUSH nat 1 ; - SWAP ; - SUB @parameter ; - ISNAT ; - IF_NONE - { NIL operation ; PAIR } - { DUP ; - DIP { PUSH nat 1 ; ADD ; MUL @storage } ; - SWAP ; - DIP { DIP { SELF ; PUSH mutez 0 } ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS } ; - SWAP ; - PAIR } } } } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dign.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dign.tz deleted file mode 100644 index bb325b83d9790643c2605c986a700c326d818608..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dign.tz +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR ; - UNPAIR ; - UNPAIR ; - UNPAIR ; - UNPAIR ; - DIG 4 ; - DIP { DROP ; DROP ; DROP ; DROP } ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dipn.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dipn.tz deleted file mode 100644 index a320bd5b60aaa802a1e3c38740f2138b03a9f15d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dipn.tz +++ /dev/null @@ -1,15 +0,0 @@ -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR ; - UNPAIR ; - UNPAIR ; - UNPAIR ; - UNPAIR ; - DIP 5 { PUSH nat 6 } ; - DROP ; - DROP ; - DROP ; - DROP ; - DROP ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dugn.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dugn.tz deleted file mode 100644 index 17c3aba6949ab3611605a10a0d0129059308a282..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/dugn.tz +++ /dev/null @@ -1,14 +0,0 @@ -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR ; - UNPAIR ; - UNPAIR ; - UNPAIR ; - UNPAIR ; - DUG 4 ; - DROP ; - DROP ; - DROP ; - DROP ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ediv.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ediv.tz deleted file mode 100644 index 018ee512ff47ebd0d354c0c270cb07500d148f73..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ediv.tz +++ /dev/null @@ -1,28 +0,0 @@ -{ parameter (pair int int) ; - storage - (pair (option (pair int nat)) - (option (pair int nat)) - (option (pair int nat)) - (option (pair nat nat))) ; - code { CAR ; - DUP ; - UNPAIR ; - ABS ; - DIP { ABS } ; - EDIV ; - SWAP ; - DUP ; - UNPAIR ; - ABS ; - EDIV ; - SWAP ; - DUP ; - UNPAIR ; - DIP { ABS } ; - EDIV ; - SWAP ; - UNPAIR ; - EDIV ; - { DIP 2 { PAIR } ; DIP { PAIR } ; PAIR } ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/faucet.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/faucet.tz deleted file mode 100644 index 00c69a330a6935197390aa162c119f3557216187..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/faucet.tz +++ /dev/null @@ -1,17 +0,0 @@ -{ parameter key_hash ; - storage timestamp ; - code { UNPAIR ; - SWAP ; - PUSH int 300 ; - ADD @FIVE_MINUTES_LATER ; - NOW ; - { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ; - IMPLICIT_ACCOUNT ; - PUSH mutez 1000000 ; - UNIT ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - DIP { NOW } ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/get_and_update_map.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/get_and_update_map.tz deleted file mode 100644 index ec3bcd0f60b5f39ab96945599f49576afd14b85a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/get_and_update_map.tz +++ /dev/null @@ -1,7 +0,0 @@ -{ parameter string ; - storage (pair (option nat) (map string nat)) ; - code { { UNPAIR ; DIP { UNPAIR } } ; - GET_AND_UPDATE ; - PAIR ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/if.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/if.tz deleted file mode 100644 index 0b9e463b64408822415ac3e5ea2347c29b4edd96..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/if.tz +++ /dev/null @@ -1,7 +0,0 @@ -{ parameter bool ; - storage (option bool) ; - code { CAR ; - IF { PUSH bool True } { PUSH bool False } ; - SOME ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/insertion_sort.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/insertion_sort.tz deleted file mode 100644 index 79f41696956f09dec53e227353c8ec029b60391c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/insertion_sort.tz +++ /dev/null @@ -1,21 +0,0 @@ -{ parameter (list int) ; - storage (list int) ; - code { CAR ; - NIL int ; - SWAP ; - ITER { SWAP ; - DIP 2 { NIL int } ; - PUSH bool True ; - LOOP { IF_CONS - { SWAP ; - DIP { DUP ; DIP 2 { DUP } ; DIP { { COMPARE ; LT } } ; SWAP } ; - SWAP ; - IF { DIP { SWAP ; DIP { CONS } } ; PUSH bool True } - { SWAP ; CONS ; PUSH bool False } } - { NIL int ; PUSH bool False } } ; - SWAP ; - CONS ; - SWAP ; - ITER { CONS } } ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/list_map_block.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/list_map_block.tz deleted file mode 100644 index f2f66dd307661da97e42e81ff8b20a80f5cbc18a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/list_map_block.tz +++ /dev/null @@ -1,9 +0,0 @@ -{ parameter (list int) ; - storage (list int) ; - code { CAR ; - PUSH int 0 ; - SWAP ; - MAP { DIP { DUP } ; ADD ; DIP { PUSH int 1 ; ADD } } ; - NIL operation ; - PAIR ; - DIP { DROP } } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/loop_left.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/loop_left.tz deleted file mode 100644 index d491a1b3292067577360792cdcf4d18524d4d0c7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/loop_left.tz +++ /dev/null @@ -1,16 +0,0 @@ -{ parameter (list string) ; - storage (list string) ; - code { CAR ; - NIL string ; - SWAP ; - PAIR ; - LEFT (list string) ; - LOOP_LEFT - { DUP ; - CAR ; - DIP { CDR } ; - IF_CONS - { SWAP ; DIP { CONS } ; PAIR ; LEFT (list string) } - { RIGHT (pair (list string) (list string)) } } ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/opt_map.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/opt_map.tz deleted file mode 100644 index 51feb91f44ac382bcebc23b0606f54872f98c178..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/opt_map.tz +++ /dev/null @@ -1,12 +0,0 @@ -{ - parameter int; - storage (option int); - code { - UNPAIR; - SWAP ; - MAP { DIP { DUP } ; ADD ; } ; - DIP { DROP } ; - NIL operation ; - PAIR ; - } -} diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/packunpack.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/packunpack.tz deleted file mode 100644 index 8f08146fe0b6095f81180cdc8843f10c26090857..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/packunpack.tz +++ /dev/null @@ -1,13 +0,0 @@ -{ parameter (pair (pair (pair string (list int)) (set nat)) bytes) ; - storage unit ; - code { CAR ; - UNPAIR ; - DIP { DUP } ; - PACK ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - UNPACK (pair (pair string (list int)) (set nat)) ; - { IF_NONE { { UNIT ; FAILWITH } } {} } ; - DROP ; - UNIT ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/pexec.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/pexec.tz deleted file mode 100644 index 9211a7b9c7a0b808b305d12562d4a60f0a41f725..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/pexec.tz +++ /dev/null @@ -1,9 +0,0 @@ -{ parameter nat ; - storage nat ; - code { LAMBDA (pair nat nat) nat { UNPAIR ; ADD } ; - SWAP ; - UNPAIR ; - DIP { APPLY } ; - EXEC ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/rec_id_unit.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/rec_id_unit.tz deleted file mode 100644 index ae143d1c2a8aa2d35463230f7d236680ac387e72..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/rec_id_unit.tz +++ /dev/null @@ -1,9 +0,0 @@ -{parameter unit; - storage unit; - code { CAR ; - LAMBDA_REC unit unit - {DIP {DROP}}; - SWAP; - EXEC; - NIL operation; - PAIR}} diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/reverse_loop.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/reverse_loop.tz deleted file mode 100644 index c73aa3408bb19459e5751a9f2a34c87fbdde8bb0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/reverse_loop.tz +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (list string) ; - storage (list string) ; - code { CAR ; - NIL string ; - SWAP ; - PUSH bool True ; - LOOP { IF_CONS - { SWAP ; DIP { CONS } ; PUSH bool True } - { NIL string ; PUSH bool False } } ; - DROP ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/set_delegate.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/set_delegate.tz deleted file mode 100644 index 560682be4b51c044ef6b5275bd799b20e56bab9d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/set_delegate.tz +++ /dev/null @@ -1,3 +0,0 @@ -{ parameter (option key_hash) ; - storage unit ; - code { UNPAIR ; SET_DELEGATE ; DIP { NIL operation } ; CONS ; PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/shifts.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/shifts.tz deleted file mode 100644 index 94886af646e4a7ef8c456791476c2c8dd0bb17c1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/shifts.tz +++ /dev/null @@ -1,7 +0,0 @@ -{ parameter (or (pair nat nat) (pair nat nat)) ; - storage (option nat) ; - code { CAR ; - IF_LEFT { UNPAIR ; LSL } { UNPAIR ; LSR } ; - SOME ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/spawn_identities.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/spawn_identities.tz deleted file mode 100644 index 00480de0ef086a587d2fd76eedd33aba4a6d9b3c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/spawn_identities.tz +++ /dev/null @@ -1,28 +0,0 @@ -{ parameter nat ; - storage (list address) ; - code { DUP ; - CAR ; - DIP { CDR ; NIL operation } ; - PUSH bool True ; - LOOP { DUP ; - PUSH nat 0 ; - { COMPARE ; EQ } ; - IF { PUSH bool False } - { PUSH nat 1 ; - SWAP ; - SUB ; - ABS ; - PUSH string "init" ; - PUSH mutez 5000000 ; - NONE key_hash ; - CREATE_CONTRACT - { parameter string ; - storage string ; - code { CAR ; NIL operation ; PAIR } } ; - SWAP ; - DIP { SWAP ; DIP { CONS } } ; - SWAP ; - DIP { SWAP ; DIP { CONS } } ; - PUSH bool True } } ; - DROP ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ticket_join.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ticket_join.tz deleted file mode 100644 index b29c396b84978f48a0b4aa66f1eb8420cbe253ce..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ticket_join.tz +++ /dev/null @@ -1,10 +0,0 @@ -{ parameter (ticket nat) ; - storage (option (ticket nat)) ; - code { UNPAIR ; - SWAP ; - IF_NONE - {} - { PAIR ; JOIN_TICKETS ; { IF_NONE { { UNIT ; FAILWITH } } {} } } ; - SOME ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ticket_split.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ticket_split.tz deleted file mode 100644 index 817c1711331f2682c021214b40a7f2594930fd54..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/ticket_split.tz +++ /dev/null @@ -1,21 +0,0 @@ -{ parameter (ticket nat) ; - storage unit ; - code { CAR ; - PUSH (pair nat nat) (Pair 1 2) ; - SWAP ; - SPLIT_TICKET ; - { IF_NONE { { UNIT ; FAILWITH } } {} } ; - UNPAIR ; - READ_TICKET ; - { CDR ; CDR } ; - PUSH nat 1 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DROP ; - READ_TICKET ; - { CDR ; CDR } ; - PUSH nat 2 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DROP ; - UNIT ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/view_fib.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/view_fib.tz deleted file mode 100644 index 51b308e07948013614155e2e3887337cd36d935b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/view_fib.tz +++ /dev/null @@ -1,6 +0,0 @@ -{ parameter (pair nat address) ; - storage nat ; - code { CAR ; - UNPAIR ; - VIEW "fib" nat ; - { IF_NONE { { UNIT ; FAILWITH } } { NIL operation ; PAIR } } } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/view_toplevel_lib.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/view_toplevel_lib.tz deleted file mode 100644 index 4cefa5f7fd62ac68592389ddf455f8b4ffdec1fd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/view_toplevel_lib.tz +++ /dev/null @@ -1,80 +0,0 @@ -{ parameter nat ; - storage nat ; - code { CAR ; NIL operation ; PAIR } ; - view "add" nat nat { UNPAIR ; ADD } ; - view "id" nat (pair nat nat) {} ; - view "test_failwith" nat (pair nat nat) { FAILWITH } ; - view "step_constants" - unit - (pair (pair mutez mutez) (pair (pair address address) address)) - { DROP ; - SOURCE ; - SENDER ; - SELF_ADDRESS ; - PAIR ; - PAIR ; - BALANCE ; - AMOUNT ; - PAIR ; - PAIR } ; - view "succ" - (pair nat address) - nat - { CAR ; - UNPAIR ; - PUSH nat 1 ; - ADD ; - PAIR ; - DUP ; - CDR ; - SWAP ; - VIEW "is_twenty" nat ; - { IF_NONE { { UNIT ; FAILWITH } } {} } } ; - view "is_twenty" - (pair nat address) - nat - { CAR ; - DUP ; - CAR ; - PUSH nat 20 ; - COMPARE ; - EQ ; - IF { CAR } - { DUP ; - CDR ; - SWAP ; - VIEW "succ" nat ; - { IF_NONE { { UNIT ; FAILWITH } } {} } } } ; - view "fib" - nat - nat - { CAR ; - DUP ; - PUSH nat 0 ; - COMPARE ; - EQ ; - IF {} - { DUP ; - PUSH nat 1 ; - COMPARE ; - EQ ; - IF {} - { DUP ; - PUSH nat 1 ; - SWAP ; - SUB ; - ABS ; - SELF_ADDRESS ; - SWAP ; - VIEW "fib" nat ; - { IF_NONE - { { UNIT ; FAILWITH } } - { SWAP ; - PUSH nat 2 ; - SWAP ; - SUB ; - ABS ; - SELF_ADDRESS ; - SWAP ; - VIEW "fib" nat ; - { IF_NONE { { UNIT ; FAILWITH } } { ADD } } } } } } } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/xor.tz b/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/xor.tz deleted file mode 100644 index 6989394c999218967142a566353aa92a04b848db..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/contracts/xor.tz +++ /dev/null @@ -1,7 +0,0 @@ -{ parameter (or (pair bool bool) (pair nat nat)) ; - storage (option (or bool nat)) ; - code { CAR ; - IF_LEFT { UNPAIR ; XOR ; LEFT nat } { UNPAIR ; XOR ; RIGHT bool } ; - SOME ; - NIL operation ; - PAIR } } diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/dune b/src/proto_019_PtParisB/lib_protocol/test/regression/dune deleted file mode 100644 index ab09f5884142945b4b4c3130a4f598d3ce435ecc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/dune +++ /dev/null @@ -1,52 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_protocol_test_regression_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - tezt-tezos - tezos-protocol-019-PtParisB.protocol - octez-protocol-019-PtParisB-libs.client - octez-protocol-019-PtParisB-libs.plugin - octez-protocol-019-PtParisB-libs.test-helpers - octez-libs.micheline) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezt_tezos - -open Tezos_protocol_019_PtParisB - -open Tezos_client_019_PtParisB - -open Tezos_protocol_plugin_019_PtParisB - -open Tezos_019_PtParisB_test_helpers - -open Tezos_micheline) - (modules test_logging)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_regression_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (deps - (glob_files contracts/*.tz) - (glob_files expected/test_logging.ml/*.out)) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/accounts.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/accounts.out deleted file mode 100644 index 6ce81da765a456c50f087903910461f72b275a10..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/accounts.out +++ /dev/null @@ -1,149 +0,0 @@ - -trace - - DUP (interp) @ location: 15 - [ (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - DUP (entry) @ location: 15 - [ (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - log/CAR (exit) @ location: 15 - [ (Pair (Left "[PUBLIC_KEY_HASH]") {}) - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - CAR (entry) @ location: 16 - [ (Pair (Left "[PUBLIC_KEY_HASH]") {}) - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - log/IF_LEFT (exit) @ location: 16 - [ (Left "[PUBLIC_KEY_HASH]") - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - IF_LEFT (entry) @ location: 17 - [ (Left "[PUBLIC_KEY_HASH]") - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - log/DUP (exit) @ location: 17 - [ "[PUBLIC_KEY_HASH]" - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - DUP (entry) @ location: 19 - [ "[PUBLIC_KEY_HASH]" - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - log/DIP (exit) @ location: 19 - [ "[PUBLIC_KEY_HASH]" - "[PUBLIC_KEY_HASH]" - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - DIP (entry) @ location: 20 - [ "[PUBLIC_KEY_HASH]" - "[PUBLIC_KEY_HASH]" - (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - log/CDR (exit) @ location: 20 - [ (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - CDR (entry) @ location: 23 - [ (Pair (Left "[PUBLIC_KEY_HASH]") {}) ] - - log/DUP (exit) @ location: 23 - [ {} ] - - DUP (entry) @ location: 24 - [ {} ] - - log/[halt] (exit) @ location: 24 - [ {} - {} ] - - [halt] (entry) @ location: 22 - [ {} - {} ] - - log/DIP (exit) @ location: 20 - [ "[PUBLIC_KEY_HASH]" - "[PUBLIC_KEY_HASH]" - {} - {} ] - - DIP (entry) @ location: 25 - [ "[PUBLIC_KEY_HASH]" - "[PUBLIC_KEY_HASH]" - {} - {} ] - - log/SWAP (exit) @ location: 25 - [ "[PUBLIC_KEY_HASH]" - {} - {} ] - - SWAP (entry) @ location: 27 - [ "[PUBLIC_KEY_HASH]" - {} - {} ] - - log/[halt] (exit) @ location: 27 - [ {} - "[PUBLIC_KEY_HASH]" - {} ] - - [halt] (entry) @ location: 27 - [ {} - "[PUBLIC_KEY_HASH]" - {} ] - - control: KUndip - - control: KCons - - log/GET (exit) @ location: 25 - [ "[PUBLIC_KEY_HASH]" - {} - "[PUBLIC_KEY_HASH]" - {} ] - - GET (entry) @ location: 28 - [ "[PUBLIC_KEY_HASH]" - {} - "[PUBLIC_KEY_HASH]" - {} ] - - log/IF_NONE (exit) @ location: 28 - [ None - "[PUBLIC_KEY_HASH]" - {} ] - - IF_NONE (entry) @ location: 30 - [ None - "[PUBLIC_KEY_HASH]" - {} ] - - log/DIP (exit) @ location: 30 - [ "[PUBLIC_KEY_HASH]" - {} ] - - DIP (entry) @ location: 32 - [ "[PUBLIC_KEY_HASH]" - {} ] - - log/AMOUNT (exit) @ location: 32 - [ {} ] - - AMOUNT (entry) @ location: 34 - [ {} ] - - log/SOME (exit) @ location: 34 - [ 0 - {} ] - - SOME (entry) @ location: 35 - [ 0 - {} ] - - log/[halt] (exit) @ location: 35 - [ (Some 0) - {} ] - - [halt] (entry) @ location: 33 - [ (Some 0) - {} ] - - control: KUndip - - control: KCons - - log/UPDATE (exit) @ location: 32 - [ "[PUBLIC_KEY_HASH]" - (Some 0) - {} ] - - UPDATE (entry) @ location: 36 - [ "[PUBLIC_KEY_HASH]" - (Some 0) - {} ] - - log/NIL (exit) @ location: 36 - [ { Elt "[PUBLIC_KEY_HASH]" 0 } ] - - NIL (entry) @ location: 37 - [ { Elt "[PUBLIC_KEY_HASH]" 0 } ] - - log/PAIR (exit) @ location: 37 - [ {} - { Elt "[PUBLIC_KEY_HASH]" 0 } ] - - PAIR (entry) @ location: 39 - [ {} - { Elt "[PUBLIC_KEY_HASH]" 0 } ] - - log/[halt] (exit) @ location: 39 - [ (Pair {} { Elt "[PUBLIC_KEY_HASH]" 0 }) ] - - [halt] (entry) @ location: 14 - [ (Pair {} { Elt "[PUBLIC_KEY_HASH]" 0 }) ] - - control: KCons - - log/[halt] (exit) @ location: 30 - [ (Pair {} { Elt "[PUBLIC_KEY_HASH]" 0 }) ] - - [halt] (entry) @ location: 14 - [ (Pair {} { Elt "[PUBLIC_KEY_HASH]" 0 }) ] - - control: KCons - - log/[halt] (exit) @ location: 17 - [ (Pair {} { Elt "[PUBLIC_KEY_HASH]" 0 }) ] - - [halt] (entry) @ location: 14 - [ (Pair {} { Elt "[PUBLIC_KEY_HASH]" 0 }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/append.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/append.out deleted file mode 100644 index b573fc597191d31fbcf379a654d92683977b74f0..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/append.out +++ /dev/null @@ -1,135 +0,0 @@ - -trace - - CAR (interp) @ location: 12 - [ (Pair (Pair { 7 ; 8 ; 9 } { 4 ; 5 ; 6 }) { 1 ; 2 ; 3 }) ] - - CAR (entry) @ location: 12 - [ (Pair (Pair { 7 ; 8 ; 9 } { 4 ; 5 ; 6 }) { 1 ; 2 ; 3 }) ] - - log/UNPAIR (exit) @ location: 12 - [ (Pair { 7 ; 8 ; 9 } { 4 ; 5 ; 6 }) ] - - UNPAIR (entry) @ location: 13 - [ (Pair { 7 ; 8 ; 9 } { 4 ; 5 ; 6 }) ] - - log/NIL (exit) @ location: 13 - [ { 7 ; 8 ; 9 } - { 4 ; 5 ; 6 } ] - - NIL (entry) @ location: 14 - [ { 7 ; 8 ; 9 } - { 4 ; 5 ; 6 } ] - - log/SWAP (exit) @ location: 14 - [ {} - { 7 ; 8 ; 9 } - { 4 ; 5 ; 6 } ] - - SWAP (entry) @ location: 16 - [ {} - { 7 ; 8 ; 9 } - { 4 ; 5 ; 6 } ] - - log/ITER (exit) @ location: 16 - [ { 7 ; 8 ; 9 } - {} - { 4 ; 5 ; 6 } ] - - ITER (entry) @ location: 17 - [ { 7 ; 8 ; 9 } - {} - { 4 ; 5 ; 6 } ] - - control: KIter - - log/CONS (exit) @ location: 17 - [ 7 - {} - { 4 ; 5 ; 6 } ] - - CONS (entry) @ location: 19 - [ 7 - {} - { 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 19 - [ { 7 } - { 4 ; 5 ; 6 } ] - - [halt] (entry) @ location: 17 - [ { 7 } - { 4 ; 5 ; 6 } ] - - control: KIter - - log/CONS (exit) @ location: 17 - [ 8 - { 7 } - { 4 ; 5 ; 6 } ] - - CONS (entry) @ location: 19 - [ 8 - { 7 } - { 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 19 - [ { 8 ; 7 } - { 4 ; 5 ; 6 } ] - - [halt] (entry) @ location: 17 - [ { 8 ; 7 } - { 4 ; 5 ; 6 } ] - - control: KIter - - log/CONS (exit) @ location: 17 - [ 9 - { 8 ; 7 } - { 4 ; 5 ; 6 } ] - - CONS (entry) @ location: 19 - [ 9 - { 8 ; 7 } - { 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 19 - [ { 9 ; 8 ; 7 } - { 4 ; 5 ; 6 } ] - - [halt] (entry) @ location: 17 - [ { 9 ; 8 ; 7 } - { 4 ; 5 ; 6 } ] - - control: KIter - - control: KCons - - log/ITER (exit) @ location: 17 - [ { 9 ; 8 ; 7 } - { 4 ; 5 ; 6 } ] - - ITER (entry) @ location: 20 - [ { 9 ; 8 ; 7 } - { 4 ; 5 ; 6 } ] - - control: KIter - - log/CONS (exit) @ location: 20 - [ 9 - { 4 ; 5 ; 6 } ] - - CONS (entry) @ location: 22 - [ 9 - { 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 22 - [ { 9 ; 4 ; 5 ; 6 } ] - - [halt] (entry) @ location: 20 - [ { 9 ; 4 ; 5 ; 6 } ] - - control: KIter - - log/CONS (exit) @ location: 20 - [ 8 - { 9 ; 4 ; 5 ; 6 } ] - - CONS (entry) @ location: 22 - [ 8 - { 9 ; 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 22 - [ { 8 ; 9 ; 4 ; 5 ; 6 } ] - - [halt] (entry) @ location: 20 - [ { 8 ; 9 ; 4 ; 5 ; 6 } ] - - control: KIter - - log/CONS (exit) @ location: 20 - [ 7 - { 8 ; 9 ; 4 ; 5 ; 6 } ] - - CONS (entry) @ location: 22 - [ 7 - { 8 ; 9 ; 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 22 - [ { 7 ; 8 ; 9 ; 4 ; 5 ; 6 } ] - - [halt] (entry) @ location: 20 - [ { 7 ; 8 ; 9 ; 4 ; 5 ; 6 } ] - - control: KIter - - control: KCons - - log/NIL (exit) @ location: 20 - [ { 7 ; 8 ; 9 ; 4 ; 5 ; 6 } ] - - NIL (entry) @ location: 23 - [ { 7 ; 8 ; 9 ; 4 ; 5 ; 6 } ] - - log/PAIR (exit) @ location: 23 - [ {} - { 7 ; 8 ; 9 ; 4 ; 5 ; 6 } ] - - PAIR (entry) @ location: 25 - [ {} - { 7 ; 8 ; 9 ; 4 ; 5 ; 6 } ] - - log/[halt] (exit) @ location: 25 - [ (Pair {} { 7 ; 8 ; 9 ; 4 ; 5 ; 6 }) ] - - [halt] (entry) @ location: 11 - [ (Pair {} { 7 ; 8 ; 9 ; 4 ; 5 ; 6 }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/auction.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/auction.out deleted file mode 100644 index ac865144621f3bd6467ef245b62e24885653ba31..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/auction.out +++ /dev/null @@ -1,415 +0,0 @@ - -trace - - DUP (interp) @ location: 11 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - DUP (entry) @ location: 11 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/CDR (exit) @ location: 11 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - CDR (entry) @ location: 13 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/CAR (exit) @ location: 13 - [ (Pair "[TIMESTAMP]" 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - CAR (entry) @ location: 14 - [ (Pair "[TIMESTAMP]" 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/DUP (exit) @ location: 14 - [ "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - DUP (entry) @ location: 15 - [ "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/NOW (exit) @ location: 15 - [ "[TIMESTAMP]" - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - NOW (entry) @ location: 16 - [ "[TIMESTAMP]" - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/COMPARE (exit) @ location: 16 - [ "[TIMESTAMP]" - "[TIMESTAMP]" - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - COMPARE (entry) @ location: 18 - [ "[TIMESTAMP]" - "[TIMESTAMP]" - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/GT (exit) @ location: 18 - [ -1 - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - GT (entry) @ location: 19 - [ -1 - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/IF (exit) @ location: 19 - [ False - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - IF (entry) @ location: 20 - [ False - "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/[halt] (exit) @ location: 20 - [ "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - [halt] (entry) @ location: 26 - [ "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - control: KCons - - log/SWAP (exit) @ location: 20 - [ "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - SWAP (entry) @ location: 26 - [ "[TIMESTAMP]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") ] - - log/DUP (exit) @ location: 26 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - DUP (entry) @ location: 27 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/CAR (exit) @ location: 27 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - CAR (entry) @ location: 28 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/DIP (exit) @ location: 28 - [ "[PUBLIC_KEY_HASH]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - DIP (entry) @ location: 29 - [ "[PUBLIC_KEY_HASH]" - (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/CDR (exit) @ location: 29 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - CDR (entry) @ location: 32 - [ (Pair "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" - 50000000 - "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/CDR (exit) @ location: 32 - [ (Pair "[TIMESTAMP]" 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - CDR (entry) @ location: 33 - [ (Pair "[TIMESTAMP]" 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/[halt] (exit) @ location: 33 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - [halt] (entry) @ location: 31 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - control: KUndip - - control: KCons - - log/AMOUNT (exit) @ location: 29 - [ "[PUBLIC_KEY_HASH]" - (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - AMOUNT (entry) @ location: 34 - [ "[PUBLIC_KEY_HASH]" - (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/PAIR (exit) @ location: 34 - [ 100000000 - "[PUBLIC_KEY_HASH]" - (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - PAIR (entry) @ location: 35 - [ 100000000 - "[PUBLIC_KEY_HASH]" - (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/SWAP (exit) @ location: 35 - [ (Pair 100000000 "[PUBLIC_KEY_HASH]") - (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - SWAP (entry) @ location: 36 - [ (Pair 100000000 "[PUBLIC_KEY_HASH]") - (Pair 50000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/DIP (exit) @ location: 36 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair 100000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - DIP (entry) @ location: 37 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair 100000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/SWAP (exit) @ location: 37 - [ (Pair 100000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - SWAP (entry) @ location: 39 - [ (Pair 100000000 "[PUBLIC_KEY_HASH]") - "[TIMESTAMP]" ] - - log/PAIR (exit) @ location: 39 - [ "[TIMESTAMP]" - (Pair 100000000 "[PUBLIC_KEY_HASH]") ] - - PAIR (entry) @ location: 40 - [ "[TIMESTAMP]" - (Pair 100000000 "[PUBLIC_KEY_HASH]") ] - - log/[halt] (exit) @ location: 40 - [ (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - [halt] (entry) @ location: 38 - [ (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - control: KUndip - - control: KCons - - log/DUP (exit) @ location: 37 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - DUP (entry) @ location: 41 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/CAR (exit) @ location: 41 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - CAR (entry) @ location: 42 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/AMOUNT (exit) @ location: 42 - [ 50000000 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - AMOUNT (entry) @ location: 43 - [ 50000000 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/COMPARE (exit) @ location: 43 - [ 100000000 - 50000000 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - COMPARE (entry) @ location: 45 - [ 100000000 - 50000000 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/LE (exit) @ location: 45 - [ 1 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - LE (entry) @ location: 46 - [ 1 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/IF (exit) @ location: 46 - [ False - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - IF (entry) @ location: 47 - [ False - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/[halt] (exit) @ location: 47 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - [halt] (entry) @ location: 53 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - control: KCons - - log/DUP (exit) @ location: 47 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - DUP (entry) @ location: 53 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/CAR (exit) @ location: 53 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - CAR (entry) @ location: 54 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/DIP (exit) @ location: 54 - [ 50000000 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - DIP (entry) @ location: 55 - [ 50000000 - (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/CDR (exit) @ location: 55 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - CDR (entry) @ location: 57 - [ (Pair 50000000 "[PUBLIC_KEY_HASH]") - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/IMPLICIT_ACCOUNT (exit) @ location: 57 - [ "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - IMPLICIT_ACCOUNT (entry) @ location: 58 - [ "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/[halt] (exit) @ location: 58 - [ "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - [halt] (entry) @ location: 56 - [ "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - control: KUndip - - control: KCons - - log/UNIT (exit) @ location: 55 - [ 50000000 - "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - UNIT (entry) @ location: 59 - [ 50000000 - "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/TRANSFER_TOKENS (exit) @ location: 59 - [ Unit - 50000000 - "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - TRANSFER_TOKENS (entry) @ location: 60 - [ Unit - 50000000 - "[PUBLIC_KEY_HASH]" - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/NIL (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - NIL (entry) @ location: 61 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/SWAP (exit) @ location: 61 - [ {} - 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - SWAP (entry) @ location: 63 - [ {} - 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - {} - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - CONS (entry) @ location: 64 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - {} - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/PAIR (exit) @ location: 64 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - PAIR (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - (Pair "[TIMESTAMP]" 100000000 "[PUBLIC_KEY_HASH]") ] - - log/[halt] (exit) @ location: 65 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - "[TIMESTAMP]" - 100000000 - "[PUBLIC_KEY_HASH]") ] - - [halt] (entry) @ location: 10 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000180e1eb170000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - "[TIMESTAMP]" - 100000000 - "[PUBLIC_KEY_HASH]") ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/big_map_union.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/big_map_union.out deleted file mode 100644 index d3d7a2bfc45c5755b6c2632d175558d92d3cd51f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/big_map_union.out +++ /dev/null @@ -1,499 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 15 - [ (Pair { Pair "string" 12 ; Pair "abc" 99 ; Pair "def" 3 } { Elt "123" 123 } Unit) ] - - UNPAIR (entry) @ location: 15 - [ (Pair { Pair "string" 12 ; Pair "abc" 99 ; Pair "def" 3 } { Elt "123" 123 } Unit) ] - - log/DIP (exit) @ location: 15 - [ { Pair "string" 12 ; Pair "abc" 99 ; Pair "def" 3 } - (Pair { Elt "123" 123 } Unit) ] - - DIP (entry) @ location: 16 - [ { Pair "string" 12 ; Pair "abc" 99 ; Pair "def" 3 } - (Pair { Elt "123" 123 } Unit) ] - - log/UNPAIR (exit) @ location: 16 - [ (Pair { Elt "123" 123 } Unit) ] - - UNPAIR (entry) @ location: 18 - [ (Pair { Elt "123" 123 } Unit) ] - - log/[halt] (exit) @ location: 18 - [ { Elt "123" 123 } - Unit ] - - [halt] (entry) @ location: 18 - [ { Elt "123" 123 } - Unit ] - - control: KUndip - - control: KCons - - log/ITER (exit) @ location: 16 - [ { Pair "string" 12 ; Pair "abc" 99 ; Pair "def" 3 } - { Elt "123" 123 } - Unit ] - - ITER (entry) @ location: 19 - [ { Pair "string" 12 ; Pair "abc" 99 ; Pair "def" 3 } - { Elt "123" 123 } - Unit ] - - control: KIter - - log/UNPAIR (exit) @ location: 19 - [ (Pair "string" 12) - { Elt "123" 123 } - Unit ] - - UNPAIR (entry) @ location: 21 - [ (Pair "string" 12) - { Elt "123" 123 } - Unit ] - - log/DUP (exit) @ location: 21 - [ "string" - 12 - { Elt "123" 123 } - Unit ] - - DUP (entry) @ location: 22 - [ "string" - 12 - { Elt "123" 123 } - Unit ] - - log/DUP (exit) @ location: 22 - [ { Elt "123" 123 } - "string" - 12 - { Elt "123" 123 } - Unit ] - - DUP (entry) @ location: 24 - [ { Elt "123" 123 } - "string" - 12 - { Elt "123" 123 } - Unit ] - - log/GET (exit) @ location: 24 - [ "string" - { Elt "123" 123 } - "string" - 12 - { Elt "123" 123 } - Unit ] - - GET (entry) @ location: 26 - [ "string" - { Elt "123" 123 } - "string" - 12 - { Elt "123" 123 } - Unit ] - - log/IF_NONE (exit) @ location: 26 - [ None - "string" - 12 - { Elt "123" 123 } - Unit ] - - IF_NONE (entry) @ location: 27 - [ None - "string" - 12 - { Elt "123" 123 } - Unit ] - - log/PUSH (exit) @ location: 27 - [ "string" - 12 - { Elt "123" 123 } - Unit ] - - PUSH (entry) @ location: 29 - [ "string" - 12 - { Elt "123" 123 } - Unit ] - - log/[halt] (exit) @ location: 29 - [ 0 - "string" - 12 - { Elt "123" 123 } - Unit ] - - [halt] (entry) @ location: 33 - [ 0 - "string" - 12 - { Elt "123" 123 } - Unit ] - - control: KCons - - log/SWAP (exit) @ location: 27 - [ 0 - "string" - 12 - { Elt "123" 123 } - Unit ] - - SWAP (entry) @ location: 33 - [ 0 - "string" - 12 - { Elt "123" 123 } - Unit ] - - log/DIP (exit) @ location: 33 - [ "string" - 0 - 12 - { Elt "123" 123 } - Unit ] - - DIP (entry) @ location: 34 - [ "string" - 0 - 12 - { Elt "123" 123 } - Unit ] - - log/ADD (exit) @ location: 34 - [ 0 - 12 - { Elt "123" 123 } - Unit ] - - ADD (entry) @ location: 36 - [ 0 - 12 - { Elt "123" 123 } - Unit ] - - log/SOME (exit) @ location: 36 - [ 12 - { Elt "123" 123 } - Unit ] - - SOME (entry) @ location: 37 - [ 12 - { Elt "123" 123 } - Unit ] - - log/[halt] (exit) @ location: 37 - [ (Some 12) - { Elt "123" 123 } - Unit ] - - [halt] (entry) @ location: 35 - [ (Some 12) - { Elt "123" 123 } - Unit ] - - control: KUndip - - control: KCons - - log/UPDATE (exit) @ location: 34 - [ "string" - (Some 12) - { Elt "123" 123 } - Unit ] - - UPDATE (entry) @ location: 38 - [ "string" - (Some 12) - { Elt "123" 123 } - Unit ] - - log/[halt] (exit) @ location: 38 - [ { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 19 - [ { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - control: KIter - - log/UNPAIR (exit) @ location: 19 - [ (Pair "abc" 99) - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - UNPAIR (entry) @ location: 21 - [ (Pair "abc" 99) - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/DUP (exit) @ location: 21 - [ "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - DUP (entry) @ location: 22 - [ "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/DUP (exit) @ location: 22 - [ { Elt "123" 123 ; Elt "string" 12 } - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - DUP (entry) @ location: 24 - [ { Elt "123" 123 ; Elt "string" 12 } - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/GET (exit) @ location: 24 - [ "abc" - { Elt "123" 123 ; Elt "string" 12 } - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - GET (entry) @ location: 26 - [ "abc" - { Elt "123" 123 ; Elt "string" 12 } - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/IF_NONE (exit) @ location: 26 - [ None - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - IF_NONE (entry) @ location: 27 - [ None - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/PUSH (exit) @ location: 27 - [ "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - PUSH (entry) @ location: 29 - [ "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/[halt] (exit) @ location: 29 - [ 0 - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 33 - [ 0 - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - control: KCons - - log/SWAP (exit) @ location: 27 - [ 0 - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - SWAP (entry) @ location: 33 - [ 0 - "abc" - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/DIP (exit) @ location: 33 - [ "abc" - 0 - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - DIP (entry) @ location: 34 - [ "abc" - 0 - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/ADD (exit) @ location: 34 - [ 0 - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - ADD (entry) @ location: 36 - [ 0 - 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/SOME (exit) @ location: 36 - [ 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - SOME (entry) @ location: 37 - [ 99 - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/[halt] (exit) @ location: 37 - [ (Some 99) - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 35 - [ (Some 99) - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - control: KUndip - - control: KCons - - log/UPDATE (exit) @ location: 34 - [ "abc" - (Some 99) - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - UPDATE (entry) @ location: 38 - [ "abc" - (Some 99) - { Elt "123" 123 ; Elt "string" 12 } - Unit ] - - log/[halt] (exit) @ location: 38 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 19 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - control: KIter - - log/UNPAIR (exit) @ location: 19 - [ (Pair "def" 3) - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - UNPAIR (entry) @ location: 21 - [ (Pair "def" 3) - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/DUP (exit) @ location: 21 - [ "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - DUP (entry) @ location: 22 - [ "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/DUP (exit) @ location: 22 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - DUP (entry) @ location: 24 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/GET (exit) @ location: 24 - [ "def" - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - GET (entry) @ location: 26 - [ "def" - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/IF_NONE (exit) @ location: 26 - [ None - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - IF_NONE (entry) @ location: 27 - [ None - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/PUSH (exit) @ location: 27 - [ "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - PUSH (entry) @ location: 29 - [ "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/[halt] (exit) @ location: 29 - [ 0 - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 33 - [ 0 - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - control: KCons - - log/SWAP (exit) @ location: 27 - [ 0 - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - SWAP (entry) @ location: 33 - [ 0 - "def" - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/DIP (exit) @ location: 33 - [ "def" - 0 - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - DIP (entry) @ location: 34 - [ "def" - 0 - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/ADD (exit) @ location: 34 - [ 0 - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - ADD (entry) @ location: 36 - [ 0 - 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/SOME (exit) @ location: 36 - [ 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - SOME (entry) @ location: 37 - [ 3 - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/[halt] (exit) @ location: 37 - [ (Some 3) - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 35 - [ (Some 3) - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - control: KUndip - - control: KCons - - log/UPDATE (exit) @ location: 34 - [ "def" - (Some 3) - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - UPDATE (entry) @ location: 38 - [ "def" - (Some 3) - { Elt "123" 123 ; Elt "abc" 99 ; Elt "string" 12 } - Unit ] - - log/[halt] (exit) @ location: 38 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } - Unit ] - - [halt] (entry) @ location: 19 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } - Unit ] - - control: KIter - - control: KCons - - log/PAIR (exit) @ location: 19 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } - Unit ] - - PAIR (entry) @ location: 39 - [ { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } - Unit ] - - log/NIL (exit) @ location: 39 - [ (Pair { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } Unit) ] - - NIL (entry) @ location: 40 - [ (Pair { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } Unit) ] - - log/PAIR (exit) @ location: 40 - [ {} - (Pair { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } Unit) ] - - PAIR (entry) @ location: 42 - [ {} - (Pair { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } Unit) ] - - log/[halt] (exit) @ location: 42 - [ (Pair {} { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } Unit) ] - - [halt] (entry) @ location: 13 - [ (Pair {} { Elt "123" 123 ; Elt "abc" 99 ; Elt "def" 3 ; Elt "string" 12 } Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/check_signature.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/check_signature.out deleted file mode 100644 index c817cebfc749224cd6a446e7ecb93e7462e75a61..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/check_signature.out +++ /dev/null @@ -1,230 +0,0 @@ - -trace - - DUP (interp) @ location: 9 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - DUP (entry) @ location: 9 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/DUP (exit) @ location: 9 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - DUP (entry) @ location: 10 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/DIP (exit) @ location: 10 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - DIP (entry) @ location: 11 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/CDR (exit) @ location: 11 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - CDR (entry) @ location: 13 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/DUP (exit) @ location: 13 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - DUP (entry) @ location: 14 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/CAR (exit) @ location: 14 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - CAR (entry) @ location: 15 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/DIP (exit) @ location: 15 - [ "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - DIP (entry) @ location: 16 - [ "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/CDR (exit) @ location: 16 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - CDR (entry) @ location: 18 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/PACK (exit) @ location: 18 - [ "TEZOS" - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - PACK (entry) @ location: 19 - [ "TEZOS" - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/[halt] (exit) @ location: 19 - [ 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - [halt] (entry) @ location: 17 - [ 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 16 - [ "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - [halt] (entry) @ location: 12 - [ "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - control: KUndip - - control: KCons - - log/CAR (exit) @ location: 11 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - CAR (entry) @ location: 20 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/CHECK_SIGNATURE (exit) @ location: 20 - [ "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - CHECK_SIGNATURE (entry) @ location: 21 - [ "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - 0x05010000000554455a4f53 - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/IF (exit) @ location: 21 - [ True - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - IF (entry) @ location: 22 - [ True - (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/[halt] (exit) @ location: 22 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - [halt] (entry) @ location: 28 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - control: KCons - - log/CDR (exit) @ location: 22 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - CDR (entry) @ location: 28 - [ (Pair "[PUBLIC_KEY]" - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/NIL (exit) @ location: 28 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - NIL (entry) @ location: 29 - [ (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/PAIR (exit) @ location: 29 - [ {} - (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - PAIR (entry) @ location: 31 - [ {} - (Pair "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - log/[halt] (exit) @ location: 31 - [ (Pair {} - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - [halt] (entry) @ location: 8 - [ (Pair {} - "edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1" - "TEZOS") ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/comb-get.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/comb-get.out deleted file mode 100644 index f1ef1d79cf48bc091e2cdea40bfcd353ad4b667d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/comb-get.out +++ /dev/null @@ -1,234 +0,0 @@ - -trace - - CAR (interp) @ location: 11 - [ (Pair (Pair 1 4 2 Unit) Unit) ] - - CAR (entry) @ location: 11 - [ (Pair (Pair 1 4 2 Unit) Unit) ] - - log/DUP (exit) @ location: 11 - [ (Pair 1 4 2 Unit) ] - - DUP (entry) @ location: 12 - [ (Pair 1 4 2 Unit) ] - - log/CAR (exit) @ location: 12 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - CAR (entry) @ location: 13 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - log/PUSH (exit) @ location: 13 - [ 1 - (Pair 1 4 2 Unit) ] - - PUSH (entry) @ location: 14 - [ 1 - (Pair 1 4 2 Unit) ] - - log/COMPARE (exit) @ location: 14 - [ 1 - 1 - (Pair 1 4 2 Unit) ] - - COMPARE (entry) @ location: 19 - [ 1 - 1 - (Pair 1 4 2 Unit) ] - - log/EQ (exit) @ location: 19 - [ 0 - (Pair 1 4 2 Unit) ] - - EQ (entry) @ location: 20 - [ 0 - (Pair 1 4 2 Unit) ] - - log/IF (exit) @ location: 20 - [ True - (Pair 1 4 2 Unit) ] - - IF (entry) @ location: 21 - [ True - (Pair 1 4 2 Unit) ] - - log/[halt] (exit) @ location: 21 - [ (Pair 1 4 2 Unit) ] - - [halt] (entry) @ location: 27 - [ (Pair 1 4 2 Unit) ] - - control: KCons - - log/DUP (exit) @ location: 21 - [ (Pair 1 4 2 Unit) ] - - DUP (entry) @ location: 27 - [ (Pair 1 4 2 Unit) ] - - log/GET (exit) @ location: 27 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - GET (entry) @ location: 28 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - log/PUSH (exit) @ location: 28 - [ 1 - (Pair 1 4 2 Unit) ] - - PUSH (entry) @ location: 30 - [ 1 - (Pair 1 4 2 Unit) ] - - log/COMPARE (exit) @ location: 30 - [ 1 - 1 - (Pair 1 4 2 Unit) ] - - COMPARE (entry) @ location: 35 - [ 1 - 1 - (Pair 1 4 2 Unit) ] - - log/EQ (exit) @ location: 35 - [ 0 - (Pair 1 4 2 Unit) ] - - EQ (entry) @ location: 36 - [ 0 - (Pair 1 4 2 Unit) ] - - log/IF (exit) @ location: 36 - [ True - (Pair 1 4 2 Unit) ] - - IF (entry) @ location: 37 - [ True - (Pair 1 4 2 Unit) ] - - log/[halt] (exit) @ location: 37 - [ (Pair 1 4 2 Unit) ] - - [halt] (entry) @ location: 43 - [ (Pair 1 4 2 Unit) ] - - control: KCons - - log/DUP (exit) @ location: 37 - [ (Pair 1 4 2 Unit) ] - - DUP (entry) @ location: 43 - [ (Pair 1 4 2 Unit) ] - - log/GET (exit) @ location: 43 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - GET (entry) @ location: 44 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - log/PUSH (exit) @ location: 44 - [ 4 - (Pair 1 4 2 Unit) ] - - PUSH (entry) @ location: 46 - [ 4 - (Pair 1 4 2 Unit) ] - - log/COMPARE (exit) @ location: 46 - [ 4 - 4 - (Pair 1 4 2 Unit) ] - - COMPARE (entry) @ location: 51 - [ 4 - 4 - (Pair 1 4 2 Unit) ] - - log/EQ (exit) @ location: 51 - [ 0 - (Pair 1 4 2 Unit) ] - - EQ (entry) @ location: 52 - [ 0 - (Pair 1 4 2 Unit) ] - - log/IF (exit) @ location: 52 - [ True - (Pair 1 4 2 Unit) ] - - IF (entry) @ location: 53 - [ True - (Pair 1 4 2 Unit) ] - - log/[halt] (exit) @ location: 53 - [ (Pair 1 4 2 Unit) ] - - [halt] (entry) @ location: 59 - [ (Pair 1 4 2 Unit) ] - - control: KCons - - log/DUP (exit) @ location: 53 - [ (Pair 1 4 2 Unit) ] - - DUP (entry) @ location: 59 - [ (Pair 1 4 2 Unit) ] - - log/GET (exit) @ location: 59 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - GET (entry) @ location: 60 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - log/PUSH (exit) @ location: 60 - [ 2 - (Pair 1 4 2 Unit) ] - - PUSH (entry) @ location: 62 - [ 2 - (Pair 1 4 2 Unit) ] - - log/COMPARE (exit) @ location: 62 - [ 2 - 2 - (Pair 1 4 2 Unit) ] - - COMPARE (entry) @ location: 67 - [ 2 - 2 - (Pair 1 4 2 Unit) ] - - log/EQ (exit) @ location: 67 - [ 0 - (Pair 1 4 2 Unit) ] - - EQ (entry) @ location: 68 - [ 0 - (Pair 1 4 2 Unit) ] - - log/IF (exit) @ location: 68 - [ True - (Pair 1 4 2 Unit) ] - - IF (entry) @ location: 69 - [ True - (Pair 1 4 2 Unit) ] - - log/[halt] (exit) @ location: 69 - [ (Pair 1 4 2 Unit) ] - - [halt] (entry) @ location: 75 - [ (Pair 1 4 2 Unit) ] - - control: KCons - - log/DUP (exit) @ location: 69 - [ (Pair 1 4 2 Unit) ] - - DUP (entry) @ location: 75 - [ (Pair 1 4 2 Unit) ] - - log/GET (exit) @ location: 75 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - GET (entry) @ location: 76 - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - log/UNIT (exit) @ location: 76 - [ Unit - (Pair 1 4 2 Unit) ] - - UNIT (entry) @ location: 78 - [ Unit - (Pair 1 4 2 Unit) ] - - log/COMPARE (exit) @ location: 78 - [ Unit - Unit - (Pair 1 4 2 Unit) ] - - COMPARE (entry) @ location: 81 - [ Unit - Unit - (Pair 1 4 2 Unit) ] - - log/EQ (exit) @ location: 81 - [ 0 - (Pair 1 4 2 Unit) ] - - EQ (entry) @ location: 82 - [ 0 - (Pair 1 4 2 Unit) ] - - log/IF (exit) @ location: 82 - [ True - (Pair 1 4 2 Unit) ] - - IF (entry) @ location: 83 - [ True - (Pair 1 4 2 Unit) ] - - log/[halt] (exit) @ location: 83 - [ (Pair 1 4 2 Unit) ] - - [halt] (entry) @ location: 89 - [ (Pair 1 4 2 Unit) ] - - control: KCons - - log/DROP (exit) @ location: 83 - [ (Pair 1 4 2 Unit) ] - - DROP (entry) @ location: 89 - [ (Pair 1 4 2 Unit) ] - - log/UNIT (exit) @ location: 89 - [ ] - - UNIT (entry) @ location: 90 - [ ] - - log/NIL (exit) @ location: 90 - [ Unit ] - - NIL (entry) @ location: 91 - [ Unit ] - - log/PAIR (exit) @ location: 91 - [ {} - Unit ] - - PAIR (entry) @ location: 93 - [ {} - Unit ] - - log/[halt] (exit) @ location: 93 - [ (Pair {} Unit) ] - - [halt] (entry) @ location: 10 - [ (Pair {} Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/comb-set.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/comb-set.out deleted file mode 100644 index 87ead45da454d02b5f8f0b77cd5d55d8fe87cc61..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/comb-set.out +++ /dev/null @@ -1,61 +0,0 @@ - -trace - - CDR (interp) @ location: 11 - [ (Pair Unit 1 4 2 Unit) ] - - CDR (entry) @ location: 11 - [ (Pair Unit 1 4 2 Unit) ] - - log/PUSH (exit) @ location: 11 - [ (Pair 1 4 2 Unit) ] - - PUSH (entry) @ location: 12 - [ (Pair 1 4 2 Unit) ] - - log/UPDATE (exit) @ location: 12 - [ 2 - (Pair 1 4 2 Unit) ] - - UPDATE (entry) @ location: 15 - [ 2 - (Pair 1 4 2 Unit) ] - - log/PUSH (exit) @ location: 15 - [ (Pair 2 4 2 Unit) ] - - PUSH (entry) @ location: 17 - [ (Pair 2 4 2 Unit) ] - - log/UPDATE (exit) @ location: 17 - [ 12 - (Pair 2 4 2 Unit) ] - - UPDATE (entry) @ location: 20 - [ 12 - (Pair 2 4 2 Unit) ] - - log/PUSH (exit) @ location: 20 - [ (Pair 2 12 2 Unit) ] - - PUSH (entry) @ location: 22 - [ (Pair 2 12 2 Unit) ] - - log/UPDATE (exit) @ location: 22 - [ 8 - (Pair 2 12 2 Unit) ] - - UPDATE (entry) @ location: 25 - [ 8 - (Pair 2 12 2 Unit) ] - - log/UNIT (exit) @ location: 25 - [ (Pair 2 12 8 Unit) ] - - UNIT (entry) @ location: 27 - [ (Pair 2 12 8 Unit) ] - - log/UPDATE (exit) @ location: 27 - [ Unit - (Pair 2 12 8 Unit) ] - - UPDATE (entry) @ location: 28 - [ Unit - (Pair 2 12 8 Unit) ] - - log/NIL (exit) @ location: 28 - [ (Pair 2 12 8 Unit) ] - - NIL (entry) @ location: 30 - [ (Pair 2 12 8 Unit) ] - - log/PAIR (exit) @ location: 30 - [ {} - (Pair 2 12 8 Unit) ] - - PAIR (entry) @ location: 32 - [ {} - (Pair 2 12 8 Unit) ] - - log/[halt] (exit) @ location: 32 - [ (Pair {} 2 12 8 Unit) ] - - [halt] (entry) @ location: 10 - [ (Pair {} 2 12 8 Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/concat.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/concat.out deleted file mode 100644 index 27c3dbb0623790e7875d5679a459d48b53526a3d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/concat.out +++ /dev/null @@ -1,69 +0,0 @@ - -trace - - DUP (interp) @ location: 7 - [ (Pair "abcd" "efgh") ] - - DUP (entry) @ location: 7 - [ (Pair "abcd" "efgh") ] - - log/DIP (exit) @ location: 7 - [ (Pair "abcd" "efgh") - (Pair "abcd" "efgh") ] - - DIP (entry) @ location: 8 - [ (Pair "abcd" "efgh") - (Pair "abcd" "efgh") ] - - log/CDR (exit) @ location: 8 - [ (Pair "abcd" "efgh") ] - - CDR (entry) @ location: 10 - [ (Pair "abcd" "efgh") ] - - log/NIL (exit) @ location: 10 - [ "efgh" ] - - NIL (entry) @ location: 11 - [ "efgh" ] - - log/SWAP (exit) @ location: 11 - [ {} - "efgh" ] - - SWAP (entry) @ location: 13 - [ {} - "efgh" ] - - log/CONS (exit) @ location: 13 - [ "efgh" - {} ] - - CONS (entry) @ location: 14 - [ "efgh" - {} ] - - log/[halt] (exit) @ location: 14 - [ { "efgh" } ] - - [halt] (entry) @ location: 9 - [ { "efgh" } ] - - control: KUndip - - control: KCons - - log/CAR (exit) @ location: 8 - [ (Pair "abcd" "efgh") - { "efgh" } ] - - CAR (entry) @ location: 15 - [ (Pair "abcd" "efgh") - { "efgh" } ] - - log/CONS (exit) @ location: 15 - [ "abcd" - { "efgh" } ] - - CONS (entry) @ location: 16 - [ "abcd" - { "efgh" } ] - - log/CONCAT (exit) @ location: 16 - [ { "abcd" ; "efgh" } ] - - CONCAT (entry) @ location: 17 - [ { "abcd" ; "efgh" } ] - - log/NIL (exit) @ location: 17 - [ "abcdefgh" ] - - NIL (entry) @ location: 18 - [ "abcdefgh" ] - - log/PAIR (exit) @ location: 18 - [ {} - "abcdefgh" ] - - PAIR (entry) @ location: 20 - [ {} - "abcdefgh" ] - - log/[halt] (exit) @ location: 20 - [ (Pair {} "abcdefgh") ] - - [halt] (entry) @ location: 6 - [ (Pair {} "abcdefgh") ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/conditionals.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/conditionals.out deleted file mode 100644 index cdf6a97298a5ee569ea4b79492c3a731f95c339c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/conditionals.out +++ /dev/null @@ -1,66 +0,0 @@ - -trace - - CAR (interp) @ location: 10 - [ (Pair (Right (Some 23)) "") ] - - CAR (entry) @ location: 10 - [ (Pair (Right (Some 23)) "") ] - - log/IF_LEFT (exit) @ location: 10 - [ (Right (Some 23)) ] - - IF_LEFT (entry) @ location: 11 - [ (Right (Some 23)) ] - - log/IF_NONE (exit) @ location: 11 - [ (Some 23) ] - - IF_NONE (entry) @ location: 14 - [ (Some 23) ] - - log/PUSH (exit) @ location: 14 - [ 23 ] - - PUSH (entry) @ location: 20 - [ 23 ] - - log/COMPARE (exit) @ location: 20 - [ 0 - 23 ] - - COMPARE (entry) @ location: 24 - [ 0 - 23 ] - - log/GT (exit) @ location: 24 - [ -1 ] - - GT (entry) @ location: 25 - [ -1 ] - - log/IF (exit) @ location: 25 - [ False ] - - IF (entry) @ location: 26 - [ False ] - - log/PUSH (exit) @ location: 26 - [ ] - - PUSH (entry) @ location: 32 - [ ] - - log/[halt] (exit) @ location: 32 - [ "" ] - - [halt] (entry) @ location: 35 - [ "" ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ "" ] - - [halt] (entry) @ location: 35 - [ "" ] - - control: KCons - - log/[halt] (exit) @ location: 14 - [ "" ] - - [halt] (entry) @ location: 35 - [ "" ] - - control: KCons - - log/NIL (exit) @ location: 11 - [ "" ] - - NIL (entry) @ location: 35 - [ "" ] - - log/PAIR (exit) @ location: 35 - [ {} - "" ] - - PAIR (entry) @ location: 37 - [ {} - "" ] - - log/[halt] (exit) @ location: 37 - [ (Pair {} "") ] - - [halt] (entry) @ location: 9 - [ (Pair {} "") ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/cps_fact.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/cps_fact.out deleted file mode 100644 index aba8d782b45726aab0faa2cbe86fd8f4ae7e3b89..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/cps_fact.out +++ /dev/null @@ -1,276 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 7 - [ (Pair 2 60) ] - - UNPAIR (entry) @ location: 7 - [ (Pair 2 60) ] - - log/DIP (exit) @ location: 7 - [ 2 - 60 ] - - DIP (entry) @ location: 8 - [ 2 - 60 ] - - log/SELF (exit) @ location: 8 - [ 60 ] - - SELF (entry) @ location: 10 - [ 60 ] - - log/ADDRESS (exit) @ location: 10 - [ "[CONTRACT_HASH]" - 60 ] - - ADDRESS (entry) @ location: 11 - [ "[CONTRACT_HASH]" - 60 ] - - log/SENDER (exit) @ location: 11 - [ "[CONTRACT_HASH]" - 60 ] - - SENDER (entry) @ location: 12 - [ "[CONTRACT_HASH]" - 60 ] - - log/COMPARE (exit) @ location: 12 - [ "[PUBLIC_KEY_HASH]" - "[CONTRACT_HASH]" - 60 ] - - COMPARE (entry) @ location: 14 - [ "[PUBLIC_KEY_HASH]" - "[CONTRACT_HASH]" - 60 ] - - log/EQ (exit) @ location: 14 - [ -1 - 60 ] - - EQ (entry) @ location: 15 - [ -1 - 60 ] - - log/IF (exit) @ location: 15 - [ False - 60 ] - - IF (entry) @ location: 16 - [ False - 60 ] - - log/DROP (exit) @ location: 16 - [ 60 ] - - DROP (entry) @ location: 19 - [ 60 ] - - log/PUSH (exit) @ location: 19 - [ ] - - PUSH (entry) @ location: 20 - [ ] - - log/[halt] (exit) @ location: 20 - [ 1 ] - - [halt] (entry) @ location: 9 - [ 1 ] - - control: KCons - - log/[halt] (exit) @ location: 16 - [ 1 ] - - [halt] (entry) @ location: 9 - [ 1 ] - - control: KUndip - - control: KCons - - log/DUP (exit) @ location: 8 - [ 2 - 1 ] - - DUP (entry) @ location: 23 - [ 2 - 1 ] - - log/PUSH (exit) @ location: 23 - [ 2 - 2 - 1 ] - - PUSH (entry) @ location: 24 - [ 2 - 2 - 1 ] - - log/COMPARE (exit) @ location: 24 - [ 1 - 2 - 2 - 1 ] - - COMPARE (entry) @ location: 28 - [ 1 - 2 - 2 - 1 ] - - log/GE (exit) @ location: 28 - [ -1 - 2 - 1 ] - - GE (entry) @ location: 29 - [ -1 - 2 - 1 ] - - log/IF (exit) @ location: 29 - [ False - 2 - 1 ] - - IF (entry) @ location: 30 - [ False - 2 - 1 ] - - log/PUSH (exit) @ location: 30 - [ 2 - 1 ] - - PUSH (entry) @ location: 37 - [ 2 - 1 ] - - log/SWAP (exit) @ location: 37 - [ 1 - 2 - 1 ] - - SWAP (entry) @ location: 40 - [ 1 - 2 - 1 ] - - log/SUB (exit) @ location: 40 - [ 2 - 1 - 1 ] - - SUB (entry) @ location: 41 - [ 2 - 1 - 1 ] - - log/ISNAT (exit) @ location: 41 - [ 1 - 1 ] - - ISNAT (entry) @ location: 42 - [ 1 - 1 ] - - log/IF_NONE (exit) @ location: 42 - [ (Some 1) - 1 ] - - IF_NONE (entry) @ location: 43 - [ (Some 1) - 1 ] - - log/DUP (exit) @ location: 43 - [ 1 - 1 ] - - DUP (entry) @ location: 49 - [ 1 - 1 ] - - log/DIP (exit) @ location: 49 - [ 1 - 1 - 1 ] - - DIP (entry) @ location: 50 - [ 1 - 1 - 1 ] - - log/PUSH (exit) @ location: 50 - [ 1 - 1 ] - - PUSH (entry) @ location: 52 - [ 1 - 1 ] - - log/ADD (exit) @ location: 52 - [ 1 - 1 - 1 ] - - ADD (entry) @ location: 55 - [ 1 - 1 - 1 ] - - log/MUL (exit) @ location: 55 - [ 2 - 1 ] - - MUL (entry) @ location: 56 - [ 2 - 1 ] - - log/[halt] (exit) @ location: 56 - [ 2 ] - - [halt] (entry) @ location: 51 - [ 2 ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 50 - [ 1 - 2 ] - - SWAP (entry) @ location: 57 - [ 1 - 2 ] - - log/DIP (exit) @ location: 57 - [ 2 - 1 ] - - DIP (entry) @ location: 58 - [ 2 - 1 ] - - log/DIP (exit) @ location: 58 - [ 1 ] - - DIP (entry) @ location: 60 - [ 1 ] - - log/SELF (exit) @ location: 60 - [ ] - - SELF (entry) @ location: 62 - [ ] - - log/PUSH (exit) @ location: 62 - [ "[CONTRACT_HASH]" ] - - PUSH (entry) @ location: 63 - [ "[CONTRACT_HASH]" ] - - log/[halt] (exit) @ location: 63 - [ 0 - "[CONTRACT_HASH]" ] - - [halt] (entry) @ location: 61 - [ 0 - "[CONTRACT_HASH]" ] - - control: KUndip - - control: KCons - - log/TRANSFER_TOKENS (exit) @ location: 60 - [ 1 - 0 - "[CONTRACT_HASH]" ] - - TRANSFER_TOKENS (entry) @ location: 66 - [ 1 - 0 - "[CONTRACT_HASH]" ] - - log/NIL (exit) @ location: 66 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 ] - - NIL (entry) @ location: 67 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 ] - - log/SWAP (exit) @ location: 67 - [ {} - 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 ] - - SWAP (entry) @ location: 69 - [ {} - 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 ] - - log/CONS (exit) @ location: 69 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 - {} ] - - CONS (entry) @ location: 70 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 - {} ] - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } ] - - [halt] (entry) @ location: 59 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 58 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } ] - - SWAP (entry) @ location: 71 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } ] - - log/PAIR (exit) @ location: 71 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2 ] - - PAIR (entry) @ location: 72 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2 ] - - log/[halt] (exit) @ location: 72 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2) ] - - [halt] (entry) @ location: 6 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2) ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2) ] - - [halt] (entry) @ location: 6 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2) ] - - control: KCons - - log/[halt] (exit) @ location: 30 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2) ] - - [halt] (entry) @ location: 6 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf502875890000000100014828e9aa0b3e6e970da0515b5c5d8ccf5028758900ff00000000020001 } - 2) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dign.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dign.out deleted file mode 100644 index 298723394bff8fd24ed9e28062590e1a23c2f082..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dign.out +++ /dev/null @@ -1,107 +0,0 @@ - -trace - - CAR (interp) @ location: 15 - [ (Pair (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) 7) ] - - CAR (entry) @ location: 15 - [ (Pair (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) 7) ] - - log/UNPAIR (exit) @ location: 15 - [ (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) ] - - UNPAIR (entry) @ location: 16 - [ (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) ] - - log/UNPAIR (exit) @ location: 16 - [ (Pair (Pair (Pair 0 1) 2) 3) - 4 ] - - UNPAIR (entry) @ location: 17 - [ (Pair (Pair (Pair 0 1) 2) 3) - 4 ] - - log/UNPAIR (exit) @ location: 17 - [ (Pair (Pair 0 1) 2) - 3 - 4 ] - - UNPAIR (entry) @ location: 18 - [ (Pair (Pair 0 1) 2) - 3 - 4 ] - - log/UNPAIR (exit) @ location: 18 - [ (Pair 0 1) - 2 - 3 - 4 ] - - UNPAIR (entry) @ location: 19 - [ (Pair 0 1) - 2 - 3 - 4 ] - - log/DIG (exit) @ location: 19 - [ 0 - 1 - 2 - 3 - 4 ] - - DIG (entry) @ location: 20 - [ 0 - 1 - 2 - 3 - 4 ] - - log/DIP (exit) @ location: 20 - [ 4 - 0 - 1 - 2 - 3 ] - - DIP (entry) @ location: 22 - [ 4 - 0 - 1 - 2 - 3 ] - - log/DROP (exit) @ location: 22 - [ 0 - 1 - 2 - 3 ] - - DROP (entry) @ location: 24 - [ 0 - 1 - 2 - 3 ] - - log/DROP (exit) @ location: 24 - [ 1 - 2 - 3 ] - - DROP (entry) @ location: 25 - [ 1 - 2 - 3 ] - - log/DROP (exit) @ location: 25 - [ 2 - 3 ] - - DROP (entry) @ location: 26 - [ 2 - 3 ] - - log/DROP (exit) @ location: 26 - [ 3 ] - - DROP (entry) @ location: 27 - [ 3 ] - - log/[halt] (exit) @ location: 27 - [ ] - - [halt] (entry) @ location: 23 - [ ] - - control: KUndip - - control: KCons - - log/NIL (exit) @ location: 22 - [ 4 ] - - NIL (entry) @ location: 28 - [ 4 ] - - log/PAIR (exit) @ location: 28 - [ {} - 4 ] - - PAIR (entry) @ location: 30 - [ {} - 4 ] - - log/[halt] (exit) @ location: 30 - [ (Pair {} 4) ] - - [halt] (entry) @ location: 14 - [ (Pair {} 4) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dipn.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dipn.out deleted file mode 100644 index 25b7ac28edbb06b21bffe9a3b26f52d484af358f..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dipn.out +++ /dev/null @@ -1,119 +0,0 @@ - -trace - - CAR (interp) @ location: 15 - [ (Pair (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) 7) ] - - CAR (entry) @ location: 15 - [ (Pair (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) 7) ] - - log/UNPAIR (exit) @ location: 15 - [ (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) ] - - UNPAIR (entry) @ location: 16 - [ (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) ] - - log/UNPAIR (exit) @ location: 16 - [ (Pair (Pair (Pair 0 1) 2) 3) - 4 ] - - UNPAIR (entry) @ location: 17 - [ (Pair (Pair (Pair 0 1) 2) 3) - 4 ] - - log/UNPAIR (exit) @ location: 17 - [ (Pair (Pair 0 1) 2) - 3 - 4 ] - - UNPAIR (entry) @ location: 18 - [ (Pair (Pair 0 1) 2) - 3 - 4 ] - - log/UNPAIR (exit) @ location: 18 - [ (Pair 0 1) - 2 - 3 - 4 ] - - UNPAIR (entry) @ location: 19 - [ (Pair 0 1) - 2 - 3 - 4 ] - - log/DIP (exit) @ location: 19 - [ 0 - 1 - 2 - 3 - 4 ] - - DIP (entry) @ location: 20 - [ 0 - 1 - 2 - 3 - 4 ] - - log/PUSH (exit) @ location: 20 - [ ] - - PUSH (entry) @ location: 23 - [ ] - - log/[halt] (exit) @ location: 23 - [ 6 ] - - [halt] (entry) @ location: 23 - [ 6 ] - - log/DROP (exit) @ location: 20 - [ 0 - 1 - 2 - 3 - 4 - 6 ] - - DROP (entry) @ location: 26 - [ 0 - 1 - 2 - 3 - 4 - 6 ] - - log/DROP (exit) @ location: 26 - [ 1 - 2 - 3 - 4 - 6 ] - - DROP (entry) @ location: 27 - [ 1 - 2 - 3 - 4 - 6 ] - - log/DROP (exit) @ location: 27 - [ 2 - 3 - 4 - 6 ] - - DROP (entry) @ location: 28 - [ 2 - 3 - 4 - 6 ] - - log/DROP (exit) @ location: 28 - [ 3 - 4 - 6 ] - - DROP (entry) @ location: 29 - [ 3 - 4 - 6 ] - - log/DROP (exit) @ location: 29 - [ 4 - 6 ] - - DROP (entry) @ location: 30 - [ 4 - 6 ] - - log/NIL (exit) @ location: 30 - [ 6 ] - - NIL (entry) @ location: 31 - [ 6 ] - - log/PAIR (exit) @ location: 31 - [ {} - 6 ] - - PAIR (entry) @ location: 33 - [ {} - 6 ] - - log/[halt] (exit) @ location: 33 - [ (Pair {} 6) ] - - [halt] (entry) @ location: 14 - [ (Pair {} 6) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dugn.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dugn.out deleted file mode 100644 index b782243a82af2108f815121a3b42bd81b1828afc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/dugn.out +++ /dev/null @@ -1,97 +0,0 @@ - -trace - - CAR (interp) @ location: 15 - [ (Pair (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) 7) ] - - CAR (entry) @ location: 15 - [ (Pair (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) 7) ] - - log/UNPAIR (exit) @ location: 15 - [ (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) ] - - UNPAIR (entry) @ location: 16 - [ (Pair (Pair (Pair (Pair 0 1) 2) 3) 4) ] - - log/UNPAIR (exit) @ location: 16 - [ (Pair (Pair (Pair 0 1) 2) 3) - 4 ] - - UNPAIR (entry) @ location: 17 - [ (Pair (Pair (Pair 0 1) 2) 3) - 4 ] - - log/UNPAIR (exit) @ location: 17 - [ (Pair (Pair 0 1) 2) - 3 - 4 ] - - UNPAIR (entry) @ location: 18 - [ (Pair (Pair 0 1) 2) - 3 - 4 ] - - log/UNPAIR (exit) @ location: 18 - [ (Pair 0 1) - 2 - 3 - 4 ] - - UNPAIR (entry) @ location: 19 - [ (Pair 0 1) - 2 - 3 - 4 ] - - log/DUG (exit) @ location: 19 - [ 0 - 1 - 2 - 3 - 4 ] - - DUG (entry) @ location: 20 - [ 0 - 1 - 2 - 3 - 4 ] - - log/DROP (exit) @ location: 20 - [ 1 - 2 - 3 - 4 - 0 ] - - DROP (entry) @ location: 22 - [ 1 - 2 - 3 - 4 - 0 ] - - log/DROP (exit) @ location: 22 - [ 2 - 3 - 4 - 0 ] - - DROP (entry) @ location: 23 - [ 2 - 3 - 4 - 0 ] - - log/DROP (exit) @ location: 23 - [ 3 - 4 - 0 ] - - DROP (entry) @ location: 24 - [ 3 - 4 - 0 ] - - log/DROP (exit) @ location: 24 - [ 4 - 0 ] - - DROP (entry) @ location: 25 - [ 4 - 0 ] - - log/NIL (exit) @ location: 25 - [ 0 ] - - NIL (entry) @ location: 26 - [ 0 ] - - log/PAIR (exit) @ location: 26 - [ {} - 0 ] - - PAIR (entry) @ location: 28 - [ {} - 0 ] - - log/[halt] (exit) @ location: 28 - [ (Pair {} 0) ] - - [halt] (entry) @ location: 14 - [ (Pair {} 0) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ediv.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ediv.out deleted file mode 100644 index 39930f26e25ba643847edcbb65d676211c32cae1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ediv.out +++ /dev/null @@ -1,259 +0,0 @@ - -trace - - CAR (interp) @ location: 25 - [ (Pair (Pair 127 11) None None None None) ] - - CAR (entry) @ location: 25 - [ (Pair (Pair 127 11) None None None None) ] - - log/DUP (exit) @ location: 25 - [ (Pair 127 11) ] - - DUP (entry) @ location: 26 - [ (Pair 127 11) ] - - log/UNPAIR (exit) @ location: 26 - [ (Pair 127 11) - (Pair 127 11) ] - - UNPAIR (entry) @ location: 27 - [ (Pair 127 11) - (Pair 127 11) ] - - log/ABS (exit) @ location: 27 - [ 127 - 11 - (Pair 127 11) ] - - ABS (entry) @ location: 28 - [ 127 - 11 - (Pair 127 11) ] - - log/DIP (exit) @ location: 28 - [ 127 - 11 - (Pair 127 11) ] - - DIP (entry) @ location: 29 - [ 127 - 11 - (Pair 127 11) ] - - log/ABS (exit) @ location: 29 - [ 11 - (Pair 127 11) ] - - ABS (entry) @ location: 31 - [ 11 - (Pair 127 11) ] - - log/[halt] (exit) @ location: 31 - [ 11 - (Pair 127 11) ] - - [halt] (entry) @ location: 31 - [ 11 - (Pair 127 11) ] - - control: KUndip - - control: KCons - - log/EDIV (exit) @ location: 29 - [ 127 - 11 - (Pair 127 11) ] - - EDIV (entry) @ location: 32 - [ 127 - 11 - (Pair 127 11) ] - - log/SWAP (exit) @ location: 32 - [ (Some (Pair 11 6)) - (Pair 127 11) ] - - SWAP (entry) @ location: 33 - [ (Some (Pair 11 6)) - (Pair 127 11) ] - - log/DUP (exit) @ location: 33 - [ (Pair 127 11) - (Some (Pair 11 6)) ] - - DUP (entry) @ location: 34 - [ (Pair 127 11) - (Some (Pair 11 6)) ] - - log/UNPAIR (exit) @ location: 34 - [ (Pair 127 11) - (Pair 127 11) - (Some (Pair 11 6)) ] - - UNPAIR (entry) @ location: 35 - [ (Pair 127 11) - (Pair 127 11) - (Some (Pair 11 6)) ] - - log/ABS (exit) @ location: 35 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) ] - - ABS (entry) @ location: 36 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) ] - - log/EDIV (exit) @ location: 36 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) ] - - EDIV (entry) @ location: 37 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) ] - - log/SWAP (exit) @ location: 37 - [ (Some (Pair 11 6)) - (Pair 127 11) - (Some (Pair 11 6)) ] - - SWAP (entry) @ location: 38 - [ (Some (Pair 11 6)) - (Pair 127 11) - (Some (Pair 11 6)) ] - - log/DUP (exit) @ location: 38 - [ (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - DUP (entry) @ location: 39 - [ (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/UNPAIR (exit) @ location: 39 - [ (Pair 127 11) - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - UNPAIR (entry) @ location: 40 - [ (Pair 127 11) - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/DIP (exit) @ location: 40 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - DIP (entry) @ location: 41 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/ABS (exit) @ location: 41 - [ 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - ABS (entry) @ location: 43 - [ 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/[halt] (exit) @ location: 43 - [ 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - [halt] (entry) @ location: 43 - [ 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - control: KUndip - - control: KCons - - log/EDIV (exit) @ location: 41 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - EDIV (entry) @ location: 44 - [ 127 - 11 - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/SWAP (exit) @ location: 44 - [ (Some (Pair 11 6)) - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - SWAP (entry) @ location: 45 - [ (Some (Pair 11 6)) - (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/UNPAIR (exit) @ location: 45 - [ (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - UNPAIR (entry) @ location: 46 - [ (Pair 127 11) - (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/EDIV (exit) @ location: 46 - [ 127 - 11 - (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - EDIV (entry) @ location: 47 - [ 127 - 11 - (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/DIP (exit) @ location: 47 - [ (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - DIP (entry) @ location: 49 - [ (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/PAIR (exit) @ location: 49 - [ (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - PAIR (entry) @ location: 52 - [ (Some (Pair 11 6)) - (Some (Pair 11 6)) ] - - log/[halt] (exit) @ location: 52 - [ (Pair (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - [halt] (entry) @ location: 52 - [ (Pair (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - log/DIP (exit) @ location: 49 - [ (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Pair (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - DIP (entry) @ location: 53 - [ (Some (Pair 11 6)) - (Some (Pair 11 6)) - (Pair (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - log/PAIR (exit) @ location: 53 - [ (Some (Pair 11 6)) - (Pair (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - PAIR (entry) @ location: 55 - [ (Some (Pair 11 6)) - (Pair (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - log/[halt] (exit) @ location: 55 - [ (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - [halt] (entry) @ location: 55 - [ (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - control: KUndip - - control: KCons - - log/PAIR (exit) @ location: 53 - [ (Some (Pair 11 6)) - (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - PAIR (entry) @ location: 56 - [ (Some (Pair 11 6)) - (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - log/NIL (exit) @ location: 56 - [ (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - NIL (entry) @ location: 57 - [ (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - log/PAIR (exit) @ location: 57 - [ {} - (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - PAIR (entry) @ location: 59 - [ {} - (Pair (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - log/[halt] (exit) @ location: 59 - [ (Pair {} (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - [halt] (entry) @ location: 24 - [ (Pair {} (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6)) (Some (Pair 11 6))) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/faucet.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/faucet.out deleted file mode 100644 index 6909d0ea978aaf325d06766a004eada28db85213..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/faucet.out +++ /dev/null @@ -1,122 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 7 - [ (Pair "[PUBLIC_KEY_HASH]" "[TIMESTAMP]") ] - - UNPAIR (entry) @ location: 7 - [ (Pair "[PUBLIC_KEY_HASH]" "[TIMESTAMP]") ] - - log/SWAP (exit) @ location: 7 - [ "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" ] - - SWAP (entry) @ location: 8 - [ "[PUBLIC_KEY_HASH]" - "[TIMESTAMP]" ] - - log/PUSH (exit) @ location: 8 - [ "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - PUSH (entry) @ location: 9 - [ "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - log/ADD (exit) @ location: 9 - [ 300 - "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - ADD (entry) @ location: 12 - [ 300 - "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - log/NOW (exit) @ location: 12 - [ "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - NOW (entry) @ location: 13 - [ "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - log/COMPARE (exit) @ location: 13 - [ "[TIMESTAMP]" - "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - COMPARE (entry) @ location: 16 - [ "[TIMESTAMP]" - "[TIMESTAMP]" - "[PUBLIC_KEY_HASH]" ] - - log/GE (exit) @ location: 16 - [ 1 - "[PUBLIC_KEY_HASH]" ] - - GE (entry) @ location: 17 - [ 1 - "[PUBLIC_KEY_HASH]" ] - - log/IF (exit) @ location: 17 - [ True - "[PUBLIC_KEY_HASH]" ] - - IF (entry) @ location: 18 - [ True - "[PUBLIC_KEY_HASH]" ] - - log/[halt] (exit) @ location: 18 - [ "[PUBLIC_KEY_HASH]" ] - - [halt] (entry) @ location: 24 - [ "[PUBLIC_KEY_HASH]" ] - - control: KCons - - log/IMPLICIT_ACCOUNT (exit) @ location: 18 - [ "[PUBLIC_KEY_HASH]" ] - - IMPLICIT_ACCOUNT (entry) @ location: 24 - [ "[PUBLIC_KEY_HASH]" ] - - log/PUSH (exit) @ location: 24 - [ "[PUBLIC_KEY_HASH]" ] - - PUSH (entry) @ location: 25 - [ "[PUBLIC_KEY_HASH]" ] - - log/UNIT (exit) @ location: 25 - [ 1000000 - "[PUBLIC_KEY_HASH]" ] - - UNIT (entry) @ location: 28 - [ 1000000 - "[PUBLIC_KEY_HASH]" ] - - log/TRANSFER_TOKENS (exit) @ location: 28 - [ Unit - 1000000 - "[PUBLIC_KEY_HASH]" ] - - TRANSFER_TOKENS (entry) @ location: 29 - [ Unit - 1000000 - "[PUBLIC_KEY_HASH]" ] - - log/NIL (exit) @ location: 29 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 ] - - NIL (entry) @ location: 30 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 ] - - log/SWAP (exit) @ location: 30 - [ {} - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 ] - - SWAP (entry) @ location: 32 - [ {} - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 ] - - log/CONS (exit) @ location: 32 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - {} ] - - CONS (entry) @ location: 33 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 - {} ] - - log/DIP (exit) @ location: 33 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } ] - - DIP (entry) @ location: 34 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } ] - - log/NOW (exit) @ location: 34 - [ ] - - NOW (entry) @ location: 36 - [ ] - - log/[halt] (exit) @ location: 36 - [ "[TIMESTAMP]" ] - - [halt] (entry) @ location: 36 - [ "[TIMESTAMP]" ] - - control: KUndip - - control: KCons - - log/PAIR (exit) @ location: 34 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - "[TIMESTAMP]" ] - - PAIR (entry) @ location: 37 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - "[TIMESTAMP]" ] - - log/[halt] (exit) @ location: 37 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - "[TIMESTAMP]") ] - - [halt] (entry) @ location: 6 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000001c0843d0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd600 } - "[TIMESTAMP]") ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/get_and_update_map.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/get_and_update_map.out deleted file mode 100644 index 43f1a2d3b72dbdee79a2a2b767370bd95a8058aa..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/get_and_update_map.out +++ /dev/null @@ -1,53 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 13 - [ (Pair "abc" (Some 321) { Elt "def" 123 }) ] - - UNPAIR (entry) @ location: 13 - [ (Pair "abc" (Some 321) { Elt "def" 123 }) ] - - log/DIP (exit) @ location: 13 - [ "abc" - (Pair (Some 321) { Elt "def" 123 }) ] - - DIP (entry) @ location: 14 - [ "abc" - (Pair (Some 321) { Elt "def" 123 }) ] - - log/UNPAIR (exit) @ location: 14 - [ (Pair (Some 321) { Elt "def" 123 }) ] - - UNPAIR (entry) @ location: 16 - [ (Pair (Some 321) { Elt "def" 123 }) ] - - log/[halt] (exit) @ location: 16 - [ (Some 321) - { Elt "def" 123 } ] - - [halt] (entry) @ location: 16 - [ (Some 321) - { Elt "def" 123 } ] - - control: KUndip - - control: KCons - - log/GET_AND_UPDATE (exit) @ location: 14 - [ "abc" - (Some 321) - { Elt "def" 123 } ] - - GET_AND_UPDATE (entry) @ location: 17 - [ "abc" - (Some 321) - { Elt "def" 123 } ] - - log/PAIR (exit) @ location: 17 - [ None - { Elt "abc" 321 ; Elt "def" 123 } ] - - PAIR (entry) @ location: 18 - [ None - { Elt "abc" 321 ; Elt "def" 123 } ] - - log/NIL (exit) @ location: 18 - [ (Pair None { Elt "abc" 321 ; Elt "def" 123 }) ] - - NIL (entry) @ location: 19 - [ (Pair None { Elt "abc" 321 ; Elt "def" 123 }) ] - - log/PAIR (exit) @ location: 19 - [ {} - (Pair None { Elt "abc" 321 ; Elt "def" 123 }) ] - - PAIR (entry) @ location: 21 - [ {} - (Pair None { Elt "abc" 321 ; Elt "def" 123 }) ] - - log/[halt] (exit) @ location: 21 - [ (Pair {} None { Elt "abc" 321 ; Elt "def" 123 }) ] - - [halt] (entry) @ location: 11 - [ (Pair {} None { Elt "abc" 321 ; Elt "def" 123 }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/if.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/if.out deleted file mode 100644 index ab18612e58e6ac0ec17741050b38e8f1a33ce3d8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/if.out +++ /dev/null @@ -1,38 +0,0 @@ - -trace - - CAR (interp) @ location: 8 - [ (Pair True None) ] - - CAR (entry) @ location: 8 - [ (Pair True None) ] - - log/IF (exit) @ location: 8 - [ True ] - - IF (entry) @ location: 9 - [ True ] - - log/PUSH (exit) @ location: 9 - [ ] - - PUSH (entry) @ location: 11 - [ ] - - log/[halt] (exit) @ location: 11 - [ True ] - - [halt] (entry) @ location: 18 - [ True ] - - control: KCons - - log/SOME (exit) @ location: 9 - [ True ] - - SOME (entry) @ location: 18 - [ True ] - - log/NIL (exit) @ location: 18 - [ (Some True) ] - - NIL (entry) @ location: 19 - [ (Some True) ] - - log/PAIR (exit) @ location: 19 - [ {} - (Some True) ] - - PAIR (entry) @ location: 21 - [ {} - (Some True) ] - - log/[halt] (exit) @ location: 21 - [ (Pair {} (Some True)) ] - - [halt] (entry) @ location: 7 - [ (Pair {} (Some True)) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/insertion_sort.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/insertion_sort.out deleted file mode 100644 index a0657a59ef13bb4c305437001aece9eb65345196..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/insertion_sort.out +++ /dev/null @@ -1,5949 +0,0 @@ - -trace - - CAR (interp) @ location: 9 - [ (Pair { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } {}) ] - - CAR (entry) @ location: 9 - [ (Pair { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } {}) ] - - log/NIL (exit) @ location: 9 - [ { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } ] - - NIL (entry) @ location: 10 - [ { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } ] - - log/SWAP (exit) @ location: 10 - [ {} - { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } ] - - SWAP (entry) @ location: 12 - [ {} - { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } ] - - log/ITER (exit) @ location: 12 - [ { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } - {} ] - - ITER (entry) @ location: 13 - [ { 8 ; 3 ; 2 ; 7 ; 6 ; 9 ; 5 ; 1 ; 4 ; 0 } - {} ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 8 - {} ] - - SWAP (entry) @ location: 15 - [ 8 - {} ] - - log/DIP (exit) @ location: 15 - [ {} - 8 ] - - DIP (entry) @ location: 16 - [ {} - 8 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ {} - 8 - {} ] - - PUSH (entry) @ location: 21 - [ {} - 8 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - {} - 8 - {} ] - - LOOP (entry) @ location: 66 - [ True - {} - 8 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ {} - 8 - {} ] - - IF_CONS (entry) @ location: 26 - [ {} - 8 - {} ] - - log/NIL (exit) @ location: 26 - [ 8 - {} ] - - NIL (entry) @ location: 61 - [ 8 - {} ] - - log/PUSH (exit) @ location: 61 - [ {} - 8 - {} ] - - PUSH (entry) @ location: 63 - [ {} - 8 - {} ] - - log/[halt] (exit) @ location: 63 - [ False - {} - 8 - {} ] - - [halt] (entry) @ location: 66 - [ False - {} - 8 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - {} - 8 - {} ] - - [halt] (entry) @ location: 66 - [ False - {} - 8 - {} ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ {} - 8 - {} ] - - SWAP (entry) @ location: 66 - [ {} - 8 - {} ] - - log/CONS (exit) @ location: 66 - [ 8 - {} - {} ] - - CONS (entry) @ location: 67 - [ 8 - {} - {} ] - - log/SWAP (exit) @ location: 67 - [ { 8 } - {} ] - - SWAP (entry) @ location: 68 - [ { 8 } - {} ] - - log/ITER (exit) @ location: 68 - [ {} - { 8 } ] - - ITER (entry) @ location: 69 - [ {} - { 8 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 8 } ] - - [halt] (entry) @ location: 13 - [ { 8 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 3 - { 8 } ] - - SWAP (entry) @ location: 15 - [ 3 - { 8 } ] - - log/DIP (exit) @ location: 15 - [ { 8 } - 3 ] - - DIP (entry) @ location: 16 - [ { 8 } - 3 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 8 } - 3 - {} ] - - PUSH (entry) @ location: 21 - [ { 8 } - 3 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 8 } - 3 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 8 } - 3 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 8 } - 3 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 8 } - 3 - {} ] - - log/SWAP (exit) @ location: 26 - [ 8 - {} - 3 - {} ] - - SWAP (entry) @ location: 28 - [ 8 - {} - 3 - {} ] - - log/DIP (exit) @ location: 28 - [ {} - 8 - 3 - {} ] - - DIP (entry) @ location: 29 - [ {} - 8 - 3 - {} ] - - log/DUP (exit) @ location: 29 - [ 8 - 3 - {} ] - - DUP (entry) @ location: 31 - [ 8 - 3 - {} ] - - log/DIP (exit) @ location: 31 - [ 8 - 8 - 3 - {} ] - - DIP (entry) @ location: 32 - [ 8 - 8 - 3 - {} ] - - log/DUP (exit) @ location: 32 - [ 3 - {} ] - - DUP (entry) @ location: 35 - [ 3 - {} ] - - log/[halt] (exit) @ location: 35 - [ 3 - 3 - {} ] - - [halt] (entry) @ location: 35 - [ 3 - 3 - {} ] - - log/DIP (exit) @ location: 32 - [ 8 - 8 - 3 - 3 - {} ] - - DIP (entry) @ location: 36 - [ 8 - 8 - 3 - 3 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 8 - 3 - 3 - {} ] - - COMPARE (entry) @ location: 39 - [ 8 - 3 - 3 - {} ] - - log/LT (exit) @ location: 39 - [ 1 - 3 - {} ] - - LT (entry) @ location: 40 - [ 1 - 3 - {} ] - - log/[halt] (exit) @ location: 40 - [ False - 3 - {} ] - - [halt] (entry) @ location: 38 - [ False - 3 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 8 - False - 3 - {} ] - - SWAP (entry) @ location: 41 - [ 8 - False - 3 - {} ] - - log/[halt] (exit) @ location: 41 - [ False - 8 - 3 - {} ] - - [halt] (entry) @ location: 30 - [ False - 8 - 3 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ {} - False - 8 - 3 - {} ] - - SWAP (entry) @ location: 42 - [ {} - False - 8 - 3 - {} ] - - log/IF (exit) @ location: 42 - [ False - {} - 8 - 3 - {} ] - - IF (entry) @ location: 43 - [ False - {} - 8 - 3 - {} ] - - log/SWAP (exit) @ location: 43 - [ {} - 8 - 3 - {} ] - - SWAP (entry) @ location: 55 - [ {} - 8 - 3 - {} ] - - log/CONS (exit) @ location: 55 - [ 8 - {} - 3 - {} ] - - CONS (entry) @ location: 56 - [ 8 - {} - 3 - {} ] - - log/PUSH (exit) @ location: 56 - [ { 8 } - 3 - {} ] - - PUSH (entry) @ location: 57 - [ { 8 } - 3 - {} ] - - log/[halt] (exit) @ location: 57 - [ False - { 8 } - 3 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 8 } - 3 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 8 } - 3 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 8 } - 3 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 8 } - 3 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 8 } - 3 - {} ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 8 } - 3 - {} ] - - SWAP (entry) @ location: 66 - [ { 8 } - 3 - {} ] - - log/CONS (exit) @ location: 66 - [ 3 - { 8 } - {} ] - - CONS (entry) @ location: 67 - [ 3 - { 8 } - {} ] - - log/SWAP (exit) @ location: 67 - [ { 3 ; 8 } - {} ] - - SWAP (entry) @ location: 68 - [ { 3 ; 8 } - {} ] - - log/ITER (exit) @ location: 68 - [ {} - { 3 ; 8 } ] - - ITER (entry) @ location: 69 - [ {} - { 3 ; 8 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 3 ; 8 } ] - - [halt] (entry) @ location: 13 - [ { 3 ; 8 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 2 - { 3 ; 8 } ] - - SWAP (entry) @ location: 15 - [ 2 - { 3 ; 8 } ] - - log/DIP (exit) @ location: 15 - [ { 3 ; 8 } - 2 ] - - DIP (entry) @ location: 16 - [ { 3 ; 8 } - 2 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 3 ; 8 } - 2 - {} ] - - PUSH (entry) @ location: 21 - [ { 3 ; 8 } - 2 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 3 ; 8 } - 2 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 3 ; 8 } - 2 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 3 ; 8 } - 2 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 3 ; 8 } - 2 - {} ] - - log/SWAP (exit) @ location: 26 - [ 3 - { 8 } - 2 - {} ] - - SWAP (entry) @ location: 28 - [ 3 - { 8 } - 2 - {} ] - - log/DIP (exit) @ location: 28 - [ { 8 } - 3 - 2 - {} ] - - DIP (entry) @ location: 29 - [ { 8 } - 3 - 2 - {} ] - - log/DUP (exit) @ location: 29 - [ 3 - 2 - {} ] - - DUP (entry) @ location: 31 - [ 3 - 2 - {} ] - - log/DIP (exit) @ location: 31 - [ 3 - 3 - 2 - {} ] - - DIP (entry) @ location: 32 - [ 3 - 3 - 2 - {} ] - - log/DUP (exit) @ location: 32 - [ 2 - {} ] - - DUP (entry) @ location: 35 - [ 2 - {} ] - - log/[halt] (exit) @ location: 35 - [ 2 - 2 - {} ] - - [halt] (entry) @ location: 35 - [ 2 - 2 - {} ] - - log/DIP (exit) @ location: 32 - [ 3 - 3 - 2 - 2 - {} ] - - DIP (entry) @ location: 36 - [ 3 - 3 - 2 - 2 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 3 - 2 - 2 - {} ] - - COMPARE (entry) @ location: 39 - [ 3 - 2 - 2 - {} ] - - log/LT (exit) @ location: 39 - [ 1 - 2 - {} ] - - LT (entry) @ location: 40 - [ 1 - 2 - {} ] - - log/[halt] (exit) @ location: 40 - [ False - 2 - {} ] - - [halt] (entry) @ location: 38 - [ False - 2 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 3 - False - 2 - {} ] - - SWAP (entry) @ location: 41 - [ 3 - False - 2 - {} ] - - log/[halt] (exit) @ location: 41 - [ False - 3 - 2 - {} ] - - [halt] (entry) @ location: 30 - [ False - 3 - 2 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 8 } - False - 3 - 2 - {} ] - - SWAP (entry) @ location: 42 - [ { 8 } - False - 3 - 2 - {} ] - - log/IF (exit) @ location: 42 - [ False - { 8 } - 3 - 2 - {} ] - - IF (entry) @ location: 43 - [ False - { 8 } - 3 - 2 - {} ] - - log/SWAP (exit) @ location: 43 - [ { 8 } - 3 - 2 - {} ] - - SWAP (entry) @ location: 55 - [ { 8 } - 3 - 2 - {} ] - - log/CONS (exit) @ location: 55 - [ 3 - { 8 } - 2 - {} ] - - CONS (entry) @ location: 56 - [ 3 - { 8 } - 2 - {} ] - - log/PUSH (exit) @ location: 56 - [ { 3 ; 8 } - 2 - {} ] - - PUSH (entry) @ location: 57 - [ { 3 ; 8 } - 2 - {} ] - - log/[halt] (exit) @ location: 57 - [ False - { 3 ; 8 } - 2 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 3 ; 8 } - 2 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 3 ; 8 } - 2 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 3 ; 8 } - 2 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 3 ; 8 } - 2 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 3 ; 8 } - 2 - {} ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 3 ; 8 } - 2 - {} ] - - SWAP (entry) @ location: 66 - [ { 3 ; 8 } - 2 - {} ] - - log/CONS (exit) @ location: 66 - [ 2 - { 3 ; 8 } - {} ] - - CONS (entry) @ location: 67 - [ 2 - { 3 ; 8 } - {} ] - - log/SWAP (exit) @ location: 67 - [ { 2 ; 3 ; 8 } - {} ] - - SWAP (entry) @ location: 68 - [ { 2 ; 3 ; 8 } - {} ] - - log/ITER (exit) @ location: 68 - [ {} - { 2 ; 3 ; 8 } ] - - ITER (entry) @ location: 69 - [ {} - { 2 ; 3 ; 8 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 2 ; 3 ; 8 } ] - - [halt] (entry) @ location: 13 - [ { 2 ; 3 ; 8 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 7 - { 2 ; 3 ; 8 } ] - - SWAP (entry) @ location: 15 - [ 7 - { 2 ; 3 ; 8 } ] - - log/DIP (exit) @ location: 15 - [ { 2 ; 3 ; 8 } - 7 ] - - DIP (entry) @ location: 16 - [ { 2 ; 3 ; 8 } - 7 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 2 ; 3 ; 8 } - 7 - {} ] - - PUSH (entry) @ location: 21 - [ { 2 ; 3 ; 8 } - 7 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 2 ; 3 ; 8 } - 7 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 2 ; 3 ; 8 } - 7 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 2 ; 3 ; 8 } - 7 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 2 ; 3 ; 8 } - 7 - {} ] - - log/SWAP (exit) @ location: 26 - [ 2 - { 3 ; 8 } - 7 - {} ] - - SWAP (entry) @ location: 28 - [ 2 - { 3 ; 8 } - 7 - {} ] - - log/DIP (exit) @ location: 28 - [ { 3 ; 8 } - 2 - 7 - {} ] - - DIP (entry) @ location: 29 - [ { 3 ; 8 } - 2 - 7 - {} ] - - log/DUP (exit) @ location: 29 - [ 2 - 7 - {} ] - - DUP (entry) @ location: 31 - [ 2 - 7 - {} ] - - log/DIP (exit) @ location: 31 - [ 2 - 2 - 7 - {} ] - - DIP (entry) @ location: 32 - [ 2 - 2 - 7 - {} ] - - log/DUP (exit) @ location: 32 - [ 7 - {} ] - - DUP (entry) @ location: 35 - [ 7 - {} ] - - log/[halt] (exit) @ location: 35 - [ 7 - 7 - {} ] - - [halt] (entry) @ location: 35 - [ 7 - 7 - {} ] - - log/DIP (exit) @ location: 32 - [ 2 - 2 - 7 - 7 - {} ] - - DIP (entry) @ location: 36 - [ 2 - 2 - 7 - 7 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 2 - 7 - 7 - {} ] - - COMPARE (entry) @ location: 39 - [ 2 - 7 - 7 - {} ] - - log/LT (exit) @ location: 39 - [ -1 - 7 - {} ] - - LT (entry) @ location: 40 - [ -1 - 7 - {} ] - - log/[halt] (exit) @ location: 40 - [ True - 7 - {} ] - - [halt] (entry) @ location: 38 - [ True - 7 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 2 - True - 7 - {} ] - - SWAP (entry) @ location: 41 - [ 2 - True - 7 - {} ] - - log/[halt] (exit) @ location: 41 - [ True - 2 - 7 - {} ] - - [halt] (entry) @ location: 30 - [ True - 2 - 7 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 3 ; 8 } - True - 2 - 7 - {} ] - - SWAP (entry) @ location: 42 - [ { 3 ; 8 } - True - 2 - 7 - {} ] - - log/IF (exit) @ location: 42 - [ True - { 3 ; 8 } - 2 - 7 - {} ] - - IF (entry) @ location: 43 - [ True - { 3 ; 8 } - 2 - 7 - {} ] - - log/DIP (exit) @ location: 43 - [ { 3 ; 8 } - 2 - 7 - {} ] - - DIP (entry) @ location: 45 - [ { 3 ; 8 } - 2 - 7 - {} ] - - log/SWAP (exit) @ location: 45 - [ 2 - 7 - {} ] - - SWAP (entry) @ location: 47 - [ 2 - 7 - {} ] - - log/DIP (exit) @ location: 47 - [ 7 - 2 - {} ] - - DIP (entry) @ location: 48 - [ 7 - 2 - {} ] - - log/CONS (exit) @ location: 48 - [ 2 - {} ] - - CONS (entry) @ location: 50 - [ 2 - {} ] - - log/[halt] (exit) @ location: 50 - [ { 2 } ] - - [halt] (entry) @ location: 50 - [ { 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 7 - { 2 } ] - - [halt] (entry) @ location: 46 - [ 7 - { 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 3 ; 8 } - 7 - { 2 } ] - - PUSH (entry) @ location: 51 - [ { 3 ; 8 } - 7 - { 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 3 ; 8 } - 7 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 8 } - 7 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 3 ; 8 } - 7 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 8 } - 7 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 3 ; 8 } - 7 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 8 } - 7 - { 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 3 ; 8 } - 7 - { 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 3 ; 8 } - 7 - { 2 } ] - - log/SWAP (exit) @ location: 26 - [ 3 - { 8 } - 7 - { 2 } ] - - SWAP (entry) @ location: 28 - [ 3 - { 8 } - 7 - { 2 } ] - - log/DIP (exit) @ location: 28 - [ { 8 } - 3 - 7 - { 2 } ] - - DIP (entry) @ location: 29 - [ { 8 } - 3 - 7 - { 2 } ] - - log/DUP (exit) @ location: 29 - [ 3 - 7 - { 2 } ] - - DUP (entry) @ location: 31 - [ 3 - 7 - { 2 } ] - - log/DIP (exit) @ location: 31 - [ 3 - 3 - 7 - { 2 } ] - - DIP (entry) @ location: 32 - [ 3 - 3 - 7 - { 2 } ] - - log/DUP (exit) @ location: 32 - [ 7 - { 2 } ] - - DUP (entry) @ location: 35 - [ 7 - { 2 } ] - - log/[halt] (exit) @ location: 35 - [ 7 - 7 - { 2 } ] - - [halt] (entry) @ location: 35 - [ 7 - 7 - { 2 } ] - - log/DIP (exit) @ location: 32 - [ 3 - 3 - 7 - 7 - { 2 } ] - - DIP (entry) @ location: 36 - [ 3 - 3 - 7 - 7 - { 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 3 - 7 - 7 - { 2 } ] - - COMPARE (entry) @ location: 39 - [ 3 - 7 - 7 - { 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 7 - { 2 } ] - - LT (entry) @ location: 40 - [ -1 - 7 - { 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 7 - { 2 } ] - - [halt] (entry) @ location: 38 - [ True - 7 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 3 - True - 7 - { 2 } ] - - SWAP (entry) @ location: 41 - [ 3 - True - 7 - { 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 3 - 7 - { 2 } ] - - [halt] (entry) @ location: 30 - [ True - 3 - 7 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 8 } - True - 3 - 7 - { 2 } ] - - SWAP (entry) @ location: 42 - [ { 8 } - True - 3 - 7 - { 2 } ] - - log/IF (exit) @ location: 42 - [ True - { 8 } - 3 - 7 - { 2 } ] - - IF (entry) @ location: 43 - [ True - { 8 } - 3 - 7 - { 2 } ] - - log/DIP (exit) @ location: 43 - [ { 8 } - 3 - 7 - { 2 } ] - - DIP (entry) @ location: 45 - [ { 8 } - 3 - 7 - { 2 } ] - - log/SWAP (exit) @ location: 45 - [ 3 - 7 - { 2 } ] - - SWAP (entry) @ location: 47 - [ 3 - 7 - { 2 } ] - - log/DIP (exit) @ location: 47 - [ 7 - 3 - { 2 } ] - - DIP (entry) @ location: 48 - [ 7 - 3 - { 2 } ] - - log/CONS (exit) @ location: 48 - [ 3 - { 2 } ] - - CONS (entry) @ location: 50 - [ 3 - { 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 7 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 8 } - 7 - { 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ { 8 } - 7 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 8 } - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 8 } - 7 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 8 } - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 8 } - 7 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 8 } - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 8 } - 7 - { 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 8 } - 7 - { 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 8 } - 7 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 26 - [ 8 - {} - 7 - { 3 ; 2 } ] - - SWAP (entry) @ location: 28 - [ 8 - {} - 7 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 28 - [ {} - 8 - 7 - { 3 ; 2 } ] - - DIP (entry) @ location: 29 - [ {} - 8 - 7 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 29 - [ 8 - 7 - { 3 ; 2 } ] - - DUP (entry) @ location: 31 - [ 8 - 7 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 31 - [ 8 - 8 - 7 - { 3 ; 2 } ] - - DIP (entry) @ location: 32 - [ 8 - 8 - 7 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 32 - [ 7 - { 3 ; 2 } ] - - DUP (entry) @ location: 35 - [ 7 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 35 - [ 7 - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 35 - [ 7 - 7 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 32 - [ 8 - 8 - 7 - 7 - { 3 ; 2 } ] - - DIP (entry) @ location: 36 - [ 8 - 8 - 7 - 7 - { 3 ; 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 8 - 7 - 7 - { 3 ; 2 } ] - - COMPARE (entry) @ location: 39 - [ 8 - 7 - 7 - { 3 ; 2 } ] - - log/LT (exit) @ location: 39 - [ 1 - 7 - { 3 ; 2 } ] - - LT (entry) @ location: 40 - [ 1 - 7 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 40 - [ False - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 38 - [ False - 7 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 8 - False - 7 - { 3 ; 2 } ] - - SWAP (entry) @ location: 41 - [ 8 - False - 7 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 41 - [ False - 8 - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 30 - [ False - 8 - 7 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ {} - False - 8 - 7 - { 3 ; 2 } ] - - SWAP (entry) @ location: 42 - [ {} - False - 8 - 7 - { 3 ; 2 } ] - - log/IF (exit) @ location: 42 - [ False - {} - 8 - 7 - { 3 ; 2 } ] - - IF (entry) @ location: 43 - [ False - {} - 8 - 7 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 43 - [ {} - 8 - 7 - { 3 ; 2 } ] - - SWAP (entry) @ location: 55 - [ {} - 8 - 7 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 55 - [ 8 - {} - 7 - { 3 ; 2 } ] - - CONS (entry) @ location: 56 - [ 8 - {} - 7 - { 3 ; 2 } ] - - log/PUSH (exit) @ location: 56 - [ { 8 } - 7 - { 3 ; 2 } ] - - PUSH (entry) @ location: 57 - [ { 8 } - 7 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 57 - [ False - { 8 } - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 8 } - 7 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 8 } - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 8 } - 7 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 8 } - 7 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 8 } - 7 - { 3 ; 2 } ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 8 } - 7 - { 3 ; 2 } ] - - SWAP (entry) @ location: 66 - [ { 8 } - 7 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 66 - [ 7 - { 8 } - { 3 ; 2 } ] - - CONS (entry) @ location: 67 - [ 7 - { 8 } - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 67 - [ { 7 ; 8 } - { 3 ; 2 } ] - - SWAP (entry) @ location: 68 - [ { 7 ; 8 } - { 3 ; 2 } ] - - log/ITER (exit) @ location: 68 - [ { 3 ; 2 } - { 7 ; 8 } ] - - ITER (entry) @ location: 69 - [ { 3 ; 2 } - { 7 ; 8 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 3 - { 7 ; 8 } ] - - CONS (entry) @ location: 71 - [ 3 - { 7 ; 8 } ] - - log/[halt] (exit) @ location: 71 - [ { 3 ; 7 ; 8 } ] - - [halt] (entry) @ location: 69 - [ { 3 ; 7 ; 8 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 2 - { 3 ; 7 ; 8 } ] - - CONS (entry) @ location: 71 - [ 2 - { 3 ; 7 ; 8 } ] - - log/[halt] (exit) @ location: 71 - [ { 2 ; 3 ; 7 ; 8 } ] - - [halt] (entry) @ location: 69 - [ { 2 ; 3 ; 7 ; 8 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 2 ; 3 ; 7 ; 8 } ] - - [halt] (entry) @ location: 13 - [ { 2 ; 3 ; 7 ; 8 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 6 - { 2 ; 3 ; 7 ; 8 } ] - - SWAP (entry) @ location: 15 - [ 6 - { 2 ; 3 ; 7 ; 8 } ] - - log/DIP (exit) @ location: 15 - [ { 2 ; 3 ; 7 ; 8 } - 6 ] - - DIP (entry) @ location: 16 - [ { 2 ; 3 ; 7 ; 8 } - 6 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 2 ; 3 ; 7 ; 8 } - 6 - {} ] - - PUSH (entry) @ location: 21 - [ { 2 ; 3 ; 7 ; 8 } - 6 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 2 ; 3 ; 7 ; 8 } - 6 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 2 ; 3 ; 7 ; 8 } - 6 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 2 ; 3 ; 7 ; 8 } - 6 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 2 ; 3 ; 7 ; 8 } - 6 - {} ] - - log/SWAP (exit) @ location: 26 - [ 2 - { 3 ; 7 ; 8 } - 6 - {} ] - - SWAP (entry) @ location: 28 - [ 2 - { 3 ; 7 ; 8 } - 6 - {} ] - - log/DIP (exit) @ location: 28 - [ { 3 ; 7 ; 8 } - 2 - 6 - {} ] - - DIP (entry) @ location: 29 - [ { 3 ; 7 ; 8 } - 2 - 6 - {} ] - - log/DUP (exit) @ location: 29 - [ 2 - 6 - {} ] - - DUP (entry) @ location: 31 - [ 2 - 6 - {} ] - - log/DIP (exit) @ location: 31 - [ 2 - 2 - 6 - {} ] - - DIP (entry) @ location: 32 - [ 2 - 2 - 6 - {} ] - - log/DUP (exit) @ location: 32 - [ 6 - {} ] - - DUP (entry) @ location: 35 - [ 6 - {} ] - - log/[halt] (exit) @ location: 35 - [ 6 - 6 - {} ] - - [halt] (entry) @ location: 35 - [ 6 - 6 - {} ] - - log/DIP (exit) @ location: 32 - [ 2 - 2 - 6 - 6 - {} ] - - DIP (entry) @ location: 36 - [ 2 - 2 - 6 - 6 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 2 - 6 - 6 - {} ] - - COMPARE (entry) @ location: 39 - [ 2 - 6 - 6 - {} ] - - log/LT (exit) @ location: 39 - [ -1 - 6 - {} ] - - LT (entry) @ location: 40 - [ -1 - 6 - {} ] - - log/[halt] (exit) @ location: 40 - [ True - 6 - {} ] - - [halt] (entry) @ location: 38 - [ True - 6 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 2 - True - 6 - {} ] - - SWAP (entry) @ location: 41 - [ 2 - True - 6 - {} ] - - log/[halt] (exit) @ location: 41 - [ True - 2 - 6 - {} ] - - [halt] (entry) @ location: 30 - [ True - 2 - 6 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 3 ; 7 ; 8 } - True - 2 - 6 - {} ] - - SWAP (entry) @ location: 42 - [ { 3 ; 7 ; 8 } - True - 2 - 6 - {} ] - - log/IF (exit) @ location: 42 - [ True - { 3 ; 7 ; 8 } - 2 - 6 - {} ] - - IF (entry) @ location: 43 - [ True - { 3 ; 7 ; 8 } - 2 - 6 - {} ] - - log/DIP (exit) @ location: 43 - [ { 3 ; 7 ; 8 } - 2 - 6 - {} ] - - DIP (entry) @ location: 45 - [ { 3 ; 7 ; 8 } - 2 - 6 - {} ] - - log/SWAP (exit) @ location: 45 - [ 2 - 6 - {} ] - - SWAP (entry) @ location: 47 - [ 2 - 6 - {} ] - - log/DIP (exit) @ location: 47 - [ 6 - 2 - {} ] - - DIP (entry) @ location: 48 - [ 6 - 2 - {} ] - - log/CONS (exit) @ location: 48 - [ 2 - {} ] - - CONS (entry) @ location: 50 - [ 2 - {} ] - - log/[halt] (exit) @ location: 50 - [ { 2 } ] - - [halt] (entry) @ location: 50 - [ { 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 6 - { 2 } ] - - [halt] (entry) @ location: 46 - [ 6 - { 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 3 ; 7 ; 8 } - 6 - { 2 } ] - - PUSH (entry) @ location: 51 - [ { 3 ; 7 ; 8 } - 6 - { 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 3 ; 7 ; 8 } - 6 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 7 ; 8 } - 6 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 3 ; 7 ; 8 } - 6 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 7 ; 8 } - 6 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 3 ; 7 ; 8 } - 6 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 7 ; 8 } - 6 - { 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 3 ; 7 ; 8 } - 6 - { 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 3 ; 7 ; 8 } - 6 - { 2 } ] - - log/SWAP (exit) @ location: 26 - [ 3 - { 7 ; 8 } - 6 - { 2 } ] - - SWAP (entry) @ location: 28 - [ 3 - { 7 ; 8 } - 6 - { 2 } ] - - log/DIP (exit) @ location: 28 - [ { 7 ; 8 } - 3 - 6 - { 2 } ] - - DIP (entry) @ location: 29 - [ { 7 ; 8 } - 3 - 6 - { 2 } ] - - log/DUP (exit) @ location: 29 - [ 3 - 6 - { 2 } ] - - DUP (entry) @ location: 31 - [ 3 - 6 - { 2 } ] - - log/DIP (exit) @ location: 31 - [ 3 - 3 - 6 - { 2 } ] - - DIP (entry) @ location: 32 - [ 3 - 3 - 6 - { 2 } ] - - log/DUP (exit) @ location: 32 - [ 6 - { 2 } ] - - DUP (entry) @ location: 35 - [ 6 - { 2 } ] - - log/[halt] (exit) @ location: 35 - [ 6 - 6 - { 2 } ] - - [halt] (entry) @ location: 35 - [ 6 - 6 - { 2 } ] - - log/DIP (exit) @ location: 32 - [ 3 - 3 - 6 - 6 - { 2 } ] - - DIP (entry) @ location: 36 - [ 3 - 3 - 6 - 6 - { 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 3 - 6 - 6 - { 2 } ] - - COMPARE (entry) @ location: 39 - [ 3 - 6 - 6 - { 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 6 - { 2 } ] - - LT (entry) @ location: 40 - [ -1 - 6 - { 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 6 - { 2 } ] - - [halt] (entry) @ location: 38 - [ True - 6 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 3 - True - 6 - { 2 } ] - - SWAP (entry) @ location: 41 - [ 3 - True - 6 - { 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 3 - 6 - { 2 } ] - - [halt] (entry) @ location: 30 - [ True - 3 - 6 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 7 ; 8 } - True - 3 - 6 - { 2 } ] - - SWAP (entry) @ location: 42 - [ { 7 ; 8 } - True - 3 - 6 - { 2 } ] - - log/IF (exit) @ location: 42 - [ True - { 7 ; 8 } - 3 - 6 - { 2 } ] - - IF (entry) @ location: 43 - [ True - { 7 ; 8 } - 3 - 6 - { 2 } ] - - log/DIP (exit) @ location: 43 - [ { 7 ; 8 } - 3 - 6 - { 2 } ] - - DIP (entry) @ location: 45 - [ { 7 ; 8 } - 3 - 6 - { 2 } ] - - log/SWAP (exit) @ location: 45 - [ 3 - 6 - { 2 } ] - - SWAP (entry) @ location: 47 - [ 3 - 6 - { 2 } ] - - log/DIP (exit) @ location: 47 - [ 6 - 3 - { 2 } ] - - DIP (entry) @ location: 48 - [ 6 - 3 - { 2 } ] - - log/CONS (exit) @ location: 48 - [ 3 - { 2 } ] - - CONS (entry) @ location: 50 - [ 3 - { 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 6 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 26 - [ 7 - { 8 } - 6 - { 3 ; 2 } ] - - SWAP (entry) @ location: 28 - [ 7 - { 8 } - 6 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 28 - [ { 8 } - 7 - 6 - { 3 ; 2 } ] - - DIP (entry) @ location: 29 - [ { 8 } - 7 - 6 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 29 - [ 7 - 6 - { 3 ; 2 } ] - - DUP (entry) @ location: 31 - [ 7 - 6 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 31 - [ 7 - 7 - 6 - { 3 ; 2 } ] - - DIP (entry) @ location: 32 - [ 7 - 7 - 6 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 32 - [ 6 - { 3 ; 2 } ] - - DUP (entry) @ location: 35 - [ 6 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 35 - [ 6 - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 35 - [ 6 - 6 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 32 - [ 7 - 7 - 6 - 6 - { 3 ; 2 } ] - - DIP (entry) @ location: 36 - [ 7 - 7 - 6 - 6 - { 3 ; 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 7 - 6 - 6 - { 3 ; 2 } ] - - COMPARE (entry) @ location: 39 - [ 7 - 6 - 6 - { 3 ; 2 } ] - - log/LT (exit) @ location: 39 - [ 1 - 6 - { 3 ; 2 } ] - - LT (entry) @ location: 40 - [ 1 - 6 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 40 - [ False - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 38 - [ False - 6 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 7 - False - 6 - { 3 ; 2 } ] - - SWAP (entry) @ location: 41 - [ 7 - False - 6 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 41 - [ False - 7 - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 30 - [ False - 7 - 6 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 8 } - False - 7 - 6 - { 3 ; 2 } ] - - SWAP (entry) @ location: 42 - [ { 8 } - False - 7 - 6 - { 3 ; 2 } ] - - log/IF (exit) @ location: 42 - [ False - { 8 } - 7 - 6 - { 3 ; 2 } ] - - IF (entry) @ location: 43 - [ False - { 8 } - 7 - 6 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 43 - [ { 8 } - 7 - 6 - { 3 ; 2 } ] - - SWAP (entry) @ location: 55 - [ { 8 } - 7 - 6 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 55 - [ 7 - { 8 } - 6 - { 3 ; 2 } ] - - CONS (entry) @ location: 56 - [ 7 - { 8 } - 6 - { 3 ; 2 } ] - - log/PUSH (exit) @ location: 56 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - PUSH (entry) @ location: 57 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 57 - [ False - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 7 ; 8 } - 6 - { 3 ; 2 } ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - SWAP (entry) @ location: 66 - [ { 7 ; 8 } - 6 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 66 - [ 6 - { 7 ; 8 } - { 3 ; 2 } ] - - CONS (entry) @ location: 67 - [ 6 - { 7 ; 8 } - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 67 - [ { 6 ; 7 ; 8 } - { 3 ; 2 } ] - - SWAP (entry) @ location: 68 - [ { 6 ; 7 ; 8 } - { 3 ; 2 } ] - - log/ITER (exit) @ location: 68 - [ { 3 ; 2 } - { 6 ; 7 ; 8 } ] - - ITER (entry) @ location: 69 - [ { 3 ; 2 } - { 6 ; 7 ; 8 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 3 - { 6 ; 7 ; 8 } ] - - CONS (entry) @ location: 71 - [ 3 - { 6 ; 7 ; 8 } ] - - log/[halt] (exit) @ location: 71 - [ { 3 ; 6 ; 7 ; 8 } ] - - [halt] (entry) @ location: 69 - [ { 3 ; 6 ; 7 ; 8 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 2 - { 3 ; 6 ; 7 ; 8 } ] - - CONS (entry) @ location: 71 - [ 2 - { 3 ; 6 ; 7 ; 8 } ] - - log/[halt] (exit) @ location: 71 - [ { 2 ; 3 ; 6 ; 7 ; 8 } ] - - [halt] (entry) @ location: 69 - [ { 2 ; 3 ; 6 ; 7 ; 8 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 2 ; 3 ; 6 ; 7 ; 8 } ] - - [halt] (entry) @ location: 13 - [ { 2 ; 3 ; 6 ; 7 ; 8 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 9 - { 2 ; 3 ; 6 ; 7 ; 8 } ] - - SWAP (entry) @ location: 15 - [ 9 - { 2 ; 3 ; 6 ; 7 ; 8 } ] - - log/DIP (exit) @ location: 15 - [ { 2 ; 3 ; 6 ; 7 ; 8 } - 9 ] - - DIP (entry) @ location: 16 - [ { 2 ; 3 ; 6 ; 7 ; 8 } - 9 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 2 ; 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - PUSH (entry) @ location: 21 - [ { 2 ; 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 2 ; 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 2 ; 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 2 ; 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 2 ; 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - log/SWAP (exit) @ location: 26 - [ 2 - { 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - SWAP (entry) @ location: 28 - [ 2 - { 3 ; 6 ; 7 ; 8 } - 9 - {} ] - - log/DIP (exit) @ location: 28 - [ { 3 ; 6 ; 7 ; 8 } - 2 - 9 - {} ] - - DIP (entry) @ location: 29 - [ { 3 ; 6 ; 7 ; 8 } - 2 - 9 - {} ] - - log/DUP (exit) @ location: 29 - [ 2 - 9 - {} ] - - DUP (entry) @ location: 31 - [ 2 - 9 - {} ] - - log/DIP (exit) @ location: 31 - [ 2 - 2 - 9 - {} ] - - DIP (entry) @ location: 32 - [ 2 - 2 - 9 - {} ] - - log/DUP (exit) @ location: 32 - [ 9 - {} ] - - DUP (entry) @ location: 35 - [ 9 - {} ] - - log/[halt] (exit) @ location: 35 - [ 9 - 9 - {} ] - - [halt] (entry) @ location: 35 - [ 9 - 9 - {} ] - - log/DIP (exit) @ location: 32 - [ 2 - 2 - 9 - 9 - {} ] - - DIP (entry) @ location: 36 - [ 2 - 2 - 9 - 9 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 2 - 9 - 9 - {} ] - - COMPARE (entry) @ location: 39 - [ 2 - 9 - 9 - {} ] - - log/LT (exit) @ location: 39 - [ -1 - 9 - {} ] - - LT (entry) @ location: 40 - [ -1 - 9 - {} ] - - log/[halt] (exit) @ location: 40 - [ True - 9 - {} ] - - [halt] (entry) @ location: 38 - [ True - 9 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 2 - True - 9 - {} ] - - SWAP (entry) @ location: 41 - [ 2 - True - 9 - {} ] - - log/[halt] (exit) @ location: 41 - [ True - 2 - 9 - {} ] - - [halt] (entry) @ location: 30 - [ True - 2 - 9 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 3 ; 6 ; 7 ; 8 } - True - 2 - 9 - {} ] - - SWAP (entry) @ location: 42 - [ { 3 ; 6 ; 7 ; 8 } - True - 2 - 9 - {} ] - - log/IF (exit) @ location: 42 - [ True - { 3 ; 6 ; 7 ; 8 } - 2 - 9 - {} ] - - IF (entry) @ location: 43 - [ True - { 3 ; 6 ; 7 ; 8 } - 2 - 9 - {} ] - - log/DIP (exit) @ location: 43 - [ { 3 ; 6 ; 7 ; 8 } - 2 - 9 - {} ] - - DIP (entry) @ location: 45 - [ { 3 ; 6 ; 7 ; 8 } - 2 - 9 - {} ] - - log/SWAP (exit) @ location: 45 - [ 2 - 9 - {} ] - - SWAP (entry) @ location: 47 - [ 2 - 9 - {} ] - - log/DIP (exit) @ location: 47 - [ 9 - 2 - {} ] - - DIP (entry) @ location: 48 - [ 9 - 2 - {} ] - - log/CONS (exit) @ location: 48 - [ 2 - {} ] - - CONS (entry) @ location: 50 - [ 2 - {} ] - - log/[halt] (exit) @ location: 50 - [ { 2 } ] - - [halt] (entry) @ location: 50 - [ { 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 9 - { 2 } ] - - [halt] (entry) @ location: 46 - [ 9 - { 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - PUSH (entry) @ location: 51 - [ { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 3 ; 6 ; 7 ; 8 } - 9 - { 2 } ] - - log/SWAP (exit) @ location: 26 - [ 3 - { 6 ; 7 ; 8 } - 9 - { 2 } ] - - SWAP (entry) @ location: 28 - [ 3 - { 6 ; 7 ; 8 } - 9 - { 2 } ] - - log/DIP (exit) @ location: 28 - [ { 6 ; 7 ; 8 } - 3 - 9 - { 2 } ] - - DIP (entry) @ location: 29 - [ { 6 ; 7 ; 8 } - 3 - 9 - { 2 } ] - - log/DUP (exit) @ location: 29 - [ 3 - 9 - { 2 } ] - - DUP (entry) @ location: 31 - [ 3 - 9 - { 2 } ] - - log/DIP (exit) @ location: 31 - [ 3 - 3 - 9 - { 2 } ] - - DIP (entry) @ location: 32 - [ 3 - 3 - 9 - { 2 } ] - - log/DUP (exit) @ location: 32 - [ 9 - { 2 } ] - - DUP (entry) @ location: 35 - [ 9 - { 2 } ] - - log/[halt] (exit) @ location: 35 - [ 9 - 9 - { 2 } ] - - [halt] (entry) @ location: 35 - [ 9 - 9 - { 2 } ] - - log/DIP (exit) @ location: 32 - [ 3 - 3 - 9 - 9 - { 2 } ] - - DIP (entry) @ location: 36 - [ 3 - 3 - 9 - 9 - { 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 3 - 9 - 9 - { 2 } ] - - COMPARE (entry) @ location: 39 - [ 3 - 9 - 9 - { 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 9 - { 2 } ] - - LT (entry) @ location: 40 - [ -1 - 9 - { 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 9 - { 2 } ] - - [halt] (entry) @ location: 38 - [ True - 9 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 3 - True - 9 - { 2 } ] - - SWAP (entry) @ location: 41 - [ 3 - True - 9 - { 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 3 - 9 - { 2 } ] - - [halt] (entry) @ location: 30 - [ True - 3 - 9 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 6 ; 7 ; 8 } - True - 3 - 9 - { 2 } ] - - SWAP (entry) @ location: 42 - [ { 6 ; 7 ; 8 } - True - 3 - 9 - { 2 } ] - - log/IF (exit) @ location: 42 - [ True - { 6 ; 7 ; 8 } - 3 - 9 - { 2 } ] - - IF (entry) @ location: 43 - [ True - { 6 ; 7 ; 8 } - 3 - 9 - { 2 } ] - - log/DIP (exit) @ location: 43 - [ { 6 ; 7 ; 8 } - 3 - 9 - { 2 } ] - - DIP (entry) @ location: 45 - [ { 6 ; 7 ; 8 } - 3 - 9 - { 2 } ] - - log/SWAP (exit) @ location: 45 - [ 3 - 9 - { 2 } ] - - SWAP (entry) @ location: 47 - [ 3 - 9 - { 2 } ] - - log/DIP (exit) @ location: 47 - [ 9 - 3 - { 2 } ] - - DIP (entry) @ location: 48 - [ 9 - 3 - { 2 } ] - - log/CONS (exit) @ location: 48 - [ 3 - { 2 } ] - - CONS (entry) @ location: 50 - [ 3 - { 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 9 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 6 ; 7 ; 8 } - 9 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 26 - [ 6 - { 7 ; 8 } - 9 - { 3 ; 2 } ] - - SWAP (entry) @ location: 28 - [ 6 - { 7 ; 8 } - 9 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 28 - [ { 7 ; 8 } - 6 - 9 - { 3 ; 2 } ] - - DIP (entry) @ location: 29 - [ { 7 ; 8 } - 6 - 9 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 29 - [ 6 - 9 - { 3 ; 2 } ] - - DUP (entry) @ location: 31 - [ 6 - 9 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 31 - [ 6 - 6 - 9 - { 3 ; 2 } ] - - DIP (entry) @ location: 32 - [ 6 - 6 - 9 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 32 - [ 9 - { 3 ; 2 } ] - - DUP (entry) @ location: 35 - [ 9 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 35 - [ 9 - 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 35 - [ 9 - 9 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 32 - [ 6 - 6 - 9 - 9 - { 3 ; 2 } ] - - DIP (entry) @ location: 36 - [ 6 - 6 - 9 - 9 - { 3 ; 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 6 - 9 - 9 - { 3 ; 2 } ] - - COMPARE (entry) @ location: 39 - [ 6 - 9 - 9 - { 3 ; 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 9 - { 3 ; 2 } ] - - LT (entry) @ location: 40 - [ -1 - 9 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 38 - [ True - 9 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 6 - True - 9 - { 3 ; 2 } ] - - SWAP (entry) @ location: 41 - [ 6 - True - 9 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 6 - 9 - { 3 ; 2 } ] - - [halt] (entry) @ location: 30 - [ True - 6 - 9 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 7 ; 8 } - True - 6 - 9 - { 3 ; 2 } ] - - SWAP (entry) @ location: 42 - [ { 7 ; 8 } - True - 6 - 9 - { 3 ; 2 } ] - - log/IF (exit) @ location: 42 - [ True - { 7 ; 8 } - 6 - 9 - { 3 ; 2 } ] - - IF (entry) @ location: 43 - [ True - { 7 ; 8 } - 6 - 9 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 43 - [ { 7 ; 8 } - 6 - 9 - { 3 ; 2 } ] - - DIP (entry) @ location: 45 - [ { 7 ; 8 } - 6 - 9 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 45 - [ 6 - 9 - { 3 ; 2 } ] - - SWAP (entry) @ location: 47 - [ 6 - 9 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 47 - [ 9 - 6 - { 3 ; 2 } ] - - DIP (entry) @ location: 48 - [ 9 - 6 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 48 - [ 6 - { 3 ; 2 } ] - - CONS (entry) @ location: 50 - [ 6 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 9 - { 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 7 ; 8 } - 9 - { 6 ; 3 ; 2 } ] - - log/SWAP (exit) @ location: 26 - [ 7 - { 8 } - 9 - { 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 28 - [ 7 - { 8 } - 9 - { 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 28 - [ { 8 } - 7 - 9 - { 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 29 - [ { 8 } - 7 - 9 - { 6 ; 3 ; 2 } ] - - log/DUP (exit) @ location: 29 - [ 7 - 9 - { 6 ; 3 ; 2 } ] - - DUP (entry) @ location: 31 - [ 7 - 9 - { 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 31 - [ 7 - 7 - 9 - { 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 32 - [ 7 - 7 - 9 - { 6 ; 3 ; 2 } ] - - log/DUP (exit) @ location: 32 - [ 9 - { 6 ; 3 ; 2 } ] - - DUP (entry) @ location: 35 - [ 9 - { 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 35 - [ 9 - 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 35 - [ 9 - 9 - { 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 32 - [ 7 - 7 - 9 - 9 - { 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 36 - [ 7 - 7 - 9 - 9 - { 6 ; 3 ; 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 7 - 9 - 9 - { 6 ; 3 ; 2 } ] - - COMPARE (entry) @ location: 39 - [ 7 - 9 - 9 - { 6 ; 3 ; 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 9 - { 6 ; 3 ; 2 } ] - - LT (entry) @ location: 40 - [ -1 - 9 - { 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 38 - [ True - 9 - { 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 7 - True - 9 - { 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 41 - [ 7 - True - 9 - { 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 7 - 9 - { 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 30 - [ True - 7 - 9 - { 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 8 } - True - 7 - 9 - { 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 42 - [ { 8 } - True - 7 - 9 - { 6 ; 3 ; 2 } ] - - log/IF (exit) @ location: 42 - [ True - { 8 } - 7 - 9 - { 6 ; 3 ; 2 } ] - - IF (entry) @ location: 43 - [ True - { 8 } - 7 - 9 - { 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 43 - [ { 8 } - 7 - 9 - { 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 45 - [ { 8 } - 7 - 9 - { 6 ; 3 ; 2 } ] - - log/SWAP (exit) @ location: 45 - [ 7 - 9 - { 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 47 - [ 7 - 9 - { 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 47 - [ 9 - 7 - { 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 48 - [ 9 - 7 - { 6 ; 3 ; 2 } ] - - log/CONS (exit) @ location: 48 - [ 7 - { 6 ; 3 ; 2 } ] - - CONS (entry) @ location: 50 - [ 7 - { 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 7 ; 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 9 - { 7 ; 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 8 } - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/SWAP (exit) @ location: 26 - [ 8 - {} - 9 - { 7 ; 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 28 - [ 8 - {} - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 28 - [ {} - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 29 - [ {} - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DUP (exit) @ location: 29 - [ 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - DUP (entry) @ location: 31 - [ 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 31 - [ 8 - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 32 - [ 8 - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DUP (exit) @ location: 32 - [ 9 - { 7 ; 6 ; 3 ; 2 } ] - - DUP (entry) @ location: 35 - [ 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 35 - [ 9 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 35 - [ 9 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 32 - [ 8 - 8 - 9 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 36 - [ 8 - 8 - 9 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 8 - 9 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - COMPARE (entry) @ location: 39 - [ 8 - 9 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - LT (entry) @ location: 40 - [ -1 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 38 - [ True - 9 - { 7 ; 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 8 - True - 9 - { 7 ; 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 41 - [ 8 - True - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 30 - [ True - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ {} - True - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 42 - [ {} - True - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/IF (exit) @ location: 42 - [ True - {} - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - IF (entry) @ location: 43 - [ True - {} - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 43 - [ {} - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 45 - [ {} - 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/SWAP (exit) @ location: 45 - [ 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 47 - [ 8 - 9 - { 7 ; 6 ; 3 ; 2 } ] - - log/DIP (exit) @ location: 47 - [ 9 - 8 - { 7 ; 6 ; 3 ; 2 } ] - - DIP (entry) @ location: 48 - [ 9 - 8 - { 7 ; 6 ; 3 ; 2 } ] - - log/CONS (exit) @ location: 48 - [ 8 - { 7 ; 6 ; 3 ; 2 } ] - - CONS (entry) @ location: 50 - [ 8 - { 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/NIL (exit) @ location: 26 - [ 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - NIL (entry) @ location: 61 - [ 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/PUSH (exit) @ location: 61 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - PUSH (entry) @ location: 63 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/[halt] (exit) @ location: 63 - [ False - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 66 - [ {} - 9 - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/CONS (exit) @ location: 66 - [ 9 - {} - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - CONS (entry) @ location: 67 - [ 9 - {} - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/SWAP (exit) @ location: 67 - [ { 9 } - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - SWAP (entry) @ location: 68 - [ { 9 } - { 8 ; 7 ; 6 ; 3 ; 2 } ] - - log/ITER (exit) @ location: 68 - [ { 8 ; 7 ; 6 ; 3 ; 2 } - { 9 } ] - - ITER (entry) @ location: 69 - [ { 8 ; 7 ; 6 ; 3 ; 2 } - { 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 8 - { 9 } ] - - CONS (entry) @ location: 71 - [ 8 - { 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 7 - { 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 7 - { 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 6 - { 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 6 - { 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 3 - { 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 3 - { 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 3 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 3 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 2 - { 3 ; 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 2 - { 3 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 13 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 5 - { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } ] - - SWAP (entry) @ location: 15 - [ 5 - { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } ] - - log/DIP (exit) @ location: 15 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 ] - - DIP (entry) @ location: 16 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - PUSH (entry) @ location: 21 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 2 ; 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - log/SWAP (exit) @ location: 26 - [ 2 - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - SWAP (entry) @ location: 28 - [ 2 - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - {} ] - - log/DIP (exit) @ location: 28 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 2 - 5 - {} ] - - DIP (entry) @ location: 29 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 2 - 5 - {} ] - - log/DUP (exit) @ location: 29 - [ 2 - 5 - {} ] - - DUP (entry) @ location: 31 - [ 2 - 5 - {} ] - - log/DIP (exit) @ location: 31 - [ 2 - 2 - 5 - {} ] - - DIP (entry) @ location: 32 - [ 2 - 2 - 5 - {} ] - - log/DUP (exit) @ location: 32 - [ 5 - {} ] - - DUP (entry) @ location: 35 - [ 5 - {} ] - - log/[halt] (exit) @ location: 35 - [ 5 - 5 - {} ] - - [halt] (entry) @ location: 35 - [ 5 - 5 - {} ] - - log/DIP (exit) @ location: 32 - [ 2 - 2 - 5 - 5 - {} ] - - DIP (entry) @ location: 36 - [ 2 - 2 - 5 - 5 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 2 - 5 - 5 - {} ] - - COMPARE (entry) @ location: 39 - [ 2 - 5 - 5 - {} ] - - log/LT (exit) @ location: 39 - [ -1 - 5 - {} ] - - LT (entry) @ location: 40 - [ -1 - 5 - {} ] - - log/[halt] (exit) @ location: 40 - [ True - 5 - {} ] - - [halt] (entry) @ location: 38 - [ True - 5 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 2 - True - 5 - {} ] - - SWAP (entry) @ location: 41 - [ 2 - True - 5 - {} ] - - log/[halt] (exit) @ location: 41 - [ True - 2 - 5 - {} ] - - [halt] (entry) @ location: 30 - [ True - 2 - 5 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - True - 2 - 5 - {} ] - - SWAP (entry) @ location: 42 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - True - 2 - 5 - {} ] - - log/IF (exit) @ location: 42 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 2 - 5 - {} ] - - IF (entry) @ location: 43 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 2 - 5 - {} ] - - log/DIP (exit) @ location: 43 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 2 - 5 - {} ] - - DIP (entry) @ location: 45 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 2 - 5 - {} ] - - log/SWAP (exit) @ location: 45 - [ 2 - 5 - {} ] - - SWAP (entry) @ location: 47 - [ 2 - 5 - {} ] - - log/DIP (exit) @ location: 47 - [ 5 - 2 - {} ] - - DIP (entry) @ location: 48 - [ 5 - 2 - {} ] - - log/CONS (exit) @ location: 48 - [ 2 - {} ] - - CONS (entry) @ location: 50 - [ 2 - {} ] - - log/[halt] (exit) @ location: 50 - [ { 2 } ] - - [halt] (entry) @ location: 50 - [ { 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 5 - { 2 } ] - - [halt] (entry) @ location: 46 - [ 5 - { 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - PUSH (entry) @ location: 51 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 3 ; 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - log/SWAP (exit) @ location: 26 - [ 3 - { 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - SWAP (entry) @ location: 28 - [ 3 - { 6 ; 7 ; 8 ; 9 } - 5 - { 2 } ] - - log/DIP (exit) @ location: 28 - [ { 6 ; 7 ; 8 ; 9 } - 3 - 5 - { 2 } ] - - DIP (entry) @ location: 29 - [ { 6 ; 7 ; 8 ; 9 } - 3 - 5 - { 2 } ] - - log/DUP (exit) @ location: 29 - [ 3 - 5 - { 2 } ] - - DUP (entry) @ location: 31 - [ 3 - 5 - { 2 } ] - - log/DIP (exit) @ location: 31 - [ 3 - 3 - 5 - { 2 } ] - - DIP (entry) @ location: 32 - [ 3 - 3 - 5 - { 2 } ] - - log/DUP (exit) @ location: 32 - [ 5 - { 2 } ] - - DUP (entry) @ location: 35 - [ 5 - { 2 } ] - - log/[halt] (exit) @ location: 35 - [ 5 - 5 - { 2 } ] - - [halt] (entry) @ location: 35 - [ 5 - 5 - { 2 } ] - - log/DIP (exit) @ location: 32 - [ 3 - 3 - 5 - 5 - { 2 } ] - - DIP (entry) @ location: 36 - [ 3 - 3 - 5 - 5 - { 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 3 - 5 - 5 - { 2 } ] - - COMPARE (entry) @ location: 39 - [ 3 - 5 - 5 - { 2 } ] - - log/LT (exit) @ location: 39 - [ -1 - 5 - { 2 } ] - - LT (entry) @ location: 40 - [ -1 - 5 - { 2 } ] - - log/[halt] (exit) @ location: 40 - [ True - 5 - { 2 } ] - - [halt] (entry) @ location: 38 - [ True - 5 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 3 - True - 5 - { 2 } ] - - SWAP (entry) @ location: 41 - [ 3 - True - 5 - { 2 } ] - - log/[halt] (exit) @ location: 41 - [ True - 3 - 5 - { 2 } ] - - [halt] (entry) @ location: 30 - [ True - 3 - 5 - { 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 6 ; 7 ; 8 ; 9 } - True - 3 - 5 - { 2 } ] - - SWAP (entry) @ location: 42 - [ { 6 ; 7 ; 8 ; 9 } - True - 3 - 5 - { 2 } ] - - log/IF (exit) @ location: 42 - [ True - { 6 ; 7 ; 8 ; 9 } - 3 - 5 - { 2 } ] - - IF (entry) @ location: 43 - [ True - { 6 ; 7 ; 8 ; 9 } - 3 - 5 - { 2 } ] - - log/DIP (exit) @ location: 43 - [ { 6 ; 7 ; 8 ; 9 } - 3 - 5 - { 2 } ] - - DIP (entry) @ location: 45 - [ { 6 ; 7 ; 8 ; 9 } - 3 - 5 - { 2 } ] - - log/SWAP (exit) @ location: 45 - [ 3 - 5 - { 2 } ] - - SWAP (entry) @ location: 47 - [ 3 - 5 - { 2 } ] - - log/DIP (exit) @ location: 47 - [ 5 - 3 - { 2 } ] - - DIP (entry) @ location: 48 - [ 5 - 3 - { 2 } ] - - log/CONS (exit) @ location: 48 - [ 3 - { 2 } ] - - CONS (entry) @ location: 50 - [ 3 - { 2 } ] - - log/[halt] (exit) @ location: 50 - [ { 3 ; 2 } ] - - [halt] (entry) @ location: 50 - [ { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 46 - [ 5 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - PUSH (entry) @ location: 51 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ True - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - IF_CONS (entry) @ location: 26 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 26 - [ 6 - { 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - SWAP (entry) @ location: 28 - [ 6 - { 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 28 - [ { 7 ; 8 ; 9 } - 6 - 5 - { 3 ; 2 } ] - - DIP (entry) @ location: 29 - [ { 7 ; 8 ; 9 } - 6 - 5 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 29 - [ 6 - 5 - { 3 ; 2 } ] - - DUP (entry) @ location: 31 - [ 6 - 5 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 31 - [ 6 - 6 - 5 - { 3 ; 2 } ] - - DIP (entry) @ location: 32 - [ 6 - 6 - 5 - { 3 ; 2 } ] - - log/DUP (exit) @ location: 32 - [ 5 - { 3 ; 2 } ] - - DUP (entry) @ location: 35 - [ 5 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 35 - [ 5 - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 35 - [ 5 - 5 - { 3 ; 2 } ] - - log/DIP (exit) @ location: 32 - [ 6 - 6 - 5 - 5 - { 3 ; 2 } ] - - DIP (entry) @ location: 36 - [ 6 - 6 - 5 - 5 - { 3 ; 2 } ] - - log/COMPARE (exit) @ location: 36 - [ 6 - 5 - 5 - { 3 ; 2 } ] - - COMPARE (entry) @ location: 39 - [ 6 - 5 - 5 - { 3 ; 2 } ] - - log/LT (exit) @ location: 39 - [ 1 - 5 - { 3 ; 2 } ] - - LT (entry) @ location: 40 - [ 1 - 5 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 40 - [ False - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 38 - [ False - 5 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 6 - False - 5 - { 3 ; 2 } ] - - SWAP (entry) @ location: 41 - [ 6 - False - 5 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 41 - [ False - 6 - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 30 - [ False - 6 - 5 - { 3 ; 2 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 7 ; 8 ; 9 } - False - 6 - 5 - { 3 ; 2 } ] - - SWAP (entry) @ location: 42 - [ { 7 ; 8 ; 9 } - False - 6 - 5 - { 3 ; 2 } ] - - log/IF (exit) @ location: 42 - [ False - { 7 ; 8 ; 9 } - 6 - 5 - { 3 ; 2 } ] - - IF (entry) @ location: 43 - [ False - { 7 ; 8 ; 9 } - 6 - 5 - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 43 - [ { 7 ; 8 ; 9 } - 6 - 5 - { 3 ; 2 } ] - - SWAP (entry) @ location: 55 - [ { 7 ; 8 ; 9 } - 6 - 5 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 55 - [ 6 - { 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - CONS (entry) @ location: 56 - [ 6 - { 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - log/PUSH (exit) @ location: 56 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - PUSH (entry) @ location: 57 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - log/[halt] (exit) @ location: 57 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - [halt] (entry) @ location: 66 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - SWAP (entry) @ location: 66 - [ { 6 ; 7 ; 8 ; 9 } - 5 - { 3 ; 2 } ] - - log/CONS (exit) @ location: 66 - [ 5 - { 6 ; 7 ; 8 ; 9 } - { 3 ; 2 } ] - - CONS (entry) @ location: 67 - [ 5 - { 6 ; 7 ; 8 ; 9 } - { 3 ; 2 } ] - - log/SWAP (exit) @ location: 67 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - { 3 ; 2 } ] - - SWAP (entry) @ location: 68 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - { 3 ; 2 } ] - - log/ITER (exit) @ location: 68 - [ { 3 ; 2 } - { 5 ; 6 ; 7 ; 8 ; 9 } ] - - ITER (entry) @ location: 69 - [ { 3 ; 2 } - { 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 3 - { 5 ; 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 3 - { 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 13 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 1 - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - SWAP (entry) @ location: 15 - [ 1 - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/DIP (exit) @ location: 15 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 ] - - DIP (entry) @ location: 16 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - PUSH (entry) @ location: 21 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - log/SWAP (exit) @ location: 26 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - SWAP (entry) @ location: 28 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - log/DIP (exit) @ location: 28 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 1 - {} ] - - DIP (entry) @ location: 29 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 1 - {} ] - - log/DUP (exit) @ location: 29 - [ 2 - 1 - {} ] - - DUP (entry) @ location: 31 - [ 2 - 1 - {} ] - - log/DIP (exit) @ location: 31 - [ 2 - 2 - 1 - {} ] - - DIP (entry) @ location: 32 - [ 2 - 2 - 1 - {} ] - - log/DUP (exit) @ location: 32 - [ 1 - {} ] - - DUP (entry) @ location: 35 - [ 1 - {} ] - - log/[halt] (exit) @ location: 35 - [ 1 - 1 - {} ] - - [halt] (entry) @ location: 35 - [ 1 - 1 - {} ] - - log/DIP (exit) @ location: 32 - [ 2 - 2 - 1 - 1 - {} ] - - DIP (entry) @ location: 36 - [ 2 - 2 - 1 - 1 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 2 - 1 - 1 - {} ] - - COMPARE (entry) @ location: 39 - [ 2 - 1 - 1 - {} ] - - log/LT (exit) @ location: 39 - [ 1 - 1 - {} ] - - LT (entry) @ location: 40 - [ 1 - 1 - {} ] - - log/[halt] (exit) @ location: 40 - [ False - 1 - {} ] - - [halt] (entry) @ location: 38 - [ False - 1 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 2 - False - 1 - {} ] - - SWAP (entry) @ location: 41 - [ 2 - False - 1 - {} ] - - log/[halt] (exit) @ location: 41 - [ False - 2 - 1 - {} ] - - [halt] (entry) @ location: 30 - [ False - 2 - 1 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - False - 2 - 1 - {} ] - - SWAP (entry) @ location: 42 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - False - 2 - 1 - {} ] - - log/IF (exit) @ location: 42 - [ False - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 1 - {} ] - - IF (entry) @ location: 43 - [ False - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 1 - {} ] - - log/SWAP (exit) @ location: 43 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 1 - {} ] - - SWAP (entry) @ location: 55 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 1 - {} ] - - log/CONS (exit) @ location: 55 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - CONS (entry) @ location: 56 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - log/PUSH (exit) @ location: 56 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - PUSH (entry) @ location: 57 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - log/[halt] (exit) @ location: 57 - [ False - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - SWAP (entry) @ location: 66 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - {} ] - - log/CONS (exit) @ location: 66 - [ 1 - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - CONS (entry) @ location: 67 - [ 1 - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - log/SWAP (exit) @ location: 67 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - SWAP (entry) @ location: 68 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - log/ITER (exit) @ location: 68 - [ {} - { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - ITER (entry) @ location: 69 - [ {} - { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 13 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 4 - { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - SWAP (entry) @ location: 15 - [ 4 - { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/DIP (exit) @ location: 15 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 ] - - DIP (entry) @ location: 16 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - PUSH (entry) @ location: 21 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 1 ; 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - log/SWAP (exit) @ location: 26 - [ 1 - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - SWAP (entry) @ location: 28 - [ 1 - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - {} ] - - log/DIP (exit) @ location: 28 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 4 - {} ] - - DIP (entry) @ location: 29 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 4 - {} ] - - log/DUP (exit) @ location: 29 - [ 1 - 4 - {} ] - - DUP (entry) @ location: 31 - [ 1 - 4 - {} ] - - log/DIP (exit) @ location: 31 - [ 1 - 1 - 4 - {} ] - - DIP (entry) @ location: 32 - [ 1 - 1 - 4 - {} ] - - log/DUP (exit) @ location: 32 - [ 4 - {} ] - - DUP (entry) @ location: 35 - [ 4 - {} ] - - log/[halt] (exit) @ location: 35 - [ 4 - 4 - {} ] - - [halt] (entry) @ location: 35 - [ 4 - 4 - {} ] - - log/DIP (exit) @ location: 32 - [ 1 - 1 - 4 - 4 - {} ] - - DIP (entry) @ location: 36 - [ 1 - 1 - 4 - 4 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 1 - 4 - 4 - {} ] - - COMPARE (entry) @ location: 39 - [ 1 - 4 - 4 - {} ] - - log/LT (exit) @ location: 39 - [ -1 - 4 - {} ] - - LT (entry) @ location: 40 - [ -1 - 4 - {} ] - - log/[halt] (exit) @ location: 40 - [ True - 4 - {} ] - - [halt] (entry) @ location: 38 - [ True - 4 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 1 - True - 4 - {} ] - - SWAP (entry) @ location: 41 - [ 1 - True - 4 - {} ] - - log/[halt] (exit) @ location: 41 - [ True - 1 - 4 - {} ] - - [halt] (entry) @ location: 30 - [ True - 1 - 4 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - True - 1 - 4 - {} ] - - SWAP (entry) @ location: 42 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - True - 1 - 4 - {} ] - - log/IF (exit) @ location: 42 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 4 - {} ] - - IF (entry) @ location: 43 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 4 - {} ] - - log/DIP (exit) @ location: 43 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 4 - {} ] - - DIP (entry) @ location: 45 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 4 - {} ] - - log/SWAP (exit) @ location: 45 - [ 1 - 4 - {} ] - - SWAP (entry) @ location: 47 - [ 1 - 4 - {} ] - - log/DIP (exit) @ location: 47 - [ 4 - 1 - {} ] - - DIP (entry) @ location: 48 - [ 4 - 1 - {} ] - - log/CONS (exit) @ location: 48 - [ 1 - {} ] - - CONS (entry) @ location: 50 - [ 1 - {} ] - - log/[halt] (exit) @ location: 50 - [ { 1 } ] - - [halt] (entry) @ location: 50 - [ { 1 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 4 - { 1 } ] - - [halt] (entry) @ location: 46 - [ 4 - { 1 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - PUSH (entry) @ location: 51 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - IF_CONS (entry) @ location: 26 - [ { 2 ; 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - log/SWAP (exit) @ location: 26 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - SWAP (entry) @ location: 28 - [ 2 - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 1 } ] - - log/DIP (exit) @ location: 28 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 4 - { 1 } ] - - DIP (entry) @ location: 29 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 4 - { 1 } ] - - log/DUP (exit) @ location: 29 - [ 2 - 4 - { 1 } ] - - DUP (entry) @ location: 31 - [ 2 - 4 - { 1 } ] - - log/DIP (exit) @ location: 31 - [ 2 - 2 - 4 - { 1 } ] - - DIP (entry) @ location: 32 - [ 2 - 2 - 4 - { 1 } ] - - log/DUP (exit) @ location: 32 - [ 4 - { 1 } ] - - DUP (entry) @ location: 35 - [ 4 - { 1 } ] - - log/[halt] (exit) @ location: 35 - [ 4 - 4 - { 1 } ] - - [halt] (entry) @ location: 35 - [ 4 - 4 - { 1 } ] - - log/DIP (exit) @ location: 32 - [ 2 - 2 - 4 - 4 - { 1 } ] - - DIP (entry) @ location: 36 - [ 2 - 2 - 4 - 4 - { 1 } ] - - log/COMPARE (exit) @ location: 36 - [ 2 - 4 - 4 - { 1 } ] - - COMPARE (entry) @ location: 39 - [ 2 - 4 - 4 - { 1 } ] - - log/LT (exit) @ location: 39 - [ -1 - 4 - { 1 } ] - - LT (entry) @ location: 40 - [ -1 - 4 - { 1 } ] - - log/[halt] (exit) @ location: 40 - [ True - 4 - { 1 } ] - - [halt] (entry) @ location: 38 - [ True - 4 - { 1 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 2 - True - 4 - { 1 } ] - - SWAP (entry) @ location: 41 - [ 2 - True - 4 - { 1 } ] - - log/[halt] (exit) @ location: 41 - [ True - 2 - 4 - { 1 } ] - - [halt] (entry) @ location: 30 - [ True - 2 - 4 - { 1 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - True - 2 - 4 - { 1 } ] - - SWAP (entry) @ location: 42 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - True - 2 - 4 - { 1 } ] - - log/IF (exit) @ location: 42 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 4 - { 1 } ] - - IF (entry) @ location: 43 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 4 - { 1 } ] - - log/DIP (exit) @ location: 43 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 4 - { 1 } ] - - DIP (entry) @ location: 45 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 2 - 4 - { 1 } ] - - log/SWAP (exit) @ location: 45 - [ 2 - 4 - { 1 } ] - - SWAP (entry) @ location: 47 - [ 2 - 4 - { 1 } ] - - log/DIP (exit) @ location: 47 - [ 4 - 2 - { 1 } ] - - DIP (entry) @ location: 48 - [ 4 - 2 - { 1 } ] - - log/CONS (exit) @ location: 48 - [ 2 - { 1 } ] - - CONS (entry) @ location: 50 - [ 2 - { 1 } ] - - log/[halt] (exit) @ location: 50 - [ { 2 ; 1 } ] - - [halt] (entry) @ location: 50 - [ { 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 46 - [ 4 - { 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - PUSH (entry) @ location: 51 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - IF_CONS (entry) @ location: 26 - [ { 3 ; 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - log/SWAP (exit) @ location: 26 - [ 3 - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - SWAP (entry) @ location: 28 - [ 3 - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 2 ; 1 } ] - - log/DIP (exit) @ location: 28 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 3 - 4 - { 2 ; 1 } ] - - DIP (entry) @ location: 29 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 3 - 4 - { 2 ; 1 } ] - - log/DUP (exit) @ location: 29 - [ 3 - 4 - { 2 ; 1 } ] - - DUP (entry) @ location: 31 - [ 3 - 4 - { 2 ; 1 } ] - - log/DIP (exit) @ location: 31 - [ 3 - 3 - 4 - { 2 ; 1 } ] - - DIP (entry) @ location: 32 - [ 3 - 3 - 4 - { 2 ; 1 } ] - - log/DUP (exit) @ location: 32 - [ 4 - { 2 ; 1 } ] - - DUP (entry) @ location: 35 - [ 4 - { 2 ; 1 } ] - - log/[halt] (exit) @ location: 35 - [ 4 - 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 35 - [ 4 - 4 - { 2 ; 1 } ] - - log/DIP (exit) @ location: 32 - [ 3 - 3 - 4 - 4 - { 2 ; 1 } ] - - DIP (entry) @ location: 36 - [ 3 - 3 - 4 - 4 - { 2 ; 1 } ] - - log/COMPARE (exit) @ location: 36 - [ 3 - 4 - 4 - { 2 ; 1 } ] - - COMPARE (entry) @ location: 39 - [ 3 - 4 - 4 - { 2 ; 1 } ] - - log/LT (exit) @ location: 39 - [ -1 - 4 - { 2 ; 1 } ] - - LT (entry) @ location: 40 - [ -1 - 4 - { 2 ; 1 } ] - - log/[halt] (exit) @ location: 40 - [ True - 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 38 - [ True - 4 - { 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 3 - True - 4 - { 2 ; 1 } ] - - SWAP (entry) @ location: 41 - [ 3 - True - 4 - { 2 ; 1 } ] - - log/[halt] (exit) @ location: 41 - [ True - 3 - 4 - { 2 ; 1 } ] - - [halt] (entry) @ location: 30 - [ True - 3 - 4 - { 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - True - 3 - 4 - { 2 ; 1 } ] - - SWAP (entry) @ location: 42 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - True - 3 - 4 - { 2 ; 1 } ] - - log/IF (exit) @ location: 42 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 3 - 4 - { 2 ; 1 } ] - - IF (entry) @ location: 43 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 3 - 4 - { 2 ; 1 } ] - - log/DIP (exit) @ location: 43 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 3 - 4 - { 2 ; 1 } ] - - DIP (entry) @ location: 45 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 3 - 4 - { 2 ; 1 } ] - - log/SWAP (exit) @ location: 45 - [ 3 - 4 - { 2 ; 1 } ] - - SWAP (entry) @ location: 47 - [ 3 - 4 - { 2 ; 1 } ] - - log/DIP (exit) @ location: 47 - [ 4 - 3 - { 2 ; 1 } ] - - DIP (entry) @ location: 48 - [ 4 - 3 - { 2 ; 1 } ] - - log/CONS (exit) @ location: 48 - [ 3 - { 2 ; 1 } ] - - CONS (entry) @ location: 50 - [ 3 - { 2 ; 1 } ] - - log/[halt] (exit) @ location: 50 - [ { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 50 - [ { 3 ; 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 48 - [ 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 46 - [ 4 - { 3 ; 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 45 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - PUSH (entry) @ location: 51 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - log/[halt] (exit) @ location: 51 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ True - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - IF_CONS (entry) @ location: 26 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - log/SWAP (exit) @ location: 26 - [ 5 - { 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - SWAP (entry) @ location: 28 - [ 5 - { 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - log/DIP (exit) @ location: 28 - [ { 6 ; 7 ; 8 ; 9 } - 5 - 4 - { 3 ; 2 ; 1 } ] - - DIP (entry) @ location: 29 - [ { 6 ; 7 ; 8 ; 9 } - 5 - 4 - { 3 ; 2 ; 1 } ] - - log/DUP (exit) @ location: 29 - [ 5 - 4 - { 3 ; 2 ; 1 } ] - - DUP (entry) @ location: 31 - [ 5 - 4 - { 3 ; 2 ; 1 } ] - - log/DIP (exit) @ location: 31 - [ 5 - 5 - 4 - { 3 ; 2 ; 1 } ] - - DIP (entry) @ location: 32 - [ 5 - 5 - 4 - { 3 ; 2 ; 1 } ] - - log/DUP (exit) @ location: 32 - [ 4 - { 3 ; 2 ; 1 } ] - - DUP (entry) @ location: 35 - [ 4 - { 3 ; 2 ; 1 } ] - - log/[halt] (exit) @ location: 35 - [ 4 - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 35 - [ 4 - 4 - { 3 ; 2 ; 1 } ] - - log/DIP (exit) @ location: 32 - [ 5 - 5 - 4 - 4 - { 3 ; 2 ; 1 } ] - - DIP (entry) @ location: 36 - [ 5 - 5 - 4 - 4 - { 3 ; 2 ; 1 } ] - - log/COMPARE (exit) @ location: 36 - [ 5 - 4 - 4 - { 3 ; 2 ; 1 } ] - - COMPARE (entry) @ location: 39 - [ 5 - 4 - 4 - { 3 ; 2 ; 1 } ] - - log/LT (exit) @ location: 39 - [ 1 - 4 - { 3 ; 2 ; 1 } ] - - LT (entry) @ location: 40 - [ 1 - 4 - { 3 ; 2 ; 1 } ] - - log/[halt] (exit) @ location: 40 - [ False - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 38 - [ False - 4 - { 3 ; 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 5 - False - 4 - { 3 ; 2 ; 1 } ] - - SWAP (entry) @ location: 41 - [ 5 - False - 4 - { 3 ; 2 ; 1 } ] - - log/[halt] (exit) @ location: 41 - [ False - 5 - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 30 - [ False - 5 - 4 - { 3 ; 2 ; 1 } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 6 ; 7 ; 8 ; 9 } - False - 5 - 4 - { 3 ; 2 ; 1 } ] - - SWAP (entry) @ location: 42 - [ { 6 ; 7 ; 8 ; 9 } - False - 5 - 4 - { 3 ; 2 ; 1 } ] - - log/IF (exit) @ location: 42 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - 4 - { 3 ; 2 ; 1 } ] - - IF (entry) @ location: 43 - [ False - { 6 ; 7 ; 8 ; 9 } - 5 - 4 - { 3 ; 2 ; 1 } ] - - log/SWAP (exit) @ location: 43 - [ { 6 ; 7 ; 8 ; 9 } - 5 - 4 - { 3 ; 2 ; 1 } ] - - SWAP (entry) @ location: 55 - [ { 6 ; 7 ; 8 ; 9 } - 5 - 4 - { 3 ; 2 ; 1 } ] - - log/CONS (exit) @ location: 55 - [ 5 - { 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - CONS (entry) @ location: 56 - [ 5 - { 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - log/PUSH (exit) @ location: 56 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - PUSH (entry) @ location: 57 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - log/[halt] (exit) @ location: 57 - [ False - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ False - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ False - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - [halt] (entry) @ location: 66 - [ False - { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - SWAP (entry) @ location: 66 - [ { 5 ; 6 ; 7 ; 8 ; 9 } - 4 - { 3 ; 2 ; 1 } ] - - log/CONS (exit) @ location: 66 - [ 4 - { 5 ; 6 ; 7 ; 8 ; 9 } - { 3 ; 2 ; 1 } ] - - CONS (entry) @ location: 67 - [ 4 - { 5 ; 6 ; 7 ; 8 ; 9 } - { 3 ; 2 ; 1 } ] - - log/SWAP (exit) @ location: 67 - [ { 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - { 3 ; 2 ; 1 } ] - - SWAP (entry) @ location: 68 - [ { 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - { 3 ; 2 ; 1 } ] - - log/ITER (exit) @ location: 68 - [ { 3 ; 2 ; 1 } - { 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - ITER (entry) @ location: 69 - [ { 3 ; 2 ; 1 } - { 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 3 - { 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 3 - { 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 2 - { 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 2 - { 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/CONS (exit) @ location: 69 - [ 1 - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - CONS (entry) @ location: 71 - [ 1 - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 71 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 69 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 13 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - log/SWAP (exit) @ location: 13 - [ 0 - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - SWAP (entry) @ location: 15 - [ 0 - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/DIP (exit) @ location: 15 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 ] - - DIP (entry) @ location: 16 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 ] - - log/NIL (exit) @ location: 16 - [ ] - - NIL (entry) @ location: 19 - [ ] - - log/[halt] (exit) @ location: 19 - [ {} ] - - [halt] (entry) @ location: 19 - [ {} ] - - log/PUSH (exit) @ location: 16 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - PUSH (entry) @ location: 21 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - log/LOOP (exit) @ location: 21 - [ True - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - LOOP (entry) @ location: 66 - [ True - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 66 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - IF_CONS (entry) @ location: 26 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - log/SWAP (exit) @ location: 26 - [ 1 - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - SWAP (entry) @ location: 28 - [ 1 - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - log/DIP (exit) @ location: 28 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 0 - {} ] - - DIP (entry) @ location: 29 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 0 - {} ] - - log/DUP (exit) @ location: 29 - [ 1 - 0 - {} ] - - DUP (entry) @ location: 31 - [ 1 - 0 - {} ] - - log/DIP (exit) @ location: 31 - [ 1 - 1 - 0 - {} ] - - DIP (entry) @ location: 32 - [ 1 - 1 - 0 - {} ] - - log/DUP (exit) @ location: 32 - [ 0 - {} ] - - DUP (entry) @ location: 35 - [ 0 - {} ] - - log/[halt] (exit) @ location: 35 - [ 0 - 0 - {} ] - - [halt] (entry) @ location: 35 - [ 0 - 0 - {} ] - - log/DIP (exit) @ location: 32 - [ 1 - 1 - 0 - 0 - {} ] - - DIP (entry) @ location: 36 - [ 1 - 1 - 0 - 0 - {} ] - - log/COMPARE (exit) @ location: 36 - [ 1 - 0 - 0 - {} ] - - COMPARE (entry) @ location: 39 - [ 1 - 0 - 0 - {} ] - - log/LT (exit) @ location: 39 - [ 1 - 0 - {} ] - - LT (entry) @ location: 40 - [ 1 - 0 - {} ] - - log/[halt] (exit) @ location: 40 - [ False - 0 - {} ] - - [halt] (entry) @ location: 38 - [ False - 0 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 36 - [ 1 - False - 0 - {} ] - - SWAP (entry) @ location: 41 - [ 1 - False - 0 - {} ] - - log/[halt] (exit) @ location: 41 - [ False - 1 - 0 - {} ] - - [halt] (entry) @ location: 30 - [ False - 1 - 0 - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 29 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - False - 1 - 0 - {} ] - - SWAP (entry) @ location: 42 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - False - 1 - 0 - {} ] - - log/IF (exit) @ location: 42 - [ False - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 0 - {} ] - - IF (entry) @ location: 43 - [ False - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 0 - {} ] - - log/SWAP (exit) @ location: 43 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 0 - {} ] - - SWAP (entry) @ location: 55 - [ { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 1 - 0 - {} ] - - log/CONS (exit) @ location: 55 - [ 1 - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - CONS (entry) @ location: 56 - [ 1 - { 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - log/PUSH (exit) @ location: 56 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - PUSH (entry) @ location: 57 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - log/[halt] (exit) @ location: 57 - [ False - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 43 - [ False - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - control: KCons - - log/[halt] (exit) @ location: 26 - [ False - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - [halt] (entry) @ location: 66 - [ False - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - control: KLoop_in - - control: KCons - - log/SWAP (exit) @ location: 66 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - SWAP (entry) @ location: 66 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - 0 - {} ] - - log/CONS (exit) @ location: 66 - [ 0 - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - CONS (entry) @ location: 67 - [ 0 - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - log/SWAP (exit) @ location: 67 - [ { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - SWAP (entry) @ location: 68 - [ { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } - {} ] - - log/ITER (exit) @ location: 68 - [ {} - { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - ITER (entry) @ location: 69 - [ {} - { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - control: KCons - - log/[halt] (exit) @ location: 69 - [ { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - [halt] (entry) @ location: 13 - [ { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - control: KIter - - control: KCons - - log/NIL (exit) @ location: 13 - [ { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - NIL (entry) @ location: 72 - [ { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/PAIR (exit) @ location: 72 - [ {} - { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - PAIR (entry) @ location: 74 - [ {} - { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 } ] - - log/[halt] (exit) @ location: 74 - [ (Pair {} { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 }) ] - - [halt] (entry) @ location: 8 - [ (Pair {} { 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/list_map_block.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/list_map_block.out deleted file mode 100644 index 202f29541787ef38dc38cec05643243ff54c1761..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/list_map_block.out +++ /dev/null @@ -1,451 +0,0 @@ - -trace - - CAR (interp) @ location: 9 - [ (Pair { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } {}) ] - - CAR (entry) @ location: 9 - [ (Pair { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } {}) ] - - log/PUSH (exit) @ location: 9 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } ] - - PUSH (entry) @ location: 10 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } ] - - log/SWAP (exit) @ location: 10 - [ 0 - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } ] - - SWAP (entry) @ location: 13 - [ 0 - { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } ] - - log/MAP (exit) @ location: 13 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } - 0 ] - - MAP (entry) @ location: 14 - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 } - 0 ] - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 1 - 0 ] - - DIP (entry) @ location: 16 - [ 1 - 0 ] - - log/DUP (exit) @ location: 16 - [ 0 ] - - DUP (entry) @ location: 18 - [ 0 ] - - log/[halt] (exit) @ location: 18 - [ 0 - 0 ] - - [halt] (entry) @ location: 18 - [ 0 - 0 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 1 - 0 - 0 ] - - ADD (entry) @ location: 19 - [ 1 - 0 - 0 ] - - log/DIP (exit) @ location: 19 - [ 1 - 0 ] - - DIP (entry) @ location: 20 - [ 1 - 0 ] - - log/PUSH (exit) @ location: 20 - [ 0 ] - - PUSH (entry) @ location: 22 - [ 0 ] - - log/ADD (exit) @ location: 22 - [ 1 - 0 ] - - ADD (entry) @ location: 25 - [ 1 - 0 ] - - log/[halt] (exit) @ location: 25 - [ 1 ] - - [halt] (entry) @ location: 21 - [ 1 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 1 - 1 ] - - [halt] (entry) @ location: 14 - [ 1 - 1 ] - - control: KList_exit_body - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 2 - 1 ] - - DIP (entry) @ location: 16 - [ 2 - 1 ] - - log/DUP (exit) @ location: 16 - [ 1 ] - - DUP (entry) @ location: 18 - [ 1 ] - - log/[halt] (exit) @ location: 18 - [ 1 - 1 ] - - [halt] (entry) @ location: 18 - [ 1 - 1 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 2 - 1 - 1 ] - - ADD (entry) @ location: 19 - [ 2 - 1 - 1 ] - - log/DIP (exit) @ location: 19 - [ 3 - 1 ] - - DIP (entry) @ location: 20 - [ 3 - 1 ] - - log/PUSH (exit) @ location: 20 - [ 1 ] - - PUSH (entry) @ location: 22 - [ 1 ] - - log/ADD (exit) @ location: 22 - [ 1 - 1 ] - - ADD (entry) @ location: 25 - [ 1 - 1 ] - - log/[halt] (exit) @ location: 25 - [ 2 ] - - [halt] (entry) @ location: 21 - [ 2 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 3 - 2 ] - - [halt] (entry) @ location: 14 - [ 3 - 2 ] - - control: KList_exit_body - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 3 - 2 ] - - DIP (entry) @ location: 16 - [ 3 - 2 ] - - log/DUP (exit) @ location: 16 - [ 2 ] - - DUP (entry) @ location: 18 - [ 2 ] - - log/[halt] (exit) @ location: 18 - [ 2 - 2 ] - - [halt] (entry) @ location: 18 - [ 2 - 2 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 3 - 2 - 2 ] - - ADD (entry) @ location: 19 - [ 3 - 2 - 2 ] - - log/DIP (exit) @ location: 19 - [ 5 - 2 ] - - DIP (entry) @ location: 20 - [ 5 - 2 ] - - log/PUSH (exit) @ location: 20 - [ 2 ] - - PUSH (entry) @ location: 22 - [ 2 ] - - log/ADD (exit) @ location: 22 - [ 1 - 2 ] - - ADD (entry) @ location: 25 - [ 1 - 2 ] - - log/[halt] (exit) @ location: 25 - [ 3 ] - - [halt] (entry) @ location: 21 - [ 3 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 5 - 3 ] - - [halt] (entry) @ location: 14 - [ 5 - 3 ] - - control: KList_exit_body - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 4 - 3 ] - - DIP (entry) @ location: 16 - [ 4 - 3 ] - - log/DUP (exit) @ location: 16 - [ 3 ] - - DUP (entry) @ location: 18 - [ 3 ] - - log/[halt] (exit) @ location: 18 - [ 3 - 3 ] - - [halt] (entry) @ location: 18 - [ 3 - 3 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 4 - 3 - 3 ] - - ADD (entry) @ location: 19 - [ 4 - 3 - 3 ] - - log/DIP (exit) @ location: 19 - [ 7 - 3 ] - - DIP (entry) @ location: 20 - [ 7 - 3 ] - - log/PUSH (exit) @ location: 20 - [ 3 ] - - PUSH (entry) @ location: 22 - [ 3 ] - - log/ADD (exit) @ location: 22 - [ 1 - 3 ] - - ADD (entry) @ location: 25 - [ 1 - 3 ] - - log/[halt] (exit) @ location: 25 - [ 4 ] - - [halt] (entry) @ location: 21 - [ 4 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 7 - 4 ] - - [halt] (entry) @ location: 14 - [ 7 - 4 ] - - control: KList_exit_body - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 5 - 4 ] - - DIP (entry) @ location: 16 - [ 5 - 4 ] - - log/DUP (exit) @ location: 16 - [ 4 ] - - DUP (entry) @ location: 18 - [ 4 ] - - log/[halt] (exit) @ location: 18 - [ 4 - 4 ] - - [halt] (entry) @ location: 18 - [ 4 - 4 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 5 - 4 - 4 ] - - ADD (entry) @ location: 19 - [ 5 - 4 - 4 ] - - log/DIP (exit) @ location: 19 - [ 9 - 4 ] - - DIP (entry) @ location: 20 - [ 9 - 4 ] - - log/PUSH (exit) @ location: 20 - [ 4 ] - - PUSH (entry) @ location: 22 - [ 4 ] - - log/ADD (exit) @ location: 22 - [ 1 - 4 ] - - ADD (entry) @ location: 25 - [ 1 - 4 ] - - log/[halt] (exit) @ location: 25 - [ 5 ] - - [halt] (entry) @ location: 21 - [ 5 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 9 - 5 ] - - [halt] (entry) @ location: 14 - [ 9 - 5 ] - - control: KList_exit_body - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 6 - 5 ] - - DIP (entry) @ location: 16 - [ 6 - 5 ] - - log/DUP (exit) @ location: 16 - [ 5 ] - - DUP (entry) @ location: 18 - [ 5 ] - - log/[halt] (exit) @ location: 18 - [ 5 - 5 ] - - [halt] (entry) @ location: 18 - [ 5 - 5 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 6 - 5 - 5 ] - - ADD (entry) @ location: 19 - [ 6 - 5 - 5 ] - - log/DIP (exit) @ location: 19 - [ 11 - 5 ] - - DIP (entry) @ location: 20 - [ 11 - 5 ] - - log/PUSH (exit) @ location: 20 - [ 5 ] - - PUSH (entry) @ location: 22 - [ 5 ] - - log/ADD (exit) @ location: 22 - [ 1 - 5 ] - - ADD (entry) @ location: 25 - [ 1 - 5 ] - - log/[halt] (exit) @ location: 25 - [ 6 ] - - [halt] (entry) @ location: 21 - [ 6 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 11 - 6 ] - - [halt] (entry) @ location: 14 - [ 11 - 6 ] - - control: KList_exit_body - - control: KList_enter_body - - log/DIP (exit) @ location: 14 - [ 7 - 6 ] - - DIP (entry) @ location: 16 - [ 7 - 6 ] - - log/DUP (exit) @ location: 16 - [ 6 ] - - DUP (entry) @ location: 18 - [ 6 ] - - log/[halt] (exit) @ location: 18 - [ 6 - 6 ] - - [halt] (entry) @ location: 18 - [ 6 - 6 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 16 - [ 7 - 6 - 6 ] - - ADD (entry) @ location: 19 - [ 7 - 6 - 6 ] - - log/DIP (exit) @ location: 19 - [ 13 - 6 ] - - DIP (entry) @ location: 20 - [ 13 - 6 ] - - log/PUSH (exit) @ location: 20 - [ 6 ] - - PUSH (entry) @ location: 22 - [ 6 ] - - log/ADD (exit) @ location: 22 - [ 1 - 6 ] - - ADD (entry) @ location: 25 - [ 1 - 6 ] - - log/[halt] (exit) @ location: 25 - [ 7 ] - - [halt] (entry) @ location: 21 - [ 7 ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 20 - [ 13 - 7 ] - - [halt] (entry) @ location: 14 - [ 13 - 7 ] - - control: KList_exit_body - - control: KList_enter_body - - control: KCons - - log/NIL (exit) @ location: 14 - [ { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 } - 7 ] - - NIL (entry) @ location: 26 - [ { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 } - 7 ] - - log/PAIR (exit) @ location: 26 - [ {} - { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 } - 7 ] - - PAIR (entry) @ location: 28 - [ {} - { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 } - 7 ] - - log/DIP (exit) @ location: 28 - [ (Pair {} { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 }) - 7 ] - - DIP (entry) @ location: 29 - [ (Pair {} { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 }) - 7 ] - - log/DROP (exit) @ location: 29 - [ 7 ] - - DROP (entry) @ location: 31 - [ 7 ] - - log/[halt] (exit) @ location: 31 - [ ] - - [halt] (entry) @ location: 31 - [ ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 29 - [ (Pair {} { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 }) ] - - [halt] (entry) @ location: 8 - [ (Pair {} { 1 ; 3 ; 5 ; 7 ; 9 ; 11 ; 13 }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/loop_left.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/loop_left.out deleted file mode 100644 index 896f7396ad68b0df28b34fd54a348c5e2b7493dc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/loop_left.out +++ /dev/null @@ -1,253 +0,0 @@ - -trace - - CAR (interp) @ location: 9 - [ (Pair { "abc" ; "xyz" } { "zyx" ; "cba" }) ] - - CAR (entry) @ location: 9 - [ (Pair { "abc" ; "xyz" } { "zyx" ; "cba" }) ] - - log/NIL (exit) @ location: 9 - [ { "abc" ; "xyz" } ] - - NIL (entry) @ location: 10 - [ { "abc" ; "xyz" } ] - - log/SWAP (exit) @ location: 10 - [ {} - { "abc" ; "xyz" } ] - - SWAP (entry) @ location: 12 - [ {} - { "abc" ; "xyz" } ] - - log/PAIR (exit) @ location: 12 - [ { "abc" ; "xyz" } - {} ] - - PAIR (entry) @ location: 13 - [ { "abc" ; "xyz" } - {} ] - - log/LEFT (exit) @ location: 13 - [ (Pair { "abc" ; "xyz" } {}) ] - - LEFT (entry) @ location: 14 - [ (Pair { "abc" ; "xyz" } {}) ] - - log/LOOP_LEFT (exit) @ location: 14 - [ (Left (Pair { "abc" ; "xyz" } {})) ] - - LOOP_LEFT (entry) @ location: 41 - [ (Left (Pair { "abc" ; "xyz" } {})) ] - - control: KLoop_in_left - - log/DUP (exit) @ location: 41 - [ (Pair { "abc" ; "xyz" } {}) ] - - DUP (entry) @ location: 19 - [ (Pair { "abc" ; "xyz" } {}) ] - - log/CAR (exit) @ location: 19 - [ (Pair { "abc" ; "xyz" } {}) - (Pair { "abc" ; "xyz" } {}) ] - - CAR (entry) @ location: 20 - [ (Pair { "abc" ; "xyz" } {}) - (Pair { "abc" ; "xyz" } {}) ] - - log/DIP (exit) @ location: 20 - [ { "abc" ; "xyz" } - (Pair { "abc" ; "xyz" } {}) ] - - DIP (entry) @ location: 21 - [ { "abc" ; "xyz" } - (Pair { "abc" ; "xyz" } {}) ] - - log/CDR (exit) @ location: 21 - [ (Pair { "abc" ; "xyz" } {}) ] - - CDR (entry) @ location: 23 - [ (Pair { "abc" ; "xyz" } {}) ] - - log/[halt] (exit) @ location: 23 - [ {} ] - - [halt] (entry) @ location: 23 - [ {} ] - - control: KUndip - - control: KCons - - log/IF_CONS (exit) @ location: 21 - [ { "abc" ; "xyz" } - {} ] - - IF_CONS (entry) @ location: 24 - [ { "abc" ; "xyz" } - {} ] - - log/SWAP (exit) @ location: 24 - [ "abc" - { "xyz" } - {} ] - - SWAP (entry) @ location: 26 - [ "abc" - { "xyz" } - {} ] - - log/DIP (exit) @ location: 26 - [ { "xyz" } - "abc" - {} ] - - DIP (entry) @ location: 27 - [ { "xyz" } - "abc" - {} ] - - log/CONS (exit) @ location: 27 - [ "abc" - {} ] - - CONS (entry) @ location: 29 - [ "abc" - {} ] - - log/[halt] (exit) @ location: 29 - [ { "abc" } ] - - [halt] (entry) @ location: 29 - [ { "abc" } ] - - control: KUndip - - control: KCons - - log/PAIR (exit) @ location: 27 - [ { "xyz" } - { "abc" } ] - - PAIR (entry) @ location: 30 - [ { "xyz" } - { "abc" } ] - - log/LEFT (exit) @ location: 30 - [ (Pair { "xyz" } { "abc" }) ] - - LEFT (entry) @ location: 31 - [ (Pair { "xyz" } { "abc" }) ] - - log/[halt] (exit) @ location: 31 - [ (Left (Pair { "xyz" } { "abc" })) ] - - [halt] (entry) @ location: 41 - [ (Left (Pair { "xyz" } { "abc" })) ] - - control: KCons - - log/[halt] (exit) @ location: 24 - [ (Left (Pair { "xyz" } { "abc" })) ] - - [halt] (entry) @ location: 41 - [ (Left (Pair { "xyz" } { "abc" })) ] - - control: KLoop_in_left - - log/DUP (exit) @ location: 41 - [ (Pair { "xyz" } { "abc" }) ] - - DUP (entry) @ location: 19 - [ (Pair { "xyz" } { "abc" }) ] - - log/CAR (exit) @ location: 19 - [ (Pair { "xyz" } { "abc" }) - (Pair { "xyz" } { "abc" }) ] - - CAR (entry) @ location: 20 - [ (Pair { "xyz" } { "abc" }) - (Pair { "xyz" } { "abc" }) ] - - log/DIP (exit) @ location: 20 - [ { "xyz" } - (Pair { "xyz" } { "abc" }) ] - - DIP (entry) @ location: 21 - [ { "xyz" } - (Pair { "xyz" } { "abc" }) ] - - log/CDR (exit) @ location: 21 - [ (Pair { "xyz" } { "abc" }) ] - - CDR (entry) @ location: 23 - [ (Pair { "xyz" } { "abc" }) ] - - log/[halt] (exit) @ location: 23 - [ { "abc" } ] - - [halt] (entry) @ location: 23 - [ { "abc" } ] - - control: KUndip - - control: KCons - - log/IF_CONS (exit) @ location: 21 - [ { "xyz" } - { "abc" } ] - - IF_CONS (entry) @ location: 24 - [ { "xyz" } - { "abc" } ] - - log/SWAP (exit) @ location: 24 - [ "xyz" - {} - { "abc" } ] - - SWAP (entry) @ location: 26 - [ "xyz" - {} - { "abc" } ] - - log/DIP (exit) @ location: 26 - [ {} - "xyz" - { "abc" } ] - - DIP (entry) @ location: 27 - [ {} - "xyz" - { "abc" } ] - - log/CONS (exit) @ location: 27 - [ "xyz" - { "abc" } ] - - CONS (entry) @ location: 29 - [ "xyz" - { "abc" } ] - - log/[halt] (exit) @ location: 29 - [ { "xyz" ; "abc" } ] - - [halt] (entry) @ location: 29 - [ { "xyz" ; "abc" } ] - - control: KUndip - - control: KCons - - log/PAIR (exit) @ location: 27 - [ {} - { "xyz" ; "abc" } ] - - PAIR (entry) @ location: 30 - [ {} - { "xyz" ; "abc" } ] - - log/LEFT (exit) @ location: 30 - [ (Pair {} { "xyz" ; "abc" }) ] - - LEFT (entry) @ location: 31 - [ (Pair {} { "xyz" ; "abc" }) ] - - log/[halt] (exit) @ location: 31 - [ (Left (Pair {} { "xyz" ; "abc" })) ] - - [halt] (entry) @ location: 41 - [ (Left (Pair {} { "xyz" ; "abc" })) ] - - control: KCons - - log/[halt] (exit) @ location: 24 - [ (Left (Pair {} { "xyz" ; "abc" })) ] - - [halt] (entry) @ location: 41 - [ (Left (Pair {} { "xyz" ; "abc" })) ] - - control: KLoop_in_left - - log/DUP (exit) @ location: 41 - [ (Pair {} { "xyz" ; "abc" }) ] - - DUP (entry) @ location: 19 - [ (Pair {} { "xyz" ; "abc" }) ] - - log/CAR (exit) @ location: 19 - [ (Pair {} { "xyz" ; "abc" }) - (Pair {} { "xyz" ; "abc" }) ] - - CAR (entry) @ location: 20 - [ (Pair {} { "xyz" ; "abc" }) - (Pair {} { "xyz" ; "abc" }) ] - - log/DIP (exit) @ location: 20 - [ {} - (Pair {} { "xyz" ; "abc" }) ] - - DIP (entry) @ location: 21 - [ {} - (Pair {} { "xyz" ; "abc" }) ] - - log/CDR (exit) @ location: 21 - [ (Pair {} { "xyz" ; "abc" }) ] - - CDR (entry) @ location: 23 - [ (Pair {} { "xyz" ; "abc" }) ] - - log/[halt] (exit) @ location: 23 - [ { "xyz" ; "abc" } ] - - [halt] (entry) @ location: 23 - [ { "xyz" ; "abc" } ] - - control: KUndip - - control: KCons - - log/IF_CONS (exit) @ location: 21 - [ {} - { "xyz" ; "abc" } ] - - IF_CONS (entry) @ location: 24 - [ {} - { "xyz" ; "abc" } ] - - log/RIGHT (exit) @ location: 24 - [ { "xyz" ; "abc" } ] - - RIGHT (entry) @ location: 35 - [ { "xyz" ; "abc" } ] - - log/[halt] (exit) @ location: 35 - [ (Right { "xyz" ; "abc" }) ] - - [halt] (entry) @ location: 41 - [ (Right { "xyz" ; "abc" }) ] - - control: KCons - - log/[halt] (exit) @ location: 24 - [ (Right { "xyz" ; "abc" }) ] - - [halt] (entry) @ location: 41 - [ (Right { "xyz" ; "abc" }) ] - - control: KLoop_in_left - - control: KCons - - log/NIL (exit) @ location: 41 - [ { "xyz" ; "abc" } ] - - NIL (entry) @ location: 41 - [ { "xyz" ; "abc" } ] - - log/PAIR (exit) @ location: 41 - [ {} - { "xyz" ; "abc" } ] - - PAIR (entry) @ location: 43 - [ {} - { "xyz" ; "abc" } ] - - log/[halt] (exit) @ location: 43 - [ (Pair {} { "xyz" ; "abc" }) ] - - [halt] (entry) @ location: 8 - [ (Pair {} { "xyz" ; "abc" }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/opt_map.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/opt_map.out deleted file mode 100644 index e46a51e6dc9bb517508dd97e21593cc92290466a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/opt_map.out +++ /dev/null @@ -1,82 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 8 - [ (Pair 7 (Some 3)) ] - - UNPAIR (entry) @ location: 8 - [ (Pair 7 (Some 3)) ] - - log/SWAP (exit) @ location: 8 - [ 7 - (Some 3) ] - - SWAP (entry) @ location: 9 - [ 7 - (Some 3) ] - - log/MAP (exit) @ location: 9 - [ (Some 3) - 7 ] - - MAP (entry) @ location: 11 - [ (Some 3) - 7 ] - - log/DIP (exit) @ location: 11 - [ 3 - 7 ] - - DIP (entry) @ location: 12 - [ 3 - 7 ] - - log/DUP (exit) @ location: 12 - [ 7 ] - - DUP (entry) @ location: 14 - [ 7 ] - - log/[halt] (exit) @ location: 14 - [ 7 - 7 ] - - [halt] (entry) @ location: 14 - [ 7 - 7 ] - - control: KUndip - - control: KCons - - log/ADD (exit) @ location: 12 - [ 3 - 7 - 7 ] - - ADD (entry) @ location: 15 - [ 3 - 7 - 7 ] - - log/[halt] (exit) @ location: 15 - [ 10 - 7 ] - - [halt] (entry) @ location: 11 - [ 10 - 7 ] - - control: KMap_head - - log/DIP (exit) @ location: 11 - [ (Some 10) - 7 ] - - DIP (entry) @ location: 16 - [ (Some 10) - 7 ] - - log/DROP (exit) @ location: 16 - [ 7 ] - - DROP (entry) @ location: 18 - [ 7 ] - - log/[halt] (exit) @ location: 18 - [ ] - - [halt] (entry) @ location: 18 - [ ] - - control: KUndip - - control: KCons - - log/NIL (exit) @ location: 16 - [ (Some 10) ] - - NIL (entry) @ location: 19 - [ (Some 10) ] - - log/PAIR (exit) @ location: 19 - [ {} - (Some 10) ] - - PAIR (entry) @ location: 21 - [ {} - (Some 10) ] - - log/[halt] (exit) @ location: 21 - [ (Pair {} (Some 10)) ] - - [halt] (entry) @ location: 7 - [ (Pair {} (Some 10)) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/packunpack.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/packunpack.out deleted file mode 100644 index 847e8b481addf6588c019708cfa65207fb002505..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/packunpack.out +++ /dev/null @@ -1,103 +0,0 @@ - -trace - - CAR (interp) @ location: 15 - [ (Pair (Pair (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006) - Unit) ] - - CAR (entry) @ location: 15 - [ (Pair (Pair (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006) - Unit) ] - - log/UNPAIR (exit) @ location: 15 - [ (Pair (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006) ] - - UNPAIR (entry) @ location: 16 - [ (Pair (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006) ] - - log/DIP (exit) @ location: 16 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - DIP (entry) @ location: 17 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/DUP (exit) @ location: 17 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - DUP (entry) @ location: 19 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/[halt] (exit) @ location: 19 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - [halt] (entry) @ location: 19 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - control: KUndip - - control: KCons - - log/PACK (exit) @ location: 17 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - PACK (entry) @ location: 20 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) - 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/COMPARE (exit) @ location: 20 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - COMPARE (entry) @ location: 23 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/EQ (exit) @ location: 23 - [ 0 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - EQ (entry) @ location: 24 - [ 0 - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/IF (exit) @ location: 24 - [ True - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - IF (entry) @ location: 25 - [ True - 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/[halt] (exit) @ location: 25 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - [halt] (entry) @ location: 31 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - control: KCons - - log/UNPACK (exit) @ location: 25 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - UNPACK (entry) @ location: 31 - [ 0x0507070707010000000361626302000000060001000200030200000006000400050006 ] - - log/IF_NONE (exit) @ location: 31 - [ (Some (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 })) ] - - IF_NONE (entry) @ location: 40 - [ (Some (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 })) ] - - log/[halt] (exit) @ location: 40 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) ] - - [halt] (entry) @ location: 46 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) ] - - control: KCons - - log/DROP (exit) @ location: 40 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) ] - - DROP (entry) @ location: 46 - [ (Pair (Pair "abc" { 1 ; 2 ; 3 }) { 4 ; 5 ; 6 }) ] - - log/UNIT (exit) @ location: 46 - [ ] - - UNIT (entry) @ location: 47 - [ ] - - log/NIL (exit) @ location: 47 - [ Unit ] - - NIL (entry) @ location: 48 - [ Unit ] - - log/PAIR (exit) @ location: 48 - [ {} - Unit ] - - PAIR (entry) @ location: 50 - [ {} - Unit ] - - log/[halt] (exit) @ location: 50 - [ (Pair {} Unit) ] - - [halt] (entry) @ location: 14 - [ (Pair {} Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/pexec.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/pexec.out deleted file mode 100644 index 067af7c55351a54b04e6288d07efdaad83cdbde4..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/pexec.out +++ /dev/null @@ -1,83 +0,0 @@ - -trace - - LAMBDA (interp) @ location: 7 - [ (Pair 7 77) ] - - LAMBDA (entry) @ location: 7 - [ (Pair 7 77) ] - - log/SWAP (exit) @ location: 7 - [ { UNPAIR ; ADD } - (Pair 7 77) ] - - SWAP (entry) @ location: 15 - [ { UNPAIR ; ADD } - (Pair 7 77) ] - - log/UNPAIR (exit) @ location: 15 - [ (Pair 7 77) - { UNPAIR ; ADD } ] - - UNPAIR (entry) @ location: 16 - [ (Pair 7 77) - { UNPAIR ; ADD } ] - - log/DIP (exit) @ location: 16 - [ 7 - 77 - { UNPAIR ; ADD } ] - - DIP (entry) @ location: 17 - [ 7 - 77 - { UNPAIR ; ADD } ] - - log/APPLY (exit) @ location: 17 - [ 77 - { UNPAIR ; ADD } ] - - APPLY (entry) @ location: 19 - [ 77 - { UNPAIR ; ADD } ] - - log/[halt] (exit) @ location: 19 - [ { PUSH nat 77 ; PAIR ; { UNPAIR ; ADD } } ] - - [halt] (entry) @ location: 19 - [ { PUSH nat 77 ; PAIR ; { UNPAIR ; ADD } } ] - - control: KUndip - - control: KCons - - log/EXEC (exit) @ location: 17 - [ 7 - { PUSH nat 77 ; PAIR ; { UNPAIR ; ADD } } ] - - EXEC (entry) @ location: 20 - [ 7 - { PUSH nat 77 ; PAIR ; { UNPAIR ; ADD } } ] - - PUSH (entry) @ location: 12 - [ 7 ] - - log/PAIR (exit) @ location: 12 - [ 77 - 7 ] - - PAIR (entry) @ location: 12 - [ 77 - 7 ] - - log/UNPAIR (exit) @ location: 12 - [ (Pair 77 7) ] - - UNPAIR (entry) @ location: 13 - [ (Pair 77 7) ] - - log/ADD (exit) @ location: 13 - [ 77 - 7 ] - - ADD (entry) @ location: 14 - [ 77 - 7 ] - - log/[halt] (exit) @ location: 14 - [ 84 ] - - [halt] (entry) @ location: 12 - [ 84 ] - - control: KReturn - - control: KCons - - log/NIL (exit) @ location: 20 - [ 84 ] - - NIL (entry) @ location: 21 - [ 84 ] - - log/PAIR (exit) @ location: 21 - [ {} - 84 ] - - PAIR (entry) @ location: 23 - [ {} - 84 ] - - log/[halt] (exit) @ location: 23 - [ (Pair {} 84) ] - - [halt] (entry) @ location: 6 - [ (Pair {} 84) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/rec_id_unit.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/rec_id_unit.out deleted file mode 100644 index 8ac716e1d0587b3814f50cd68f9db794c6c452a1..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/rec_id_unit.out +++ /dev/null @@ -1,56 +0,0 @@ - -trace - - CAR (interp) @ location: 7 - [ (Pair Unit Unit) ] - - CAR (entry) @ location: 7 - [ (Pair Unit Unit) ] - - log/LAMBDA_REC (exit) @ location: 7 - [ Unit ] - - LAMBDA_REC (entry) @ location: 8 - [ Unit ] - - log/SWAP (exit) @ location: 8 - [ (Lambda_rec { DIP { DROP } }) - Unit ] - - SWAP (entry) @ location: 15 - [ (Lambda_rec { DIP { DROP } }) - Unit ] - - log/EXEC (exit) @ location: 15 - [ Unit - (Lambda_rec { DIP { DROP } }) ] - - EXEC (entry) @ location: 16 - [ Unit - (Lambda_rec { DIP { DROP } }) ] - - DIP (entry) @ location: 12 - [ Unit - (Lambda_rec { DIP { DROP } }) ] - - log/DROP (exit) @ location: 12 - [ (Lambda_rec { DIP { DROP } }) ] - - DROP (entry) @ location: 14 - [ (Lambda_rec { DIP { DROP } }) ] - - log/[halt] (exit) @ location: 14 - [ ] - - [halt] (entry) @ location: 14 - [ ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 12 - [ Unit ] - - [halt] (entry) @ location: 12 - [ Unit ] - - control: KReturn - - control: KCons - - log/NIL (exit) @ location: 16 - [ Unit ] - - NIL (entry) @ location: 17 - [ Unit ] - - log/PAIR (exit) @ location: 17 - [ {} - Unit ] - - PAIR (entry) @ location: 19 - [ {} - Unit ] - - log/[halt] (exit) @ location: 19 - [ (Pair {} Unit) ] - - [halt] (entry) @ location: 6 - [ (Pair {} Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/reverse_loop.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/reverse_loop.out deleted file mode 100644 index 76ea2381bed376df5f7d6dae17bda8daad08fe6c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/reverse_loop.out +++ /dev/null @@ -1,261 +0,0 @@ - -trace - - CAR (interp) @ location: 9 - [ (Pair { "abc" ; "def" ; "ghi" } {}) ] - - CAR (entry) @ location: 9 - [ (Pair { "abc" ; "def" ; "ghi" } {}) ] - - log/NIL (exit) @ location: 9 - [ { "abc" ; "def" ; "ghi" } ] - - NIL (entry) @ location: 10 - [ { "abc" ; "def" ; "ghi" } ] - - log/SWAP (exit) @ location: 10 - [ {} - { "abc" ; "def" ; "ghi" } ] - - SWAP (entry) @ location: 12 - [ {} - { "abc" ; "def" ; "ghi" } ] - - log/PUSH (exit) @ location: 12 - [ { "abc" ; "def" ; "ghi" } - {} ] - - PUSH (entry) @ location: 13 - [ { "abc" ; "def" ; "ghi" } - {} ] - - log/LOOP (exit) @ location: 13 - [ True - { "abc" ; "def" ; "ghi" } - {} ] - - LOOP (entry) @ location: 33 - [ True - { "abc" ; "def" ; "ghi" } - {} ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 33 - [ { "abc" ; "def" ; "ghi" } - {} ] - - IF_CONS (entry) @ location: 18 - [ { "abc" ; "def" ; "ghi" } - {} ] - - log/SWAP (exit) @ location: 18 - [ "abc" - { "def" ; "ghi" } - {} ] - - SWAP (entry) @ location: 20 - [ "abc" - { "def" ; "ghi" } - {} ] - - log/DIP (exit) @ location: 20 - [ { "def" ; "ghi" } - "abc" - {} ] - - DIP (entry) @ location: 21 - [ { "def" ; "ghi" } - "abc" - {} ] - - log/CONS (exit) @ location: 21 - [ "abc" - {} ] - - CONS (entry) @ location: 23 - [ "abc" - {} ] - - log/[halt] (exit) @ location: 23 - [ { "abc" } ] - - [halt] (entry) @ location: 23 - [ { "abc" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 21 - [ { "def" ; "ghi" } - { "abc" } ] - - PUSH (entry) @ location: 24 - [ { "def" ; "ghi" } - { "abc" } ] - - log/[halt] (exit) @ location: 24 - [ True - { "def" ; "ghi" } - { "abc" } ] - - [halt] (entry) @ location: 33 - [ True - { "def" ; "ghi" } - { "abc" } ] - - control: KCons - - log/[halt] (exit) @ location: 18 - [ True - { "def" ; "ghi" } - { "abc" } ] - - [halt] (entry) @ location: 33 - [ True - { "def" ; "ghi" } - { "abc" } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 33 - [ { "def" ; "ghi" } - { "abc" } ] - - IF_CONS (entry) @ location: 18 - [ { "def" ; "ghi" } - { "abc" } ] - - log/SWAP (exit) @ location: 18 - [ "def" - { "ghi" } - { "abc" } ] - - SWAP (entry) @ location: 20 - [ "def" - { "ghi" } - { "abc" } ] - - log/DIP (exit) @ location: 20 - [ { "ghi" } - "def" - { "abc" } ] - - DIP (entry) @ location: 21 - [ { "ghi" } - "def" - { "abc" } ] - - log/CONS (exit) @ location: 21 - [ "def" - { "abc" } ] - - CONS (entry) @ location: 23 - [ "def" - { "abc" } ] - - log/[halt] (exit) @ location: 23 - [ { "def" ; "abc" } ] - - [halt] (entry) @ location: 23 - [ { "def" ; "abc" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 21 - [ { "ghi" } - { "def" ; "abc" } ] - - PUSH (entry) @ location: 24 - [ { "ghi" } - { "def" ; "abc" } ] - - log/[halt] (exit) @ location: 24 - [ True - { "ghi" } - { "def" ; "abc" } ] - - [halt] (entry) @ location: 33 - [ True - { "ghi" } - { "def" ; "abc" } ] - - control: KCons - - log/[halt] (exit) @ location: 18 - [ True - { "ghi" } - { "def" ; "abc" } ] - - [halt] (entry) @ location: 33 - [ True - { "ghi" } - { "def" ; "abc" } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 33 - [ { "ghi" } - { "def" ; "abc" } ] - - IF_CONS (entry) @ location: 18 - [ { "ghi" } - { "def" ; "abc" } ] - - log/SWAP (exit) @ location: 18 - [ "ghi" - {} - { "def" ; "abc" } ] - - SWAP (entry) @ location: 20 - [ "ghi" - {} - { "def" ; "abc" } ] - - log/DIP (exit) @ location: 20 - [ {} - "ghi" - { "def" ; "abc" } ] - - DIP (entry) @ location: 21 - [ {} - "ghi" - { "def" ; "abc" } ] - - log/CONS (exit) @ location: 21 - [ "ghi" - { "def" ; "abc" } ] - - CONS (entry) @ location: 23 - [ "ghi" - { "def" ; "abc" } ] - - log/[halt] (exit) @ location: 23 - [ { "ghi" ; "def" ; "abc" } ] - - [halt] (entry) @ location: 23 - [ { "ghi" ; "def" ; "abc" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 21 - [ {} - { "ghi" ; "def" ; "abc" } ] - - PUSH (entry) @ location: 24 - [ {} - { "ghi" ; "def" ; "abc" } ] - - log/[halt] (exit) @ location: 24 - [ True - {} - { "ghi" ; "def" ; "abc" } ] - - [halt] (entry) @ location: 33 - [ True - {} - { "ghi" ; "def" ; "abc" } ] - - control: KCons - - log/[halt] (exit) @ location: 18 - [ True - {} - { "ghi" ; "def" ; "abc" } ] - - [halt] (entry) @ location: 33 - [ True - {} - { "ghi" ; "def" ; "abc" } ] - - control: KLoop_in - - log/IF_CONS (exit) @ location: 33 - [ {} - { "ghi" ; "def" ; "abc" } ] - - IF_CONS (entry) @ location: 18 - [ {} - { "ghi" ; "def" ; "abc" } ] - - log/NIL (exit) @ location: 18 - [ { "ghi" ; "def" ; "abc" } ] - - NIL (entry) @ location: 28 - [ { "ghi" ; "def" ; "abc" } ] - - log/PUSH (exit) @ location: 28 - [ {} - { "ghi" ; "def" ; "abc" } ] - - PUSH (entry) @ location: 30 - [ {} - { "ghi" ; "def" ; "abc" } ] - - log/[halt] (exit) @ location: 30 - [ False - {} - { "ghi" ; "def" ; "abc" } ] - - [halt] (entry) @ location: 33 - [ False - {} - { "ghi" ; "def" ; "abc" } ] - - control: KCons - - log/[halt] (exit) @ location: 18 - [ False - {} - { "ghi" ; "def" ; "abc" } ] - - [halt] (entry) @ location: 33 - [ False - {} - { "ghi" ; "def" ; "abc" } ] - - control: KLoop_in - - control: KCons - - log/DROP (exit) @ location: 33 - [ {} - { "ghi" ; "def" ; "abc" } ] - - DROP (entry) @ location: 33 - [ {} - { "ghi" ; "def" ; "abc" } ] - - log/NIL (exit) @ location: 33 - [ { "ghi" ; "def" ; "abc" } ] - - NIL (entry) @ location: 34 - [ { "ghi" ; "def" ; "abc" } ] - - log/PAIR (exit) @ location: 34 - [ {} - { "ghi" ; "def" ; "abc" } ] - - PAIR (entry) @ location: 36 - [ {} - { "ghi" ; "def" ; "abc" } ] - - log/[halt] (exit) @ location: 36 - [ (Pair {} { "ghi" ; "def" ; "abc" }) ] - - [halt] (entry) @ location: 8 - [ (Pair {} { "ghi" ; "def" ; "abc" }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/set_delegate.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/set_delegate.out deleted file mode 100644 index 89bf0cc887b96b2b1ca5a5f11b5b5b9d91c86817..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/set_delegate.out +++ /dev/null @@ -1,51 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 8 - [ (Pair (Some "[PUBLIC_KEY_HASH]") Unit) ] - - UNPAIR (entry) @ location: 8 - [ (Pair (Some "[PUBLIC_KEY_HASH]") Unit) ] - - log/SET_DELEGATE (exit) @ location: 8 - [ (Some "[PUBLIC_KEY_HASH]") - Unit ] - - SET_DELEGATE (entry) @ location: 9 - [ (Some "[PUBLIC_KEY_HASH]") - Unit ] - - log/DIP (exit) @ location: 9 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c - Unit ] - - DIP (entry) @ location: 10 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c - Unit ] - - log/NIL (exit) @ location: 10 - [ Unit ] - - NIL (entry) @ location: 12 - [ Unit ] - - log/[halt] (exit) @ location: 12 - [ {} - Unit ] - - [halt] (entry) @ location: 12 - [ {} - Unit ] - - control: KUndip - - control: KCons - - log/CONS (exit) @ location: 10 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c - {} - Unit ] - - CONS (entry) @ location: 14 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c - {} - Unit ] - - log/PAIR (exit) @ location: 14 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c } - Unit ] - - PAIR (entry) @ location: 15 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c } - Unit ] - - log/[halt] (exit) @ location: 15 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c } - Unit) ] - - [halt] (entry) @ location: 7 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000003ff00e7670f32038107a59a2b9cfefae36ea21f5aa63c } - Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/shifts.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/shifts.out deleted file mode 100644 index 73e5b8e2405809b31eb9f18c00e8c9a4c0aa7dcc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/shifts.out +++ /dev/null @@ -1,44 +0,0 @@ - -trace - - CAR (interp) @ location: 14 - [ (Pair (Right (Pair 3 2)) None) ] - - CAR (entry) @ location: 14 - [ (Pair (Right (Pair 3 2)) None) ] - - log/IF_LEFT (exit) @ location: 14 - [ (Right (Pair 3 2)) ] - - IF_LEFT (entry) @ location: 15 - [ (Right (Pair 3 2)) ] - - log/UNPAIR (exit) @ location: 15 - [ (Pair 3 2) ] - - UNPAIR (entry) @ location: 20 - [ (Pair 3 2) ] - - log/LSR (exit) @ location: 20 - [ 3 - 2 ] - - LSR (entry) @ location: 21 - [ 3 - 2 ] - - log/[halt] (exit) @ location: 21 - [ 0 ] - - [halt] (entry) @ location: 22 - [ 0 ] - - control: KCons - - log/SOME (exit) @ location: 15 - [ 0 ] - - SOME (entry) @ location: 22 - [ 0 ] - - log/NIL (exit) @ location: 22 - [ (Some 0) ] - - NIL (entry) @ location: 23 - [ (Some 0) ] - - log/PAIR (exit) @ location: 23 - [ {} - (Some 0) ] - - PAIR (entry) @ location: 25 - [ {} - (Some 0) ] - - log/[halt] (exit) @ location: 25 - [ (Pair {} (Some 0)) ] - - [halt] (entry) @ location: 13 - [ (Pair {} (Some 0)) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/spawn_identities.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/spawn_identities.out deleted file mode 100644 index 9f1a07749f236c2cc30144fa575cebb4c6e9370a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/spawn_identities.out +++ /dev/null @@ -1,4341 +0,0 @@ - -trace - - DUP (interp) @ location: 8 - [ (Pair 7 {}) ] - - DUP (entry) @ location: 8 - [ (Pair 7 {}) ] - - log/CAR (exit) @ location: 8 - [ (Pair 7 {}) - (Pair 7 {}) ] - - CAR (entry) @ location: 9 - [ (Pair 7 {}) - (Pair 7 {}) ] - - log/DIP (exit) @ location: 9 - [ 7 - (Pair 7 {}) ] - - DIP (entry) @ location: 10 - [ 7 - (Pair 7 {}) ] - - log/CDR (exit) @ location: 10 - [ (Pair 7 {}) ] - - CDR (entry) @ location: 12 - [ (Pair 7 {}) ] - - log/NIL (exit) @ location: 12 - [ {} ] - - NIL (entry) @ location: 13 - [ {} ] - - log/[halt] (exit) @ location: 13 - [ {} - {} ] - - [halt] (entry) @ location: 11 - [ {} - {} ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 10 - [ 7 - {} - {} ] - - PUSH (entry) @ location: 15 - [ 7 - {} - {} ] - - log/LOOP (exit) @ location: 15 - [ True - 7 - {} - {} ] - - LOOP (entry) @ location: 76 - [ True - 7 - {} - {} ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 7 - {} - {} ] - - DUP (entry) @ location: 20 - [ 7 - {} - {} ] - - log/PUSH (exit) @ location: 20 - [ 7 - 7 - {} - {} ] - - PUSH (entry) @ location: 21 - [ 7 - 7 - {} - {} ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 7 - 7 - {} - {} ] - - COMPARE (entry) @ location: 25 - [ 0 - 7 - 7 - {} - {} ] - - log/EQ (exit) @ location: 25 - [ -1 - 7 - {} - {} ] - - EQ (entry) @ location: 26 - [ -1 - 7 - {} - {} ] - - log/IF (exit) @ location: 26 - [ False - 7 - {} - {} ] - - IF (entry) @ location: 27 - [ False - 7 - {} - {} ] - - log/PUSH (exit) @ location: 27 - [ 7 - {} - {} ] - - PUSH (entry) @ location: 33 - [ 7 - {} - {} ] - - log/SWAP (exit) @ location: 33 - [ 1 - 7 - {} - {} ] - - SWAP (entry) @ location: 36 - [ 1 - 7 - {} - {} ] - - log/SUB (exit) @ location: 36 - [ 7 - 1 - {} - {} ] - - SUB (entry) @ location: 37 - [ 7 - 1 - {} - {} ] - - log/ABS (exit) @ location: 37 - [ 6 - {} - {} ] - - ABS (entry) @ location: 38 - [ 6 - {} - {} ] - - log/PUSH (exit) @ location: 38 - [ 6 - {} - {} ] - - PUSH (entry) @ location: 39 - [ 6 - {} - {} ] - - log/PUSH (exit) @ location: 39 - [ "init" - 6 - {} - {} ] - - PUSH (entry) @ location: 42 - [ "init" - 6 - {} - {} ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 6 - {} - {} ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 6 - {} - {} ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 6 - {} - {} ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 6 - {} - {} ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 6 - {} - {} ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 6 - {} - {} ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 6 - {} - {} ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 6 - {} - {} ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 6 - {} - {} ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 6 - {} - {} ] - - log/DIP (exit) @ location: 62 - [ 6 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - {} - {} ] - - DIP (entry) @ location: 63 - [ 6 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - {} - {} ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - {} - {} ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - {} - {} ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - [halt] (entry) @ location: 61 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - log/DIP (exit) @ location: 66 - [ 6 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - DIP (entry) @ location: 67 - [ 6 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - {} ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - {} ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - {} ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - {} ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - {} ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 6 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 6 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 6 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 6 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ -1 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ -1 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ False - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ False - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 33 - [ 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 33 - [ 1 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 36 - [ 1 - 6 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/SUB (exit) @ location: 36 - [ 6 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - SUB (entry) @ location: 37 - [ 6 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/ABS (exit) @ location: 37 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - ABS (entry) @ location: 38 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 38 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 39 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 39 - [ "init" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 42 - [ "init" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 62 - [ 5 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 63 - [ 5 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 61 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 66 - [ 5 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 67 - [ 5 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 5 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 5 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 5 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 5 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ -1 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ -1 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ False - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ False - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 33 - [ 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 33 - [ 1 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 36 - [ 1 - 5 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SUB (exit) @ location: 36 - [ 5 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SUB (entry) @ location: 37 - [ 5 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/ABS (exit) @ location: 37 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - ABS (entry) @ location: 38 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 38 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 39 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 39 - [ "init" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 42 - [ "init" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 62 - [ 4 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 63 - [ 4 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 61 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 66 - [ 4 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 67 - [ 4 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 4 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 4 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 4 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 4 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ -1 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ -1 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ False - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ False - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 33 - [ 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 33 - [ 1 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 36 - [ 1 - 4 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SUB (exit) @ location: 36 - [ 4 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SUB (entry) @ location: 37 - [ 4 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/ABS (exit) @ location: 37 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - ABS (entry) @ location: 38 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 38 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 39 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 39 - [ "init" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 42 - [ "init" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 62 - [ 3 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 63 - [ 3 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 61 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 66 - [ 3 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 67 - [ 3 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 3 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 3 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 3 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 3 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ -1 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ -1 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ False - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ False - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 33 - [ 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 33 - [ 1 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 36 - [ 1 - 3 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SUB (exit) @ location: 36 - [ 3 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SUB (entry) @ location: 37 - [ 3 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/ABS (exit) @ location: 37 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - ABS (entry) @ location: 38 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 38 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 39 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 39 - [ "init" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 42 - [ "init" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 62 - [ 2 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 63 - [ 2 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 61 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 66 - [ 2 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 67 - [ 2 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 2 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 2 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 2 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 2 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ -1 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ -1 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ False - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ False - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 33 - [ 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 33 - [ 1 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 36 - [ 1 - 2 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SUB (exit) @ location: 36 - [ 2 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SUB (entry) @ location: 37 - [ 2 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/ABS (exit) @ location: 37 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - ABS (entry) @ location: 38 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 38 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 39 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 39 - [ "init" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 42 - [ "init" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 62 - [ 1 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 63 - [ 1 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 61 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 66 - [ 1 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 67 - [ 1 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ -1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ -1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ False - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ False - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 33 - [ 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 33 - [ 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 36 - [ 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SUB (exit) @ location: 36 - [ 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SUB (entry) @ location: 37 - [ 1 - 1 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/ABS (exit) @ location: 37 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - ABS (entry) @ location: 38 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 38 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 39 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 39 - [ "init" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 42 - [ "init" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/NONE (exit) @ location: 42 - [ 5000000 - "init" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - NONE (entry) @ location: 45 - [ 5000000 - "init" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CREATE_CONTRACT (exit) @ location: 45 - [ None - 5000000 - "init" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CREATE_CONTRACT (entry) @ location: 47 - [ None - 5000000 - "init" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 47 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 59 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - "[CONTRACT_HASH]" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 59 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 60 - [ "[CONTRACT_HASH]" - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 60 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 62 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 62 - [ 0 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 63 - [ 0 - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 63 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 65 - [ 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 65 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 63 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 61 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/SWAP (exit) @ location: 60 - [ "[CONTRACT_HASH]" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 66 - [ "[CONTRACT_HASH]" - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 66 - [ 0 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 67 - [ 0 - "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/SWAP (exit) @ location: 67 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - SWAP (entry) @ location: 69 - [ "[CONTRACT_HASH]" - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/DIP (exit) @ location: 69 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DIP (entry) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/CONS (exit) @ location: 70 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - CONS (entry) @ location: 72 - [ "[CONTRACT_HASH]" - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 72 - [ { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/[halt] (exit) @ location: 70 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 68 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KUndip - - control: KCons - - log/PUSH (exit) @ location: 67 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 73 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 73 - [ True - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ True - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ True - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - log/DUP (exit) @ location: 76 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DUP (entry) @ location: 20 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 20 - [ 0 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 21 - [ 0 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/COMPARE (exit) @ location: 21 - [ 0 - 0 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - COMPARE (entry) @ location: 25 - [ 0 - 0 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/EQ (exit) @ location: 25 - [ 0 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - EQ (entry) @ location: 26 - [ 0 - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/IF (exit) @ location: 26 - [ True - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - IF (entry) @ location: 27 - [ True - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PUSH (exit) @ location: 27 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PUSH (entry) @ location: 29 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 29 - [ False - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ False - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KCons - - log/[halt] (exit) @ location: 27 - [ False - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - [halt] (entry) @ location: 76 - [ False - 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - control: KLoop_in - - control: KCons - - log/DROP (exit) @ location: 76 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - DROP (entry) @ location: 76 - [ 0 - { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/PAIR (exit) @ location: 76 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - PAIR (entry) @ location: 77 - [ { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" } ] - - log/[halt] (exit) @ location: 77 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" }) ] - - [halt] (entry) @ location: 7 - [ (Pair { 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000602c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000502c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000402c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000302c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000202c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000102c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 ; - 0x014828e9aa0b3e6e970da0515b5c5d8ccf5028758900000002c096b102000000001c02000000170500036805010368050202000000080316053d036d0342000000090100000004696e6974 } - { "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" ; - "[CONTRACT_HASH]" }) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ticket_join.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ticket_join.out deleted file mode 100644 index 9b2173a0c4f327ff0d387fc082863437f378cccd..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ticket_join.out +++ /dev/null @@ -1,42 +0,0 @@ - -trace - - UNPAIR (interp) @ location: 10 - [ (Pair (Pair "[CONTRACT_HASH]" 17 3) None) ] - - UNPAIR (entry) @ location: 10 - [ (Pair (Pair "[CONTRACT_HASH]" 17 3) None) ] - - log/SWAP (exit) @ location: 10 - [ (Pair "[CONTRACT_HASH]" 17 3) - None ] - - SWAP (entry) @ location: 11 - [ (Pair "[CONTRACT_HASH]" 17 3) - None ] - - log/IF_NONE (exit) @ location: 11 - [ None - (Pair "[CONTRACT_HASH]" 17 3) ] - - IF_NONE (entry) @ location: 12 - [ None - (Pair "[CONTRACT_HASH]" 17 3) ] - - log/[halt] (exit) @ location: 12 - [ (Pair "[CONTRACT_HASH]" 17 3) ] - - [halt] (entry) @ location: 24 - [ (Pair "[CONTRACT_HASH]" 17 3) ] - - control: KCons - - log/SOME (exit) @ location: 12 - [ (Pair "[CONTRACT_HASH]" 17 3) ] - - SOME (entry) @ location: 24 - [ (Pair "[CONTRACT_HASH]" 17 3) ] - - log/NIL (exit) @ location: 24 - [ (Some (Pair "[CONTRACT_HASH]" 17 3)) ] - - NIL (entry) @ location: 25 - [ (Some (Pair "[CONTRACT_HASH]" 17 3)) ] - - log/PAIR (exit) @ location: 25 - [ {} - (Some (Pair "[CONTRACT_HASH]" 17 3)) ] - - PAIR (entry) @ location: 27 - [ {} - (Some (Pair "[CONTRACT_HASH]" 17 3)) ] - - log/[halt] (exit) @ location: 27 - [ (Pair {} (Some (Pair "[CONTRACT_HASH]" 17 3))) ] - - [halt] (entry) @ location: 9 - [ (Pair {} (Some (Pair "[CONTRACT_HASH]" 17 3))) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ticket_split.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ticket_split.out deleted file mode 100644 index ae449fe91b48e6372c56fc00fb9a6dd8fc25b1d5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/ticket_split.out +++ /dev/null @@ -1,180 +0,0 @@ - -trace - - CAR (interp) @ location: 8 - [ (Pair (Pair "[CONTRACT_HASH]" 17 3) Unit) ] - - CAR (entry) @ location: 8 - [ (Pair (Pair "[CONTRACT_HASH]" 17 3) Unit) ] - - log/PUSH (exit) @ location: 8 - [ (Pair "[CONTRACT_HASH]" 17 3) ] - - PUSH (entry) @ location: 9 - [ (Pair "[CONTRACT_HASH]" 17 3) ] - - log/SWAP (exit) @ location: 9 - [ (Pair 1 2) - (Pair "[CONTRACT_HASH]" 17 3) ] - - SWAP (entry) @ location: 16 - [ (Pair 1 2) - (Pair "[CONTRACT_HASH]" 17 3) ] - - log/SPLIT_TICKET (exit) @ location: 16 - [ (Pair "[CONTRACT_HASH]" 17 3) - (Pair 1 2) ] - - SPLIT_TICKET (entry) @ location: 17 - [ (Pair "[CONTRACT_HASH]" 17 3) - (Pair 1 2) ] - - log/IF_NONE (exit) @ location: 17 - [ (Some (Pair (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2))) ] - - IF_NONE (entry) @ location: 19 - [ (Some (Pair (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2))) ] - - log/[halt] (exit) @ location: 19 - [ (Pair (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2)) ] - - [halt] (entry) @ location: 25 - [ (Pair (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2)) ] - - control: KCons - - log/UNPAIR (exit) @ location: 19 - [ (Pair (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2)) ] - - UNPAIR (entry) @ location: 25 - [ (Pair (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2)) ] - - log/READ_TICKET (exit) @ location: 25 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - READ_TICKET (entry) @ location: 26 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/CDR (exit) @ location: 26 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - CDR (entry) @ location: 28 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/CDR (exit) @ location: 28 - [ (Pair 17 1) - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - CDR (entry) @ location: 29 - [ (Pair 17 1) - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/PUSH (exit) @ location: 29 - [ 1 - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - PUSH (entry) @ location: 30 - [ 1 - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/COMPARE (exit) @ location: 30 - [ 1 - 1 - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - COMPARE (entry) @ location: 35 - [ 1 - 1 - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/EQ (exit) @ location: 35 - [ 0 - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - EQ (entry) @ location: 36 - [ 0 - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/IF (exit) @ location: 36 - [ True - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - IF (entry) @ location: 37 - [ True - (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/[halt] (exit) @ location: 37 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - [halt] (entry) @ location: 43 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - control: KCons - - log/DROP (exit) @ location: 37 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - DROP (entry) @ location: 43 - [ (Pair "[CONTRACT_HASH]" 17 1) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/READ_TICKET (exit) @ location: 43 - [ (Pair "[CONTRACT_HASH]" 17 2) ] - - READ_TICKET (entry) @ location: 44 - [ (Pair "[CONTRACT_HASH]" 17 2) ] - - log/CDR (exit) @ location: 44 - [ (Pair "[CONTRACT_HASH]" 17 2) - (Pair "[CONTRACT_HASH]" 17 2) ] - - CDR (entry) @ location: 46 - [ (Pair "[CONTRACT_HASH]" 17 2) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/CDR (exit) @ location: 46 - [ (Pair 17 2) - (Pair "[CONTRACT_HASH]" 17 2) ] - - CDR (entry) @ location: 47 - [ (Pair 17 2) - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/PUSH (exit) @ location: 47 - [ 2 - (Pair "[CONTRACT_HASH]" 17 2) ] - - PUSH (entry) @ location: 48 - [ 2 - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/COMPARE (exit) @ location: 48 - [ 2 - 2 - (Pair "[CONTRACT_HASH]" 17 2) ] - - COMPARE (entry) @ location: 53 - [ 2 - 2 - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/EQ (exit) @ location: 53 - [ 0 - (Pair "[CONTRACT_HASH]" 17 2) ] - - EQ (entry) @ location: 54 - [ 0 - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/IF (exit) @ location: 54 - [ True - (Pair "[CONTRACT_HASH]" 17 2) ] - - IF (entry) @ location: 55 - [ True - (Pair "[CONTRACT_HASH]" 17 2) ] - - log/[halt] (exit) @ location: 55 - [ (Pair "[CONTRACT_HASH]" 17 2) ] - - [halt] (entry) @ location: 61 - [ (Pair "[CONTRACT_HASH]" 17 2) ] - - control: KCons - - log/DROP (exit) @ location: 55 - [ (Pair "[CONTRACT_HASH]" 17 2) ] - - DROP (entry) @ location: 61 - [ (Pair "[CONTRACT_HASH]" 17 2) ] - - log/UNIT (exit) @ location: 61 - [ ] - - UNIT (entry) @ location: 62 - [ ] - - log/NIL (exit) @ location: 62 - [ Unit ] - - NIL (entry) @ location: 63 - [ Unit ] - - log/PAIR (exit) @ location: 63 - [ {} - Unit ] - - PAIR (entry) @ location: 65 - [ {} - Unit ] - - log/[halt] (exit) @ location: 65 - [ (Pair {} Unit) ] - - [halt] (entry) @ location: 7 - [ (Pair {} Unit) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/view_fib.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/view_fib.out deleted file mode 100644 index 374caebbb37841d31f1819d69d3f0e86f384ffbe..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/view_fib.out +++ /dev/null @@ -1,41 +0,0 @@ - -trace - - CAR (interp) @ location: 9 - [ (Pair (Pair 8 "[CONTRACT_HASH]") 0) ] - - CAR (entry) @ location: 9 - [ (Pair (Pair 8 "[CONTRACT_HASH]") 0) ] - - log/UNPAIR (exit) @ location: 9 - [ (Pair 8 "[CONTRACT_HASH]") ] - - UNPAIR (entry) @ location: 10 - [ (Pair 8 "[CONTRACT_HASH]") ] - - log/VIEW (exit) @ location: 10 - [ 8 - "[CONTRACT_HASH]" ] - - VIEW (entry) @ location: 11 - [ 8 - "[CONTRACT_HASH]" ] - - control: KView_exit - - log/IF_NONE (exit) @ location: 11 - [ (Some 21) ] - - IF_NONE (entry) @ location: 15 - [ (Some 21) ] - - log/NIL (exit) @ location: 15 - [ 21 ] - - NIL (entry) @ location: 21 - [ 21 ] - - log/PAIR (exit) @ location: 21 - [ {} - 21 ] - - PAIR (entry) @ location: 23 - [ {} - 21 ] - - log/[halt] (exit) @ location: 23 - [ (Pair {} 21) ] - - [halt] (entry) @ location: 8 - [ (Pair {} 21) ] - - control: KCons - - log/[halt] (exit) @ location: 15 - [ (Pair {} 21) ] - - [halt] (entry) @ location: 8 - [ (Pair {} 21) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/view_toplevel_lib.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/view_toplevel_lib.out deleted file mode 100644 index 8791bd97f511034fcb1e3b6ab5261de2c48fd747..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/view_toplevel_lib.out +++ /dev/null @@ -1,21 +0,0 @@ - -trace - - CAR (interp) @ location: 7 - [ (Pair 5 3) ] - - CAR (entry) @ location: 7 - [ (Pair 5 3) ] - - log/NIL (exit) @ location: 7 - [ 5 ] - - NIL (entry) @ location: 8 - [ 5 ] - - log/PAIR (exit) @ location: 8 - [ {} - 5 ] - - PAIR (entry) @ location: 10 - [ {} - 5 ] - - log/[halt] (exit) @ location: 10 - [ (Pair {} 5) ] - - [halt] (entry) @ location: 6 - [ (Pair {} 5) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/xor.out b/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/xor.out deleted file mode 100644 index 5eb5063226ee2d8ba8a2ab8432660c92eb760188..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/expected/test_logging.ml/xor.out +++ /dev/null @@ -1,48 +0,0 @@ - -trace - - CAR (interp) @ location: 16 - [ (Pair (Left (Pair True False)) None) ] - - CAR (entry) @ location: 16 - [ (Pair (Left (Pair True False)) None) ] - - log/IF_LEFT (exit) @ location: 16 - [ (Left (Pair True False)) ] - - IF_LEFT (entry) @ location: 17 - [ (Left (Pair True False)) ] - - log/UNPAIR (exit) @ location: 17 - [ (Pair True False) ] - - UNPAIR (entry) @ location: 19 - [ (Pair True False) ] - - log/XOR (exit) @ location: 19 - [ True - False ] - - XOR (entry) @ location: 20 - [ True - False ] - - log/LEFT (exit) @ location: 20 - [ True ] - - LEFT (entry) @ location: 21 - [ True ] - - log/[halt] (exit) @ location: 21 - [ (Left True) ] - - [halt] (entry) @ location: 28 - [ (Left True) ] - - control: KCons - - log/SOME (exit) @ location: 17 - [ (Left True) ] - - SOME (entry) @ location: 28 - [ (Left True) ] - - log/NIL (exit) @ location: 28 - [ (Some (Left True)) ] - - NIL (entry) @ location: 29 - [ (Some (Left True)) ] - - log/PAIR (exit) @ location: 29 - [ {} - (Some (Left True)) ] - - PAIR (entry) @ location: 31 - [ {} - (Some (Left True)) ] - - log/[halt] (exit) @ location: 31 - [ (Pair {} (Some (Left True))) ] - - [halt] (entry) @ location: 15 - [ (Pair {} (Some (Left True))) ] - - control: KNil diff --git a/src/proto_019_PtParisB/lib_protocol/test/regression/test_logging.ml b/src/proto_019_PtParisB/lib_protocol/test/regression/test_logging.ml deleted file mode 100644 index 6426f0f6c181bd079a35feb6dbe9edb395cc1017..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/regression/test_logging.ml +++ /dev/null @@ -1,402 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (type-checking) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/regression/main.exe - Subject: Type-checking - *) - -open Protocol -open Alpha_context -open Tezt - -module Traced_interpreter = Plugin.RPC.Scripts.Traced_interpreter (struct - let unparsing_mode = Script_ir_unparser.Readable -end) - -type contract = {filename : string; storage : string} - -type transaction = - | Simple of {dst : contract; amount : Tez.t; parameter : string} - | With_lib of { - dst : contract; - lib : contract; - amount : Tez.t; - parameter : Contract_hash.t -> string; - } - -type element_kind = Interp | Entry | Exit - -type log_element = - | With_stack : - context - * ('a, 'b, 'c, 'd) Script_typed_ir.kinstr - * Script.location - * ('e * 'f) - * ('e, 'f) Script_typed_ir.stack_ty - * element_kind - -> log_element - | Ctrl : ('a, 'b, 'c, 'd) Script_typed_ir.continuation -> log_element - -type trace_element = - | TInstr : - Script.location - * Gas.t - * ('a, 'b, 'c, 'd) Script_typed_ir.kinstr - * Script.expr list - * element_kind - -> trace_element - | TCtrl : ('a, 'b, 'c, 'd) Script_typed_ir.continuation -> trace_element - -let transaction ?(amount = Tez.zero) ~parameter ~storage filename = - Simple {amount; parameter; dst = {filename; storage}} - -let with_lib ?(amount = Tez.zero) ~parameter ~storage ~lib ~lib_storage filename - = - With_lib - { - amount; - parameter; - dst = {storage; filename}; - lib = {filename = lib; storage = lib_storage}; - } - -let filename = function - | Simple {dst = {filename; _}; _} | With_lib {dst = {filename; _}; _} -> - filename - -let amount = function Simple {amount; _} | With_lib {amount; _} -> amount - -let storage = function - | Simple {dst = {storage; _}; _} | With_lib {dst = {storage; _}; _} -> storage - -let with_indentation fmt = function - | Interp -> - Format.fprintf - fmt - "- @[%a (interp) @@ location: %d@,[ @[%a ]@]@]" - | Exit -> - Format.fprintf - fmt - "- @[%a (exit) @@ location: %d@,[ @[%a ]@]@]@]" - | Entry -> - Format.fprintf - fmt - "@[- @[%a (entry) @@ location: %d@,[ @[%a ]@]@]" - -let pp_trace fmt = function - | TInstr (loc, _gas, instr, stack, element_kind) -> - with_indentation - fmt - element_kind - Plugin.RPC.Scripts.pp_instr_name - instr - loc - (Format.pp_print_list (fun ppf e -> - Format.fprintf ppf "@[%a@]" Michelson_v1_printer.print_expr e)) - stack - | TCtrl continuation -> ( - Format.fprintf fmt "- @[control: %s@]" - @@ - match continuation with - | KNil -> "KNil" - | KCons _ -> "KCons" - | KReturn _ -> "KReturn" - | KView_exit _ -> "KView_exit" - | KMap_head _ -> "KMap_head" - | KUndip _ -> "KUndip" - | KLoop_in _ -> "KLoop_in" - | KLoop_in_left _ -> "KLoop_in_left" - | KIter _ -> "KIter" - | KList_enter_body _ -> "KList_enter_body" - | KList_exit_body _ -> "KList_exit_body" - | KMap_enter_body _ -> "KMap_enter_body" - | KMap_exit_body _ -> "KMap_exit_body" - | KLog _ -> "KLog") - -let logger () : - (unit -> trace_element list tzresult Lwt.t) * Script_typed_ir.logger = - let open Lwt_result_wrap_syntax in - let open Script_typed_ir in - let log : log_element list ref = ref [] in - let logger = - Script_interpreter_logging.make - (module struct - let log_interp : type a s b f c u. (a, s, b, f, c, u) logging_function = - fun instr ctxt loc sty stack -> - log := With_stack (ctxt, instr, loc, stack, sty, Interp) :: !log - - let log_entry instr ctxt loc sty stack = - log := With_stack (ctxt, instr, loc, stack, sty, Entry) :: !log - - let log_exit instr ctxt loc sty stack = - log := With_stack (ctxt, instr, loc, stack, sty, Exit) :: !log - - let log_control cont = log := Ctrl cont :: !log - - let get_log () = return_none - end) - in - let assemble_log () = - let+ l = - List.map_es - (function - | With_stack (ctxt, instr, loc, stack, stack_ty, indent) -> - let+@ stack = - Traced_interpreter.unparse_stack ctxt (stack, stack_ty) - in - TInstr (loc, Gas.level ctxt, instr, stack, indent) - | Ctrl cont -> return @@ TCtrl cont) - !log - in - List.rev l - in - (assemble_log, logger) - -(* [with_logger ~mask f] creates a fresh logger and passes it to [f]. - After [f] finishes, logs are gathered and each occurrence of each - string in [mask] list is being replaced with asterisks. Thus processed - log is captured as regression output. *) -let with_logger f = - let open Lwt_result_syntax in - let get_log, logger = logger () in - let* () = f logger in - let* log = get_log () in - let capture s = Tezos_regression.replace_variables s |> Regression.capture in - Format.kasprintf - capture - "@,@[trace@,%a@]" - (Format.pp_print_list pp_trace) - log ; - return_unit - -let read_code filename = - let filename = - project_root // Filename.dirname __FILE__ // "contracts" - // (filename ^ ".tz") - in - Contract_helpers.read_file filename - -let run_script transaction () = - let open Lwt_result_syntax in - let script = read_code @@ filename transaction in - let* parameter, ctxt = - match transaction with - | With_lib {lib = {filename; storage}; parameter; _} -> - let* block, baker, _contract, _src2 = - Contract_helpers.init - ~hard_gas_limit_per_block:(Gas.Arith.integral_of_int_exn 10_000_000) - () - in - let sender = Contract.Implicit baker in - let* src_addr, _script, block = - Contract_helpers.originate_contract_from_string_hash - ~baker - ~source_contract:sender - ~script:(read_code filename) - ~storage - block - in - let* incr = Incremental.begin_construction block in - return (parameter src_addr, Incremental.alpha_ctxt incr) - | Simple {parameter; _} -> - let* b, _contract = Context.init1 ~consensus_threshold:0 () in - let* inc = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt inc in - let ctxt = - Alpha_context.Origination_nonce.init ctxt Operation_hash.zero - in - return (parameter, ctxt) - in - with_logger @@ fun logger -> - let step_constants = - Contract_helpers. - { - default_step_constants with - amount = amount transaction; - now = Script_timestamp.of_int64 1649939559L; - } - in - let* _res, _ctxt = - Contract_helpers.run_script - ctxt - script - ~logger - ~storage:(storage transaction) - ~parameter - ~step_constants - ~internal:true (* Allow for forged values (e.g. tickets). *) - () - in - return_unit - -let fail_on_error f () = - let open Lwt_syntax in - let* result = f () in - match result with - | Ok () -> return_unit - | Error e -> Test.fail "%a" Error_monad.pp_print_trace e - -(* Make sure that after a snapshot the snapshotted version of the test - has a different [~title], because all tests are linked in [tezt/tests/main.exe]. *) -let protocol = - match __FILE__ =~* rex "^src/proto_([0-9a-zA-Z_]*)/" with - | None -> - Stdlib.failwith ("failed to extract protocol name from path: " ^ __FILE__) - | Some name -> name - -let register_script transaction = - (* [~title] must be unique across the codebase, so we prefix it with the protocol name. - [~file] however is better kept the same across protocols to simplify snapshotting. *) - let file = filename transaction in - Regression.register - ~__FILE__ - ~title:(protocol ^ ": " ^ file) - ~tags:["protocol"; "regression"; "logging"] - ~file - (fail_on_error @@ run_script transaction) - -(* These tests should always cover: - - every instruction type, which means an example of each group of instructions - which are similar to each other with respect to logging; no need to cover every - instruction whatsoever, but just every distinct kind ; - - every continuation and control structure in Michelson, because those impact - what is being logged and what is not. - We are not concerned with gas, because that's kept track of by regular regression - tests. Actually, gas is unaccounted for in all the tests in this module. *) -let () = - Array.iter - register_script - [| - transaction - ~storage:"{}" - ~parameter:"Left \"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx\"" - "accounts"; - transaction - ~storage:"{1; 2; 3}" - ~parameter:"Pair {7; 8; 9} {4; 5; 6}" - "append"; - transaction - ~amount:(Tez.of_mutez_exn 100_000_000L) - ~parameter:"\"tz1b7tUupMgCNw2cCLpKTkSD1NZzB5TkP2sv\"" - ~storage: - "Pair \"2099-12-31T23:59:59Z\" (Pair 50000000 \ - \"tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU\")" - "auction"; - transaction - ~parameter:"{Pair \"string\" 12; Pair \"abc\" 99; Pair \"def\" 3}" - ~storage:"Pair { Elt \"123\" 123 } Unit" - "big_map_union"; - transaction - ~parameter:"\"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav\"" - ~storage: - "Pair \ - \"edsigu6Ue4mQgPC5aCFqqjitU9pCs5VErXrfPTAZffyJepccGzDEEBExtuPjGuMc2ZRSTBUDR7tJMLVTeJzZn7p9jN9inh4ooV1\" \ - \"TEZOS\"" - "check_signature"; - transaction ~parameter:"Pair 1 4 2 Unit" ~storage:"Unit" "comb-get"; - transaction ~parameter:"Unit" ~storage:"Pair 1 4 2 Unit" "comb-set"; - transaction ~parameter:"\"abcd\"" ~storage:"\"efgh\"" "concat"; - transaction ~parameter:"Right (Some 23)" ~storage:"\"\"" "conditionals"; - transaction ~parameter:"2" ~storage:"60" "cps_fact"; - transaction - ~parameter:"Pair (Pair (Pair (Pair 0 1) 2) 3) 4" - ~storage:"7" - "dign"; - transaction - ~parameter:"Pair (Pair (Pair (Pair 0 1) 2) 3) 4" - ~storage:"7" - "dipn"; - transaction - ~parameter:"Pair (Pair (Pair (Pair 0 1) 2) 3) 4" - ~storage:"7" - "dugn"; - transaction - ~parameter:"Pair 127 11" - ~storage:"Pair None None None None" - "ediv"; - transaction - ~parameter:"\"tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU\"" - ~storage:"\"2020-01-01T00:00:00Z\"" - "faucet"; - transaction - ~parameter:"\"abc\"" - ~storage:"Pair (Some 321) {Elt \"def\" 123}" - "get_and_update_map"; - transaction ~parameter:"True" ~storage:"None" "if"; - transaction - ~parameter:"{8; 3; 2; 7; 6; 9; 5; 1; 4; 0}" - ~storage:"{}" - "insertion_sort"; - transaction - ~parameter:"{1; 2; 3; 4; 5; 6; 7}" - ~storage:"{}" - "list_map_block"; - transaction - ~parameter:"{\"abc\"; \"xyz\"}" - ~storage:"{\"zyx\"; \"cba\"}" - "loop_left"; - transaction - ~parameter: - "Pair (Pair (Pair \"abc\" {1; 2; 3}) {4; 5; 6}) \ - 0x0507070707010000000361626302000000060001000200030200000006000400050006" - ~storage:"Unit" - "packunpack"; - transaction ~parameter:"7" ~storage:"77" "pexec"; - transaction - ~parameter:"{\"abc\"; \"def\" ; \"ghi\"}" - ~storage:"{}" - "reverse_loop"; - transaction - ~parameter:"Some \"tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN\"" - ~storage:"Unit" - "set_delegate"; - transaction ~parameter:"Right (Pair 3 2)" ~storage:"None" "shifts"; - transaction - ~amount:(Tez.of_mutez_exn 1_200_00L) - ~parameter:"7" - ~storage:"{}" - "spawn_identities"; - transaction - ~parameter:"Ticket \"KT1Ln1MPvHDJ1phLL8dNL4jrKF6Q1yQCBG1v\" nat 17 3" - ~storage:"None" - "ticket_join"; - transaction - ~parameter:"Ticket \"KT1Ln1MPvHDJ1phLL8dNL4jrKF6Q1yQCBG1v\" nat 17 3" - ~storage:"Unit" - "ticket_split"; - transaction ~parameter:"5" ~storage:"3" "view_toplevel_lib"; - transaction ~parameter:"Left (Pair True False)" ~storage:"None" "xor"; - transaction ~parameter:"7" ~storage:"Some 3" "opt_map"; - with_lib - ~parameter:(Format.asprintf "Pair 8 \"%a\"" Contract_hash.pp) - ~storage:"0" - ~lib:"view_toplevel_lib" - ~lib_storage:"0" - "view_fib"; - transaction ~parameter:"Unit" ~storage:"Unit" "rec_id_unit"; - |] diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/dune b/src/proto_019_PtParisB/lib_protocol/test/unit/dune deleted file mode 100644 index 52ad724c304b490cf665c33651c17e2ad072ce07..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/dune +++ /dev/null @@ -1,99 +0,0 @@ -; This file was automatically generated, do not edit. -; Edit file manifest/main.ml instead. - -(library - (name src_proto_019_PtParisB_lib_protocol_test_unit_tezt_lib) - (instrumentation (backend bisect_ppx)) - (libraries - tezt.core - octez-libs.base - octez-libs.base-test-helpers - octez-libs.micheline - octez-protocol-019-PtParisB-libs.client - octez-shell-libs.client-base - tezos-protocol-019-PtParisB.parameters - octez-proto-libs.protocol-environment - octez-libs.stdlib-unix - tezos-protocol-019-PtParisB.protocol - octez-libs.test-helpers - octez-protocol-019-PtParisB-libs.test-helpers - octez-alcotezt - octez-l2-libs.scoru-wasm-helpers - octez-libs.stdlib - octez-libs.crypto-dal - octez-l2-libs.scoru-wasm - octez-l2-libs.webassembly-interpreter-extra) - (library_flags (:standard -linkall)) - (flags - (:standard) - -open Tezt_core - -open Tezt_core.Base - -open Tezos_base.TzPervasives - -open Tezos_base_test_helpers - -open Tezos_micheline - -open Tezos_client_019_PtParisB - -open Tezos_protocol_019_PtParisB_parameters - -open Tezos_protocol_019_PtParisB - -open Tezos_test_helpers - -open Tezos_019_PtParisB_test_helpers - -open Octez_alcotezt - -open Tezos_scoru_wasm_helpers - -open Tezos_stdlib - -open Tezos_crypto_dal - -open Tezos_webassembly_interpreter_extra) - (modules - test_bond_id_repr - test_consensus_key - test_contract_repr - test_destination_repr - test_fitness - test_fixed_point - test_gas_monad - test_global_constants_storage - test_level_module - test_liquidity_baking_repr - test_merkle_list - test_operation_repr - test_qty - test_receipt - test_round_repr - test_saturation - test_sc_rollup_arith - test_sc_rollup_game - test_sc_rollup_inbox - test_sc_rollup_management_protocol - test_sc_rollup_storage - test_skip_list_repr - test_tez_repr - test_time_repr - test_zk_rollup_storage - test_sc_rollup_inbox_legacy - test_sc_rollup_wasm - test_local_contexts - test_dal_slot_proof - test_adaptive_issuance - test_adaptive_issuance_ema - test_percentage - test_full_staking_balance_repr - test_slashing_percentage)) - -(executable - (name main) - (instrumentation (backend bisect_ppx --bisect-sigterm)) - (libraries - src_proto_019_PtParisB_lib_protocol_test_unit_tezt_lib - tezt) - (link_flags - (:standard) - (:include %{workspace_root}/macos-link-flags.sexp)) - (modules main)) - -(rule - (alias runtest) - (package tezos-protocol-019-PtParisB-tests) - (enabled_if (<> false %{env:RUNTEZTALIAS=true})) - (action (run %{dep:./main.exe} /flaky /ci_disabled))) - -(rule - (targets main.ml) - (action (with-stdout-to %{targets} (echo "let () = Tezt.Test.run ()")))) diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_adaptive_issuance.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_adaptive_issuance.ml deleted file mode 100644 index d12171c5cf8212ccdc5c48766f1bc1ad3ab3ffbe..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_adaptive_issuance.ml +++ /dev/null @@ -1,616 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (rewards) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_adaptive_issuance.ml - Subject: Test reward values under adaptive issuance -*) - -open Protocol -open Alpha_context - -let test_reward_coefficient () = - let open Lwt_result_wrap_syntax in - let csts = Default_parameters.constants_test in - let*?@ default = - Delegate.Rewards.For_RPC.( - reward_from_constants csts ~reward_kind:Baking_reward_fixed_portion) - in - let*?@ default_times_4 = - Delegate.Rewards.For_RPC.( - reward_from_constants - ~coeff:(Q.of_int 4) - csts - ~reward_kind:Baking_reward_fixed_portion) - in - Assert.equal_tez ~loc:__LOC__ Tez_helpers.(default *! 4L) default_times_4 - -let test_reward_coeff_ratio () = - let open Delegate.Rewards.Internal_for_tests in - let open Lwt_result_wrap_syntax in - let assert_eq ~loc a b = Assert.equal ~loc Q.equal "" Q.pp_print a b in - (* Curve tests *) - let curve stake_ratio = - compute_reward_coeff_ratio_without_bonus - ~stake_ratio - ~issuance_ratio_max:(Q.of_int 1_000_000) - ~issuance_ratio_min:(Q.of_int (-1_000_000)) - in - (* Test the curve on some staking points: 1, 1/10, 1/100, 1/2 *) - let* () = assert_eq ~loc:__LOC__ (curve Q.one) Q.(1 // 1600) in - let* () = assert_eq ~loc:__LOC__ (curve Q.(1 // 10)) Q.(1 // 16) in - let* () = assert_eq ~loc:__LOC__ (curve Q.(1 // 100)) Q.(100 // 16) in - let* () = assert_eq ~loc:__LOC__ (curve Q.(1 // 2)) Q.(1 // 400) in - (* Test the curve on extreme values: ε and 1 - ε with ε small *) - let epsilon = Q.(3 // 50000) in - let one_m_e = Q.(one - epsilon) in - let* () = - assert_eq ~loc:__LOC__ (curve epsilon) Q.(1 // 1600 / (epsilon * epsilon)) - in - let* () = - assert_eq ~loc:__LOC__ (curve one_m_e) Q.(1 // 1600 / (one_m_e * one_m_e)) - in - (* Test min max *) - let bound = Q.(1 // 30) in - (* curve(1/10) = 1/16 > 1/30 (max). Expected result: 1/30 *) - let* () = - assert_eq - ~loc:__LOC__ - (compute_reward_coeff_ratio_without_bonus - ~stake_ratio:Q.(1 // 10) - ~issuance_ratio_max:bound - ~issuance_ratio_min:(Q.of_int (-100))) - bound - in - (* curve(1) = 1/1600 < 1/30 (min). Expected result: 1/30 *) - let* () = - assert_eq - ~loc:__LOC__ - (compute_reward_coeff_ratio_without_bonus - ~stake_ratio:Q.one - ~issuance_ratio_max:(Q.of_int 100) - ~issuance_ratio_min:bound) - bound - in - return_unit - -let test_compute_bonus () = - let open Delegate.Rewards.Internal_for_tests in - let open Lwt_result_wrap_syntax in - let assert_fun ~loc ~f a b = - let* a in - Assert.equal ~loc f "" Q.pp_print a b - in - let assert_eq ~loc a b = - let* a in - Assert.equal ~loc Q.equal "" Q.pp_print a b - in - let reward_params = - Default_parameters.constants_test.adaptive_issuance.adaptive_rewards_params - in - (* For simplicity, one cycle = one day *) - let seconds_per_cycle = 86_400L in - let compute_bonus ?(seconds_per_cycle = seconds_per_cycle) stake_ratio - previous_bonus = - let () = assert (Q.(stake_ratio <= one)) in - let*?@ previous_bonus = - Issuance_bonus_repr.of_Q ~max_bonus:reward_params.max_bonus previous_bonus - in - let issuance_ratio_max = reward_params.issuance_ratio_final_max in - let issuance_ratio_min = reward_params.issuance_ratio_final_min in - let base_reward_coeff_ratio = - compute_reward_coeff_ratio_without_bonus - ~stake_ratio - ~issuance_ratio_max - ~issuance_ratio_min - in - let*?@ bonus = - compute_bonus - ~issuance_ratio_max - ~seconds_per_cycle - ~stake_ratio - ~base_reward_coeff_ratio - ~previous_bonus - ~reward_params - in - let full_reward_coeff = Q.add (bonus :> Q.t) base_reward_coeff_ratio in - (* The full coeff should be within the bounds *) - let* () = - assert_fun - ~loc:__LOC__ - ~f:Q.geq - (return full_reward_coeff) - issuance_ratio_min - in - let* () = - assert_fun - ~loc:__LOC__ - ~f:Q.leq - (return full_reward_coeff) - issuance_ratio_max - in - return (bonus :> Q.t) - in - let small_bonus = Q.(1 // 200) (* 0.5% *) in - (* Test deadzone *) - let* () = - assert_eq ~loc:__LOC__ (compute_bonus Q.(48 // 100) small_bonus) small_bonus - in - let* () = - assert_eq ~loc:__LOC__ (compute_bonus Q.(52 // 100) small_bonus) small_bonus - in - let* () = - assert_fun - ~loc:__LOC__ - ~f:Q.gt - (compute_bonus Q.(47_9999 // 100_0000) small_bonus) - small_bonus - in - let* () = - assert_fun - ~loc:__LOC__ - ~f:Q.lt - (compute_bonus Q.(52_0001 // 100_0000) small_bonus) - small_bonus - in - (* Test variation amplitude *) - let variation = Q.(1 // 10_000) (* 0.01% *) in - let* () = - assert_eq - ~loc:__LOC__ - (compute_bonus Q.(47 // 100) small_bonus) - (Q.add small_bonus variation) - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_bonus Q.(40 // 100) small_bonus) - (Q.add small_bonus (Q.mul variation (Q.of_int 8))) - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_bonus Q.(53 // 100) small_bonus) - (Q.sub small_bonus variation) - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_bonus Q.(60 // 100) small_bonus) - (Q.sub small_bonus (Q.mul variation (Q.of_int 8))) - in - (* Test bounds *) - let max_bonus = (reward_params.max_bonus :> Q.t) in - let* () = - assert_eq ~loc:__LOC__ (compute_bonus Q.(60 // 100) Q.zero) Q.zero - in - let* () = - assert_fun - ~loc:__LOC__ - ~f:Q.leq - (compute_bonus Q.(40 // 100) max_bonus) - max_bonus - in - (* Test linearity wrt seconds_per_cycle *) - let compute_growth seconds_per_cycle = - let* computed_bonus = - compute_bonus ~seconds_per_cycle Q.(47 // 100) small_bonus - in - return Q.(sub computed_bonus small_bonus) - in - let* base_growth = compute_growth seconds_per_cycle in - let* () = - assert_eq - ~loc:__LOC__ - (compute_growth (Int64.div seconds_per_cycle 2L)) - Q.(mul (1 // 2) base_growth) - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_growth (Int64.mul seconds_per_cycle 2L)) - Q.(mul (2 // 1) base_growth) - in - return_unit - -let test_compute_coeff () = - let open Delegate.Rewards.Internal_for_tests in - let open Lwt_result_wrap_syntax in - let assert_eq ~loc a b = Assert.equal ~loc Q.equal "" Q.pp_print a b in - let assert_eq_lwt ~loc a b = - let* a in - let* b in - Assert.equal ~loc Q.equal "" Q.pp_print a b - in - let reward_params = - Default_parameters.constants_test.adaptive_issuance.adaptive_rewards_params - in - let base_total_issued_per_minute = - Default_parameters.constants_test.issuance_weights - .base_total_issued_per_minute |> Tez.to_mutez |> Tez_repr.of_mutez_exn - in - let compute_coeff - ?(base_total_issued_per_minute = base_total_issued_per_minute) - ?(q_total_supply = Q.of_int64 1_000_000_000L) () = - compute_coeff - ~issuance_ratio_max:reward_params.issuance_ratio_final_max - ~issuance_ratio_min:reward_params.issuance_ratio_final_min - ~base_total_issued_per_minute - ~q_total_supply - in - (* Test inverse linearity wrt base issuance - Base issuance * Issuance coeff = constant (= issuance per unit of time) - In other words, ∀α>0.αf(αx)=f(x), where x is the base issuance - and f is compute_coeff *) - let* () = - let base_issuance = 20_000_000L in - let compute_coeff base = - compute_coeff - ~base_total_issued_per_minute:(Tez_repr.of_mutez_exn base) - ~base_reward_coeff_ratio:Q.(1 // 100) - ~bonus:Issuance_bonus_repr.zero - () - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_coeff (Int64.div base_issuance 2L)) - Q.(mul (2 // 1) (compute_coeff base_issuance)) - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_coeff (Int64.mul base_issuance 2L)) - Q.(mul (1 // 2) (compute_coeff base_issuance)) - in - (* Test edge case base = 0 *) - let* () = assert_eq ~loc:__LOC__ (compute_coeff 0L) Q.one in - return_unit - in - (* Test linearity wrt total_supply *) - let* () = - let total_supply = Q.of_int64 1_000_000_000L in - let compute_coeff q_total_supply = - compute_coeff - ~q_total_supply - ~base_reward_coeff_ratio:Q.(1 // 100) - ~bonus:Issuance_bonus_repr.zero - () - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_coeff Q.(mul (1 // 2) total_supply)) - Q.(mul (1 // 2) (compute_coeff total_supply)) - in - let* () = - assert_eq - ~loc:__LOC__ - (compute_coeff Q.(mul (2 // 1) total_supply)) - Q.(mul (2 // 1) (compute_coeff total_supply)) - in - return_unit - in - let* () = - let compute_coeff base_reward_coeff_ratio bonus = - (* bonus must be <= 5% *) - let*?@ bonus = - Issuance_bonus_repr.of_Q ~max_bonus:reward_params.max_bonus bonus - in - return @@ compute_coeff ~base_reward_coeff_ratio ~bonus () - in - let q_mul a b = - let* b in - return @@ Q.mul a b - in - let q_add a b = - let* a in - let* b in - return @@ Q.add a b - in - (* Test linearity wrt base_reward_coeff_ratio *) - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff Q.(2 // 99) Q.zero) - (q_mul Q.(2 // 1) (compute_coeff Q.(1 // 99) Q.zero)) - in - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff Q.(3 // 99) Q.zero) - (q_add - (compute_coeff Q.(2 // 99) Q.zero) - (compute_coeff Q.(1 // 99) Q.zero)) - in - (* Test symmetry *) - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff Q.(1 // 99) Q.zero) - (compute_coeff Q.zero Q.(1 // 99)) - in - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff Q.(2 // 99) Q.(1 // 99)) - (compute_coeff Q.(1 // 99) Q.(2 // 99)) - in - (* Test min *) - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff Q.zero Q.zero) - (compute_coeff reward_params.issuance_ratio_final_min Q.zero) - in - (* Test max *) - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff - (Q.add reward_params.issuance_ratio_final_max Q.one) - Q.zero) - (compute_coeff reward_params.issuance_ratio_final_max Q.zero) - in - let* () = - assert_eq_lwt - ~loc:__LOC__ - (compute_coeff reward_params.issuance_ratio_final_max Q.(1 // 100)) - (compute_coeff reward_params.issuance_ratio_final_max Q.zero) - in - return_unit - in - return_unit - -let test_compute_min_max () = - let open Delegate.Rewards.Internal_for_tests in - let open Lwt_result_wrap_syntax in - (* let assert_eq ~loc a b = Assert.equal ~loc Q.equal "" Q.pp_print a b in *) - let assert_eq_list ~loc a b = - Assert.assert_equal_list ~loc Q.equal "" Q.pp_print a b - in - let reward_params = - Default_parameters.constants_test.adaptive_issuance.adaptive_rewards_params - in - let update_reward_params ?issuance_ratio_final_min ?issuance_ratio_final_max - ?issuance_ratio_initial_min ?issuance_ratio_initial_max ?initial_period - ?transition_period - (reward_params : Constants.Parametric.adaptive_rewards_params) = - let issuance_ratio_final_min = - Option.value - ~default:reward_params.issuance_ratio_final_min - issuance_ratio_final_min - in - let issuance_ratio_final_max = - Option.value - ~default:reward_params.issuance_ratio_final_max - issuance_ratio_final_max - in - let issuance_ratio_initial_min = - Option.value - ~default:reward_params.issuance_ratio_initial_min - issuance_ratio_initial_min - in - let issuance_ratio_initial_max = - Option.value - ~default:reward_params.issuance_ratio_initial_max - issuance_ratio_initial_max - in - let initial_period = - Option.value ~default:reward_params.initial_period initial_period - in - let transition_period = - Option.value ~default:reward_params.transition_period transition_period - in - { - reward_params with - issuance_ratio_final_min; - issuance_ratio_final_max; - issuance_ratio_initial_min; - issuance_ratio_initial_max; - initial_period; - transition_period; - } - in - let compute_aux ~f ?issuance_ratio_final_min ?issuance_ratio_final_max - ?issuance_ratio_initial_min ?issuance_ratio_initial_max ?initial_period - ?transition_period ?(launch_cycle = Some 0l) cycle = - let launch_cycle = Option.map Cycle_repr.of_int32_exn launch_cycle in - let new_cycle = Cycle_repr.of_int32_exn (Int32.of_int cycle) in - let reward_params = - update_reward_params - ?issuance_ratio_final_min - ?issuance_ratio_final_max - ?issuance_ratio_initial_min - ?issuance_ratio_initial_max - ?initial_period - ?transition_period - reward_params - in - f ~reward_params ~launch_cycle ~new_cycle - in - let compute_min = compute_aux ~f:compute_min in - let compute_max = compute_aux ~f:compute_max in - let assert_eq_on_interval ~loc ~f ~from ~to_ expected = - assert (List.length expected = to_ - from + 1) ; - let actual = Stdlib.List.init (to_ - from + 1) (fun i -> f (i + from)) in - assert_eq_list ~loc expected actual - in - (* Python-style list generation *) - let ( *+ ) a b = Stdlib.List.init b (fun _ -> a) in - (* Test before launch cycle *) - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:(compute_min ~launch_cycle:(Some 10l)) - ~from:0 - ~to_:10 - (reward_params.issuance_ratio_initial_min *+ 11) - in - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:(compute_max ~launch_cycle:(Some 10l)) - ~from:0 - ~to_:10 - (reward_params.issuance_ratio_initial_max *+ 11) - in - (* Test no launch cycle *) - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:(compute_min ~launch_cycle:None) - ~from:0 - ~to_:10 - (reward_params.issuance_ratio_initial_min *+ 11) - in - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:(compute_max ~launch_cycle:None) - ~from:0 - ~to_:10 - (reward_params.issuance_ratio_initial_max *+ 11) - in - (* From now on, launch_cycle = 0 *) - (* Test initial period *) - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:compute_min - ~from:0 - ~to_:reward_params.initial_period - (reward_params.issuance_ratio_initial_min - *+ (reward_params.initial_period + 1)) - in - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:compute_max - ~from:0 - ~to_:reward_params.initial_period - (reward_params.issuance_ratio_initial_max - *+ (reward_params.initial_period + 1)) - in - (* Test final period *) - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:compute_min - ~from:(reward_params.initial_period + reward_params.transition_period + 1) - ~to_:(reward_params.initial_period + reward_params.transition_period + 10) - (reward_params.issuance_ratio_final_min *+ 10) - in - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:compute_max - ~from:(reward_params.initial_period + reward_params.transition_period + 1) - ~to_:(reward_params.initial_period + reward_params.transition_period + 10) - (reward_params.issuance_ratio_final_max *+ 10) - in - (* Test transition period *) - let* () = - let initial_period = 5 in - let transition_period = 5 in - let issuance_ratio_initial_min = Q.(7 // 100) in - let issuance_ratio_final_min = Q.(1 // 100) in - (* Min increases by 1/100th per cycle *) - let issuance_ratio_initial_max = Q.(1 // 10) in - let issuance_ratio_final_max = Q.(7 // 10) in - (* Max increases by 1/10th per cycle *) - let compute_min = - compute_min - ~initial_period - ~transition_period - ~issuance_ratio_initial_max - ~issuance_ratio_initial_min - ~issuance_ratio_final_max - ~issuance_ratio_final_min - in - let compute_max = - compute_max - ~initial_period - ~transition_period - ~issuance_ratio_initial_max - ~issuance_ratio_initial_min - ~issuance_ratio_final_max - ~issuance_ratio_final_min - in - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:compute_min - ~from:0 - ~to_:15 - ((issuance_ratio_initial_min *+ 6) - @ Q.[6 // 100; 5 // 100; 4 // 100; 3 // 100; 2 // 100] - @ (issuance_ratio_final_min *+ 5)) - in - let* () = - assert_eq_on_interval - ~loc:__LOC__ - ~f:compute_max - ~from:0 - ~to_:15 - ((issuance_ratio_initial_max *+ 6) - @ Q.[2 // 10; 3 // 10; 4 // 10; 5 // 10; 6 // 10] - @ (issuance_ratio_final_max *+ 5)) - in - return_unit - in - return_unit - -let tests = - Tztest. - [ - tztest - "adaptive issuance - application of coefficient to rewards" - `Quick - test_reward_coefficient; - tztest - "adaptive issuance - reward coeff ratio computation" - `Quick - test_reward_coeff_ratio; - tztest - "adaptive issuance - reward bonus computation" - `Quick - test_compute_bonus; - tztest - "adaptive issuance - reward coeff computation" - `Quick - test_compute_coeff; - tztest - "adaptive issuance - min/max coeff computation" - `Quick - test_compute_min_max; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("adaptive issuance", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_adaptive_issuance_ema.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_adaptive_issuance_ema.ml deleted file mode 100644 index 37200013a21bea7eba72df70bbf3292c1bfc1eba..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_adaptive_issuance_ema.ml +++ /dev/null @@ -1,310 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2023 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol, Adaptive Issuance - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_adaptive_issuance_ema.ml - Subject: Tests for the update functions of the EMA of the launch vote of - Adaptive Issuance -*) - -open Protocol -module Votes_EMA = Per_block_votes_repr.Adaptive_issuance_launch_EMA - -let ema_of_int32 ema = - let open Lwt_result_wrap_syntax in - let*@ result = Votes_EMA.of_int32 ema in - return result - -let ema_to_int32 = Votes_EMA.to_int32 - -let compute_new_ema ~per_block_vote ema = - Per_block_votes_repr.compute_new_adaptive_issuance_ema ~per_block_vote ema - |> ema_to_int32 - -(* Folds compute_new_ema on a list of votes *) -let compute_new_ema_n per_block_votes initial_ema = - List.fold_left - (fun ema per_block_vote -> - Per_block_votes_repr.compute_new_adaptive_issuance_ema ~per_block_vote ema) - initial_ema - per_block_votes - |> ema_to_int32 - -let ema_range = - [ - 0l; - 1l; - 10l; - 100l; - 1000l; - 10_000l; - 100_000l; - 1_000_000l; - 10_000_000l; - 100_000_000l; - 200_000_000l; - 300_000_000l; - 400_000_000l; - 500_000_000l; - 600_000_000l; - 760_000_000l; - 800_000_000l; - 900_000_000l; - 1_000_000_000l; - 1_100_000_000l; - 1_200_000_000l; - 1_300_000_000l; - 1_400_000_000l; - 1_500_000_000l; - 1_600_000_000l; - 1_700_000_000l; - 1_800_000_000l; - 1_900_000_000l; - 1_990_000_000l; - 1_999_000_000l; - 1_999_900_000l; - 1_999_990_000l; - 1_999_999_000l; - 1_999_999_900l; - 1_999_999_990l; - 1_999_999_999l; - 2_000_000_000l; - ] - -(* Test that new_ema = old_ema when voting Pass. *) -let test_ema_pass () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.equal_int32 - ~loc:__LOC__ - (compute_new_ema ~per_block_vote:Per_block_vote_pass ema) - old_ema) - ema_range - -(* Test that new_ema is still between 0 and 2,000,000,000 after an On vote. *) -let test_ema_in_bound_on () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - let new_ema = compute_new_ema ~per_block_vote:Per_block_vote_on ema in - let* () = Assert.leq_int32 ~loc:__LOC__ 0l new_ema in - Assert.leq_int32 ~loc:__LOC__ new_ema 2_000_000_000l) - ema_range - -(* Test that new_ema > old_ema when voting On, except if old_ema is - already very close to the upper bound. *) -let test_ema_increases_on () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.lt_int32 - ~loc:__LOC__ - old_ema - (compute_new_ema ~per_block_vote:Per_block_vote_on ema)) - (List.filter (fun ema -> Compare.Int32.(ema < 1_999_000_000l)) ema_range) - -(* Test that the increase in EMA caused by an On vote is bounded by 1,000,000 *) -let test_ema_increases_on_bound () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.leq_int32 - ~loc:__LOC__ - (Int32.sub - (compute_new_ema ~per_block_vote:Per_block_vote_on ema) - old_ema) - 1_000_000l) - ema_range - -(* Test that new_ema is still between 0 and 2,000,000,000 after an Off vote. *) -let test_ema_in_bound_off () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - let new_ema = compute_new_ema ~per_block_vote:Per_block_vote_off ema in - let* () = Assert.leq_int32 ~loc:__LOC__ 0l new_ema in - Assert.leq_int32 ~loc:__LOC__ new_ema 2_000_000_000l) - ema_range - -(* Test that new_ema < old_ema when voting Off, except if old_ema is - already very close to the lower bound. *) -let test_ema_decreases_off () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.lt_int32 - ~loc:__LOC__ - (compute_new_ema ~per_block_vote:Per_block_vote_off ema) - old_ema) - (List.filter (fun ema -> Compare.Int32.(ema > 1_000_000l)) ema_range) - -(* Test that the decrease in EMA caused by an Off vote is bounded by 1,000,000 *) -let test_ema_decreases_off_bound () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.leq_int32 - ~loc:__LOC__ - (Int32.sub - (compute_new_ema ~per_block_vote:Per_block_vote_off ema) - old_ema) - 1_000_000l) - ema_range - -(* Test that 120961 On votes are needed to move from 0% to 50%. *) -let test_ema_many_on () = - let open Lwt_result_syntax in - let open Per_block_votes_repr in - let* initial_ema = ema_of_int32 0l in - let* () = - Assert.leq_int32 - ~loc:__LOC__ - (compute_new_ema_n - (Stdlib.List.init 80321 (fun _ -> Per_block_vote_on)) - initial_ema) - 1_000_000_000l - in - Assert.leq_int32 - ~loc:__LOC__ - 1_000_000_000l - (compute_new_ema_n - (Stdlib.List.init 120961 (fun _ -> Per_block_vote_on)) - initial_ema) - -(* Test that 120961 Off votes are needed to move from 100% to 50%. *) -let test_ema_many_off () = - let open Lwt_result_syntax in - let open Per_block_votes_repr in - let* initial_ema = ema_of_int32 2_000_000_000l in - let* () = - Assert.leq_int32 - ~loc:__LOC__ - 1_000_000_000l - (compute_new_ema_n - (Stdlib.List.init 80321 (fun _ -> Per_block_vote_off)) - initial_ema) - in - Assert.leq_int32 - ~loc:__LOC__ - (compute_new_ema_n - (Stdlib.List.init 120961 (fun _ -> Per_block_vote_off)) - initial_ema) - 1_000_000_000l - -(* Test that 187259 On votes are needed to move from 0% to 80%. *) -let test_ema_many_many_on () = - let open Lwt_result_syntax in - let open Per_block_votes_repr in - let* initial_ema = ema_of_int32 0l in - let* () = - Assert.leq_int32 - ~loc:__LOC__ - (compute_new_ema_n - (Stdlib.List.init 187258 (fun _ -> Per_block_vote_on)) - initial_ema) - 1_600_000_000l - in - Assert.leq_int32 - ~loc:__LOC__ - 1_600_000_000l - (compute_new_ema_n - (Stdlib.List.init 280894 (fun _ -> Per_block_vote_on)) - initial_ema) - -(* Test that the EMA update function is symmetric: - from two dual values of the EMA (that is, two values x and y such that - x + y = 2,000,000,000), voting Off on the first one decreases it by as - much than voting On on the second one increases it. -*) -let test_ema_symmetry () = - let open Lwt_result_syntax in - List.iter_es - (fun ema -> - let opposite_ema = Int32.(sub 2_000_000_000l ema) in - let* ema = ema_of_int32 ema in - let* opposite_ema = ema_of_int32 opposite_ema in - let new_ema = compute_new_ema ~per_block_vote:Per_block_vote_off ema in - let new_opposite_ema = - compute_new_ema ~per_block_vote:Per_block_vote_on opposite_ema - in - Assert.equal_int32 - ~loc:__LOC__ - Int32.(add new_ema new_opposite_ema) - 2_000_000_000l) - ema_range - -let tests = - [ - Tztest.tztest "EMA does not change when vote is Pass" `Quick test_ema_pass; - Tztest.tztest - "EMA remains in bounds when vote is On" - `Quick - test_ema_in_bound_on; - Tztest.tztest "EMA increases when vote is On" `Quick test_ema_increases_on; - Tztest.tztest - "EMA does not increase too much when vote is On" - `Quick - test_ema_increases_on_bound; - Tztest.tztest - "EMA remains in bounds when vote is Off" - `Quick - test_ema_in_bound_off; - Tztest.tztest "EMA decreases when vote is Off" `Quick test_ema_decreases_off; - Tztest.tztest - "EMA does not decrease too much when vote is Off" - `Quick - test_ema_decreases_off_bound; - Tztest.tztest - "EMA goes from 0% to 50% in 120961 On votes" - `Quick - test_ema_many_on; - Tztest.tztest - "EMA goes from 100% to 50% in 120961 Off votes" - `Quick - test_ema_many_off; - Tztest.tztest - "EMA goes from 0% to 80% in 280894 On votes" - `Quick - test_ema_many_many_on; - Tztest.tztest - "voting On and Off have symmetric effects on the EMA" - `Quick - test_ema_symmetry; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("adaptive issuance ema", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_alpha_context.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_alpha_context.ml deleted file mode 100644 index 64c8d4629225fb2a46927a7c0da45cb2d6bc7dc7..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_alpha_context.ml +++ /dev/null @@ -1,296 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Alpha_context - -(** Testing - ------- - Component: Alpha_context - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_alpha_context.ml - Dependencies: helpers/block.ml - Subject: To test the modules (including the top-level) - in alpha_context.ml as individual units, particularly - failure cases. Superficial goal: increase coverage percentage. -*) - -(** Creates an Alpha_context without creating a full-fledged block *) -let create () = - let account = Account.new_account () in - let bootstrap_account = Account.make_bootstrap_account account in - Block.alpha_context [bootstrap_account] - -let assert_equal_key_values ~loc kvs1 kvs2 = - let sort_by_key_hash = - List.sort (fun (k1, _) (k2, _) -> Script_expr_hash.compare k1 k2) - in - Assert.assert_equal_list - ~loc - (fun (k1, v1) (k2, v2) -> - Script_expr_hash.equal k1 k2 - && String.equal (Expr.to_string v1) (Expr.to_string v2)) - "Compare key-value list" - (fun fmt (k, v) -> - Format.fprintf fmt "(%a, %s)" Script_expr_hash.pp k (Expr.to_string v)) - (sort_by_key_hash kvs1) - (sort_by_key_hash kvs2) - -module Test_Script = struct - (** Force serialise of lazy [Big_map.t] in a given [alpha_context] *) - let test_force_bytes_in_context () = - let open Lwt_result_wrap_syntax in - let* alpha_context = create () in - let mbytes_pp ppf t = - Format.pp_print_string ppf (Environment.Bytes.to_string t) - in - let open Alpha_context.Script in - let*?@ bytes, _ = - force_bytes_in_context alpha_context - @@ lazy_expr @@ Micheline.strip_locations - @@ Prim (0, D_Unit, [], []) - in - Assert.equal - ~loc:__LOC__ - Environment.Bytes.equal - "script serialised incorrectly" - mbytes_pp - bytes - (`Hex "030b" |> Hex.to_bytes_exn) -end - -module Test_Big_map = struct - (** Test failure path: look for a non-existent key in a [Big_map] *) - let test_mem () = - let open Lwt_result_wrap_syntax in - let* alpha_context = create () in - let*@ alpha_context, big_map_id = - Big_map.fresh ~temporary:true alpha_context - in - let*@ _alpha_context, is_member = - Big_map.mem - alpha_context - big_map_id - (Script_expr_hash.hash_string ["0"; "0"]) - in - Assert.equal_bool ~loc:__LOC__ is_member false - - (** Test failure code path of [get_opt] by looking for missing key in a [Big_map.t] *) - let test_get_opt () = - let open Lwt_result_wrap_syntax in - let* alpha_context = create () in - let*@ alpha_context, big_map_id = - Big_map.fresh ~temporary:true alpha_context - in - let*@ _alpha_context, value = - Big_map.get_opt - alpha_context - big_map_id - (Script_expr_hash.hash_string ["0"; "0"]) - in - match value with - | Some _ -> - failwith "get_opt should have failed looking for a non-existent key" - | None -> return_unit - - (** Test existence of a non-existent [Big_map] in an [Alpha_context.t] *) - let test_exists () = - let open Lwt_result_wrap_syntax in - let* alpha_context = create () in - let*@ alpha_context, big_map_id = - Big_map.fresh ~temporary:true alpha_context - in - let*@ _alpha_context, value = Big_map.exists alpha_context big_map_id in - match value with - | Some _ -> - failwith "exists should have failed looking for a non-existent big_map" - | None -> return_unit - - (** Test that [Big_map.list_key_values] retrieves hashed keys and values. *) - let test_list_key_values () = - let open Lwt_result_wrap_syntax in - let* block, source = Context.init1 () in - let key_values = - [ - ("1", {|"A"|}); - ("2", {|"B"|}); - ("3", {|"C"|}); - ("4", {|"D"|}); - ("5", {|"E"|}); - ] - |> List.map (fun (k, v) -> (Expr.from_string k, Expr.from_string v)) - in - let* big_map_id, ctxt = - Big_map_helpers.make_big_map - block - ~source - ~key_type:"int" - ~value_type:"string" - key_values - in - let*@ _ctxt, retrieved_key_values = - Big_map.list_key_values ctxt big_map_id - in - let expected_key_hash_values = - List.map - (fun (key, value) -> - let bytes = - Data_encoding.Binary.to_bytes_exn Script_repr.expr_encoding key - in - let key_hash = Script_expr_hash.hash_bytes [bytes] in - (key_hash, value)) - key_values - in - assert_equal_key_values - ~loc:__LOC__ - expected_key_hash_values - retrieved_key_values - - (** Test [Big_map.list_key_values] with [length] and [offset] arguments. *) - let test_list_key_values_parameters () = - let open Lwt_result_wrap_syntax in - let* block, source = Context.init1 () in - let hash_key key = - let bytes = - Data_encoding.Binary.to_bytes_exn Script_repr.expr_encoding key - in - Script_expr_hash.hash_bytes [bytes] - in - let check_key_values ~loc ~num_elements ?offset ?length () = - let key_values = - WithExceptions.List.init ~loc:__LOC__ num_elements (fun n -> - (string_of_int n, Printf.sprintf {|"Value %d"|} n)) - |> List.map (fun (k, v) -> (Expr.from_string k, Expr.from_string v)) - in - let sorted_key_values = - List.sort - (fun (k1, _) (k2, _) -> - Script_expr_hash.compare (hash_key k1) (hash_key k2)) - key_values - in - let* big_map_id, ctxt = - Big_map_helpers.make_big_map - block - ~source - ~key_type:"int" - ~value_type:"string" - key_values - in - let*@ _ctxt, retrieved_key_values = - Big_map.list_key_values ?offset ?length ctxt big_map_id - in - let expected_key_hash_values = - (* A negative length is interpreted as 0 *) - let length = - match length with - | Some l -> max l 0 - | None -> List.length sorted_key_values - in - let offset = match offset with Some o -> max o 0 | None -> 0 in - let expected = - List.take_n length @@ List.drop_n offset sorted_key_values - in - List.map - (fun (key, value) -> - let bytes = - Data_encoding.Binary.to_bytes_exn Script_repr.expr_encoding key - in - let key_hash = Script_expr_hash.hash_bytes [bytes] in - (key_hash, value)) - expected - in - let* () = - assert_equal_key_values - ~loc - retrieved_key_values - expected_key_hash_values - in - return retrieved_key_values - in - (* The following combinations should yield the same key-values. *) - let* kvs1 = check_key_values ~loc:__LOC__ ~num_elements:10 () in - let* kvs2 = check_key_values ~loc:__LOC__ ~num_elements:10 ~offset:0 () in - let* kvs3 = check_key_values ~loc:__LOC__ ~num_elements:10 ~length:10 () in - let* kvs4 = - check_key_values ~loc:__LOC__ ~num_elements:10 ~offset:0 ~length:10 () - in - let* () = assert_equal_key_values ~loc:__LOC__ kvs1 kvs2 in - let* () = assert_equal_key_values ~loc:__LOC__ kvs2 kvs3 in - let* () = assert_equal_key_values ~loc:__LOC__ kvs3 kvs4 in - (* Attempt to consume more elements then the length. *) - let* kvs1 = check_key_values ~loc:__LOC__ ~num_elements:20 () in - let* kvs2 = check_key_values ~loc:__LOC__ ~num_elements:20 ~length:100 () in - let* () = assert_equal_key_values ~loc:__LOC__ kvs1 kvs2 in - let* (_ : _ list) = - check_key_values ~loc:__LOC__ ~num_elements:100 ~offset:100 ~length:1 () - in - (* Offset greater than the length. *) - let* kvs = check_key_values ~loc:__LOC__ ~num_elements:10 ~offset:100 () in - let* () = assert_equal_key_values ~loc:__LOC__ kvs [] in - (* Negative length is treated as zero. *) - let* kvs = check_key_values ~loc:__LOC__ ~num_elements:10 ~length:(-1) () in - let* () = assert_equal_key_values ~loc:__LOC__ kvs [] in - (* Negative offset is treated as zero. *) - let* kvs1 = - check_key_values ~loc:__LOC__ ~num_elements:10 ~offset:(-5) () - in - let* kvs2 = check_key_values ~loc:__LOC__ ~num_elements:10 () in - let* () = assert_equal_key_values ~loc:__LOC__ kvs1 kvs2 in - return_unit -end - -let tests = - [ - Tztest.tztest - "Script.force_bytes_in_context: checks if it serialises a simple \ - michelson expression" - `Quick - Test_Script.test_force_bytes_in_context; - Tztest.tztest - "Big_map.mem: failure case - must return false when starting with an \ - empty map" - `Quick - Test_Big_map.test_mem; - Tztest.tztest - "Big_map.get_opt: failure case - looking up key that doesn't exist" - `Quick - Test_Big_map.test_get_opt; - Tztest.tztest - "Big_map.exists: failure case - looking up big_map that doesn't exist" - `Quick - Test_Big_map.test_exists; - Tztest.tztest - "Big_map.list_key_values basic tests" - `Quick - Test_Big_map.test_list_key_values; - Tztest.tztest - "Big_map.list_key_values: combinations of parameters" - `Quick - Test_Big_map.test_list_key_values_parameters; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("alpha context", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_bond_id_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_bond_id_repr.ml deleted file mode 100644 index 943ab1c2af46c4a25be720ab5b76f2258455a175..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_bond_id_repr.ml +++ /dev/null @@ -1,118 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trilitech *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Bond_id_repr - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_bond_id_repr.ml - Dependencies: -- - Subject: Test bond id representations for RPC definitions. -*) - -open Protocol - -let assert_bond_id_result_equal ~loc = - Assert.equal_result - ~loc - ~pp_ok:Bond_id_repr.pp - ~pp_error:Format.pp_print_string - Bond_id_repr.( = ) - ( = ) - -let test_destruct_sc_bond_id_repr () = - let open Lwt_result_syntax in - let sc_rollup_address1 = "sr1JPVatbbPoGp4vb6VfQ1jzEPMrYFcKq6VG" in - let sc_rollup_address2 = "sr1JtMTWShgi1jLrqeHohMwLYiGizpsyWzXJ" in - let invalid_sc_rollup_address = "sr1RWAV26caoU7oVMvetUPMt8CqvGmKtA8BO" in - let destruct = Bond_id_repr.Internal_for_test.destruct in - let sc_bond id = - match Sc_rollup_repr.Address.of_b58check_opt id with - | Some id -> Ok (Bond_id_repr.Sc_rollup_bond_id id) - | None -> Error "Not an sc address" - in - let* () = - assert_bond_id_result_equal - ~loc:__LOC__ - (destruct sc_rollup_address1) - (sc_bond sc_rollup_address1) - in - let* () = - assert_bond_id_result_equal - ~loc:__LOC__ - (destruct sc_rollup_address2) - (sc_bond sc_rollup_address2) - in - Assert.is_error - ~loc:__LOC__ - ~pp:Bond_id_repr.pp - (destruct invalid_sc_rollup_address) - -let test_destruct_invalid_bond_id_repr () = - let open Lwt_result_syntax in - let invalid_address = "asdfasdfasdf" in - let empty_address = "" in - let destruct = Bond_id_repr.Internal_for_test.destruct in - let* () = - Assert.is_error ~loc:__LOC__ ~pp:Bond_id_repr.pp (destruct invalid_address) - in - Assert.is_error ~loc:__LOC__ ~pp:Bond_id_repr.pp (destruct empty_address) - -let test_roundtrip () = - let open Lwt_result_syntax in - let destruct_for_rountrip v = - let r = - match Bond_id_repr.Internal_for_test.destruct v with - | Ok r -> return r - | _ -> failwith "Destruct failed for %s" v - in - r - in - let rountrip_test loc s = - let* r = destruct_for_rountrip s in - let s2 = Bond_id_repr.Internal_for_test.construct r in - Assert.equal_string ~loc s s2 - in - let sc_rollup_address1 = "sr1JPVatbbPoGp4vb6VfQ1jzEPMrYFcKq6VG" in - let sc_rollup_address2 = "sr1JtMTWShgi1jLrqeHohMwLYiGizpsyWzXJ" in - let* () = rountrip_test __LOC__ sc_rollup_address1 in - rountrip_test __LOC__ sc_rollup_address2 - -let tests = - [ - Tztest.tztest - "Deserializing sc bond ids succeeds only when id is valid" - `Quick - test_destruct_sc_bond_id_repr; - Tztest.tztest - "Deserializing invalid bond ids fails" - `Quick - test_destruct_invalid_bond_id_repr; - Tztest.tztest "Deserialize/serialize roundtrip" `Quick test_roundtrip; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Bond_id_repr.ml", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_consensus_key.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_consensus_key.ml deleted file mode 100644 index 2222ff72968bef4ad3757293f440096751d143a6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_consensus_key.ml +++ /dev/null @@ -1,260 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 G.B. Fefe, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (delegate_consensus_key) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_consensus_key.ml - Subject: Functions from the module `Delegate_consensus_key` -*) - -open Protocol - -let create () = - let open Lwt_result_syntax in - let*? accounts = Account.generate_accounts 2 in - let a1, a2 = match accounts with [a1; a2] -> (a1, a2) | _ -> assert false in - let* ctxt = - Block.alpha_context - (* TODO: https://gitlab.com/tezos/tezos/-/issues/7072 - Adapt the tests to work with the default value of - [consensus_rights_delay]. *) - ~consensus_rights_delay:3 - (Account.make_bootstrap_accounts accounts) - in - return (Alpha_context.Internal_for_tests.to_raw ctxt, a1, a2) - -module Consensus_key = struct - let active_key ctxt pkh = - let open Lwt_result_wrap_syntax in - let*@ result = Delegate_consensus_key.active_key ctxt pkh in - return result - - let active_pubkey ctxt pkh = - let open Lwt_result_wrap_syntax in - let*@ result = Delegate_consensus_key.active_pubkey ctxt pkh in - return result - - let active_pubkey_for_cycle ctxt pkh cycle = - let open Lwt_result_wrap_syntax in - let*@ result = - Delegate_consensus_key.active_pubkey_for_cycle - ctxt - pkh - (Cycle_repr.of_int32_exn (Int32.of_int cycle)) - in - return result - - let pending_updates ctxt pkh = - let open Lwt_result_wrap_syntax in - let*@ result = Delegate_consensus_key.pending_updates ctxt pkh in - return result - - let register_update ctxt pkh pk = - let open Lwt_result_wrap_syntax in - let*@ result = Delegate_consensus_key.register_update ctxt pkh pk in - return result - - let activate ctxt ~new_cycle = Delegate_consensus_key.activate ctxt ~new_cycle -end - -module Assert = struct - include Assert - - let equal_pkh ~__LOC__ a b = - Assert.equal - ~loc:__LOC__ - Signature.Public_key_hash.equal - "pkh" - Signature.Public_key_hash.pp - a - b - - let equal_pk ~__LOC__ a b = - Assert.equal - ~loc:__LOC__ - Signature.Public_key.equal - "pk" - Signature.Public_key.pp - a - b - - let active_keys ~__LOC__ ctxt delegate l = - List.iter_es - (fun (c, pk) -> - let open Lwt_result_syntax in - let* active_pk = - Consensus_key.active_pubkey_for_cycle ctxt delegate c - in - equal_pk ~__LOC__ active_pk.consensus_pk pk) - l -end - -let rec add_cycles ctxt n = - let open Lwt_result_syntax in - if n <= 0 then return ctxt - else - let current_level = Raw_context.current_level ctxt in - let new_cycle = Cycle_repr.succ current_level.cycle in - let*! ctxt = Consensus_key.activate ctxt ~new_cycle in - let ctxt = Raw_context.Internal_for_tests.add_cycles ctxt 1 in - add_cycles ctxt (n - 1) - -let test_consensus_key_storage () = - let open Lwt_result_syntax in - let* ctxt, del1, del2 = create () in - let a1 = Account.new_account () in - let a2 = Account.new_account () in - let consensus_key_activation_delay = - Constants_storage.consensus_key_activation_delay ctxt - in - let* () = Assert.equal_int ~loc:__LOC__ consensus_key_activation_delay 3 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh del1.pkh - in - let* () = - let* active_pk = Consensus_key.active_pubkey ctxt del1.pkh in - Assert.equal_pk ~__LOC__ active_pk.consensus_pk del1.pk - in - let* () = - let* active_pk = Consensus_key.active_pubkey_for_cycle ctxt del1.pkh 3 in - Assert.equal_pk ~__LOC__ active_pk.consensus_pk del1.pk - in - let* () = - let*! err = Consensus_key.register_update ctxt del1.pkh del2.pk in - Assert.proto_error ~loc:__LOC__ err (function - | Delegate_consensus_key.Invalid_consensus_key_update_active -> true - | _ -> false) - in - let* ctxt = Consensus_key.register_update ctxt del1.pkh a1.pk in - let* () = - let*! err = Consensus_key.register_update ctxt del1.pkh a1.pk in - Assert.proto_error ~loc:__LOC__ err (function - | Delegate_consensus_key.Invalid_consensus_key_update_noop c -> - c = Cycle_repr.of_int32_exn 4l - | _ -> false) - in - let* () = - let*! err = Consensus_key.register_update ctxt del2.pkh a1.pk in - Assert.proto_error ~loc:__LOC__ err (function - | Delegate_consensus_key.Invalid_consensus_key_update_active -> true - | _ -> false) - in - let* ctxt = Consensus_key.register_update ctxt del2.pkh del1.pk in - let* () = - Assert.active_keys - ~__LOC__ - ctxt - del1.pkh - [ - (0, del1.pk); - (1, del1.pk); - (2, del1.pk); - (2, del1.pk); - (3, del1.pk); - (4, a1.pk); - (5, a1.pk); - ] - in - let* ctxt = add_cycles ctxt 1 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh del1.pkh - in - let* () = - let*! err = Consensus_key.register_update ctxt del1.pkh a1.pk in - Assert.proto_error ~loc:__LOC__ err (function - | Delegate_consensus_key.Invalid_consensus_key_update_noop c -> - c = Cycle_repr.of_int32_exn 4l - | _ -> false) - in - let* ctxt = Consensus_key.register_update ctxt del1.pkh a2.pk in - let* ctxt = Consensus_key.register_update ctxt del2.pkh a1.pk in - let* ctxt = Consensus_key.register_update ctxt del2.pkh del2.pk in - let* () = - Assert.active_keys - ~__LOC__ - ctxt - del1.pkh - [ - (1, del1.pk); - (2, del1.pk); - (2, del1.pk); - (3, del1.pk); - (4, a1.pk); - (5, a2.pk); - (6, a2.pk); - ] - in - let* ctxt = add_cycles ctxt 2 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh del1.pkh - in - let* () = - let*! err = Consensus_key.register_update ctxt del1.pkh a2.pk in - Assert.proto_error ~loc:__LOC__ err (function - | Delegate_consensus_key.Invalid_consensus_key_update_noop c -> - c = Cycle_repr.of_int32_exn 5l - | _ -> false) - in - let* ctxt = Consensus_key.register_update ctxt del1.pkh a1.pk in - let* () = - Assert.active_keys - ~__LOC__ - ctxt - del1.pkh - [(3, del1.pk); (4, a1.pk); (5, a2.pk); (6, a2.pk); (7, a1.pk); (8, a1.pk)] - in - let* ctxt = add_cycles ctxt 1 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh a1.pkh - in - let* ctxt = add_cycles ctxt 1 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh a2.pkh - in - let* ctxt = add_cycles ctxt 1 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh a2.pkh - in - let* ctxt = add_cycles ctxt 1 in - let* () = - let* active_pkh = Consensus_key.active_key ctxt del1.pkh in - Assert.equal_pkh ~__LOC__ active_pkh.consensus_pkh a1.pkh - in - return_unit - -let tests = - [Tztest.tztest "consensus_key_storage" `Quick test_consensus_key_storage] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Delegate consensus key", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_contract_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_contract_repr.ml deleted file mode 100644 index 4af6c183a872ea9dfb8a246de2a0f8484779680d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_contract_repr.ml +++ /dev/null @@ -1,124 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Contract_repr - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_contract_repr.ml - Dependencies: contract_hash.ml - Subject: To test the modules (including the top-level) - in contract_repr.ml as individual units, particularly - failure cases. Superficial goal: increase coverage percentage. -*) -open Protocol - -open Tztest - -(* - - TODO: Remove dependence on contract_hash.ml and mock it - - *) - -module Test_contract_repr = struct - (** Assert if [is_implicit] correctly returns the implicit contract *) - open Contract_repr - - let dummy_operation_hash = - Operation_hash.of_bytes_exn - (Bytes.of_string "test-operation-hash-of-length-32") - - let dummy_origination_nonce = Origination_nonce.initial dummy_operation_hash - - let dummy_contract_hash = - (* WARNING: Uses Contract_repr itself, which is yet to be tested. This happened because Contract_hash wasn't mocked *) - let data = - Data_encoding.Binary.to_bytes_exn - Origination_nonce.encoding - dummy_origination_nonce - in - Contract_hash.hash_bytes [data] - - let dummy_implicit_contract = Implicit Signature.Public_key_hash.zero - - let dummy_originated_contract = originated_contract @@ dummy_origination_nonce - - let test_to_b58check_implicit () = - Assert.equal - ~loc:__LOC__ - String.equal - "%s should have been equal to %" - Format.pp_print_string - (to_b58check dummy_implicit_contract) - Signature.Public_key_hash.(to_b58check zero) - - let test_to_b58check_originated () = - Assert.equal - ~loc:__LOC__ - String.equal - "%s should have been equal to %" - Format.pp_print_string - (to_b58check dummy_originated_contract) - Contract_hash.(to_b58check @@ dummy_contract_hash) - - let create_dummy_contracts n = - let since = dummy_origination_nonce in - let rec incr_n_times nonce = function - | 0 -> nonce - | n -> incr_n_times (Origination_nonce.incr nonce) (n - 1) - in - let until = incr_n_times since n in - let contracts = originated_contracts ~since ~until in - contracts - - let test_originated_contracts_basic () = - let n = 5 in - let contracts = create_dummy_contracts n in - Assert.equal_int ~loc:__LOC__ (List.length contracts) n -end - -let tests = - [ - tztest - "Contract_repr.to_b58check: must correctly stringify, b58check encoded, \ - an implicit contract" - `Quick - Test_contract_repr.test_to_b58check_implicit; - tztest - "Contract_repr.originated_contract: must correctly create an originated \ - contract" - `Quick - Test_contract_repr.test_originated_contracts_basic; - tztest - "Contract_repr.to_b58check: must correctly stringify, b58check encoded, \ - an originated contract" - `Quick - Test_contract_repr.test_to_b58check_originated; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Contract_repr.ml", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_dal_slot_proof.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_dal_slot_proof.ml deleted file mode 100644 index 879d47e528c4f610a4fd47a7eccbce0c7c745848..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_dal_slot_proof.ml +++ /dev/null @@ -1,466 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (dal slot proof) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_dal_slot_proof.ml - Subject: These unit tests check proof-related functions of Dal slots. -*) - -open Protocol -module S = Dal_slot_repr -module H = S.Header -module P = S.Page -module Hist = S.History - -module Make (Parameters : sig - val name : string - - val dal_parameters : Alpha_context.Constants.Parametric.dal -end) = -struct - open Dal_helpers.Make (struct - include Parameters - - let cryptobox = - Lazy.from_fun @@ fun () -> - Dal_helpers.mk_cryptobox Parameters.dal_parameters.cryptobox_parameters - end) - - (* Tests to check insertion of slots in a dal skip list. *) - - (** Check insertion of a new slot in the given skip list. *) - let skip_list_ordering skip_list ~mk_level ~mk_slot_index ~check_result = - let open Lwt_result_wrap_syntax in - let id = - Hist.Internal_for_tests.content skip_list |> Dal_helpers.content_slot_id - in - let level = mk_level id in - let index = mk_slot_index id in - let* _data, _poly, slot = mk_slot ~level ~index () in - let@ result = - Hist.add_confirmed_slot_headers_no_cache - skip_list - level - [slot] - ~number_of_slots:Parameters.dal_parameters.number_of_slots - in - - check_result result - - (** This test attempts to add a slot on top of genesis cell zero which would - break the ordering. In fact, confirmed slots' skip list is ordered by slots - ID: the slots' level should increase or the level is equal in which case the - slots' index should increase. In the test below, we attempt to insert a slot - where (published_level, slot_index) doesn't increase (is the same as the - genesis cell). *) - let insertion_breaks_skip_list_ordering () = - let open Lwt_result_syntax in - skip_list_ordering - genesis_history - ~mk_level:(fun id -> Raw_level_repr.succ id.H.published_level) - ~mk_slot_index:(fun id -> succ_slot_index id.H.index) - ~check_result:(fun res -> - let* skip_list = Assert.get_ok ~__LOC__ res in - skip_list_ordering - skip_list - ~mk_level:(fun _id -> - Raw_level_repr.root (* Putting root here breaks ordering. *)) - ~mk_slot_index:(fun id -> id.H.index) - ~check_result:(fun res -> - Assert.proto_error ~loc:__LOC__ res (function - | Hist.Add_element_in_slots_skip_list_violates_ordering -> true - | _ -> false))) - - (** This test attempts to add a slot on top of genesis cell zero which satisfies - the ordering. *) - let correct_insertion_in_skip_list_ordering_1 () = - let open Lwt_result_syntax in - skip_list_ordering - genesis_history - ~mk_level:(fun id -> Raw_level_repr.succ id.H.published_level) - ~mk_slot_index:(fun id -> id.H.index) - ~check_result:(fun res -> - let* (_skip_list : Hist.t) = Assert.get_ok ~__LOC__ res in - return_unit) - - (** This test attempts to add a slot on top of genesis cell zero which satisfies - the ordering. *) - let correct_insertion_in_skip_list_ordering_2 () = - let open Lwt_result_syntax in - skip_list_ordering - genesis_history - ~mk_level:(fun id -> Raw_level_repr.succ id.H.published_level) - ~mk_slot_index:(fun id -> succ_slot_index id.H.index) - ~check_result:(fun res -> - let* (_skip_list : Hist.t) = Assert.get_ok ~__LOC__ res in - return_unit) - - (** This test attempts to add two slots on top of genesis cell zero which satisfies - the ordering. *) - let correct_insertion_in_skip_list_ordering_3 () = - let open Lwt_result_syntax in - skip_list_ordering - genesis_history - ~mk_level:(fun id -> Raw_level_repr.succ id.H.published_level) - ~mk_slot_index:(fun id -> succ_slot_index id.H.index) - ~check_result:(fun res -> - let* skip_list = Assert.get_ok ~__LOC__ res in - skip_list_ordering - skip_list - ~mk_level:(fun id -> Raw_level_repr.(succ id.H.published_level)) - ~mk_slot_index:(fun id -> id.H.index) - ~check_result:(fun res -> - let* (_skip_list : Hist.t) = Assert.get_ok ~__LOC__ res in - return_unit)) - - (* Tests of construct/verify proofs that confirm/unconfirm pages on top of - genesis skip list (whose unique cell is slot zero). *) - - (** This test attempts to construct a proof to unconfirm a slot page from the - genesis skip list. Proof production is expected to succeed. *) - let unconfirmed_page_on_genesis () = - let Dal_slot_repr.Header.{published_level; index} = - Hist.Internal_for_tests.content genesis_history - |> Dal_helpers.content_slot_id - in - let page_id = mk_page_id published_level index P.Index.zero in - produce_and_verify_proof - genesis_history - ~get_history:(get_history genesis_history_cache) - (* values of level and slot index are equal to slot zero. We would get a - page confirmation proof. But, no proof that confirms the existence of a page - in slot [zero] is possible. *) - ~page_info:None - ~page_id - ~check_produce:(successful_check_produce_result ~__LOC__ `Unconfirmed) - - (** This test attempts to construct a proof to unconfirm a slot page from the - genesis skip list. But there is no cell with the page's level in the - history cache. *) - let unconfirmed_page_on_genesis_bad_cache () = - let Dal_slot_repr.Header.{published_level; index} = - Hist.Internal_for_tests.content genesis_history - |> Dal_helpers.content_slot_id - in - let level, sindex = - if false then (Raw_level_repr.succ published_level, index) - else (published_level, succ_slot_index index) - in - let page_id = mk_page_id level sindex P.Index.zero in - produce_and_verify_proof - genesis_history - ~get_history:(get_history genesis_history_cache) - ~page_info:None - ~page_id - ~check_produce:(bad_history_cache ~__LOC__) - - (* Tests of construct/verify proofs that attempt to confirm pages on top of a - (confirmed) slot added in genesis_history skip list. *) - - (** Helper function that adds a slot a top of the genesis skip list. *) - let helper_confirmed_slot_on_genesis ~level ~mk_page_info ~check_produce - ?check_verify ?index () = - let open Lwt_result_wrap_syntax in - let* _slot_data, polynomial, slot = mk_slot ~level ?index () in - let*?@ skip_list, cache = - Hist.add_confirmed_slot_headers - ~number_of_slots:Parameters.dal_parameters.number_of_slots - genesis_history - genesis_history_cache - level - [slot] - in - let* page_info, page_id = mk_page_info slot polynomial in - produce_and_verify_proof - skip_list - ~get_history:(get_history cache) - ~page_info - ~page_id - ?check_verify - ~check_produce - - (** Test where a slot is confirmed, requesting a proof for a confirmed page, - where the correct data and page proof are provided. *) - let confirmed_slot_on_genesis_confirmed_page_good_data = - helper_confirmed_slot_on_genesis - ~level:level_one - ~mk_page_info - ~check_produce:(successful_check_produce_result ~__LOC__ `Confirmed) - ~check_verify:(successful_check_verify_result ~__LOC__ `Confirmed) - - (** Test where a slot is confirmed, requesting a proof for a confirmed page, - where the page data and proof are not given. *) - let confirmed_slot_on_genesis_confirmed_page_no_data = - helper_confirmed_slot_on_genesis - ~level:level_one - ~mk_page_info:(mk_page_info ~custom_data:no_data) - ~check_produce:(slot_confirmed_but_page_data_not_provided ~__LOC__) - - (** Test where a slot is confirmed, requesting a proof for a confirmed page, - where correct data are provided, but the given page proof is wrong. *) - let confirmed_slot_on_genesis_confirmed_page_bad_page_proof = - let open Lwt_result_syntax in - helper_confirmed_slot_on_genesis - ~level:level_one - ~mk_page_info:(fun slot poly -> - let* page_info1, _page_id1 = mk_page_info ~page_index:1 slot poly in - let* page_info2, page_id2 = mk_page_info ~page_index:2 slot poly in - assert ( - match (page_info1, page_info2) with - | Some (_d1, p1), Some (_d2, p2) -> not (eq_page_proof p1 p2) - | _ -> false) ; - return (page_info1, page_id2)) - ~check_produce: - (failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Dal_proof_error - "Wrong page content for the given page index and slot \ - commitment (page id=(published_level: 1, slot_index: 0, \ - page_index: 2)).")) - - (** Test where a slot is confirmed, requesting a proof for a confirmed page, - where correct page proof is provided, but given page data is altered. *) - let confirmed_slot_on_genesis_confirmed_page_bad_data_right_length = - helper_confirmed_slot_on_genesis - ~level:level_one - ~mk_page_info: - (mk_page_info - ~custom_data: - (Some - (fun ~default_char page_size -> - Some - (Bytes.init page_size (fun i -> - if i = 0 then next_char default_char else default_char))))) - ~check_produce: - (failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Dal_proof_error - "Wrong page content for the given page index and slot \ - commitment (page id=(published_level: 1, slot_index: 0, \ - page_index: 0)).")) - - (** Same as {!confirmed_slot_on_genesis_confirmed_page_bad_data_right_length} - but the data is too short. *) - let confirmed_slot_on_genesis_confirmed_page_bad_data_short = - let page_size = Parameters.dal_parameters.cryptobox_parameters.page_size in - helper_confirmed_slot_on_genesis - ~level:level_one - ~mk_page_info: - (mk_page_info - ~custom_data: - (Some - (fun ~default_char page_size -> - Some (Bytes.make (page_size - 1) default_char)))) - ~check_produce: - (failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Unexpected_page_size - {expected_size = page_size; page_size = page_size - 1})) - - (** Same as {!confirmed_slot_on_genesis_confirmed_page_bad_data_right_length} - but the data is too long. *) - let confirmed_slot_on_genesis_confirmed_page_bad_data_long = - let page_size = Parameters.dal_parameters.cryptobox_parameters.page_size in - helper_confirmed_slot_on_genesis - ~level:level_one - ~mk_page_info: - (mk_page_info - ~custom_data: - (Some - (fun ~default_char page_size -> - Some (Bytes.make (page_size + 1) default_char)))) - ~check_produce: - (failing_check_produce_result - ~__LOC__ - ~expected_error: - (Hist.Unexpected_page_size - {expected_size = page_size; page_size = page_size + 1})) - - (* Variants of the tests above: Construct/verify proofs that attempt to - unconfirm pages on top of a (confirmed) slot added in genesis_history skip - list. - - All the tests are somehow equivalent when building "Unconfirmed page" proof, - because the page's data & page's proof are ignored in this case. - *) - - (** Specialisation of helper {!helper_confirmed_slot_on_genesis}, where some - parameters are fixed. *) - let helper_confirmed_slot_on_genesis_unconfirmed_page ~check_produce - ?check_verify ~page_level ~mk_page_info = - helper_confirmed_slot_on_genesis - ~level:page_level - ~mk_page_info - ~check_produce - ?check_verify - - let slot_index_2 = - match Dal_slot_index_repr.of_int_opt ~number_of_slots:20 2 with - | None -> assert false - | Some v -> v - - (** Unconfirmation proof for a page with good data. *) - let confirmed_slot_on_genesis_unconfirmed_page_good_data = - helper_confirmed_slot_on_genesis_unconfirmed_page - ~page_level:level_one - ~mk_page_info:(mk_page_info ~slot_index:slot_index_2) - ~check_produce:(slot_not_confirmed_but_page_data_provided ~__LOC__) - - (** Unconfirmation proof for a page with no data. *) - let confirmed_slot_on_genesis_unconfirmed_page_no_data = - helper_confirmed_slot_on_genesis_unconfirmed_page - ~page_level:level_one - ~mk_page_info:(mk_page_info ~custom_data:no_data ~slot_index:slot_index_2) - ~check_produce:(successful_check_produce_result ~__LOC__ `Unconfirmed) - - (** Unconfirmation proof for a page with bad page proof. *) - let confirmed_slot_on_genesis_unconfirmed_page_bad_proof = - let open Lwt_result_syntax in - let level = level_one in - helper_confirmed_slot_on_genesis_unconfirmed_page - ~page_level:level - ~mk_page_info:(fun slot poly -> - let* page_info1, _page_id1 = - mk_page_info ~slot_index:slot_index_2 ~page_index:1 slot poly - in - let* _page_info2, page_id2 = - mk_page_info ~slot_index:slot_index_2 ~page_index:2 slot poly - in - assert ( - match (page_info1, _page_info2) with - | Some (_d1, p1), Some (_d2, p2) -> not (eq_page_proof p1 p2) - | _ -> false) ; - return (page_info1, page_id2)) - ~check_produce:(slot_not_confirmed_but_page_data_provided ~__LOC__) - - (** Unconfirmation proof for a page with bad data. *) - let confirmed_slot_on_genesis_unconfirmed_page_bad_data = - let level = level_one in - helper_confirmed_slot_on_genesis_unconfirmed_page - ~page_level:level - ~mk_page_info: - (mk_page_info - ~slot_index:slot_index_2 - ~custom_data: - (Some - (fun ~default_char page_size -> - Some - (Bytes.init page_size (fun i -> - if i = 0 then next_char default_char else default_char))))) - ~check_produce:(slot_not_confirmed_but_page_data_provided ~__LOC__) - - (* The list of tests. *) - let tests = - let mk_title = Format.sprintf "[%s] %s" Parameters.name in - let tztest title test_function = - Tztest.tztest (mk_title title) `Quick test_function - in - let ordering_tests = - [ - tztest - "add a slot on top of genesis that breaks ordering" - insertion_breaks_skip_list_ordering; - tztest - "add a slot on top of genesis that satisfies ordering (1/2)" - correct_insertion_in_skip_list_ordering_1; - tztest - "add a slot on top of genesis that satisfies ordering (2/2)" - correct_insertion_in_skip_list_ordering_2; - tztest - "add two slots on top of genesis that satisfy ordering" - correct_insertion_in_skip_list_ordering_3; - ] - in - let proofs_tests_on_genesis = - [ - tztest "Unconfirmed page on genesis - ok" unconfirmed_page_on_genesis; - tztest - "Unconfirmed page on genesis - bad cache" - unconfirmed_page_on_genesis_bad_cache; - ] - in - - let confirmed_slot_on_genesis_confirmed_page_tests = - [ - tztest - "Confirmed slot on top of genesis: confirmed page with good data" - confirmed_slot_on_genesis_confirmed_page_good_data; - tztest - "Confirmed slot on top of genesis: confirmed page with no data" - confirmed_slot_on_genesis_confirmed_page_no_data; - tztest - "Confirmed slot on top of genesis: confirmed page with bad proof" - confirmed_slot_on_genesis_confirmed_page_bad_page_proof; - tztest - "Confirmed slot on top of genesis: confirmed page with bad data" - confirmed_slot_on_genesis_confirmed_page_bad_data_right_length; - tztest - "Confirmed slot on top of genesis: confirmed page with too short data" - confirmed_slot_on_genesis_confirmed_page_bad_data_short; - tztest - "Confirmed slot on top of genesis: confirmed page with too long data" - confirmed_slot_on_genesis_confirmed_page_bad_data_long; - ] - in - let confirmed_slot_on_genesis_unconfirmed_page_tests = - [ - tztest - "Confirmed slot on top of genesis: unconfirmed page with good data" - confirmed_slot_on_genesis_unconfirmed_page_good_data; - tztest - "Confirmed slot on top of genesis: unconfirmed page with no data" - confirmed_slot_on_genesis_unconfirmed_page_no_data; - tztest - "Confirmed slot on top of genesis: unconfirmed page with bad proof" - confirmed_slot_on_genesis_unconfirmed_page_bad_proof; - tztest - "Confirmed slot on top of genesis: unconfirmed page with bad data \ - (altered)" - confirmed_slot_on_genesis_unconfirmed_page_bad_data; - ] - in - ordering_tests @ proofs_tests_on_genesis - @ confirmed_slot_on_genesis_confirmed_page_tests - @ confirmed_slot_on_genesis_unconfirmed_page_tests -end - -let tests = - let open Tezos_protocol_019_PtParisB_parameters.Default_parameters in - let module Test = Make (struct - let name = "test" - - let dal_parameters = constants_test.dal - end) in - Test.tests - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("dal slot proof", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_destination_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_destination_repr.ml deleted file mode 100644 index 47ca804452e8fd28468c6b5d4615b481784b8c1d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_destination_repr.ml +++ /dev/null @@ -1,232 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Destination_repr - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_destination_repr.ml - Subject: To test the encoding of [Destination_repr] and assert it is - compatible with [Contract_repr.encoding]. -*) - -open Protocol -open Tztest - -let dummy_operation_hash = - Operation_hash.of_bytes_exn - (Bytes.of_string "test-operation-hash-of-length-32") - -let dummy_origination_nonce = Origination_nonce.initial dummy_operation_hash - -let contracts = - let since = dummy_origination_nonce in - let rec incr_n_times nonce = function - | 0 -> nonce - | n -> incr_n_times (Origination_nonce.incr nonce) (n - 1) - in - let until = incr_n_times since 5 in - Contract_repr.originated_contracts ~since ~until - |> List.map (fun c -> Contract_repr.Originated c) - -let dest x = Destination_repr.Contract x - -let construct = Data_encoding.Json.construct - -let destruct = Data_encoding.Json.destruct - -let to_bytes_exn = Data_encoding.Binary.to_bytes_exn - -let of_bytes_exn = Data_encoding.Binary.of_bytes_exn - -let ( !! ) = function Ok x -> x | Error _ -> raise (Invalid_argument "( !! )") - -(* The following addresses have been extracted from TzKT. *) - -let null_address = "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU" - -let liquidity_baking_dex = "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" - -(* The following address has been extracted from - [tezt/_regressions/tx_rollup_simple_use_case.out]. *) - -let tx_rollup_address = "txr1YNMEtkj5Vkqsbdmt7xaxBTMRZjzS96UAi" - -(* The following address has been extracted like this: - - [dune exec tezt/tests/main.exe -- -verbose --file sc_rollup.ml - sc_rollup list] -*) -let sc_rollup_address = "sr1BAwv191dVYeZg44ZxVy8dFwfRQKW6bSqc" - -(* TODO: https://gitlab.com/tezos/tezos/-/issues/3731 - Explain how this address was computed *) -let zk_rollup_address = "epx18RJJqrYuJQqhB636BWvukU3XBNQGbtm8C" - -let assert_compat contract destination = - match destination with - | Destination_repr.Contract contract' - when Contract_repr.equal contract contract' -> - () - | _ -> raise (Invalid_argument "assert_compat") - -(** [test_decoding_json_compat str] decodes [str] as both a [Destination_repr.t] - and [Contract_repr.t], and checks the two are equal. *) -let test_decoding_json_compat str () = - let open Lwt_result_syntax in - let json = - !!(Data_encoding.Json.from_string @@ Format.sprintf {|"%s"|} str) - in - let contract = destruct Contract_repr.encoding json in - let destination = destruct Destination_repr.encoding json in - - assert_compat contract destination ; - - return_unit - -(** [test_encode_contract_decode_destination str] interprets [str] as - a [Contract_repr.t], encodes it in a bytes array, then decodes it - as a [Destination_repr.t]. The resulting destination should be - equal to the initial contract. *) -let test_encode_contract_decode_destination str () = - let open Lwt_result_syntax in - let contract = !!(Contract_repr.of_b58check str) in - let bytes = to_bytes_exn Contract_repr.encoding contract in - let destination = of_bytes_exn Destination_repr.encoding bytes in - - assert_compat contract destination ; - - return_unit - -(** [test_encode_destination_decode_contract str] interprets [str] as - a [Destination_repr.t], encodes it in a bytes array, then decodes - it as a [Contract_repr.t]. The resulting contract should be equal - to the initial destination. *) -let test_encode_destination_decode_contract str () = - let open Lwt_result_syntax in - let destination = !!(Destination_repr.of_b58check str) in - let bytes = to_bytes_exn Destination_repr.encoding destination in - let contract = of_bytes_exn Contract_repr.encoding bytes in - - assert_compat contract destination ; - - return_unit - -let encoding_compat ~encode_contract ~decode_contract ~encode_destination - ~decode_destination contract = - let open Lwt_result_syntax in - let destination = dest contract in - - let encoded_contract = encode_contract contract in - let encoded_destination = encode_destination destination in - - let destination_of_contract = decode_destination encoded_contract in - let contract_of_destination = decode_contract encoded_destination in - - assert_compat contract_of_destination destination ; - assert_compat contract destination_of_contract ; - - return_unit - -(** [encoding_json_compat contract] creates a {!Destination_repr.t} using - a dummy contract and ensures that their JSON encodings are compatible with - each other. -*) -let encoding_json_compat contract = - encoding_compat - ~encode_contract:(construct Contract_repr.encoding) - ~decode_contract:(destruct Contract_repr.encoding) - ~encode_destination:(construct Destination_repr.encoding) - ~decode_destination:(destruct Destination_repr.encoding) - contract - -(** [encoding_json_compat contract] creates a {!Destination_repr.t} using - a dummy contract and ensures that their binary encodings are compatible with - each other. -*) -let encoding_binary_compat contract = - encoding_compat - ~encode_contract:(to_bytes_exn Contract_repr.encoding) - ~decode_contract:(of_bytes_exn Contract_repr.encoding) - ~encode_destination:(to_bytes_exn Destination_repr.encoding) - ~decode_destination:(of_bytes_exn Destination_repr.encoding) - contract - -let test_contracts f () = - let open Lwt_result_syntax in - List.iter (fun contract -> ignore (f contract)) contracts ; - - return_unit - -let test_encoding_binary_compat = test_contracts encoding_binary_compat - -let test_encoding_json_compat = test_contracts encoding_json_compat - -let test_compare_destination () = - let open Lwt_result_syntax in - let tz1 = !!(Destination_repr.of_b58check null_address) in - let kt1 = !!(Destination_repr.of_b58check liquidity_baking_dex) in - let scr1 = !!(Destination_repr.of_b58check sc_rollup_address) in - let epx1 = !!(Destination_repr.of_b58check zk_rollup_address) in - - assert (Destination_repr.(tz1 < kt1)) ; - assert (Destination_repr.(kt1 < scr1)) ; - assert (Destination_repr.(scr1 < epx1)) ; - - return_unit - -let tests = - [ - tztest "Json decoding compat implicit contract (null address)" `Quick - @@ test_decoding_json_compat null_address; - tztest "Json decoding compat smart contract (liquidity baking dex)" `Quick - @@ test_decoding_json_compat liquidity_baking_dex; - tztest "Binary Contract_repr to Destination_repr (null address)" `Quick - @@ test_encode_contract_decode_destination null_address; - tztest - "Binary Contract_repr to Destination_repr (liquidity baking dex)" - `Quick - @@ test_encode_contract_decode_destination liquidity_baking_dex; - tztest "Binary Destination_repr to Contract_repr (null address)" `Quick - @@ test_encode_destination_decode_contract null_address; - tztest - "Binary Destination_repr to Contract_repr (liquidity baking dex)" - `Quick - @@ test_encode_destination_decode_contract liquidity_baking_dex; - tztest - "Json encoding compatibility Contract_repr to Destination_repr with \ - dummy contracts" - `Quick - @@ test_encoding_json_compat; - tztest - "Binary encoding compatibility Contract_repr to Destination_repr with \ - dummy contracts" - `Quick - @@ test_encoding_json_compat; - tztest "Comparison of destinations" `Quick test_compare_destination; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Destination_repr.ml", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_fitness.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_fitness.ml deleted file mode 100644 index cdd620663c7605c6cc7e38abca95a4bc4b8d026c..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_fitness.ml +++ /dev/null @@ -1,164 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (committee selection) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_fitness.ml - Subject: test the fitness module -*) - -open Protocol - -let level_zero = Raw_level_repr.of_int32_exn 0l - -let round_of_int32_exn i = - match Round_repr.of_int32 i with - | Ok i -> i - | Error _ -> Stdlib.failwith "Invalid round representation" - -let make_tuple (level, r_opt, r0, r1) = - let r_opt = Option.map round_of_int32_exn r_opt in - let r0 = round_of_int32_exn r0 in - let r1 = round_of_int32_exn r1 in - (level, r_opt, r0, r1) - -let test_cases = - List.map - make_tuple - [ - (3l, Some 1l, 1l, 12l); - (10l, Some 1l, 1l, 12l); - (10l, Some 4l, 2l, 6l); - (10l, Some 4l, 1l, 12l); - (9l, Some 2l, 0l, 3l); - (7l, None, 0l, 3l); - (7l, None, 1l, 3l); - (0l, None, 0l, 0l); - (12l, Some 2l, 8l, 7l); - (10l, Some 0l, 1l, 1l); - (8l, None, 1l, 0l); - (12l, Some 1l, 8l, 7l); - (8l, None, 6l, 0l); - ] - -let rec product l1 l2 = - match l1 with - | [] -> [] - | h :: tl -> List.map (fun x -> (h, x)) l2 @ product tl l2 - -let test_product_cases = product test_cases test_cases - -let tuple_to_fitness (level, locked_round, predecessor_round, round) = - Fitness_repr.create - ~level:(Raw_level_repr.of_int32_exn level) - ~locked_round - ~predecessor_round - ~round - -let tuple_to_fitness_exn tuple = - tuple_to_fitness tuple |> function - | Ok f -> f - | Error err -> - Format.kasprintf - Stdlib.failwith - "cannot create fitness from tuple: %a" - pp_print_trace - (Environment.wrap_tztrace err) - -let test_from_to_raw_fitness tuple = - let fitness = tuple_to_fitness_exn tuple in - Fitness_repr.from_raw (Fitness_repr.to_raw fitness) |> function - | Ok new_fitness -> assert (fitness = new_fitness) - | Error _x -> assert false - -let test_from_to_raw_fitness_all () = - let open Lwt_result_syntax in - List.iter test_from_to_raw_fitness test_cases ; - return_unit - -let test_locked_round () = - let open Lwt_result_wrap_syntax in - let test_bad_cases = - List.map - make_tuple - [ - (8l, Some 7l, 1l, 1l); - (9l, Some 8l, 0l, 3l); - (10l, Some 7l, 2l, 6l); - (11l, Some 5l, 5l, 1l); - (8l, Some 2l, 1l, 1l); - (9l, Some 3l, 0l, 3l); - (11l, Some 5l, 5l, 1l); - (13l, Some 2l, 1l, 1l); - (10l, Some 4l, 1l, 1l); - (8l, Some 7l, 1l, 1l); - (10l, Some 8l, 2l, 6l); - (11l, Some 9l, 5l, 1l); - (12l, Some 10l, 8l, 7l); - (13l, Some 14l, 1l, 1l); - ] - in - List.iter_es - (fun tuple -> - let@ fitness = tuple_to_fitness tuple in - match fitness with - | Error - [ - Environment.Ecoproto_error - (Fitness_repr.Locked_round_not_less_than_round _); - ] -> - return_unit - | Error err -> failwith "unexpected failure: %a" pp_print_trace err - | Ok f -> failwith "unexpected success: %a" Fitness_repr.pp f) - test_bad_cases - -let test_compare (tuple1, tuple2) = - let fitness1 = tuple_to_fitness_exn tuple1 in - let fitness2 = tuple_to_fitness_exn tuple2 in - let raw_fitness1 = Fitness_repr.to_raw fitness1 in - let raw_fitness2 = Fitness_repr.to_raw fitness2 in - let cmp_fitness = Fitness_repr.Internal_for_tests.compare fitness1 fitness2 in - let cmp_raw_fitness = Fitness.compare raw_fitness1 raw_fitness2 in - Assert.equal_int ~loc:__LOC__ cmp_fitness cmp_raw_fitness - -let test_compare_all () = List.iter_es test_compare test_product_cases - -let tests = - [ - Tztest.tztest - "from/to raw fitness is identity" - `Quick - test_from_to_raw_fitness_all; - Tztest.tztest "locked round is smaller than round" `Quick test_locked_round; - Tztest.tztest - "compare fitness = compare raw_fitness" - `Quick - test_compare_all; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("fitness", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_fixed_point.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_fixed_point.ml deleted file mode 100644 index 0823df01d0c78bd9b0ebb84528a2cb2b18cf666a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_fixed_point.ml +++ /dev/null @@ -1,196 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (fixed-point decimals) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_fixed_point.ml - Subject: On fixed-point decimal numbers. -*) - -open Protocol - -exception Fixed_point_test_error of string - -let err x = Exn (Fixed_point_test_error x) - -module type Arith = sig - type t - - val zero : t - - val equal : t -> t -> bool - - val random : unit -> t - - val add : t -> t -> t - - val sub : t -> t -> t -end - -let n = Z.of_int 42 - -let n' = Z.of_int 43 - -let basic_arith name (module A : Arith) = - let open Lwt_result_syntax in - let err msg = err (Format.asprintf "%s test: %s" name msg) in - let x = A.random () in - let* () = fail_unless A.(add zero x = x) (err "zero is neutral for +") in - let x = A.random () in - let y = A.random () in - let* () = fail_unless A.(add x y = add y x) (err "addition is commutative") in - let x = A.random () in - let* () = - fail_unless - A.(sub (add zero x) x = zero) - (err "addition and subtraction cancel") - in - let x = A.random () in - let y = A.random () in - let z = A.random () in - fail_unless - A.(add x (add y z) = add (add x y) z) - (err "addition is associative") - -let arith_from_integral : (module Fixed_point_repr.Full) -> (module Arith) = - fun (module FP) -> - let module Arith = struct - type t = FP.integral - - let zero = FP.zero - - let equal = FP.equal - - let random () = FP.integral_of_int_exn (Random.int 898987) - - let add = FP.add - - let sub = FP.sub - end in - (module Arith) - -let arith_from_fp : (module Fixed_point_repr.Full) -> (module Arith) = - fun (module FP) -> - let module Arith = struct - type t = FP.fp - - let zero = FP.zero - - let equal = FP.equal - - let random () = FP.unsafe_fp (Z.of_int (Random.int 898987)) - - let add = FP.add - - let sub = FP.sub - end in - (module Arith) - -let integral_tests () = - let open Lwt_result_syntax in - let module FP = Gas_limit_repr.Arith in - (* test roundtrips *) - let* () = - fail_unless (FP.(integral_to_z (integral_exn n)) = n) (err "roundtrip > 0") - in - let* () = - fail_unless - (FP.(integral_to_z (integral_exn Z.zero)) = Z.zero) - (err "roundtrip = 0") - in - (* test ceil/floor on integral *) - let* () = - fail_unless - FP.(ceil (fp (integral_exn n)) = integral_exn n) - (err "integral;fp;ceil = integral") - in - let* () = - fail_unless - FP.(floor (fp (integral_exn n)) = integral_exn n) - (err "integral;fp;floor = integral") - in - let* () = - fail_unless - (Format.asprintf "%a" FP.pp FP.(fp (integral_exn n)) - = Format.asprintf "%a" FP.pp_integral (FP.integral_exn n)) - (err "pp_integral(integral) = pp(fp(integral))") - in - basic_arith "integral arith" (arith_from_integral (module FP)) - -let fp_nonzero () = - let open Lwt_result_syntax in - let decimals = 3 in - let module FP = Gas_limit_repr.Arith in - let prefix msg = Format.asprintf "(%d decimals) %s" decimals msg in - let err msg = err (prefix msg) in - let* () = - basic_arith (prefix "integral arith") (arith_from_integral (module FP)) - in - let* () = basic_arith (prefix "fp arith") (arith_from_fp (module FP)) in - let epsilon = FP.unsafe_fp Z.one in - let* () = - fail_unless FP.(ceil epsilon = integral_exn Z.one) (err "ceil eps = 1") - in - let* () = - fail_unless FP.(floor epsilon = integral_exn Z.zero) (err "floor eps = 1") - in - let x = Z.of_int (Random.int 980812) in - fail_unless - FP.( - ceil (add (fp (integral_exn x)) (unsafe_fp Z.one)) - = integral_exn (Z.succ x)) - (err "ceil (x + eps) = x + 1") - -let fp_pp () = - let open Lwt_result_syntax in - let module FP = Gas_limit_repr.Arith in - let prefix msg = Format.asprintf "(%d decimals) %s" 3 msg in - let err msg = err (prefix msg) in - let epsilon = FP.unsafe_fp Z.one in - let ( =:= ) x expected = Format.asprintf "%a" FP.pp x = expected in - let* () = fail_unless (epsilon =:= "0.001") (err "eps = 0.001") in - let* () = - fail_unless (FP.unsafe_fp (Z.of_int 1000) =:= "1") (err "1.000 = 1") - in - let* () = - fail_unless (FP.unsafe_fp (Z.of_int 1001) =:= "1.001") (err "1.001") - in - let* () = - fail_unless (FP.unsafe_fp (Z.of_int 10001) =:= "10.001") (err "10.001") - in - fail_unless (FP.zero =:= "0") (err "0") - -let tests = - [ - Tztest.tztest "Integral tests (3 decimals)" `Quick integral_tests; - Tztest.tztest "FP tests (3 decimals)" `Quick fp_nonzero; - Tztest.tztest "FP pp tests (3 decimals)" `Quick fp_pp; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("fixed point computation", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_full_staking_balance_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_full_staking_balance_repr.ml deleted file mode 100644 index da452274c8d60cc7544fc1512545857c940216d9..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_full_staking_balance_repr.ml +++ /dev/null @@ -1,125 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: protocol - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_full_staking_balance_repr.ml - Subject: test the Full_staking_balance_repr module -*) - -open Protocol -open Data_encoding - -(* We duplicate the definition of the Full_staking_balance_repr module - from Oxford to test a None case in the current encoding *) -module Full_staking_balance_repr_oxford = struct - type t = { - own_frozen : Tez_repr.t; - staked_frozen : Tez_repr.t; - delegated : Tez_repr.t; - } - - let make ~own_frozen ~staked_frozen ~delegated = - {own_frozen; staked_frozen; delegated} - - let encoding = - let open Data_encoding in - conv - (fun {own_frozen; staked_frozen; delegated} -> - (own_frozen, staked_frozen, delegated)) - (fun (own_frozen, staked_frozen, delegated) -> - {own_frozen; staked_frozen; delegated}) - (obj3 - (req "own_frozen" Tez_repr.encoding) - (req "staked_frozen" Tez_repr.encoding) - (req "delegated" Tez_repr.encoding)) -end - -let equal_full_staking_balance (a : Full_staking_balance_repr.t) - (b : Full_staking_balance_repr.t) = - let open Lwt_result_syntax in - let open Full_staking_balance_repr in - let open Full_staking_balance_repr.Internal_for_tests_and_RPCs in - let equal_tez_repr ~loc a b = - Assert.equal_int64 ~loc (Tez_repr.to_mutez a) (Tez_repr.to_mutez b) - in - let equal_cycle_repr ~loc a b = - Assert.equal_int32 ~loc (Cycle_repr.to_int32 a) (Cycle_repr.to_int32 b) - in - - let* () = equal_tez_repr ~loc:__LOC__ (own_frozen a) (own_frozen b) in - let* () = equal_tez_repr ~loc:__LOC__ (staked_frozen a) (staked_frozen b) in - let* () = - equal_tez_repr ~loc:__LOC__ (current_delegated a) (current_delegated b) - in - let* () = - equal_tez_repr - ~loc:__LOC__ - (min_delegated_in_cycle a) - (min_delegated_in_cycle b) - in - let* () = - let cycle s = - match level_of_min_delegated s with - | None -> Cycle_repr.root - | Some l -> l.cycle - in - equal_cycle_repr ~loc:__LOC__ (cycle a) (cycle b) - in - return_unit - -let equal_full_staking_balance_bytes sb_bytes - (sb_expected : Full_staking_balance_repr.t) = - let open Lwt_result_syntax in - let encoding = Full_staking_balance_repr.encoding in - let* sb = - match Binary.of_bytes encoding sb_bytes with - | Ok x -> return x - | Error e -> - failwith - "Data_encoding.Binary.read shouldn't have failed with \ - Full_staking_balance_repr.encoding: %a" - Binary.pp_read_error - e - in - equal_full_staking_balance sb sb_expected - -let test_encodings () = - let open Lwt_result_syntax in - let own_frozen = Tez_repr.(mul_exn one 1) in - let staked_frozen = Tez_repr.(mul_exn one 2) in - let delegated = Tez_repr.(mul_exn one 5) in - - (* Test a [Some] case for [added_in_p] *) - let staking_balance = - Full_staking_balance_repr.init - ~own_frozen - ~staked_frozen - ~delegated - ~current_level:Level_repr.Internal_for_tests.root - in - let encoding = Full_staking_balance_repr.encoding in - let sb_bytes = Binary.to_bytes_exn encoding staking_balance in - let* () = equal_full_staking_balance_bytes sb_bytes staking_balance in - - (* Test a [None] case for [added_in_p] *) - let staking_balance_o = - Full_staking_balance_repr_oxford.make ~own_frozen ~staked_frozen ~delegated - in - let encoding_o = Full_staking_balance_repr_oxford.encoding in - let sb_o_bytes = Binary.to_bytes_exn encoding_o staking_balance_o in - let* () = equal_full_staking_balance_bytes sb_o_bytes staking_balance in - return_unit - -let tests = - Tztest.[tztest "full staking balance - encoding" `Quick test_encodings] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("full_staking_balance", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_gas_monad.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_gas_monad.ml deleted file mode 100644 index f382bdf40776949f3afe8879696ca426b5746ac6..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_gas_monad.ml +++ /dev/null @@ -1,225 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Gas_monad - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_gas_monad.ml - Subject: Tests for the gas monad module -*) - -open Protocol -open Alpha_context -module GM = Gas_monad - -let ten_milligas = Gas.fp_of_milligas_int 10 - -let new_context ~limit = - let open Lwt_result_syntax in - let* b, _contract = Context.init1 () in - let+ inc = Incremental.begin_construction b in - Gas.set_limit (Incremental.alpha_ctxt inc) limit - -let assert_gas_exhaustion ~loc ctxt gas_monad = - let open Lwt_result_syntax in - match GM.run ctxt gas_monad with - | Error _ -> return_unit - | _ -> failwith "%s: expected gas-exhaustion error" loc - -let assert_equal_gas ~loc g1 g2 = - Assert.equal ~loc Gas.Arith.equal "Compare gas" Gas.Arith.pp g1 g2 - -let assert_inner_errors ~loc ctxt gas_monad ~errors ~remaining_gas = - let open Lwt_result_syntax in - match GM.run ctxt gas_monad with - | Ok (Error e, ctxt) -> - let* () = - Assert.assert_equal_list - ~loc - ( = ) - "Inner error" - Format.pp_print_string - e - errors - in - assert_equal_gas - ~loc - (Gas.remaining_operation_gas ctxt) - (Gas.fp_of_milligas_int remaining_gas) - | _ -> failwith "%s: expected inner error" loc - -let assert_success ~loc ctxt gas_monad ~result ~remaining_gas = - match GM.run ctxt gas_monad with - | Ok (Ok x, ctxt) -> - let open Lwt_result_syntax in - let* () = Assert.equal_int ~loc x result in - assert_equal_gas - ~loc - (Gas.remaining_operation_gas ctxt) - (Gas.fp_of_milligas_int remaining_gas) - | _ -> failwith "%s: expected successful result `%d' but got error" loc result - -let with_context f ~limit = - let open Lwt_result_syntax in - let* ctxt = new_context ~limit in - f ctxt - -(** Test that consuming more gas than remaining results in a gas-exhaustion - error. *) -let test_gas_exhaustion () = - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - let* x = GM.return 1 in - let* () = GM.consume_gas (Saturation_repr.safe_int 10) in - let* y = GM.return 2 in - GM.return (x + y) - in - assert_gas_exhaustion ~loc:__LOC__ ctxt gas_monad - -(** Test that consuming more gas than remaining results in a gas-exhaustion - error before an inner error is produced. *) -let test_gas_exhaustion_before_error () = - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - let* x = GM.return 1 in - let* () = GM.consume_gas (Saturation_repr.safe_int 10) in - let* () = GM.of_result (Result_syntax.tzfail "Oh no") in - let* y = GM.return 2 in - GM.return (x + y) - in - assert_gas_exhaustion ~loc:__LOC__ ctxt gas_monad - -(** Test that consuming all remaining gas is feasible. *) -let test_successful_with_remaining_gas () = - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* x = GM.return 1 in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - let* y = GM.return 2 in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - GM.return (x + y) - in - assert_success ~loc:__LOC__ ctxt gas_monad ~result:3 ~remaining_gas:0 - -(** Test that the context has the expected amount of spare gas after the - computation. *) -let test_successful_with_spare_gas () = - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* x = GM.return 1 in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - let* y = GM.return 2 in - let* () = GM.consume_gas (Saturation_repr.safe_int 3) in - GM.return (x + y) - in - assert_success ~loc:__LOC__ ctxt gas_monad ~result:3 ~remaining_gas:2 - -(** Test that an inner error is produced rather than a gas-exhaustion error. *) -let test_inner_error () = - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* x = GM.return 1 in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - let* () = GM.of_result (Result_syntax.tzfail "Oh no") in - let* y = GM.return 2 in - let* () = GM.consume_gas (Saturation_repr.safe_int 10) in - GM.return (x + y) - in - assert_inner_errors - ~loc:__LOC__ - ctxt - gas_monad - ~errors:["Oh no"] - ~remaining_gas:5 - -(* Test that no gas-exhaustion error is produced and that no gas is consumed - when run in unlimited mode. -*) -let test_unlimited () = - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* x = GM.return 1 in - let* () = GM.consume_gas (Saturation_repr.safe_int 5) in - let* y = GM.return 2 in - let* () = GM.consume_gas (Saturation_repr.safe_int 100) in - let* () = GM.consume_gas (Saturation_repr.safe_int 3) in - GM.return (x + y) - in - assert_success - ~loc:__LOC__ - (Gas.set_unlimited ctxt) - gas_monad - ~result:3 - ~remaining_gas:10 - -let test_syntax_module () = - let open Lwt_result_syntax in - with_context ~limit:ten_milligas @@ fun ctxt -> - let gas_monad = - let open Gas_monad.Syntax in - let* none = return_none in - let* nil = return_nil in - let* t = return_true in - let* f = return_false in - let*? one = Ok 1 in - let+ two = return 2 in - (none, nil, t, f, one, two) - in - match GM.run ctxt gas_monad with - | Ok (Ok (None, [], true, false, 1, 2), _ctxt) -> return_unit - | _ -> failwith "Expected `Ok (None, [], true, false, 1, 2)`" - -let tests = - [ - Tztest.tztest "exhaustion" `Quick test_gas_exhaustion; - Tztest.tztest - "exhaustion before error" - `Quick - test_gas_exhaustion_before_error; - Tztest.tztest - "successful result with remaining gas" - `Quick - test_successful_with_remaining_gas; - Tztest.tztest - "successful result with spare gas" - `Quick - test_successful_with_spare_gas; - Tztest.tztest "inner error" `Quick test_inner_error; - Tztest.tztest "unlimited" `Quick test_unlimited; - Tztest.tztest "syntax module" `Quick test_syntax_module; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("gas monad", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_global_constants_storage.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_global_constants_storage.ml deleted file mode 100644 index cde5a2d9de6826ce6544517722ce3f1b2b3792a5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_global_constants_storage.ml +++ /dev/null @@ -1,431 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Global table of constants - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_global_constants_storage.ml - Dependencies: contract_hash.ml - Subject: Test the global table of constants -*) - -open Protocol -open Alpha_context -open Tztest -open Micheline -open QCheck2 -open Qcheck2_helpers -open Michelson_v1_primitives -open Michelson_v1_printer -open Test_global_constants - -(** [get] on a nonexistent global constant - returns an error. *) -let test_get_on_nonexistent_fails = - let open Lwt_result_wrap_syntax in - tztest_qcheck2 - ~name:"get on a nonexistent global constants fails" - (Gen.pair - (Generators.context_gen ()) - (Generators.canonical_without_constant_gen ())) - (fun (context, expr) -> - let*?@ hash = expr_to_hash expr in - let*!@ result = Global_constants_storage.get context hash in - assert_proto_error_id __LOC__ "Nonexistent_global" result) - -(** If registering an expression yields a hash [h] and context [c], - then [get c h] should yield the original expression. *) -let test_get_always_returns_registered_expr = - let open Lwt_result_wrap_syntax in - tztest_qcheck2 - ~name:"get always returned the registered constant" - (Gen.pair - (Generators.context_gen ()) - (Generators.canonical_without_constant_gen ())) - (fun (context, expr) -> - let*@ context, hash, _cost = - Global_constants_storage.register context expr - in - let+@ _context, actual_expr = Global_constants_storage.get context hash in - qcheck_eq ~pp:print_expr actual_expr expr) - -(* Attempts to register an expression that contains references - to expressions not already registered should fail. *) -let test_register_fails_with_unregistered_references = - let open Lwt_result_wrap_syntax in - tztest "register: fails with unregistered references" `Quick (fun () -> - let prim_with_constant = - Expr.from_string - {| Pair 1 - (constant "exprubuoE4JFvkSpxsZJXAvhTdozCNZpgfCnyg6WsiAYX79q4z3bXu")|} - in - let* context = create_context () in - let*!@ result = - Global_constants_storage.register context prim_with_constant - in - assert_proto_error_id __LOC__ "Nonexistent_global" result) - -(** Same test as [test_register_fails_with_unregistered_references] - but with random values. *) -let test_register_fails_with_unregistered_references_pbt = - let open Lwt_result_wrap_syntax in - tztest_qcheck2 - ~name:"register: fails with unregistered references pbt" - (Gen.pair - (Generators.context_gen ()) - (Generators.canonical_with_constant_gen ())) - (fun (context, (_, expr, _)) -> - assume_expr_not_too_large expr ; - let*!@ result = Global_constants_storage.register context expr in - assert_proto_error_id __LOC__ "Nonexistent_global" result) - -let rec grow n node = - match n with n when n <= 0 -> node | n -> grow (n - 1) (Seq ((), [node])) - -(* Any expression with a depth that exceeds - [Global_constants_storage.max_allowed_global_constant_depth] - should be rejected. *) -let test_register_fails_if_too_deep = - let open Lwt_result_wrap_syntax in - tztest "register: fails if expression too deep" `Quick (fun () -> - let vdeep_expr = - grow - (Constants_repr.max_allowed_global_constant_depth + 1) - (Int ((), Z.of_int 1)) - |> Micheline.strip_locations - in - let* context = create_context () in - let*!@ result = Global_constants_storage.register context vdeep_expr in - assert_proto_error_id __LOC__ "Expression_too_deep" result) - -(** [expand] on an expression containing a nonexistent global - constant returns an error. *) -let test_expand_nonexistent_fails = - let open Lwt_result_wrap_syntax in - tztest_qcheck2 - ~name: - "expand on an expression containing a nonexistent global constant fails" - (Gen.pair - (Generators.context_gen ()) - (Generators.canonical_with_constant_gen ())) - @@ fun (context, (_, expr, _)) -> - assume_expr_not_too_large expr ; - let*!@ result = Global_constants_storage.expand context expr in - assert_proto_error_id __LOC__ "Nonexistent_global" result - -(** Expanding an expression without constants should yield the same expression. *) -let test_expand_no_constants = - let open Lwt_result_wrap_syntax in - tztest "expand: no constants case" `Quick (fun () -> - let* context = create_context () in - let expected = Expr.from_string "Pair 1 (Pair 2 3)" in - let*@ (_ : t), result_expr = - Global_constants_storage.expand context expected - in - assert_expr_equal __LOC__ expected result_expr) - -(** Similar to [test_expand_no_constants], but random. *) -let test_register_and_expand_orthogonal = - let open Lwt_result_wrap_syntax in - tztest_qcheck2 - ~name:"register and expand are orthogonal" - (Gen.triple - (Generators.context_gen ()) - (Generators.canonical_without_constant_gen ()) - (Generators.canonical_without_constant_gen ())) - (fun (context, expr1, expr2) -> - assume_expr_not_too_large expr1 ; - assume_expr_not_too_large expr2 ; - let open Michelson_v1_printer in - let*@ context, _hash, _cost = - Global_constants_storage.register context expr1 - in - let+@ (_ : t), expr2_result = - Global_constants_storage.expand context expr2 - in - qcheck_eq ~pp:print_expr expr2 expr2_result) - -(** Expanding should expand constants in the given - expression, then expand any new constants, etc. - recursively until no constants remain. *) -let test_expand_deep_constants = - let open Lwt_result_wrap_syntax in - tztest "expand: deep constants" `Quick (fun () -> - (* Should hold for any n, but this test is very slow, - hence we don't do QCheck2. *) - let n = 1000 in - let expr1 = Expr.from_string "{}" in - let* context = create_context () in - let rec n_constants_deep context node n = - let*@ context, hash, (_ : Z.t) = - Global_constants_storage.register context (strip_locations node) - in - if n <= 1 then return (context, node, hash) - else - let new_node = - Seq - ( -1, - [ - Prim - ( -1, - H_constant, - [String (-1, Script_expr_hash.to_b58check hash)], - [] ); - ] ) - in - n_constants_deep context new_node (n - 1) - in - let* context, _, hash = n_constants_deep context (root expr1) n in - let deep_expr = - Expr.from_string - @@ Format.sprintf - "{constant \"%s\"; CDR; NIL operation; PAIR}" - (Script_expr_hash.to_b58check hash) - in - let*@ (_ : t), result = - Global_constants_storage.expand context deep_expr - in - let seq_n_deep n = - let rec advance n acc = - match n with 0 -> acc | _ -> advance (n - 1) (Seq (-1, [acc])) - in - advance (n - 1) (Seq (-1, [])) - in - let seq_str = Expr.to_string @@ strip_locations @@ seq_n_deep n in - let expected = - Expr.from_string - @@ Format.sprintf "{ %s; CDR; NIL operation; PAIR; }" - @@ seq_str - in - assert_expr_equal __LOC__ expected result) - -(** The [constant] prim is permitted only to have a - single string argument, representing a valid - Script_repr.expr hash, with no annotations *) -let test_expand_reject_ill_formed = - let open Lwt_result_wrap_syntax in - tztest "expand: ill formed constants are rejected" `Quick (fun () -> - (* first, create a context, register a constant and check - that its expansion works well. *) - let* context = create_context () in - let some_expr = Expr.from_string "0" in - let*@ context, hash, (_ : Z.t) = - Global_constants_storage.register context some_expr - in - let hash = Script_expr_hash.to_b58check hash in - (* check that expansion of the registered constant works *) - let*@ context, result = - Global_constants_storage.expand - context - (Expr.from_string @@ Format.sprintf "constant \"%s\"" hash) - in - let* () = assert_expr_equal __LOC__ some_expr result in - let test expr = - let expected = Expr.from_string expr in - let*!@ result = Global_constants_storage.expand context expected in - assert_proto_error_id __LOC__ "Badly_formed_constant_expression" result - in - (* constant with an argument other than String fails *) - let* () = test "constant 9" in - (* same as above but nested *) - let* () = test "Pair 1 (constant (Pair 2 3))" in - (* constant with bad hash fails *) - let* () = test "constant \"foobar\"" in - (* constant with type annot *) - let* () = test @@ Format.sprintf "(constant :a \"%s\")" hash in - (* constant with var annot *) - let* () = test @@ Format.sprintf "(constant @a \"%s\")" hash in - (* constant with field annot *) - test @@ Format.sprintf "(constant %%a \"%s\")" hash) - -(** The [constant] prim is not permitted to have a - [constant] child argument. - - The idea is to have expansion like this: - - constant (constant ) -> constant hash -> value - - But we want to forbid this as a badly formed constant. - Asserting that every constant must be a *static* string - makes it easier to see which constants are used where, because - you can just traverse the AST (no expansion necessary). *) -let test_reject_use_of_inner_constant = - let open Lwt_result_wrap_syntax in - tztest - "expand: use of 'constant (constant ...)' is rejected" - `Quick - (fun () -> - (* First, create a context, register a constant and check - that its expansion works well. *) - let* context = create_context () in - let some_expr = Expr.from_string "0" in - let*@ context, hash, _ = - Global_constants_storage.register context some_expr - in - let hash = Script_expr_hash.to_b58check hash in - (* Next, register the hash itself as a constant. *) - let*@ context, hash, (_ : Z.t) = - Global_constants_storage.register - context - (strip_locations (Micheline.String (-1, hash))) - in - let hash = Script_expr_hash.to_b58check hash in - let*!@ result = - Global_constants_storage.expand - context - (Expr.from_string - @@ Format.sprintf "{ constant (constant \"%s\") } " hash) - in - assert_proto_error_id __LOC__ "Badly_formed_constant_expression" result) - -(** [test_expand] accepts an expression [stored] to be - registered in the store, an expression [expr] that includes a template slot for - the hash of [stored], and an [expected] expression, and generates a test that - asserts the value of [expr] after expansion matches [expected]. *) -let make_expand_test ~stored ~expr ~expected () = - let open Lwt_result_wrap_syntax in - let* context = create_context () in - let stored_expr = Expr.from_string stored in - let*@ context, hash, _ = - Global_constants_storage.register context stored_expr - in - let expected = Expr.from_string expected in - let expr_with_constant = - Format.sprintf expr (Script_expr_hash.to_b58check hash) |> Expr.from_string - in - let*@ (_ : t), result_expr = - Global_constants_storage.expand context expr_with_constant - in - assert_expr_equal __LOC__ expected result_expr - -let test_expand_data_example = - tztest - "expand: data" - `Quick - (make_expand_test - ~stored:"3" - ~expr:"Pair 1 (Pair 2 (constant \"%s\"))" - ~expected:"Pair 1 (Pair 2 3)") - -let test_expand_types_example = - tztest - "expand: types" - `Quick - (make_expand_test - ~stored:"big_map string string" - ~expr:"PUSH (constant \"%s\") {}" - ~expected:"PUSH (big_map string string) {}") - -let test_expand_instr_example = - tztest - "expand: instr" - `Quick - (make_expand_test - ~stored:"PUSH int 3" - ~expr:"{ DROP; constant \"%s\"; DROP }" - ~expected:"{ DROP; PUSH int 3 ; DROP }") - -(** For any expression [e], when replacing any subexpression - [e'] with a constant hash and registering [e'], calling - [expand] on the new expression yields the - original expression [e]*) -let test_expand_pbt = - let open Lwt_result_wrap_syntax in - let open Michelson_v1_printer in - tztest_qcheck2 - ~name:"expand: random" - (Gen.pair - (Generators.context_gen ()) - (Generators.canonical_with_constant_gen ())) - (fun (context, (full_expr, expr_with_constant, sub_expr)) -> - assume_expr_not_too_large full_expr ; - assume_expr_not_too_large expr_with_constant ; - assume_expr_not_too_large sub_expr ; - let*@ context, (_ : Script_expr_hash.t), (_ : Z.t) = - Global_constants_storage.register context sub_expr - in - let+@ (_ : t), result_expr = - Global_constants_storage.expand context expr_with_constant - in - qcheck_eq ~pp:print_expr full_expr result_expr) - -let test_expand_is_idempotent = - let open Lwt_result_wrap_syntax in - tztest_qcheck2 - ~name:"expand is idempotent" - (Gen.pair - (Generators.context_gen ()) - (Generators.canonical_with_constant_gen ())) - (fun (context, (full_expr, expr_with_constant, sub_expr)) -> - assume_expr_not_too_large full_expr ; - let*@ context, _, _ = - Global_constants_storage.register context sub_expr - in - let*@ context, result1 = - Global_constants_storage.expand context expr_with_constant - in - let+@ (_ : t), result2 = - Global_constants_storage.expand context full_expr - in - qcheck_eq ~pp:print_expr result1 result2) - -(** [bottom_up_fold_cps] does not stack overflow even when - given large values. *) -let test_fold_does_not_stack_overflow = - let open Lwt_result_syntax in - tztest "bottom_up_fold_cps: does not stack overflow" `Quick (fun () -> - let node = grow 1_000_000 @@ Int ((), Z.zero) in - return @@ ignore - @@ Global_constants_storage.Internal_for_tests.bottom_up_fold_cps - () - node - (fun _ _ -> ()) - (fun _ node k -> k () node)) - -let tests = - [ - test_get_on_nonexistent_fails; - test_get_always_returns_registered_expr; - test_register_fails_with_unregistered_references; - test_register_fails_with_unregistered_references_pbt; - test_register_fails_if_too_deep; - test_expand_nonexistent_fails; - test_expand_no_constants; - test_register_and_expand_orthogonal; - test_expand_deep_constants; - test_expand_reject_ill_formed; - test_reject_use_of_inner_constant; - test_expand_data_example; - test_expand_types_example; - test_expand_instr_example; - test_expand_pbt; - test_expand_is_idempotent; - test_fold_does_not_stack_overflow; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Global constants storage", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_level_module.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_level_module.ml deleted file mode 100644 index 5271003e0ea2f8c1873ba339050478fa81025d5d..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_level_module.ml +++ /dev/null @@ -1,286 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (baking) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_level_module.ml - Subject: some functions in the Level module -*) - -open Protocol - -let test_create_cycle_eras () = - let open Lwt_result_wrap_syntax in - let@ empty_cycle_eras = Level_repr.create_cycle_eras [] in - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - empty_cycle_eras - "Invalid cycle eras" - in - let@ increasing_first_levels = - [ - Level_repr. - { - first_level = Raw_level_repr.of_int32_exn 1l; - first_cycle = Cycle_repr.succ Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - { - first_level = Raw_level_repr.of_int32_exn 9l; - first_cycle = Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - ] - |> Level_repr.create_cycle_eras - in - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - increasing_first_levels - "Invalid cycle eras" - in - let@ increasing_first_cycles = - [ - Level_repr. - { - first_level = Raw_level_repr.of_int32_exn 9l; - first_cycle = Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - { - first_level = Raw_level_repr.of_int32_exn 1l; - first_cycle = Cycle_repr.succ Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - ] - |> Level_repr.create_cycle_eras - in - Assert.proto_error_with_info - ~loc:__LOC__ - increasing_first_cycles - "Invalid cycle eras" - -let test_case_1 = - ( [ - Level_repr. - { - first_level = Raw_level_repr.of_int32_exn 1l; - first_cycle = Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - ], - [ - (1, (1, 0, 0, 0, false)); - (2, (2, 1, 0, 1, true)); - (3, (3, 2, 0, 2, false)); - (8, (8, 7, 0, 7, true)); - (9, (9, 8, 1, 0, false)); - (16, (16, 15, 1, 7, true)); - (17, (17, 16, 2, 0, false)); - (64, (64, 63, 7, 7, true)); - (65, (65, 64, 8, 0, false)); - ] ) - -let test_case_2 = - ( List.rev - [ - Level_repr. - { - first_level = Raw_level_repr.of_int32_exn 1l; - first_cycle = Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - { - first_level = Raw_level_repr.of_int32_exn 17l; - first_cycle = Cycle_repr.of_int32_exn 2l; - blocks_per_cycle = 16l; - blocks_per_commitment = 4l; - }; - ], - [ - (1, (1, 0, 0, 0, false)); - (2, (2, 1, 0, 1, true)); - (3, (3, 2, 0, 2, false)); - (8, (8, 7, 0, 7, true)); - (9, (9, 8, 1, 0, false)); - (16, (16, 15, 1, 7, true)); - (17, (17, 16, 2, 0, false)); - (32, (32, 31, 2, 15, true)); - (33, (33, 32, 3, 0, false)); - (64, (64, 63, 4, 15, true)); - (65, (65, 64, 5, 0, false)); - ] ) - -let test_case_3 = - ( List.rev - [ - Level_repr. - { - first_level = Raw_level_repr.of_int32_exn 1l; - first_cycle = Cycle_repr.root; - blocks_per_cycle = 8l; - blocks_per_commitment = 2l; - }; - { - first_level = Raw_level_repr.of_int32_exn 17l; - first_cycle = Cycle_repr.of_int32_exn 2l; - blocks_per_cycle = 16l; - blocks_per_commitment = 4l; - }; - { - first_level = Raw_level_repr.of_int32_exn 49l; - first_cycle = Cycle_repr.of_int32_exn 4l; - blocks_per_cycle = 6l; - blocks_per_commitment = 3l; - }; - ], - [ - (1, (1, 0, 0, 0, false)); - (2, (2, 1, 0, 1, true)); - (3, (3, 2, 0, 2, false)); - (8, (8, 7, 0, 7, true)); - (9, (9, 8, 1, 0, false)); - (16, (16, 15, 1, 7, true)); - (17, (17, 16, 2, 0, false)); - (32, (32, 31, 2, 15, true)); - (33, (33, 32, 3, 0, false)); - (48, (48, 47, 3, 15, true)); - (49, (49, 48, 4, 0, false)); - (64, (64, 63, 6, 3, false)); - (65, (65, 64, 6, 4, false)); - (66, (66, 65, 6, 5, true)); - (67, (67, 66, 7, 0, false)); - ] ) - -let test_level_from_raw () = - let open Lwt_result_wrap_syntax in - List.iter_es - (fun (cycle_eras, test_cases) -> - List.iter_es - (fun ( input_level, - ( level, - level_position, - cycle, - cycle_position, - expected_commitment ) ) -> - let raw_level = - Raw_level_repr.of_int32_exn (Int32.of_int input_level) - in - let*?@ cycle_eras = Level_repr.create_cycle_eras cycle_eras in - let level_from_raw = - Protocol.Level_repr.level_from_raw ~cycle_eras raw_level - in - let* () = - Assert.equal_int - ~loc:__LOC__ - (Int32.to_int (Raw_level_repr.to_int32 level_from_raw.level)) - level - in - let* () = - Assert.equal_int - ~loc:__LOC__ - (Int32.to_int level_from_raw.level_position) - level_position - in - let* () = - Assert.equal_int - ~loc:__LOC__ - (Int32.to_int (Cycle_repr.to_int32 level_from_raw.cycle)) - cycle - in - let* () = - Assert.equal_int - ~loc:__LOC__ - (Int32.to_int level_from_raw.cycle_position) - cycle_position - in - let* () = - Assert.equal_bool - ~loc:__LOC__ - level_from_raw.expected_commitment - expected_commitment - in - let offset = - Int32.neg (Int32.add Int32.one (Int32.of_int input_level)) - in - let@ res = - Level_repr.level_from_raw_with_offset ~cycle_eras ~offset raw_level - in - Assert.proto_error ~loc:__LOC__ res (fun err -> - let error_info = - Error_monad.find_info_of_error (Environment.wrap_tzerror err) - in - error_info.title = "Negative sum of level and offset")) - test_cases) - [test_case_1; test_case_2; test_case_3] - -let test_first_level_in_cycle () = - let open Lwt_result_wrap_syntax in - let cycle_eras = fst test_case_3 in - let test_cases = - (* cycle, level *) - [ - (0l, 1); - (1l, 9); - (2l, 17); - (3l, 33); - (4l, 49); - (5l, 55); - (6l, 61); - (7l, 67); - ] - in - let f (input_cycle, level) = - let*?@ cycle_eras = Level_repr.create_cycle_eras cycle_eras in - let input_cycle = Cycle_repr.of_int32_exn input_cycle in - let level_res = - Level_repr.first_level_in_cycle_from_eras ~cycle_eras input_cycle - in - Assert.equal_int - ~loc:__LOC__ - (Int32.to_int (Raw_level_repr.to_int32 level_res.level)) - level - in - List.iter_es f test_cases - -let tests = - [ - Tztest.tztest "create_cycle_eras" `Quick test_create_cycle_eras; - Tztest.tztest "level_from_raw" `Quick test_level_from_raw; - Tztest.tztest "first_level_in_cycle" `Quick test_first_level_in_cycle; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("level module", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_liquidity_baking_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_liquidity_baking_repr.ml deleted file mode 100644 index 17d73e4f0d6f0091fc23f9ad66ada0340dedbbd3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_liquidity_baking_repr.ml +++ /dev/null @@ -1,282 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Liquidity_baking_repr module - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_liquidity_baking_repr.ml - Subject: Tests for the Liquidity_baking_repr module -*) - -open Protocol -module Votes_EMA = Per_block_votes_repr.Liquidity_baking_toggle_EMA - -let ema_of_int32 ema = Lwt_result_wrap_syntax.wrap @@ Votes_EMA.of_int32 ema - -let ema_to_int32 = Votes_EMA.to_int32 - -let compute_new_ema ~per_block_vote ema = - Per_block_votes_repr.compute_new_liquidity_baking_ema ~per_block_vote ema - |> ema_to_int32 - -(* Folds compute_new_ema on a list of votes *) -let compute_new_ema_n per_block_votes initial_ema = - List.fold_left - (fun ema per_block_vote -> - Per_block_votes_repr.compute_new_liquidity_baking_ema ~per_block_vote ema) - initial_ema - per_block_votes - |> ema_to_int32 - -let ema_range = - [ - 0l; - 1l; - 10l; - 100l; - 1000l; - 10_000l; - 100_000l; - 1_000_000l; - 10_000_000l; - 100_000_000l; - 200_000_000l; - 300_000_000l; - 400_000_000l; - 500_000_000l; - 600_000_000l; - 760_000_000l; - 800_000_000l; - 900_000_000l; - 1_000_000_000l; - 1_100_000_000l; - 1_200_000_000l; - 1_300_000_000l; - 1_400_000_000l; - 1_500_000_000l; - 1_600_000_000l; - 1_700_000_000l; - 1_800_000_000l; - 1_900_000_000l; - 1_990_000_000l; - 1_999_000_000l; - 1_999_900_000l; - 1_999_990_000l; - 1_999_999_000l; - 1_999_999_900l; - 1_999_999_990l; - 1_999_999_999l; - 2_000_000_000l; - ] - -(* Test that new_ema = old_ema when voting Pass. *) -let test_ema_pass () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.equal_int32 - ~loc:__LOC__ - (compute_new_ema ~per_block_vote:Per_block_vote_pass ema) - old_ema) - ema_range - -(* Test that new_ema is still between 0 and 2,000,000,000 after an Off vote. *) -let test_ema_in_bound_off () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - let new_ema = compute_new_ema ~per_block_vote:Per_block_vote_off ema in - let* () = Assert.leq_int32 ~loc:__LOC__ 0l new_ema in - Assert.leq_int32 ~loc:__LOC__ new_ema 2_000_000_000l) - ema_range - -(* Test that new_ema > old_ema when voting Off, except if old_ema is - already very close to the upper bound. *) -let test_ema_increases_off () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.lt_int32 - ~loc:__LOC__ - old_ema - (compute_new_ema ~per_block_vote:Per_block_vote_off ema)) - (List.filter (fun ema -> Compare.Int32.(ema < 1_999_999_000l)) ema_range) - -(* Test that the increase in EMA caused by an Off vote is bounded by 1,000,000 *) -let test_ema_increases_off_bound () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.leq_int32 - ~loc:__LOC__ - (Int32.sub - (compute_new_ema ~per_block_vote:Per_block_vote_off ema) - old_ema) - 1_000_000l) - ema_range - -(* Test that new_ema is still between 0 and 2,000,000,000 after an Off vote. *) -let test_ema_in_bound_on () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - let new_ema = compute_new_ema ~per_block_vote:Per_block_vote_on ema in - let* () = Assert.leq_int32 ~loc:__LOC__ 0l new_ema in - Assert.leq_int32 ~loc:__LOC__ new_ema 2_000_000_000l) - ema_range - -(* Test that new_ema < old_ema when voting On, except if old_ema is - already very close to the lower bound. *) -let test_ema_decreases_on () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.lt_int32 - ~loc:__LOC__ - (compute_new_ema ~per_block_vote:Per_block_vote_on ema) - old_ema) - (List.filter (fun ema -> Compare.Int32.(ema > 1000l)) ema_range) - -(* Test that the decrease in EMA caused by an On vote is bounded by 1,000,000 *) -let test_ema_decreases_on_bound () = - let open Lwt_result_syntax in - List.iter_es - (fun old_ema -> - let* ema = ema_of_int32 old_ema in - Assert.leq_int32 - ~loc:__LOC__ - (Int32.sub - (compute_new_ema ~per_block_vote:Per_block_vote_on ema) - old_ema) - 1_000_000l) - ema_range - -(* Test that 1385 Off votes are needed to reach the threshold from 0. *) -let test_ema_many_off () = - let open Lwt_result_syntax in - let open Per_block_votes_repr in - let* initial_ema = ema_of_int32 0l in - let* () = - Assert.leq_int32 - ~loc:__LOC__ - (compute_new_ema_n - (Stdlib.List.init 1385 (fun _ -> Per_block_vote_off)) - initial_ema) - 1_000_000_000l - in - Assert.leq_int32 - ~loc:__LOC__ - 1_000_000_000l - (compute_new_ema_n - (Stdlib.List.init 1386 (fun _ -> Per_block_vote_off)) - initial_ema) - -(* Test that 1385 On votes are needed to reach the threshold from the max value of the EMA (2,000,000,000). *) -let test_ema_many_on () = - let open Lwt_result_syntax in - let open Per_block_votes_repr in - let* initial_ema = ema_of_int32 2_000_000_000l in - let* () = - Assert.leq_int32 - ~loc:__LOC__ - 1_000_000_000l - (compute_new_ema_n - (Stdlib.List.init 1385 (fun _ -> Per_block_vote_on)) - initial_ema) - in - Assert.leq_int32 - ~loc:__LOC__ - (compute_new_ema_n - (Stdlib.List.init 1386 (fun _ -> Per_block_vote_on)) - initial_ema) - 1_000_000_000l - -(* Test that the EMA update function is symmetric: - from two dual values of the EMA (that is, two values x and y such that - x + y = 2,000,000,000), voting On on the first one decreases it by as - much than voting Off on the second one increases it. -*) -let test_ema_symmetry () = - let open Lwt_result_syntax in - List.iter_es - (fun ema -> - let opposite_ema = Int32.(sub 2_000_000_000l ema) in - let* ema = ema_of_int32 ema in - let* opposite_ema = ema_of_int32 opposite_ema in - let new_ema = compute_new_ema ~per_block_vote:Per_block_vote_on ema in - let new_opposite_ema = - compute_new_ema ~per_block_vote:Per_block_vote_off opposite_ema - in - Assert.equal_int32 - ~loc:__LOC__ - Int32.(add new_ema new_opposite_ema) - 2_000_000_000l) - ema_range - -let tests = - [ - Tztest.tztest "EMA does not change when vote is Pass" `Quick test_ema_pass; - Tztest.tztest - "EMA remains in bounds when vote is Off" - `Quick - test_ema_in_bound_off; - Tztest.tztest "EMA increases when vote is Off" `Quick test_ema_increases_off; - Tztest.tztest - "EMA does not increase too much when vote is Off" - `Quick - test_ema_increases_off_bound; - Tztest.tztest - "EMA remains in bounds when vote is On" - `Quick - test_ema_in_bound_on; - Tztest.tztest "EMA decreases when vote is On" `Quick test_ema_decreases_on; - Tztest.tztest - "EMA does not decrease too much when vote is On" - `Quick - test_ema_decreases_on_bound; - Tztest.tztest - "EMA goes from 0 to one billion in 1386 Off votes" - `Quick - test_ema_many_off; - Tztest.tztest - "EMA goes from two billions to one billion in 1386 On votes" - `Quick - test_ema_many_on; - Tztest.tztest - "voting On and Off have symmetric effects on the EMA" - `Quick - test_ema_symmetry; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("liquidity baking", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_local_contexts.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_local_contexts.ml deleted file mode 100644 index 9fd03ca84dd818a02542a04efc371907b4f04832..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_local_contexts.ml +++ /dev/null @@ -1,144 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 proof ninja, Inc Some x | _ -> None - - type 'a ipath = 'a * t - - let args = - Storage_description.One - { - rpc_arg = Environment.RPC_arg.string; - encoding = Data_encoding.string; - compare; - } -end - -module Indexed_context = Make_indexed_subcontext (Sub) (Index) - -module Value : Storage_sigs.VALUE with type t = bytes = struct - type t = bytes - - let encoding = Data_encoding.bytes -end - -module C = - Indexed_context.Make_map - (Registered) - (struct - let name = ["name"] - end) - (Value) - -let eq_context ctxt1 ctxt2 = - let open Lwt_result_wrap_syntax in - let hash ctxt = - let+@ root = Raw_context.get_tree ctxt [] in - Raw_context.Tree.hash root - in - let* x = hash ctxt1 in - let* y = hash ctxt2 in - Assert.equal - ~loc:__LOC__ - Context_hash.equal - "check context" - Context_hash.pp - x - y - -let write_with_local ctxt local_dir f = - let open Lwt_result_syntax in - let+ ctxt, () = - Indexed_context.with_local_context ctxt local_dir (fun local -> - let+ local = f local in - (local, ())) - in - ctxt - -let test_local_remove_existing () = - let open Lwt_result_wrap_syntax in - let* ctxt = create () in - let subdir = "foo" in - let value = Bytes.of_string "ABCDE" in - (* init *) - let*@ ctxt1 = - write_with_local ctxt subdir (fun local -> C.Local.init local value) - in - let*@ ctxt2 = C.init ctxt subdir value in - let* () = eq_context ctxt1 ctxt2 in - let ctxt = ctxt2 in - (* remove_existing *) - let*@ ctxt1 = write_with_local ctxt subdir C.Local.remove_existing in - let*@ ctxt2 = C.remove_existing ctxt subdir in - eq_context ctxt1 ctxt2 - -let tests = - [ - Tztest.tztest - "Local.remove_existing: check whether local access has the same behavior" - `Quick - test_local_remove_existing; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("local contexts", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_merkle_list.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_merkle_list.ml deleted file mode 100644 index 7215e080d777bd5b9cc7f8aa9400d96bb6de40bb..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_merkle_list.ml +++ /dev/null @@ -1,261 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Merkle list) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_merkle_list.ml - Subject: test the ad-hoc merkle tree structure implemented to encode lists -*) - -open Merkle_list_helper - -let assert_invalid_pos : 'a Environment.Error_monad.tzresult -> _ = function - | Error err -> - let expected_error_msg msg = "Error:\n " ^ msg ^ "\n" in - let actual_error_msg : string = - Format.asprintf "%a" Environment.Error_monad.pp_trace err - in - Log.debug "%s\n" actual_error_msg ; - assert ( - expected_error_msg "Merkle_list_invalid_position" = actual_error_msg) - | _ -> assert false - -(* Check that the result of [compute] is the expected hash *) -let test_compute () = - let open Error_monad.Result_syntax in - let elements = - Stdlib.List.init 5 (fun i -> Bytes.of_string (Int.to_string i)) - in - let element_hashes = List.map (fun e -> Hash.hash_bytes [e]) elements in - let el_hashes_a = Array.of_list element_hashes in - let h01 = hash2 el_hashes_a.(0) el_hashes_a.(1) in - let h23 = hash2 el_hashes_a.(2) el_hashes_a.(3) in - let h4e = hash2 el_hashes_a.(4) empty in - let h03 = hash2 h01 h23 in - let h4ee = hash2 h4e empty in - let expected_root = hash2 h03 h4ee in - assert (Hash.equal (compute elements) expected_root) ; - return_unit - -(* Compare the root of a tree constructed by snoc'ing to the value - given by compute and the values of the leaves *) -let test_snoc () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - - let t = List.fold_left snoc_tr nil elements in - let element_hashes = List.map (fun e -> Hash.hash_bytes [e]) elements in - - assert (Hash.equal (compute elements) (root t)) ; - assert (element_hashes = Internal_for_tests.to_list t) ; - return_unit - -(* Compare the result of the two versions of snoc *) -let test_snoc_non_tr () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let t1 = List.fold_left snoc_tr nil elements in - let t2 = List.fold_left snoc nil elements in - assert (Internal_for_tests.equal t1 t2) ; - return_unit - -(* Check that the path computed is the expected one *) -let test_compute_path () = - let open Error_monad.Result_syntax in - let elements = - Stdlib.List.init 5 (fun i -> Bytes.of_string (Int.to_string i)) - in - let t = List.fold_left snoc_tr nil elements in - - let element_hashes = List.map (fun e -> Hash.hash_bytes [e]) elements in - let el_hashes_a = Array.of_list element_hashes in - let h23 = hash2 el_hashes_a.(2) el_hashes_a.(3) in - let h4e = hash2 el_hashes_a.(4) empty in - let h4ee = hash2 h4e empty in - let expected_path_for_1 = [el_hashes_a.(0); h23; h4ee] in - let* path = compute_path t 1 in - assert (Internal_for_tests.path_to_list path = expected_path_for_1) ; - return_unit - -(* Negative test: pos < 0 *) -let test_compute_path_negative_pos () = - let open Error_monad.Result_syntax in - let n = 10 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let t = List.fold_left snoc_tr nil elements in - assert_invalid_pos @@ compute_path t (-1) ; - return_unit - -(* Negative test: pos >= size tree *) -let test_compute_path_out_of_bounds () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let t = List.fold_left snoc_tr nil elements in - assert_invalid_pos @@ compute_path t n ; - return_unit - -(* Negative test: pos = size tree, when tree is full *) -let test_compute_path_out_of_bounds_full () = - let open Error_monad.Result_syntax in - let n = 4 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let t = List.fold_left snoc_tr nil elements in - assert_invalid_pos @@ compute_path t n ; - return_unit - -(* Check that a computed root (from [check_path]) is the actual root *) -let test_check_path () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let elements_array = Array.of_list elements in - let t = List.fold_left snoc_tr nil elements in - Stdlib.List.init n (fun pos -> - let* path = compute_path t pos in - let* b = check_path path pos elements_array.(pos) (ML.root t) in - assert b ; - return_unit) - |> Environment.Error_monad.Result_syntax.tzjoin - -(* Check that a path is only valid for the position for which it - was computed *) -let test_check_path_wrong_pos () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let elements_array = Array.of_list elements in - let t = List.fold_left snoc_tr ML.nil elements in - let* path = compute_path t (n - 1) in - Stdlib.List.init (n - 2) (fun pos -> - let* b = check_path path pos elements_array.(pos) (ML.root t) in - assert (not b) ; - return_unit) - |> Environment.Error_monad.Result_syntax.tzjoin - -(* Check that a computed path is invalidated by a tree update *) -let test_check_invalidated_path () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let new_el = Bytes.of_string (Int.to_string n) in - let t = List.fold_left snoc_tr ML.nil elements in - let* path = compute_path t 0 in - let t = snoc_tr t new_el in - let* b = check_path path 0 (Stdlib.List.hd elements) (ML.root t) in - assert (not b) ; - return_unit - -(* Negative test: pos < 0 in [check_path] *) -let test_check_path_negative_pos () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let elements_array = Array.of_list elements in - let t = List.fold_left snoc_tr nil elements in - let pos = Random.int n in - let* path = compute_path t pos in - assert_invalid_pos @@ check_path path (-1) elements_array.(pos) (ML.root t) ; - return_unit - -(* Negative test: pos >= 2^depth in [check_path] *) -let test_check_path_out_of_bounds () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let elements_array = Array.of_list elements in - let t = List.fold_left snoc_tr nil elements in - let pos = Random.int n in - let* path = compute_path t pos in - (* NB: for this to be actually invalid, it is not enough to pass - a position larger than [n]. We need pos >= 2^depth. *) - assert_invalid_pos @@ check_path path 32 elements_array.(pos) (ML.root t) ; - return_unit - -(* Encoding roundtrip *) -let test_path_encoding () = - let open Error_monad.Result_syntax in - let n = 20 in - let elements = - Stdlib.List.init n (fun i -> Bytes.of_string (Int.to_string i)) - in - let t = List.fold_left snoc_tr nil elements in - let pos = n / 2 in - let* path = compute_path t pos in - let b = Data_encoding.Binary.to_bytes_exn path_encoding path in - let path' = Data_encoding.Binary.of_bytes_exn path_encoding b in - assert (path' = path) ; - return_unit - -let valid_tests = - [ - ("compute", test_compute); - ("snoc", test_snoc); - ("snoc_non_tr", test_snoc_non_tr); - ("compute_path", test_compute_path); - ("check_path", test_check_path); - ("path_encoding", test_path_encoding); - ("compute_path_negative_pos", test_compute_path_negative_pos); - ("compute_path_out_of_bounds", test_compute_path_out_of_bounds); - ("check_path_negative_pos", test_check_path_negative_pos); - ("check_path_out_of_bounds", test_check_path_out_of_bounds); - ("compute_path_out_of_bounds_full", test_compute_path_out_of_bounds_full); - ("check_path_wrong_pos", test_check_path_wrong_pos); - ("check_invalidated_path", test_check_invalidated_path); - ] - -let wrap (n, f) = - Alcotest_lwt.test_case n `Quick (fun _ () -> - match f () with Ok () -> Lwt.return_unit | Error _ -> assert false) - -let tests = List.map wrap valid_tests - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("merkle list", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_operation_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_operation_repr.ml deleted file mode 100644 index bba276c32e9420ade10c9ea52ba31cbfcb732056..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_operation_repr.ml +++ /dev/null @@ -1,192 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Operation_repr - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_operation_repr.ml - Dependencies: -- - Subject: To test the modules (including the top-level) - in operation_repr.ml as individual units, particularly - failure cases. Superficial goal: increase coverage percentage. -*) -open Protocol - -open Tztest - -module Test_operation_repr = struct - open Operation_repr - - let test_of_list_single_case () = - let open Lwt_result_wrap_syntax in - let op = - Manager_operation - { - fee = Obj.magic 0; - operation = Obj.magic 0; - gas_limit = Obj.magic 0; - storage_limit = Obj.magic 0; - counter = Obj.magic 0; - source = Obj.magic 0; - } - in - let*?@ contents_list = of_list [Contents op] in - match contents_list with - | Contents_list (Single op') when Obj.repr op == Obj.repr op' -> return_unit - | _ -> failwith "Unexpected value" - - let test_of_list_multiple_case () = - let open Lwt_result_wrap_syntax in - let op1 = - Manager_operation - { - fee = Obj.magic 0; - operation = Obj.magic 0; - gas_limit = Obj.magic 0; - storage_limit = Obj.magic 0; - counter = Obj.magic 0; - source = Obj.magic 0; - } - in - let op2 = - Manager_operation - { - fee = Obj.magic 1; - operation = Obj.magic 0; - gas_limit = Obj.magic 0; - storage_limit = Obj.magic 0; - counter = Obj.magic 0; - source = Obj.magic 0; - } - in - let*?@ contents_list = of_list [Contents op1; Contents op2] in - match contents_list with - | Contents_list (Cons (op1', Single op2')) - when Obj.repr op1 == Obj.repr op1' && Obj.repr op2 == Obj.repr op2' -> - return_unit - | _ -> failwith "Unexpected value" - - let test_of_list_empty_case () = - let open Lwt_result_syntax in - match of_list [] with - | Ok _ -> failwith "of_list of an empty list was expected to fail" - | Error _ -> return_unit - - let zero_bls = - match Signature.(split_signature (Bls Signature.Bls.zero)) with - | {prefix = None; _} -> assert false - | {prefix = Some prefix; suffix} -> - let prefix = - Data_encoding.Binary.to_bytes_exn Signature.prefix_encoding prefix - in - (Bytes.cat (Bytes.of_string "\255") prefix, suffix) - - let test_split_signatures error assemble = - let open Lwt_result_syntax in - let op_bytes = - Data_encoding.Binary.to_bytes_exn - Operation_repr.contents_encoding - (Contents (Failing_noop "")) - in - let prefix, suffix = zero_bls in - let protocol_data_bytes = - Bytes.(concat empty) (assemble op_bytes prefix suffix) - in - match - Data_encoding.Binary.of_bytes - Operation_repr.protocol_data_encoding - protocol_data_bytes - with - | Ok _ -> failwith "Should have failed with %s" error - | Error (User_invariant_guard e) when e = error -> return_unit - | Error e -> - failwith - "Unexpected error: %a instead of %s" - Data_encoding.Binary.pp_read_error - e - error - - let test_only_signature_prefix () = - test_split_signatures "Operation lists should not be empty." - @@ fun _op_bytes prefix suffix -> [prefix; suffix] - - let test_decoding_empty_list () = - test_split_signatures "Operation lists should not be empty." - @@ fun _op_bytes _prefix suffix -> [suffix] - - let test_multiple_signature_prefix () = - test_split_signatures "Signature prefix must appear last" - @@ fun op_bytes prefix suffix -> [op_bytes; prefix; prefix; suffix] - - let test_signature_prefix_not_final () = - test_split_signatures "Signature prefix must appear last" - @@ fun op_bytes prefix suffix -> [prefix; op_bytes; suffix] - - let test_multiple_non_manager () = - test_split_signatures - "Operation list of length > 1 should only contain manager operations." - @@ fun op_bytes prefix suffix -> [op_bytes; op_bytes; prefix; suffix] -end - -let tests = - [ - tztest - "of_list: single element input list" - `Quick - Test_operation_repr.test_of_list_single_case; - tztest - "of_list: multiple element input list" - `Quick - Test_operation_repr.test_of_list_multiple_case; - tztest - "of_list: empty input list" - `Quick - Test_operation_repr.test_of_list_empty_case; - tztest - "protocol_data_encoding: only signature prefix" - `Quick - Test_operation_repr.test_only_signature_prefix; - tztest - "protocol_data_encoding: empty list" - `Quick - Test_operation_repr.test_decoding_empty_list; - tztest - "protocol_data_encoding: multiple signature prefix" - `Quick - Test_operation_repr.test_multiple_signature_prefix; - tztest - "protocol_data_encoding: signature prefix not final" - `Quick - Test_operation_repr.test_signature_prefix_not_final; - tztest - "protocol_data_encoding: multiple non manager" - `Quick - Test_operation_repr.test_multiple_non_manager; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Operation_repr.ml", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_percentage.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_percentage.ml deleted file mode 100644 index 7c8b6a6ed62103e722953015c435592fbf0d38d3..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_percentage.ml +++ /dev/null @@ -1,173 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2023 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (quantities) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_percentage.ml - Subject: On percentages. -*) - -open Protocol - -let pct_of_int n = - Percentage.of_ratio_bounded Ratio_repr.{numerator = n; denominator = 100} - -let assert_equal ~loc n (pct : Percentage.t) = - let pct_q = Percentage.to_q pct in - Assert.equal_q ~loc Q.(n // 100) pct_q - -let assert_equal_tez ~loc t1 t2 = - Assert.equal ~loc Tez_repr.equal "Tez aren't equal" Tez_repr.pp t1 t2 - -let assert_equal_q ~loc q (pct : Percentage.t) = - let pct_q = Percentage.to_q pct in - Assert.equal_q ~loc q pct_q - -let f = Tez_repr.mul_percentage - -let test_constant_values () = - let open Lwt_result_syntax in - let* () = assert_equal ~loc:__LOC__ 0 Percentage.p0 in - let* () = assert_equal ~loc:__LOC__ 5 Percentage.p5 in - let* () = assert_equal ~loc:__LOC__ 50 Percentage.p50 in - let* () = assert_equal ~loc:__LOC__ 51 Percentage.p51 in - let* () = assert_equal ~loc:__LOC__ 100 Percentage.p100 in - return_unit - -let test_neg () = - let open Lwt_result_syntax in - let open Percentage in - let* () = assert_equal ~loc:__LOC__ 95 (neg p5) in - let* () = assert_equal ~loc:__LOC__ 50 (neg p50) in - let* () = assert_equal ~loc:__LOC__ 31 (neg (pct_of_int 69)) in - let* () = assert_equal ~loc:__LOC__ 100 (neg (pct_of_int 0)) in - let* () = assert_equal ~loc:__LOC__ 5 (neg (neg p5)) in - return_unit - -let test_bounded () = - let open Lwt_result_syntax in - let open Percentage in - let* () = assert_equal ~loc:__LOC__ 100 (pct_of_int 200) in - let* () = assert_equal ~loc:__LOC__ 0 (pct_of_int (-100)) in - let* () = assert_equal ~loc:__LOC__ 100 (add_bounded p50 p50) in - let* () = assert_equal ~loc:__LOC__ 100 (add_bounded p50 (neg p5)) in - return_unit - -let test_mul_percentage () = - let open Lwt_result_syntax in - let open Tez_repr in - let rounding = `Down in - let* () = - assert_equal_tez - ~loc:__LOC__ - (of_mutez_exn 50L) - (mul_percentage ~rounding (of_mutez_exn 100L) Percentage.p50) - in - let* () = - assert_equal_tez - ~loc:__LOC__ - (of_mutez_exn 5L) - (mul_percentage ~rounding (of_mutez_exn 100L) Percentage.p5) - in - (* round down *) - let* () = - assert_equal_tez - ~loc:__LOC__ - (of_mutez_exn 49L) - (mul_percentage ~rounding (of_mutez_exn 99L) Percentage.p50) - in - (* round up *) - let* () = - assert_equal_tez - ~loc:__LOC__ - (of_mutez_exn 50L) - (mul_percentage ~rounding:`Up (of_mutez_exn 99L) Percentage.p50) - in - let tz = 123456L in - let* () = - assert_equal_tez - ~loc:__LOC__ - (of_mutez_exn tz) - (mul_percentage ~rounding (of_mutez_exn tz) (pct_of_int 200)) - in - (* no overflow *) - let* () = - assert_equal_tez - ~loc:__LOC__ - (of_mutez_exn 9131138316486228048L) - (mul_percentage ~rounding Tez_repr.max_mutez (pct_of_int 99)) - in - return_unit - -let test_mul () = - let open Lwt_result_syntax in - let mul = Percentage.mul ~round:`Down in - let* () = - assert_equal_q - ~loc:__LOC__ - Q.(25 // 100) - (mul Percentage.p50 Percentage.p50) - in - let* () = - assert_equal_q - ~loc:__LOC__ - Q.(25 // 10000) - (mul Percentage.p5 Percentage.p5) - in - return_unit - -let test_of_q () = - let open Lwt_result_syntax in - let round = `Down in - let of_q = Percentage.of_q_bounded in - let* () = - assert_equal_q ~loc:__LOC__ Q.(11 // 100) (of_q ~round Q.(11 // 100)) - in - let* () = assert_equal_q ~loc:__LOC__ Q.one (of_q ~round Q.(199 // 100)) in - (* round down *) - let* () = - assert_equal_q ~loc:__LOC__ Q.(777 // 10000) (of_q ~round Q.(777 // 9999)) - in - (* round up *) - let* () = - assert_equal_q - ~loc:__LOC__ - Q.(778 // 10000) - (of_q ~round:`Up Q.(777 // 9999)) - in - - (* precision *) - let* () = assert_equal_q ~loc:__LOC__ Q.zero (of_q ~round Q.(1 // 10001)) in - let* () = - assert_equal_q ~loc:__LOC__ Q.(1 // 10000) (of_q ~round Q.(1 // 10000)) - in - let* () = - assert_equal_q ~loc:__LOC__ Q.(1 // 10000) (of_q ~round:`Up Q.(1 // 10001)) - in - (* no overflow *) - let big_z = Z.of_int64 9131138316486228048L in - let* () = - assert_equal_q ~loc:__LOC__ Q.one (of_q ~round Q.(big_z /// Z.one)) - in - return_unit - -let tests = - Tztest. - [ - tztest "Test constant values" `Quick test_constant_values; - tztest "Test neg" `Quick test_neg; - tztest "Test bounded" `Quick test_bounded; - tztest "Test mul_percentage" `Quick test_mul_percentage; - tztest "Test mul" `Quick test_mul; - tztest "Test of_q" `Quick test_of_q; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("percentage", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_qty.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_qty.ml deleted file mode 100644 index beeb1d20fbb9fbb48c324c7739f234d948f7f54a..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_qty.ml +++ /dev/null @@ -1,167 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (quantities) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_qty.ml - Subject: On tez quantities. -*) - -open Protocol - -let known_ok_tez_literals = - [ - (0L, "0"); - (10L, "0.00001"); - (100L, "0.0001"); - (1_000L, "0.001"); - (10_000L, "0.01"); - (100_000L, "0.1"); - (1_000_000L, "1"); - (10_000_000L, "10"); - (100_000_000L, "100"); - (1_000_000_000L, "1000"); - (10_000_000_000L, "10000"); - (100_000_000_000L, "100000"); - (1_000_000_000_000L, "1000000"); - (1_000_000_000_001L, "1000000.000001"); - (1_000_000_000_010L, "1000000.00001"); - (1_000_000_000_100L, "1000000.0001"); - (1_000_000_001_000L, "1000000.001"); - (1_000_000_010_000L, "1000000.01"); - (1_000_000_100_000L, "1000000.1"); - (123_123_123_123_123_123L, "123123123123.123123"); - (999_999_999_999_999_999L, "999999999999.999999"); - ] - -let known_bad_tez_literals = - [ - "10000."; - "100,."; - "100,"; - "1,0000"; - "0.0000,1"; - "0.00,1"; - "0,1"; - "HAHA"; - "0.000,000,1"; - "0.0000000"; - "9,999,999,999,999.999,999"; - ] - -let fail expected given msg = - Format.kasprintf - Stdlib.failwith - "@[%s@ expected: %s@ got: %s@]" - msg - expected - given - -let fail_msg fmt = Format.kasprintf (fail "" "") fmt - -let default_printer _ = "" - -(** Literals which are supposed to be parsed correctly. *) -let test_known_tez_literals () = - let open Lwt_result_syntax in - List.iter - (fun (v, s) -> - let vv = Tez_repr.of_mutez v in - let vs = Tez_repr.of_string s in - let vs' = - Tez_repr.of_string (String.concat "" (String.split_on_char ',' s)) - in - let vv = - match vv with None -> fail_msg "could not unopt %Ld" v | Some vv -> vv - in - let vs = - match vs with None -> fail_msg "could not unopt %s" s | Some vs -> vs - in - let vs' = - match vs' with - | None -> fail_msg "could not unopt %s" s - | Some vs' -> vs' - in - assert (vv = vs) ; - assert (vv = vs') ; - assert (Tez_repr.to_string vv = s)) - known_ok_tez_literals ; - List.iter - (fun s -> - let vs = Tez_repr.of_string s in - assert (vs = None)) - known_bad_tez_literals ; - return_unit - -(** Randomly generated tez value which is printed into a string then - parsed again for their equality. *) -let test_random_tez_literals () = - let open Lwt_result_syntax in - for _ = 0 to 100_000 do - let v = Random.int64 12L in - let vv = Tez_repr.of_mutez v in - let vv = - match vv with None -> fail_msg "could not unopt %Ld" v | Some vv -> vv - in - let s = Tez_repr.to_string vv in - let vs = Tez_repr.of_string s in - let s' = String.concat "" (String.split_on_char ',' s) in - let vs' = Tez_repr.of_string s' in - assert (vs <> None) ; - assert (vs' <> None) ; - (match vs with - | None -> assert false - | Some vs -> - let rev = Tez_repr.to_mutez vs in - assert (v = rev)) ; - match vs' with - | None -> assert false - | Some vs' -> - let rev = Tez_repr.to_mutez vs' in - assert (v = rev) - done ; - return_unit - -let tests = - [ - ("tez-literals", fun _ -> test_known_tez_literals ()); - ("rnd-tez-literals", fun _ -> test_random_tez_literals ()); - ] - -let wrap (n, f) = - let open Lwt_syntax in - Alcotest_lwt.test_case n `Quick (fun _ () -> - let+ result = f () in - match result with - | Ok () -> () - | Error error -> - Format.kasprintf Stdlib.failwith "%a" pp_print_trace error) - -let tests = List.map wrap tests - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("qty", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_raw_level_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_raw_level_repr.ml deleted file mode 100644 index b019cd981de06e4f6745b352fe4d1154448af697..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_raw_level_repr.ml +++ /dev/null @@ -1,188 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -open Protocol -open Tztest - -(** Testing - ------- - Component: Raw_level_repr - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_raw_level_repr.ml - Dependencies: -- - Subject: To test the modules (including the top-level) - in raw_level_repr.ml as individual units, particularly - failure cases. Superficial goal: increase coverage percentage. -*) - -module Test_raw_level_repr = struct - (* NOTE: Avoid assertions against too many functions from Raw_level_repr. For instance, - Raw_level_repr contains a [compare] function, but while [Assert]'ing, convert them to - int32 (or any convenient OCaml value) and compare instead of using [Raw_level_repr]'s compare *) - - (** Testing [encoding], int32 underneath, by applying it with Data_encoding *) - let test_encoding () = - let open Lwt_result_syntax in - let encoding = Raw_level_repr.encoding in - let bytes = Bytes.make 4 '0' in - Bytes.set_int32_ne bytes 0 0l ; - let* v = - match Data_encoding.Binary.of_bytes encoding bytes with - | Ok x -> return x - | Error e -> - failwith - "Data_encoding.Binary.read shouldn't have failed with \ - Raw_level_repr.encoding: %a" - Data_encoding.Binary.pp_read_error - e - in - let* () = - Assert.equal_int ~loc:__LOC__ (Int32.to_int (Raw_level_repr.to_int32 v)) 0 - in - Bytes.set_int32_ne bytes 0 (-1l) ; - Data_encoding.Binary.of_bytes encoding bytes |> function - | Error _ -> return_unit - | Ok x -> - failwith - "Data_encoding.Binary.read shouldn't have succeeded with %a" - Raw_level_repr.pp - x - - (* TODO rpc_arg. RPC_arg needs to be unit tested separately. Preferably, with a functor *) - (* let rpc_arg () = () *) - - (** int32 interop tests *) - let test_int32_interop () = - let open Lwt_result_wrap_syntax in - let int32v = 100l in - let*?@ raw_level = Raw_level_repr.of_int32 int32v in - let* () = - Assert.equal_int32 ~loc:__LOC__ (Raw_level_repr.to_int32 raw_level) int32v - in - let int32v = -1l in - let* () = - match Raw_level_repr.of_int32 int32v with - | Ok _ -> failwith "Negative int32s should not be coerced into raw_level" - | Error _ -> return_unit - in - try - let (_ : Raw_level_repr.t) = Raw_level_repr.of_int32_exn int32v in - failwith "Negative int32s should not be coerced into raw_level" - with Invalid_argument _ -> return_unit - - (** Asserting [root]'s runtime value. Expected to be [0l] *) - let test_root () = - let root = Raw_level_repr.root in - Assert.equal_int32 ~loc:__LOC__ (root |> Raw_level_repr.to_int32) 0l - - (** Asserting [succ] which is expected to return successor levels *) - let test_succ () = - let open Lwt_result_syntax in - let next_raw_level = Raw_level_repr.succ Raw_level_repr.root in - let* () = - Assert.equal_int32 - ~loc:__LOC__ - (next_raw_level |> Raw_level_repr.to_int32) - 1l - in - let arbitrary_next_raw_level = - Raw_level_repr.succ (Raw_level_repr.of_int32_exn 99l) - in - Assert.equal_int32 - ~loc:__LOC__ - (arbitrary_next_raw_level |> Raw_level_repr.to_int32) - 100l - - (** Asserting [pred] which is expected to return predecessor levels *) - let test_pred () = - let open Lwt_result_syntax in - let* () = - match Raw_level_repr.pred (Raw_level_repr.of_int32_exn 1l) with - | Some previous_raw_level -> - Assert.equal_int32 - ~loc:__LOC__ - (previous_raw_level |> Raw_level_repr.to_int32) - 0l - | None -> - failwith - "Raw_level_repr.pred should have successfully returned 0l as the \ - predecessor of 1l" - in - Raw_level_repr.pred Raw_level_repr.root |> function - | Some _ -> - failwith - "Raw_level_repr.pred should have returned None when asked for \ - predecessor of [root]" - | None -> return_unit - - let test_skip_succ () = - let int32_limit = 0x7FFFFFFFl in - let overflown_next_raw_level = - Raw_level_repr.succ (Raw_level_repr.of_int32_exn int32_limit) - in - if Int32.compare (Raw_level_repr.to_int32 overflown_next_raw_level) 0l >= 0 - then return_unit - else - failwith - "succ of 0x7FFFFFFFl %a was expected to be non-negative" - Assert.Int32.pp - (overflown_next_raw_level |> Raw_level_repr.to_int32) -end - -let tests = - [ - tztest - "Raw_level_repr.encoding: checks if encoding is int32 as expected" - `Quick - Test_raw_level_repr.test_encoding; - tztest - "Raw_level_repr.root: check if value is 0l" - `Quick - Test_raw_level_repr.test_root; - tztest - "Raw_level_repr.succ: basic assertions" - `Quick - Test_raw_level_repr.test_succ; - tztest - "Raw_level_repr.pred: basic assertions" - `Quick - Test_raw_level_repr.test_pred; - tztest - "Raw_level_repr: int32 interop" - `Quick - Test_raw_level_repr.test_int32_interop; - ] - -let skipped_tests = - [ - tztest - "Raw_level_repr.succ: overflow" - `Quick - Test_raw_level_repr.test_skip_succ; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Raw level", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_receipt.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_receipt.ml deleted file mode 100644 index ec10063099e2503017d4895bf9c0be5d44151750..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_receipt.ml +++ /dev/null @@ -1,108 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020-2021 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (token) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_receipt.ml - Subject: Test receipt endocings. -*) - -open Protocol -open Alpha_context -open Data_encoding - -let random_amount () = - match Tez.of_mutez (Int64.add 1L (Random.int64 100L)) with - | None -> assert false - | Some x -> x - -(** Test that [decode (encode balance_updates) = balance_updates]. *) -let test_encodings balance = - let open Lwt_result_syntax in - Random.init 0 ; - let am = random_amount () in - let r1 = Receipt.item balance (Debited am) Protocol_migration in - let r2 = Receipt.item balance (Credited am) Protocol_migration in - let r3 = Receipt.item balance (Debited am) Subsidy in - let r4 = Receipt.item balance (Credited am) Subsidy in - let r5 = Receipt.item balance (Debited am) Simulation in - let r6 = Receipt.item balance (Credited am) Simulation in - let r7 = Receipt.item balance (Debited am) Block_application in - let r8 = Receipt.item balance (Credited am) Block_application in - let coded = - Json.construct - Receipt.balance_updates_encoding - [r1; r2; r3; r4; r5; r6; r7; r8] - in - let decoded = Json.destruct Receipt.balance_updates_encoding coded in - match decoded with - | [r1'; r2'; r3'; r4'; r5'; r6'; r7'; r8'] -> - assert ( - r1' = r1 && r2' = r2 && r3' = r3 && r4' = r4 && r5 = r5' && r6 = r6' - && r7 = r7' && r8 = r8') ; - return_unit - | _ -> assert false - -let test_encodings () = - let open Lwt_result_syntax in - let open Receipt in - let pkh = Signature.Public_key_hash.zero in - let pkh2, _pk, _sk = Signature.generate_key () in - let staker1 = Receipt.frozen_shared_between_stakers ~delegate:pkh in - let staker2 = Receipt.frozen_baker pkh in - let staker3 = - Receipt.frozen_single_staker ~staker:(Contract.Implicit pkh2) ~delegate:pkh - in - let* () = test_encodings (Contract (Contract.Implicit pkh)) in - let* () = test_encodings Block_fees in - let* () = test_encodings (Deposits staker1) in - let* () = test_encodings (Deposits staker2) in - let* () = test_encodings (Deposits staker3) in - let* () = test_encodings Nonce_revelation_rewards in - let* () = test_encodings Attesting_rewards in - let* () = test_encodings Baking_rewards in - let* () = test_encodings Baking_bonuses in - let* () = test_encodings Storage_fees in - let* () = test_encodings Double_signing_punishments in - let* () = - test_encodings - (Lost_attesting_rewards (pkh, Random.bool (), Random.bool ())) - in - let* () = test_encodings Liquidity_baking_subsidies in - let* () = test_encodings Burned in - let* () = test_encodings (Commitments Blinded_public_key_hash.zero) in - let* () = test_encodings Bootstrap in - let* () = test_encodings Invoice in - let* () = test_encodings Initial_commitments in - let* () = test_encodings Minted in - let* () = test_encodings Sc_rollup_refutation_punishments in - test_encodings Sc_rollup_refutation_rewards - -let tests = Tztest.[tztest "receipt - encoding" `Quick test_encodings] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("receipt", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_round_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_round_repr.ml deleted file mode 100644 index 5081f8a16321c0d910aa3973cbfe92e25fdc0ea5..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_round_repr.ml +++ /dev/null @@ -1,705 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: protocol - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_round_repr.ml - Subject: test the Round_repr module -*) - -open Protocol -open Alpha_context - -type round_test = { - (* input: round; output: round duration *) - round_duration : (int * int) list; - (* input: level offset; output: round, round offset *) - round_and_offset : (int * (int * int)) list; - (* - input: pred_ts, pred_round, round; output: ts - Given the timestamp [pred_ts] and round [pred_round] of the block - from the previous level, the starting timestamp of the [round] - at the current level is [ts]. - *) - timestamp_of_round : ((int * int * int) * int) list; - (* - input: pred_ts, pred_round, ts; output: round - Given the timestamp [pred_ts] and round [pred_round] of the block - from the previous level, the round which starts at timestamp - [ts] is [round]. - *) - round_of_timestamp : ((int * int * int) * int) list; -} - -(* an association list of the input, output values *) -let case_3_4 = - { - round_duration = [(0, 3); (1, 4); (2, 5); (3, 6)]; - round_and_offset = - [ - (0, (0, 0)); - (1, (0, 1)); - (2, (0, 2)); - (3, (1, 0)); - (4, (1, 1)); - (5, (1, 2)); - (6, (1, 3)); - (7, (2, 0)); - (8, (2, 1)); - ]; - timestamp_of_round = [((100, 0, 6), 136); ((100, 1, 6), 137)]; - round_of_timestamp = - [ - ((100, 0, 103), 0); - ((100, 0, 105), 0); - ((100, 0, 106), 1); - ((100, 0, 109), 1); - ((100, 0, 110), 2); - ((100, 0, 114), 2); - ((100, 0, 115), 3); - ((100, 0, 120), 3); - ((100, 0, 121), 4); - ((100, 0, 122), 4); - ((100, 0, 123), 4); - ((100, 0, 124), 4); - ((100, 0, 125), 4); - ((100, 0, 126), 4); - ((100, 0, 127), 4); - ((100, 0, 128), 5); - ((100, 1, 104), 0); - ((100, 1, 106), 0); - ((100, 1, 107), 1); - ((100, 1, 110), 1); - ((100, 1, 111), 2); - ((100, 1, 115), 2); - ((100, 1, 116), 3); - ((100, 1, 121), 3); - ((100, 1, 122), 4); - ((100, 1, 123), 4); - ((100, 1, 124), 4); - ((100, 1, 125), 4); - ((100, 1, 126), 4); - ((100, 1, 128), 4); - ((100, 1, 129), 5); - ]; - } - -let case_3_6 = - { - round_duration = - [ - (0, 3); - (1, 6); - (2, 9); - (3, 12); - (4, 15); - (5, 18); - (6, 21); - (7, 24); - (8, 27); - ]; - round_and_offset = - [ - (0, (0, 0)); - (1, (0, 1)); - (2, (0, 2)); - (3, (1, 0)); - (4, (1, 1)); - (5, (1, 2)); - (6, (1, 3)); - (7, (1, 4)); - (8, (1, 5)); - (9, (2, 0)); - (10, (2, 1)); - (11, (2, 2)); - (97, (7, 13)); - ]; - timestamp_of_round = - [ - ((100, 0, 0), 103); - ((100, 1, 0), 106); - ((100, 0, 6), 166); - ((100, 1, 6), 169); - ]; - round_of_timestamp = - [ - ((100, 0, 103), 0); - ((100, 0, 104), 0); - ((100, 0, 105), 0); - ((100, 0, 106), 1); - ((100, 0, 111), 1); - ((100, 0, 112), 2); - ((100, 0, 120), 2); - ((100, 0, 121), 3); - ((100, 0, 132), 3); - ((100, 0, 133), 4); - ((100, 1, 106), 0); - ((100, 1, 107), 0); - ((100, 1, 108), 0); - ((100, 1, 109), 1); - ((100, 1, 114), 1); - ((100, 1, 115), 2); - ]; - } - -let test_cases = - [ - (* (first_round_duration, delay_increment_per_round), test_case_expectations *) - ((3, 1), case_3_4, "case_3_4"); - ((3, 3), case_3_6, "case_3_6"); - ] - -let round_of_int i = Round_repr.of_int i - -let mk_round_durations first_round_duration delay_increment_per_round = - let first_round_duration = - Period_repr.of_seconds_exn @@ Int64.of_int first_round_duration - in - let delay_increment_per_round = - Period_repr.of_seconds_exn @@ Int64.of_int delay_increment_per_round - in - (* We assume test specifications do respect round_durations - invariants and cannot fail *) - Stdlib.Option.get - @@ Round_repr.Durations.create_opt - ~first_round_duration - ~delay_increment_per_round - -let process_test_case (round_durations, ios, _) = - let open Lwt_result_wrap_syntax in - let open Round_repr in - let* () = - List.iter_es - (fun (i, o) -> - let*?@ round = round_of_int i in - let dur = Durations.round_duration round_durations round in - Assert.equal_int64 - ~loc:__LOC__ - (Int64.of_int o) - (Period_repr.to_seconds dur)) - ios.round_duration - in - let open Internal_for_tests in - (* test [round_and_offset] *) - let* () = - List.iter_es - (fun (level_offset, (round, ro)) -> - let level_offset = - Period_repr.of_seconds_exn (Int64.of_int level_offset) - in - let*?@ round_and_offset = - round_and_offset round_durations ~level_offset - in - let* () = - Assert.equal_int32 - ~loc:__LOC__ - (Int32.of_int round) - (Round_repr.to_int32 round_and_offset.round) - in - Assert.equal_int64 - ~loc:__LOC__ - (Int64.of_int ro) - (Period_repr.to_seconds round_and_offset.offset)) - ios.round_and_offset - in - (* test [timestamp_of_round] *) - let* () = - List.iter_es - (fun ((pred_ts, pred_round, round), o) -> - let predecessor_timestamp = - Time_repr.of_seconds (Int64.of_int pred_ts) - in - let*@ ts = - let*? predecessor_round = Round_repr.of_int pred_round in - let*? round = Round_repr.of_int round in - Lwt.return - (timestamp_of_round - round_durations - ~predecessor_timestamp - ~predecessor_round - ~round) - in - Assert.equal_int64 - ~loc:__LOC__ - (Int64.of_int o) - (Time_repr.to_seconds ts)) - ios.timestamp_of_round - in - (* test [round_of_timestamp] *) - List.iter_es - (fun ((pred_ts, pred_round, ts), o) -> - let predecessor_timestamp = Time_repr.of_seconds (Int64.of_int pred_ts) in - let*@ round = - let*? predecessor_round = Round_repr.of_int pred_round in - Lwt.return - (round_of_timestamp - round_durations - ~predecessor_timestamp - ~predecessor_round - ~timestamp:(Time_repr.of_seconds (Int64.of_int ts))) - in - Assert.equal_int32 - ~loc:__LOC__ - (Int32.of_int o) - (Round_repr.to_int32 round)) - ios.round_of_timestamp - -let test_round () = - let final_test_cases = - List.map - (fun ((first_round_duration, delay_increment_per_round), ios, name) -> - ( mk_round_durations first_round_duration delay_increment_per_round, - ios, - name )) - test_cases - in - (* TODO this could be run in the error monad instead of lwt *) - List.iter_es process_test_case final_test_cases - -let ts_add ts period = - match Timestamp.(ts +? period) with - | Ok ts' -> ts' - | Error _ -> Environment.Pervasives.failwith "timestamp add" - -let test_round_of_timestamp () = - let open Lwt_result_wrap_syntax in - let duration0 = Period.of_seconds_exn 1L in - let*?@ round_durations = - Round.Durations.create - ~first_round_duration:duration0 - ~delay_increment_per_round:Period.one_second - in - let predecessor_timestamp = Time.Protocol.epoch in - let level_start = ts_add predecessor_timestamp duration0 in - let rec loop ~expected_round ~elapsed_time = - if elapsed_time < 1000 then - let timestamp = - ts_add level_start (Period.of_seconds_exn (Int64.of_int elapsed_time)) - in - match - Round.round_of_timestamp - round_durations - ~predecessor_timestamp - ~timestamp - ~predecessor_round:Round.zero - with - | Ok round -> - let* () = - Assert.equal_int32 - ~loc:__LOC__ - (Round.to_int32 round) - (Int32.of_int expected_round) - in - let elapsed_time = elapsed_time + (expected_round + 1) - and expected_round = 1 + expected_round in - loop ~expected_round ~elapsed_time - | Error _ -> failwith "error " - else return_unit - in - loop ~elapsed_time:0 ~expected_round:0 - -let round_of_timestamp_perf (duration0_int64, dipr) = - let open Lwt_result_wrap_syntax in - let duration0 = Period.of_seconds_exn duration0_int64 in - let delay_increment_per_round = Period.of_seconds_exn dipr in - let round_durations = - Stdlib.Option.get - @@ Round.Durations.create_opt - ~first_round_duration:duration0 - ~delay_increment_per_round - in - let predecessor_timestamp = Time.Protocol.epoch in - let level_start = ts_add predecessor_timestamp duration0 in - let max_ts = Int64.(sub (of_int32 Int32.max_int) duration0_int64) in - let rec loop i = - let open Result_syntax in - if i >= 0L then ( - let repeats = 100 in - let rec loop_inner sum j = - if j > 0 then - let timestamp = - ts_add level_start (Period.of_seconds_exn (Int64.sub max_ts i)) - in - let t0 = Unix.gettimeofday () in - let* (_round : Round.t) = - Round.round_of_timestamp - round_durations - ~predecessor_timestamp - ~timestamp - ~predecessor_round:Round.zero - in - let t1 = Unix.gettimeofday () in - let time = t1 -. t0 in - loop_inner (sum +. time) (j - 1) - else return sum - in - let* sum = loop_inner 0.0 repeats in - let time = sum /. float_of_int repeats in - assert (time < 0.01) ; - loop (Int64.pred i)) - else return_unit - in - let*?@ () = loop 1000L in - return_unit - -let default_round_durations_list = - [(1L, 1L); (1L, 2L); (1L, 3L); (2L, 3L); (2L, 4L)] - -let test_round_of_timestamp_perf () = - List.iter_es round_of_timestamp_perf default_round_durations_list - -let timestamp_of_round_perf (duration0_int64, dipr) = - let open Lwt_result_wrap_syntax in - let duration0 = Period.of_seconds_exn duration0_int64 in - let delay_increment_per_round = Period.of_seconds_exn dipr in - let round_durations = - Stdlib.Option.get - @@ Round.Durations.create_opt - ~first_round_duration:duration0 - ~delay_increment_per_round - in - let predecessor_timestamp = Time.Protocol.epoch in - let rec loop i = - let open Result_syntax in - if i >= 0l then ( - let* round = Round.of_int32 Int32.(sub max_int i) in - let t0 = Unix.gettimeofday () in - let* (_ts : Timestamp.time) = - Round.timestamp_of_round - round_durations - ~predecessor_timestamp - ~predecessor_round:Round.zero - ~round - in - let t1 = Unix.gettimeofday () in - let time = t1 -. t0 in - assert (time < 0.01) ; - loop (Int32.pred i)) - else return_unit - in - let*?@ () = loop 1000l in - return_unit - -let test_timestamp_of_round_perf () = - List.iter_es timestamp_of_round_perf default_round_durations_list - -let test_error_is_triggered_for_too_high_timestamp () = - let open Result_wrap_syntax in - let round_durations = - Stdlib.Option.get - @@ Round.Durations.create_opt - ~first_round_duration:Period.one_second - ~delay_increment_per_round:Period.one_second - in - - let predecessor_timestamp = Time.Protocol.epoch in - let@ res = - Round.round_of_timestamp - round_durations - ~predecessor_timestamp - ~predecessor_round:Round.zero - ~timestamp:(Time_repr.of_seconds Int64.max_int) - in - match res with - | Error _ -> - Assert.proto_error_with_info ~loc:__LOC__ res "level offset too high" - | Ok _ -> Assert.error ~loc:__LOC__ res (fun _ -> false) - -let rec ( --> ) i j = - (* [i; i+1; ...; j] *) - if Compare.Int.(i > j) then [] else i :: (succ i --> j) - -let ts_of_round_inverse (duration0_int64, dipr) round_int = - let open Lwt_result_wrap_syntax in - let first_round_duration = Period.of_seconds_exn duration0_int64 in - let delay_increment_per_round = Period.of_seconds_exn dipr in - let round_durations = - Stdlib.Option.get - @@ Round.Durations.create_opt - ~first_round_duration - ~delay_increment_per_round - in - let predecessor_timestamp = Time.Protocol.epoch in - let predecessor_round = Round.zero in - let*?@ round = Round.of_int round_int in - let*?@ timestamp = - Round.timestamp_of_round - round_durations - ~predecessor_timestamp - ~predecessor_round - ~round - in - let*?@ round' = - Round.round_of_timestamp - round_durations - ~predecessor_timestamp - ~predecessor_round - ~timestamp - in - let*?@ round' = Round.to_int round' in - Assert.equal_int ~loc:__LOC__ round_int round' - -(* We restrict to round 134,217,727 as rounds above can lead to - integer overflow in [Round_repr.round_and_offset] and are already prevented - by returning an error. *) -let test_ts_of_round_inverse () = - let open Lwt_result_syntax in - let* () = - List.iter_es - (fun durations -> - List.iter_es - (ts_of_round_inverse durations) - ((0 --> 20) @ (60000 --> 60010))) - default_round_durations_list - in - List.iter_es - (ts_of_round_inverse (1L, 1L)) - (List.map (fun i -> Int32.to_int 134_217_727l - i) (1 --> 20)) - -let round_of_ts_inverse ~first_round_duration ~delay_increment_per_round ts = - let open Lwt_result_wrap_syntax in - Format.printf "ts = %Ld@." ts ; - let first_round_duration = Period.of_seconds_exn first_round_duration in - let delay_increment_per_round = - Period.of_seconds_exn delay_increment_per_round - in - let*?@ round_durations = - Round.Durations.create ~first_round_duration ~delay_increment_per_round - in - let predecessor_timestamp = Time.Protocol.epoch in - let predecessor_round = Round.zero in - let*?@ level_start = - Timestamp.( +? ) predecessor_timestamp first_round_duration - in - let start_of_round timestamp = - let*?@ round = - Round.round_of_timestamp - round_durations - ~predecessor_timestamp - ~predecessor_round - ~timestamp - in - let*?@ t = - Round.timestamp_of_round - round_durations - ~predecessor_timestamp - ~predecessor_round - ~round - in - return (round, t) - in - let*?@ timestamp = Period.of_seconds_exn ts |> Timestamp.( +? ) level_start in - let* round, ts_start_of_round = start_of_round timestamp in - let* () = - Assert.leq_int64 - ~loc:__LOC__ - (Timestamp.to_seconds ts_start_of_round) - (Timestamp.to_seconds timestamp) - in - let pred ts = Period.one_second |> Timestamp.( - ) ts in - let rec iter ts = - let* round', ts_start_of_round' = start_of_round ts in - let* () = - Assert.equal_int64 - ~loc:__LOC__ - (Timestamp.to_seconds ts_start_of_round) - (Timestamp.to_seconds ts_start_of_round') - in - let* () = - Assert.equal_int32 - ~loc:__LOC__ - (Round.to_int32 round) - (Round.to_int32 round') - in - if Timestamp.(ts > ts_start_of_round') then iter (pred ts) else return_unit - in - if Timestamp.(timestamp > ts_start_of_round) then iter (pred timestamp) - else return_unit - -let test_round_of_ts_inverse () = - let open Lwt_result_syntax in - let* () = - List.iter_es - (fun (first_round_duration, delay_increment_per_round) -> - List.iter_es - (fun ts -> - round_of_ts_inverse - ~first_round_duration - ~delay_increment_per_round - (Int64.of_int ts)) - ((0 --> 20) @ (60000 --> 60010))) - default_round_durations_list - in - List.iter_es - (fun ts -> - Format.printf "%Ld@." ts ; - round_of_ts_inverse - ~first_round_duration:1L - ~delay_increment_per_round:2L - ts) - (List.map - (fun i -> Int64.of_int (Int32.to_int Int32.max_int - i)) - (0 --> 20)) - -let test_level_offset_of_round () = - let open Lwt_result_wrap_syntax in - let rd1 = - let first_round_duration = 3 in - let delay_increment_per_round = 1 in - mk_round_durations first_round_duration delay_increment_per_round - in - List.iter_es - (fun (round_durations, tests) -> - List.iter_es - (fun (round, expected_offset) -> - let*?@ round = Round_repr.of_int round in - let*?@ computed_offset = - Round_repr.level_offset_of_round round_durations ~round - in - Assert.equal_int64 - ~loc:__LOC__ - (Period_repr.to_seconds computed_offset) - (Int64.of_int expected_offset)) - tests) - [ - (rd1, [(0, 0); (1, 3); (2, 7)]); - (mk_round_durations 3 3, [(0, 0); (1, 3); (2, 9); (3, 18)]); - ] - -(* This is the previous implementation, serving as an oracle *) -let round_and_offset_oracle (round_durations : Round_repr.Durations.t) - ~level_offset = - let open Result_syntax in - let level_offset_in_seconds = Period_repr.to_seconds level_offset in - (* We have the invariant [round <= level_offset] so there is no need to search - beyond [level_offset]. We set [right_bound] to [level_offset + 1] to avoid - triggering the error level_offset too high when the round equals - [level_offset]. *) - let right_bound = - if Compare.Int64.(level_offset_in_seconds < Int64.of_int32 Int32.max_int) - then Int32.of_int (Int64.to_int level_offset_in_seconds + 1) - else Int32.max_int - in - let rec bin_search min_r max_r = - if Compare.Int32.(min_r >= right_bound) then invalid_arg "foo" - else - let* round = - Round_repr.of_int32 @@ Int32.(add min_r (div (sub max_r min_r) 2l)) - in - let next_round = Round_repr.succ round in - let* next_level_offset = - Round_repr.level_offset_of_round round_durations ~round:next_round - in - if Period_repr.(level_offset >= next_level_offset) then - bin_search (Round_repr.to_int32 next_round) max_r - else - let* current_level_offset = - Round_repr.level_offset_of_round round_durations ~round - in - if Period_repr.(level_offset < current_level_offset) then - bin_search min_r (Round_repr.to_int32 round) - else - return - Round_repr.Internal_for_tests. - { - round; - offset = - Period_repr.of_seconds_exn - (Int64.sub - (Period_repr.to_seconds level_offset) - (Period_repr.to_seconds current_level_offset)); - } - in - bin_search 0l right_bound - -(* Test whether the new version is equivalent to the old one *) -let test_round_and_offset_correction = - let open Lwt_result_wrap_syntax in - Tztest.tztest_qcheck2 - ~name:"round_and_offset is correct" - QCheck2.( - Gen.pair - Qcheck2_helpers.(Gen.pair uint16 uint16) - (Qcheck2_helpers.int64_range_gen 0L 100000L)) - (fun ((first_round_duration, delay_increment_per_round), level_offset) -> - QCheck2.assume (first_round_duration > 0) ; - QCheck2.assume (delay_increment_per_round > 0) ; - let first_round_duration = - Period_repr.of_seconds_exn (Int64.of_int first_round_duration) - and delay_increment_per_round = - Period_repr.of_seconds_exn (Int64.of_int delay_increment_per_round) - and level_offset = Period_repr.of_seconds_exn level_offset in - let round_duration = - Stdlib.Option.get - (Round_repr.Durations.create_opt - ~first_round_duration - ~delay_increment_per_round) - in - let@ expected = round_and_offset_oracle round_duration ~level_offset in - let computed = - Round_repr.Internal_for_tests.round_and_offset - round_duration - ~level_offset - in - match (computed, expected) with - | Error _, Error _ -> return_unit - | Ok {round; offset}, Ok {round = round'; offset = offset'} -> - let* () = - Assert.equal_int32 - ~loc:__LOC__ - (Round_repr.to_int32 round) - (Round_repr.to_int32 round') - in - Assert.equal_int64 - ~loc:__LOC__ - (Period_repr.to_seconds offset) - (Period_repr.to_seconds offset') - | Ok _, Error _ -> failwith "expected error is ok" - | Error _, Ok _ -> failwith "expected ok is error") - -let tests = - Tztest. - [ - tztest "level_offset_of_round" `Quick test_level_offset_of_round; - tztest "Round_duration" `Quick test_round; - tztest "round_of_timestamp" `Quick test_round_of_timestamp; - tztest "round_of_timestamp_perf" `Quick test_round_of_timestamp_perf; - tztest "timestamp_of_round_perf" `Quick test_timestamp_of_round_perf; - tztest - "level offset too high error is triggered" - `Quick - test_error_is_triggered_for_too_high_timestamp; - tztest "round_of_ts (ts_of_round r) = r" `Quick test_ts_of_round_inverse; - tztest - "ts_of_round (round_of_ts ts) <= ts" - `Quick - test_round_of_ts_inverse; - test_round_and_offset_correction; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("round", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_saturation.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_saturation.ml deleted file mode 100644 index 5aa1601f94317427c5f0355b16186c720790f6fc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_saturation.ml +++ /dev/null @@ -1,267 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2020 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (saturated arithmetic) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_saturation.ml - Subject: The gas is represented using saturated arithmetic. - These unit tests check that saturated arithmetic operations - are correctly implemented. -*) - -open Protocol - -let valid (z : _ Saturation_repr.t) = - let x = z |> Saturation_repr.to_int in - x >= 0 && x < max_int - -exception Saturating_test_error of string - -let err x = Exn (Saturating_test_error x) - -let small_enough (z : _ Saturation_repr.t) = - Saturation_repr.(Compare.Int.((z |> to_int) land 0x7fffffff80000000 = 0)) - -let ok_int x = - match Saturation_repr.of_int_opt x with None -> assert false | Some x -> x - -let n = ok_int 123123 - -let m = ok_int 377337 - -let add () = - let open Lwt_result_syntax in - Saturation_repr.( - let* () = - fail_unless - (add saturated (ok_int 1) = saturated) - (err "saturated + 1 <> saturated") - in - let* () = fail_unless (add zero n = n) (err "zero + n <> n") in - let* () = fail_unless (add n zero = n) (err "n + zero <> n") in - let r = add n m in - fail_unless - (valid r && r = ok_int ((n |> to_int) + (m |> to_int))) - (err "add does not behave like + on small numbers.")) - -let sub () = - let open Lwt_result_syntax in - Saturation_repr.( - let* () = fail_unless (sub zero n = zero) (err "zero - n <> zero") in - let n = max n m and m = min n m in - let r = sub n m in - fail_unless - (valid r && r = ok_int ((n |> to_int) - (m |> to_int))) - (err "sub does not behave like - on small numbers.")) - -let mul_safe_of_int x = - Saturation_repr.( - match mul_safe (ok_int x) with Some x -> x | None -> assert false) - -let n' = mul_safe_of_int 1000 - -let m' = mul_safe_of_int 10000 - -let mul_fast () = - let open Lwt_result_syntax in - Saturation_repr.( - let* () = - fail_unless (mul_fast zero n' = zero) (err "mul_fast zero x <> zero") - in - let* () = - fail_unless (mul_fast n' zero = zero) (err "mul_fast x zero <> zero") - in - let r = mul_fast n' m' in - fail_unless - (valid r && r = ok_int ((n' |> to_int) * (m' |> to_int))) - (err "mul_fast does not behave like * on small numbers.")) - -let scale_fast () = - let open Lwt_result_syntax in - Saturation_repr.( - let* () = - fail_unless (scale_fast zero n = zero) (err "scale_fast zero x <> zero") - in - let* () = - fail_unless (scale_fast n' zero = zero) (err "scale_fast x zero <> zero") - in - let* () = - fail_unless - (scale_fast n' saturated = saturated) - (err "scale_fast x saturated <> saturated") - in - let r = scale_fast n' m in - fail_unless - (valid r && r = ok_int ((n' |> to_int) * (m |> to_int))) - (err "mul_fast does not behave like * on small numbers.")) - -let mul () = - let open Lwt_result_syntax in - Saturation_repr.( - let* () = - fail_unless - (mul saturated saturated = saturated) - (err "saturated * saturated <> saturated") - in - let* () = - fail_unless (mul zero saturated = zero) (err "zero * saturated <> zero") - in - let* () = - fail_unless (mul saturated zero = zero) (err "saturated * zero <> zero") - in - let max_squared = ok_int (1 lsl 31) in - let r = mul max_squared max_squared in - let* () = - fail_unless (r = saturated) (err "2 ^ 31 * 2 ^ 31 should be saturated") - in - let safe_squared = ok_int ((1 lsl 31) - 1) in - let r = mul safe_squared safe_squared in - let* () = - fail_unless - (valid r && r <> saturated) - (err "(2 ^ 31 - 1) * (2 ^ 31 - 1) should not be saturated") - in - let r = mul n m in - fail_unless - (valid r && r = ok_int ((n |> to_int) * (m |> to_int))) - (err "mul does not behave like * on small numbers.")) - -let shift_left () = - let open Lwt_result_syntax in - Saturation_repr.( - let must_saturate flag (k, v) = - fail_unless - (Bool.equal flag (shift_left k v = saturated)) - (err - (Printf.sprintf - "shift_left %d %d %s saturated" - (k |> to_int) - v - (if flag then "<>" else "="))) - in - let* () = - List.iter_es - (must_saturate true) - [(saturated, 1); (shift_right saturated 1, 2); (ok_int 1, 62)] - in - List.iter_es - (must_saturate false) - [ - (ok_int 1, 0); - (ok_int 1, 31); - (ok_int 1, 61); - (ok_int 0, 99); - (ok_int ((1 lsl 62) - 2), 0); - ]) - -let sqrt () = - let open Lwt_result_syntax in - Saturation_repr.( - let* () = - fail_unless - (sqrt saturated = saturated) - (err "sqrt saturated <> saturated") - in - let* () = fail_unless (sqrt zero = zero) (err "sqrt zero <> zero") in - let* () = fail_unless (sqrt one = one) (err "sqrt one <> one") in - let* () = fail_unless (sqrt (ok_int 4) = ok_int 2) (err "sqrt 4 <> 2") in - let* () = - fail_unless - (sqrt (ok_int 5) = ok_int 2) - (err "sqrt 5 <> 2 (sqrt should round down)") - in - let safe_squared = ok_int ((1 lsl 31) - 1) in - let r = mul safe_squared safe_squared in - fail_unless - (sqrt r = safe_squared) - (err "sqrt (2 ^ 31 - 1) * (2 ^ 31 - 1) <> (2 ^ 31 - 1)")) - -let of_z_opt () = - let open Lwt_result_syntax in - let* () = - fail_unless - (Saturation_repr.(of_z_opt (Z.succ (Z.of_int max_int))) = None) - (err - "of_z_opt should saturate when given a z integer greater than max_int.") - in - let* () = - fail_unless - (Saturation_repr.(of_z_opt (Z.pred Z.zero)) = None) - (err "of_z_opt should fail on a z negative integer.") - in - fail_unless - (Saturation_repr.(of_z_opt (Z.of_int min_int)) = None) - (err "of_z_opt should fail on a z negative integer.") - -let encoding encoder () = - let open Lwt_result_syntax in - let check_encode_decode x = - Data_encoding.Binary.( - match to_bytes encoder (ok_int x) with - | Error _ -> - tzfail (err (Printf.sprintf "Problem during binary encoding of %d" x)) - | Ok bytes -> ( - match of_bytes encoder bytes with - | Error _ -> - tzfail - (err (Printf.sprintf "Problem during binary decoding of %d" x)) - | Ok x' -> - fail_unless - (ok_int x = x') - (err - (Printf.sprintf - "decode (encode %d) = %d <> %d" - x - (x' :> int) - x)))) - in - Error_monad.Lwt_result_syntax.tzjoin - (List.map check_encode_decode [0; 7373737373; max_int - 1]) - -let tests = - [ - Tztest.tztest "Addition" `Quick add; - Tztest.tztest "Subtraction" `Quick sub; - Tztest.tztest "Multiplication" `Quick mul; - Tztest.tztest "Multiplication (fast version)" `Quick mul_fast; - Tztest.tztest "Shift left" `Quick shift_left; - Tztest.tztest "Scale fast" `Quick scale_fast; - Tztest.tztest "Square root" `Quick sqrt; - Tztest.tztest "Conversion from Z" `Quick of_z_opt; - Tztest.tztest - "Encoding through z" - `Quick - (encoding Saturation_repr.z_encoding); - Tztest.tztest - "Encoding through n" - `Quick - (encoding Saturation_repr.n_encoding); - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("saturation arithmetic", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_arith.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_arith.ml deleted file mode 100644 index 7c9fca0c5c71f52ee86b98263b02b4b92df1e428..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_arith.ml +++ /dev/null @@ -1,813 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (saturated arithmetic) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_sc_rollup_arith.ml - Subject: Basic testing of the arithmetic rollup example -*) - -open Protocol -module Context_binary = Tezos_context_memory.Context_binary - -(* We first instantiate an arithmetic PVM capable of generating proofs. *) -module Tree : - Environment.Context.TREE - with type t = Context_binary.t - and type tree = Context_binary.tree - and type key = string list - and type value = bytes = struct - type t = Context_binary.t - - type tree = Context_binary.tree - - type key = Context_binary.key - - type value = Context_binary.value - - include Context_binary.Tree -end - -module Arith_Context = struct - module Tree = Tree - - type tree = Tree.tree - - let hash_tree tree = - Sc_rollup_repr.State_hash.context_hash_to_state_hash (Tree.hash tree) - - type proof = Context_binary.Proof.tree Context_binary.Proof.t - - let proof_encoding = - Tezos_context_merkle_proof_encoding.Merkle_proof_encoding.V2.Tree2 - .tree_proof_encoding - - let kinded_hash_to_state_hash = function - | `Value hash | `Node hash -> - Sc_rollup_repr.State_hash.context_hash_to_state_hash hash - - let proof_before proof = - kinded_hash_to_state_hash proof.Context_binary.Proof.before - - let proof_after proof = - kinded_hash_to_state_hash proof.Context_binary.Proof.after - - let produce_proof context tree step = - let open Lwt_syntax in - (* FIXME: With on-disk context, we cannot commit the empty - context. Is it also true in our case? *) - let* context = Context_binary.add_tree context [] tree in - let* (_hash : Context_hash.t) = - Context_binary.commit ~time:Time.Protocol.epoch context - in - let index = Context_binary.index context in - match Context_binary.Tree.kinded_key tree with - | Some k -> - let* p = Context_binary.produce_tree_proof index k step in - return_some p - | None -> return_none - - let verify_proof proof step = - let open Lwt_syntax in - let* result = Context_binary.verify_tree_proof proof step in - match result with - | Ok v -> return_some v - | Error _ -> - (* We skip the error analysis here since proof verification is not a - job for the rollup node. *) - return_none -end - -module FullArithPVM = Sc_rollup_arith.Make (Arith_Context) -open FullArithPVM - -let setup boot_sector f = - let open Lwt_syntax in - let* index = Context_binary.init "/tmp" in - let ctxt = Context_binary.empty index in - let empty = Context_binary.Tree.empty ctxt in - let* state = initial_state ~empty in - let* state = install_boot_sector state boot_sector in - f ctxt state - -let pre_boot boot_sector f = - parse_boot_sector boot_sector |> function - | None -> failwith "Invalid boot sector" - | Some boot_sector -> setup boot_sector @@ f - -let test_preboot () = - let open Lwt_result_syntax in - [""; "1"; "1 2 +"] - |> List.iter_es (fun boot_sector -> - pre_boot boot_sector @@ fun _ctxt _state -> return_unit) - -let boot boot_sector f = - let open Lwt_result_syntax in - pre_boot boot_sector @@ fun ctxt state -> - let*! state = eval state in - f ctxt state - -let test_boot () = - let open Lwt_result_syntax in - let open Sc_rollup_helpers.Arith_pvm in - boot "" @@ fun _ctxt state -> - let*! result = - is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - match result with - | Needs_reveal Reveal_metadata -> return_unit - | Initial | Needs_reveal _ | First_after _ -> - failwith "After booting, the machine should be waiting for the metadata." - | No_input_required -> - failwith "After booting, the machine must be waiting for input." - -let test_metadata () = - let open Sc_rollup_helpers.Arith_pvm in - let open Alpha_context in - let open Alpha_context.Sc_rollup in - let open Lwt_result_syntax in - boot "" @@ fun _ctxt state -> - let metadata = - Metadata. - { - address = Sc_rollup_repr.Address.zero; - origination_level = Raw_level.root; - } - in - let input = Reveal (Metadata metadata) in - let*! state = set_input input state in - let*! input_request = - is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - match input_request with - | Initial -> return_unit - | Needs_reveal _ | First_after _ | No_input_required -> - failwith - "After evaluating the metadata, the machine must be in the [Initial] \ - state." - -let test_input_message () = - let open Lwt_result_syntax in - let open Sc_rollup_helpers.Arith_pvm in - boot "" @@ fun _ctxt state -> - let input = Sc_rollup_helpers.make_external_input "MESSAGE" in - let*! state = set_input input state in - let*! state = eval state in - let*! result = - is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - match result with - | Initial | Needs_reveal _ | First_after _ -> - failwith - "After receiving a message, the rollup must not be waiting for input." - | No_input_required -> return_unit - -let go ?(is_reveal_enabled = fun ~current_block_level:_ _ -> true) ~max_steps - target_status state = - let open Lwt_result_syntax in - let rec aux i state = - let*! pp = pp state in - Format.eprintf "%a" pp () ; - if i > max_steps then - failwith "Maximum number of steps reached before target status." - else - let*! current_status = get_status ~is_reveal_enabled state in - if target_status = current_status then return state - else - let*! state = eval state in - aux (i + 1) state - in - aux 0 state - -let test_parsing_message ~valid (source, expected_code) = - let open Lwt_result_syntax in - boot "" @@ fun _ctxt state -> - let input = Sc_rollup_helpers.make_external_input_repr source in - let*! state = set_input input state in - let*! state = eval state in - let* state = go ~max_steps:10000 Evaluating state in - let*! result = get_parsing_result state in - let* () = - Assert.equal - ~loc:__LOC__ - (Option.equal Bool.equal) - "Unexpected parsing result" - (fun fmt r -> - Format.fprintf - fmt - (match r with - | None -> "No parsing running" - | Some true -> "Syntax correct" - | Some false -> "Syntax error")) - (Some valid) - result - in - if valid then - let*! code = get_code state in - Assert.equal - ~loc:__LOC__ - (List.equal equal_instruction) - "The parsed code is not what we expected: " - (Format.pp_print_list pp_instruction) - expected_code - code - else return_unit - -let syntactically_valid_messages = - List.map - (fun nums -> - ( String.concat " " (List.map string_of_int nums), - List.map (fun x -> IPush x) nums )) - [[0]; [42]; [373]; [0; 1]; [0; 123; 42; 73; 34; 13; 31]] - @ [ - ("1 2 +", [IPush 1; IPush 2; IAdd]); - ( "1 2 3 + + 3 +", - [IPush 1; IPush 2; IPush 3; IAdd; IAdd; IPush 3; IAdd] ); - ("1 2+", [IPush 1; IPush 2; IAdd]); - ("1 2 3++3+", [IPush 1; IPush 2; IPush 3; IAdd; IAdd; IPush 3; IAdd]); - ("", []); - ("1 a", [IPush 1; IStore "a"]); - ] - -let syntactically_invalid_messages = - List.map - (fun s -> (s, [])) - ["@"; " @"; " @ "; "---"; "12 +++ --"; "1a"; "a$"] - -let test_parsing_messages () = - let open Lwt_result_syntax in - let* () = - List.iter_es (test_parsing_message ~valid:true) syntactically_valid_messages - in - List.iter_es - (test_parsing_message ~valid:false) - syntactically_invalid_messages - -let test_evaluation_message ~valid - (boot_sector, source, expected_stack, expected_vars) = - let open Lwt_result_syntax in - boot boot_sector @@ fun _ctxt state -> - let input = Sc_rollup_helpers.make_external_input_repr source in - let*! state = set_input input state in - let*! state = eval state in - let* state = go ~max_steps:10000 Waiting_for_input_message state in - if valid then - let*! stack = get_stack state in - let* () = - Assert.equal - ~loc:__LOC__ - (List.equal Compare.Int.equal) - "The stack is not what we expected: " - Format.(pp_print_list (fun fmt -> fprintf fmt "%d;@;")) - expected_stack - stack - in - List.iter_es - (fun (x, v) -> - let*! result = get_var state x in - match result with - | None -> failwith "The variable %s cannot be found." x - | Some v' -> - Assert.equal - ~loc:__LOC__ - Compare.Int.equal - (Printf.sprintf "The variable %s has not the right value: " x) - (fun fmt x -> Format.fprintf fmt "%d" x) - v - v') - expected_vars - else - let*! result = get_evaluation_result state in - match result with - | Some true -> failwith "This code should lead to an evaluation error." - | None -> failwith "We should have reached the evaluation end." - | Some false -> return_unit - -let valid_messages = - [ - ("", "0", [0], []); - ("", "1 2", [2; 1], []); - ("", "1 2 +", [3], []); - ("", "1 2 + 3 +", [6], []); - ("", "1 2 + 3 + 1 1 + +", [8], []); - ("0 ", "", [0], []); - ("1 ", "2", [2; 1], []); - ("1 2 ", "+", [3], []); - ("1 2 + ", "3 +", [6], []); - ("1 2 + ", "3 + 1 1 + +", [8], []); - ("", "1 a", [1], [("a", 1)]); - ("", "1 a 2 + b 3 +", [6], [("a", 1); ("b", 3)]); - ("", "1 a 2 + b 3 + result", [6], [("a", 1); ("b", 3); ("result", 6)]); - ("1 a ", "2 b", [2; 1], [("a", 1); ("b", 2)]); - ("1 a ", "2 a", [2; 1], [("a", 2)]); - ("", "1 a 2 a + a", [3], [("a", 3)]); - ("", "1 a b", [1], [("a", 1); ("b", 1)]); - ("1 a", "", [1], [("a", 1)]); - ] - -let invalid_messages = - List.map - (fun s -> ("", s, [], [])) - ["+"; "1 +"; "1 1 + +"; "1 1 + 1 1 + + +"; "a"] - -let test_evaluation_messages () = - let open Lwt_result_syntax in - let* () = List.iter_es (test_evaluation_message ~valid:true) valid_messages in - List.iter_es (test_evaluation_message ~valid:false) invalid_messages - -let boot_then_reveal_metadata sc_rollup_address origination_level - ~is_reveal_enabled = - let open Sc_rollup_PVM_sig in - let open Lwt_result_syntax in - boot "" @@ fun _ctxt state -> - let metadata = - Sc_rollup_metadata_repr.{address = sc_rollup_address; origination_level} - in - let input = Reveal (Metadata metadata) in - let*! state = set_input input state in - let*! input_state = is_input_state ~is_reveal_enabled state in - match input_state with - | Initial -> return state - | No_input_required | Needs_reveal _ | First_after _ -> - failwith - "After booting, the machine should be waiting for the initial input." - -let test_reveal ~threshold ~inbox_level ~hash ~preimage_reveal_step - ~hash_reveal_step () = - let open Lwt_result_syntax in - let blake2B = Protocol.Raw_level_repr.of_int32_exn threshold in - let inbox_level = Protocol.Raw_level_repr.of_int32_exn inbox_level in - let reveal_enabled : - Constants_parametric_repr.sc_rollup_reveal_activation_level = - { - raw_data = {blake2B}; - metadata = Protocol.Raw_level_repr.root; - dal_page = Protocol.Raw_level_repr.root; - dal_parameters = Protocol.Raw_level_repr.root; - dal_attested_slots_validity_lag = 241_920; - (* 4 weeks with a 10 secs block time. *) - } - in - let is_reveal_enabled = - Sc_rollup_PVM_sig.is_reveal_enabled_predicate reveal_enabled - in - let* state = - boot_then_reveal_metadata - Sc_rollup_repr.Address.zero - Raw_level_repr.root - ~is_reveal_enabled - in - let* state = go ~max_steps:10_000 Waiting_for_input_message state in - let source = "hash:" ^ Sc_rollup_reveal_hash.to_hex hash in - let input = Sc_rollup_helpers.make_external_input_repr ~inbox_level source in - let*! state = set_input input state in - let* state = - go - ~is_reveal_enabled - ~max_steps:10_000 - (Waiting_for_reveal (Reveal_raw_data hash_reveal_step)) - state - in - let*! state = set_input (Reveal (Raw_data preimage_reveal_step)) state in - go ~max_steps:10_000 Waiting_for_input_message state - -let test_reveal_disabled ~threshold ~inbox_level () = - let open Lwt_result_wrap_syntax in - let preimage = "1 1 +" in - let hash = Sc_rollup_reveal_hash.(hash_string ~scheme:Blake2B [preimage]) in - let* state = - test_reveal - ~threshold - ~inbox_level - ~hash - ~hash_reveal_step:Sc_rollup_reveal_hash.well_known_reveal_hash - ~preimage_reveal_step:Sc_rollup_reveal_hash.well_known_reveal_preimage - () - in - let*! stack = get_stack state in - match stack with - | [] -> return_unit - | l -> - failwith - "Expected empty stack, got: %a" - (Format.pp_print_list Format.pp_print_int) - l - -let test_reveal_enabled ~threshold ~inbox_level () = - let open Lwt_result_wrap_syntax in - let preimage = "1 1 +" in - let hash = Sc_rollup_reveal_hash.(hash_string ~scheme:Blake2B [preimage]) in - let* state = - test_reveal - ~threshold - ~inbox_level - ~hash - ~hash_reveal_step:hash - ~preimage_reveal_step:preimage - () - in - let*! stack = get_stack state in - match stack with [2] -> return_unit | _ -> failwith "invalid stack" - -let test_output_messages_proofs ~valid ~inbox_level (source, expected_outputs) = - let open Lwt_result_syntax in - boot "" @@ fun ctxt state -> - let input = - Sc_rollup_helpers.make_external_input_repr - ~inbox_level:(Raw_level_repr.of_int32_exn (Int32.of_int inbox_level)) - source - in - let*! state = set_input input state in - let*! state = eval state in - let* state = go ~max_steps:10000 Waiting_for_input_message state in - let check_output output = - let*! result = produce_output_proof ctxt state output in - if valid then - match result with - | Ok proof -> - let*! output = verify_output_proof proof in - fail_unless - (Result.is_ok output) - (Exn (Failure "An output proof is not valid.")) - | Error _ -> failwith "Error during proof generation" - else - match result with - | Ok proof -> - let*! proof_is_valid = verify_output_proof proof in - fail_when - (Result.is_ok proof_is_valid) - (Exn - (Failure - (Format.asprintf - "A wrong output proof is valid: %s -> %a" - source - Sc_rollup_PVM_sig.pp_output - output))) - | Error _ -> return_unit - in - List.iter_es check_output expected_outputs - -let make_output ~outbox_level ~message_index n = - let open Sc_rollup_outbox_message_repr in - let unparsed_parameters = - Micheline.(Int (dummy_location, Z.of_int n) |> strip_locations) - in - let destination = Contract_hash.zero in - let entrypoint = Entrypoint_repr.default in - let transaction = {unparsed_parameters; destination; entrypoint} in - let transactions = [transaction] in - let message_index = Z.of_int message_index in - let outbox_level = Raw_level_repr.of_int32_exn (Int32.of_int outbox_level) in - let message = Atomic_transaction_batch {transactions} in - Sc_rollup_PVM_sig.{outbox_level; message_index; message} - -let test_valid_output_messages () = - let test inbox_level = - let outbox_level = inbox_level in - [ - ("1", []); - ("1 out", [make_output ~outbox_level ~message_index:0 1]); - ( "1 out 2 out", - [ - make_output ~outbox_level ~message_index:0 1; - make_output ~outbox_level ~message_index:1 2; - ] ); - ( "1 out 1 1 + out", - [ - make_output ~outbox_level ~message_index:0 1; - make_output ~outbox_level ~message_index:1 2; - ] ); - ( "1 out 1 1 + out out", - [ - make_output ~outbox_level ~message_index:0 1; - make_output ~outbox_level ~message_index:1 2; - make_output ~outbox_level ~message_index:2 2; - ] ); - ] - |> List.iter_es (test_output_messages_proofs ~valid:true ~inbox_level) - in - (* Test for different inbox/outbox levels. *) - List.iter_es test [0; 1; 2345] - -let test_invalid_output_messages () = - let inbox_level = 0 in - let outbox_level = inbox_level in - [ - ("1", [make_output ~outbox_level ~message_index:0 1]); - ("1 out", [make_output ~outbox_level ~message_index:1 1]); - ( "1 out 1 1 + out", - [ - make_output ~outbox_level ~message_index:0 0; - make_output ~outbox_level ~message_index:3 2; - ] ); - ( "1 out 1 1 + out out", - [ - make_output ~outbox_level ~message_index:0 42; - make_output ~outbox_level ~message_index:1 32; - make_output ~outbox_level ~message_index:2 13; - ] ); - ] - |> List.iter_es (test_output_messages_proofs ~valid:false ~inbox_level) - -let test_invalid_outbox_level () = - let inbox_level = 42 in - let outbox_level = inbox_level - 1 in - [ - ("1", []); - ("1 out", [make_output ~outbox_level ~message_index:0 1]); - ( "1 out 2 out", - [ - make_output ~outbox_level ~message_index:0 1; - make_output ~outbox_level ~message_index:1 2; - ] ); - ] - |> List.iter_es (test_output_messages_proofs ~valid:false ~inbox_level) - -let dummy_internal_transfer address = - let open Lwt_result_wrap_syntax in - let open Alpha_context.Sc_rollup in - let* ctxt = - let* block, _baker, _contract, _src2 = Contract_helpers.init () in - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - in - let sender = - Contract_hash.of_b58check_exn "KT1BuEZtb68c1Q4yjtckcNjGELqWt56Xyesc" - in - let source = - WithExceptions.Result.get_ok - ~loc:__LOC__ - (Signature.Public_key_hash.of_b58check - "tz1RjtZUVeLhADFHDL8UwDZA6vjWWhojpu5w") - in - let payload = Bytes.of_string "foo" in - let*! result = - Script_ir_translator.unparse_data - ctxt - Script_ir_unparser.Optimized - Bytes_t - payload - in - let*?@ payload, _ctxt = result in - let transfer = - Inbox_message.Internal - (Transfer {payload; sender; source; destination = address}) - in - let*?@ serialized_transfer = Inbox_message.serialize transfer in - return serialized_transfer - -let test_filter_internal_message () = - let open Sc_rollup_PVM_sig in - let open Lwt_result_syntax in - boot "" @@ fun _ctxt state -> - let address = Sc_rollup_repr.Address.zero in - let metadata = - Sc_rollup_metadata_repr.{address; origination_level = Raw_level_repr.root} - in - let input = Reveal (Metadata metadata) in - let*! state = set_input input state in - - (* We will set an input where the destination is the same as the one given - in the static metadata. The pvm should process the input. *) - let* () = - let open Sc_rollup_helpers.Arith_pvm in - let open Alpha_context in - let open Alpha_context.Sc_rollup in - let* internal_transfer = dummy_internal_transfer address in - let input = - Inbox_message - { - inbox_level = Raw_level.root; - message_counter = Z.zero; - payload = internal_transfer; - } - in - let*! state = set_input input state in - let*! input_state = - is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - match input_state with - | No_input_required -> return_unit - | _ -> failwith "The arith pvm should be processing the internal transfer" - in - - (* We will set an input where the destination is *not* the same as the - one given in the static metadata. The pvm should ignore the input. *) - let* () = - let open Sc_rollup_helpers.Arith_pvm in - let open Alpha_context in - let open Alpha_context.Sc_rollup in - let dummy_address = - Sc_rollup_repr.Address.of_b58check_exn - "sr1Fq8fPi2NjhWUXtcXBggbL6zFjZctGkmso" - in - let* internal_transfer = dummy_internal_transfer dummy_address in - let input = - Inbox_message - { - inbox_level = Raw_level.root; - message_counter = Z.zero; - payload = internal_transfer; - } - in - let*! state = set_input input state in - let*! input_state = - is_input_state - ~is_reveal_enabled:Sc_rollup_helpers.is_reveal_enabled_default - state - in - match input_state with - | No_input_required -> - failwith "The arith pvm should avoid ignored the internal transfer" - | _ -> return_unit - in - - return_unit - -module Arith_pvm = Sc_rollup_helpers.Arith_pvm - -(** Instructs the PVM to reveal [hashed_preimage], and providing - [input_preimage] when required. The proof for the reveal step - is generated and then verified. *) -let test_serialized_reveal_proof ~hashed_preimage ~input_preimage () = - let open Lwt_result_wrap_syntax in - let open Alpha_context in - let rollup = Sc_rollup.Address.zero in - let level = Raw_level.root in - - let*? inbox = - Sc_rollup_helpers.Node_inbox.new_inbox ~inbox_creation_level:level () - in - let snapshot = Sc_rollup.Inbox.take_snapshot inbox.inbox in - let dal_snapshot = Dal.Slots_history.genesis in - let constants = Default_parameters.constants_mainnet in - let dal_parameters = constants.dal in - let dal_activation_level = - if constants.dal.feature_enable then - Some constants.sc_rollup.reveal_activation_level.dal_parameters - else None - in - let dal_attested_slots_validity_lag = - constants.sc_rollup.reveal_activation_level.dal_attested_slots_validity_lag - in - let ctxt = Sc_rollup_helpers.Arith_pvm.make_empty_context () in - - let is_reveal_enabled = Sc_rollup_helpers.is_reveal_enabled_default in - let metadata = - Sc_rollup.Metadata.{address = rollup; origination_level = level} - in - let reveal_hash = - Sc_rollup_reveal_hash.( - hash_string ~scheme:Blake2B [hashed_preimage] |> to_hex) - in - - let source = "hash:" ^ reveal_hash in - let input = - Sc_rollup_helpers.make_external_input ~inbox_level:inbox.inbox.level source - in - let* state, _, _ = - Sc_rollup_helpers.Arith_pvm_eval.eval_inputs_from_initial_state - ~metadata - [[input]] - in - - let pvm_with_context_and_state = - Sc_rollup_helpers.make_pvm_with_context_and_state - (module Arith_pvm) - ~state - ~context:ctxt - ~reveal:(fun _ -> Lwt.return_some input_preimage) - ~inbox - () - in - let*@ proof = - Sc_rollup.Proof.produce - ~metadata - pvm_with_context_and_state - Raw_level.root - ~is_reveal_enabled - in - let*?@ pvm_step = - Sc_rollup.Proof.unserialize_pvm_step ~pvm:(module Arith_pvm) proof.pvm_step - in - - wrap - @@ Sc_rollup.Proof.valid - ~pvm:(module Arith_pvm) - ~metadata - snapshot - Raw_level.root - dal_snapshot - dal_parameters.cryptobox_parameters - ~dal_activation_level - ~dal_attested_slots_validity_lag - ~dal_attestation_lag:dal_parameters.attestation_lag - ~dal_number_of_slots:dal_parameters.number_of_slots - ~is_reveal_enabled - {proof with pvm_step} - -(** Test that sending a invalid serialized reveal proof to - {Sc_rollup_proof_repr.valid} is rejected. *) -let test_invalid_serialized_reveal_proof () : (unit, tztrace) result Lwt.t = - let open Lwt_result_syntax in - let*! check = - test_serialized_reveal_proof - ~hashed_preimage:"preimage" - ~input_preimage:"wrong preimage" - () - in - Assert.proto_error - ~loc:__LOC__ - check - (( = ) (Sc_rollup_proof_repr.Sc_rollup_proof_check "Invalid reveal")) - -(** Test that sending a valid serialized reveal proof to - {Sc_rollup_proof_repr.valid} is accepted. *) -let test_valid_serialized_reveal_proof () : (unit, tztrace) result Lwt.t = - let open Lwt_result_syntax in - let hashed_preimage = "preimage" in - let*! _check = - test_serialized_reveal_proof - ~hashed_preimage - ~input_preimage:hashed_preimage - () - in - return_unit - -let tests = - [ - Tztest.tztest "PreBoot" `Quick test_preboot; - Tztest.tztest "Boot" `Quick test_boot; - Tztest.tztest "Metadata" `Quick test_metadata; - Tztest.tztest "Input message" `Quick test_input_message; - Tztest.tztest "Parsing message" `Quick test_parsing_messages; - Tztest.tztest "Evaluating message" `Quick test_evaluation_messages; - Tztest.tztest "Valid output messages" `Quick test_valid_output_messages; - Tztest.tztest "Invalid output messages" `Quick test_invalid_output_messages; - Tztest.tztest "Invalid outbox level" `Quick test_invalid_outbox_level; - Tztest.tztest "Filter internal message" `Quick test_filter_internal_message; - Tztest.tztest - "Reveal below threshold" - `Quick - (test_reveal_disabled ~threshold:10_000l ~inbox_level:1_000l); - Tztest.tztest - "Reveal at threshold (block level zero)" - `Quick - (test_reveal_enabled ~threshold:0l ~inbox_level:0l); - Tztest.tztest - "Reveal below threshold (block level zero)" - `Quick - (test_reveal_disabled ~threshold:10_000l ~inbox_level:0l); - Tztest.tztest - "Reveal at threshold" - `Quick - (test_reveal_enabled ~threshold:10_000l ~inbox_level:10_000l); - Tztest.tztest - "Reveal above threshold" - `Quick - (test_reveal_enabled ~threshold:10_000l ~inbox_level:10_001l); - Tztest.tztest - "Invalid serialized reveal proof" - `Quick - test_invalid_serialized_reveal_proof; - Tztest.tztest - "Valid serialized reveal proof" - `Quick - test_valid_serialized_reveal_proof; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup arith", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_game.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_game.ml deleted file mode 100644 index 9e93247c8cd3b4dbaefce79b90049116ab7b16ad..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_game.ml +++ /dev/null @@ -1,489 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Sc_rollup_refutation_storage - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_sc_rollup_game.ml - Subject: Tests for the SCORU refutation game -*) - -open Protocol -module Commitment_repr = Sc_rollup_commitment_repr -module T = Test_sc_rollup_storage -module R = Sc_rollup_refutation_storage -module D = Sc_rollup_dissection_chunk_repr -module G = Sc_rollup_game_repr -module Tick = Sc_rollup_tick_repr - -(** Assert that the computation fails with the given error. *) -let assert_fails_with ~__LOC__ k expected_err = - let open Lwt_result_syntax in - let*! res = k in - Assert.proto_error ~loc:__LOC__ res (( = ) expected_err) - -let assert_fails_with_f ~__LOC__ k f = - let open Lwt_result_syntax in - let*! res = k in - Assert.proto_error ~loc:__LOC__ res f - -let tick_of_int_exn n = - match Tick.of_int n with None -> assert false | Some t -> t - -let context_hash_of_string s = Context_hash.hash_string [s] - -let hash_string s = - Sc_rollup_repr.State_hash.context_hash_to_state_hash - @@ context_hash_of_string s - -let hash_int n = hash_string (Format.sprintf "%d" n) - -let mk_dissection_chunk (state_hash, tick) = D.{state_hash; tick} - -let init_dissection ~size ?init_tick start_hash = - let default_init_tick i = - let hash = - if i = size - 1 then None - else Some (if i = 0 then start_hash else hash_int i) - in - mk_dissection_chunk (hash, tick_of_int_exn i) - in - let init_tick = - Option.fold - ~none:default_init_tick - ~some:(fun init_tick -> init_tick size) - init_tick - in - Stdlib.List.init (size + 1) init_tick - -let init_refutation ~size ?init_tick start_hash = - let choice = Sc_rollup_tick_repr.initial in - let step = G.Dissection (init_dissection ~size ?init_tick start_hash) in - (choice, step) - -let two_stakers_in_conflict () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, refuter, defender, staker3 = - T.originate_rollup_and_deposit_with_three_stakers () - in - let hash1 = hash_string "foo" in - let hash2 = hash_string "bar" in - let hash3 = hash_string "xyz" in - let parent_commit = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = T.valid_inbox_level ctxt 1l; - number_of_ticks = T.number_of_ticks_exn 152231L; - compressed_state = hash1; - } - in - let level l = T.valid_inbox_level ctxt l in - let*@ parent, _, ctxt = - T.advance_level_n_refine_stake ctxt rollup defender parent_commit - in - let child1 = - Commitment_repr. - { - predecessor = parent; - inbox_level = level 2l; - number_of_ticks = T.number_of_ticks_exn 10000L; - compressed_state = hash2; - } - in - let child2 = - Commitment_repr. - { - predecessor = parent; - inbox_level = level 2l; - number_of_ticks = T.number_of_ticks_exn 10000L; - compressed_state = hash3; - } - in - let ctxt = T.advance_level_for_commitment ctxt child1 in - let*@ _, _, ctxt, _ = - Sc_rollup_stake_storage.publish_commitment ctxt rollup defender child1 - in - let*@ _, _, ctxt, _ = - Sc_rollup_stake_storage.publish_commitment ctxt rollup refuter child2 - in - let defender_commitment_hash = - Sc_rollup_commitment_repr.hash_uncarbonated child1 - in - let refuter_commitment_hash = - Sc_rollup_commitment_repr.hash_uncarbonated child2 - in - return - ( ctxt, - rollup, - refuter, - defender, - staker3, - refuter_commitment_hash, - defender_commitment_hash ) - -(** A dissection is 'poorly distributed' if its tick counts are not -very evenly spread through the total tick-duration. Formally, the -maximum tick-distance between two consecutive states in a dissection -may not be more than half of the total tick-duration. *) -let test_poorly_distributed_dissection () = - let open Lwt_result_wrap_syntax in - let* ( ctxt, - rollup, - refuter, - defender, - _staker3, - refuter_commitment_hash, - defender_commitment_hash ) = - two_stakers_in_conflict () - in - let start_hash = hash_string "foo" in - let init_tick size i = - mk_dissection_chunk - @@ - if i = size then (None, tick_of_int_exn 10000) - else (Some (if i = 0 then start_hash else hash_int i), tick_of_int_exn i) - in - let player = refuter and opponent = defender in - let player_commitment_hash = refuter_commitment_hash - and opponent_commitment_hash = defender_commitment_hash in - let*@ ctxt = - R.start_game - ctxt - rollup - ~player:(player, player_commitment_hash) - ~opponent:(opponent, opponent_commitment_hash) - in - let size = - Constants_storage.sc_rollup_number_of_sections_in_dissection ctxt - in - let choice, step = init_refutation ~size ~init_tick start_hash in - let*!@ res = - R.game_move ctxt rollup ~player:refuter ~opponent:defender ~step ~choice - in - assert_fails_with_f ~__LOC__ (Lwt.return res) (function - | D.Dissection_invalid_distribution _ -> true - | _ -> false) - -let test_single_valid_game_move () = - let open Lwt_result_wrap_syntax in - let* ( ctxt, - rollup, - refuter, - defender, - _staker3, - refuter_commitment_hash, - defender_commitment_hash ) = - two_stakers_in_conflict () - in - let start_hash = hash_string "foo" in - let size = - Constants_storage.sc_rollup_number_of_sections_in_dissection ctxt - in - let tick_per_state = 10_000 / size in - let dissection = - Stdlib.List.init (size + 1) (fun i -> - mk_dissection_chunk - @@ - if i = 0 then (Some start_hash, tick_of_int_exn 0) - else if i = size then (None, tick_of_int_exn 10000) - else (Some (hash_int i), tick_of_int_exn (i * tick_per_state))) - in - let player = refuter and opponent = defender in - let player_commitment_hash = refuter_commitment_hash - and opponent_commitment_hash = defender_commitment_hash in - - let*@ ctxt = - R.start_game - ctxt - rollup - ~player:(player, player_commitment_hash) - ~opponent:(opponent, opponent_commitment_hash) - in - let choice, step = (Sc_rollup_tick_repr.initial, G.Dissection dissection) in - let*@ game_result, _ctxt = - R.game_move ctxt rollup ~player:refuter ~opponent:defender ~choice ~step - in - Assert.is_none ~loc:__LOC__ ~pp:Sc_rollup_game_repr.pp_game_result game_result - -module Arith_pvm = Sc_rollup_helpers.Arith_pvm - -(** Test that sending a invalid serialized inbox proof to - {Sc_rollup_proof_repr.valid} is rejected. *) -let test_invalid_serialized_inbox_proof () = - let open Lwt_result_wrap_syntax in - let open Alpha_context in - let rollup = Sc_rollup.Address.zero in - let level = Raw_level.(succ root) in - let inbox = Sc_rollup_helpers.dumb_init level in - let snapshot = Sc_rollup.Inbox.take_snapshot inbox in - let dal_snapshot = Dal.Slots_history.genesis in - let constants = Default_parameters.constants_mainnet in - let dal_parameters = constants.dal in - let dal_activation_level = - if constants.dal.feature_enable then - Some constants.sc_rollup.reveal_activation_level.dal_parameters - else None - in - let dal_attested_slots_validity_lag = - constants.sc_rollup.reveal_activation_level.dal_attested_slots_validity_lag - in - let ctxt = Sc_rollup_helpers.Arith_pvm.make_empty_context () in - let empty = Sc_rollup_helpers.Arith_pvm.make_empty_state () in - let*! state = Arith_pvm.initial_state ~empty in - (* We evaluate the boot sector, so the [input_requested] is a - [First_after]. *) - let*! state = Arith_pvm.eval state in - let is_reveal_enabled = Sc_rollup_helpers.is_reveal_enabled_default in - let*! pvm_step = Arith_pvm.produce_proof ctxt ~is_reveal_enabled None state in - let pvm_step = WithExceptions.Result.get_ok ~loc:__LOC__ pvm_step in - - (* We create an obviously invalid inbox *) - let inbox_proof = - Sc_rollup.Inbox.Internal_for_tests.serialized_proof_of_string - "I am the big bad wolf" - in - let inbox_proof = - Sc_rollup.Proof.Inbox_proof - {level = Raw_level.root; message_counter = Z.zero; proof = inbox_proof} - in - let proof = Sc_rollup.Proof.{pvm_step; input_proof = Some inbox_proof} in - - let metadata = - Sc_rollup.Metadata.{address = rollup; origination_level = level} - in - let*!@ res = - Sc_rollup.Proof.valid - ~pvm:(module Arith_pvm) - ~metadata - snapshot - Raw_level.root - dal_snapshot - dal_parameters.cryptobox_parameters - ~dal_activation_level - ~dal_attested_slots_validity_lag - ~dal_attestation_lag:dal_parameters.attestation_lag - ~dal_number_of_slots:dal_parameters.number_of_slots - ~is_reveal_enabled - proof - in - Assert.proto_error - ~loc:__LOC__ - res - (( = ) Sc_rollup_proof_repr.Sc_rollup_invalid_serialized_inbox_proof) - -let test_first_move_with_swapped_commitment () = - let open Lwt_result_wrap_syntax in - let* ( ctxt, - rollup, - refuter, - defender, - _staker3, - refuter_commitment_hash, - defender_commitment_hash ) = - two_stakers_in_conflict () - in - let player = refuter - and opponent = defender - and player_commitment_hash = refuter_commitment_hash - and opponent_commitment_hash = defender_commitment_hash in - let*!@ res = - R.start_game - ctxt - rollup - ~player:(player, opponent_commitment_hash) - ~opponent:(opponent, player_commitment_hash) - in - Assert.proto_error - ~loc:__LOC__ - res - (( = ) - (Sc_rollup_errors.Sc_rollup_wrong_staker_for_conflict_commitment - (player, opponent_commitment_hash))) - -let test_first_move_from_invalid_player () = - let open Lwt_result_wrap_syntax in - let* ( ctxt, - rollup, - _refuter, - defender, - staker3, - refuter_commitment_hash, - defender_commitment_hash ) = - two_stakers_in_conflict () - in - let opponent = defender - and player_commitment_hash = refuter_commitment_hash - and opponent_commitment_hash = defender_commitment_hash in - let*!@ res = - R.start_game - ctxt - rollup - ~player:(staker3, player_commitment_hash) - ~opponent:(opponent, opponent_commitment_hash) - in - Assert.proto_error - ~loc:__LOC__ - res - (( = ) - (Sc_rollup_errors.Sc_rollup_wrong_staker_for_conflict_commitment - (staker3, player_commitment_hash))) - -let test_first_move_with_invalid_opponent () = - let open Lwt_result_wrap_syntax in - let* ( ctxt, - rollup, - refuter, - _defender, - staker3, - refuter_commitment_hash, - defender_commitment_hash ) = - two_stakers_in_conflict () - in - let player = refuter - and player_commitment_hash = refuter_commitment_hash - and opponent_commitment_hash = defender_commitment_hash in - let*!@ res = - R.start_game - ctxt - rollup - ~player:(player, player_commitment_hash) - ~opponent:(staker3, opponent_commitment_hash) - in - Assert.proto_error - ~loc:__LOC__ - res - (( = ) - (Sc_rollup_errors.Sc_rollup_wrong_staker_for_conflict_commitment - (staker3, opponent_commitment_hash))) - -let test_first_move_with_invalid_ancestor () = - let open Lwt_result_wrap_syntax in - let* ( ctxt, - rollup, - refuter, - defender, - _staker3, - refuter_commitment_hash, - defender_commitment_hash ) = - two_stakers_in_conflict () - in - let*@ inbox_level = T.proper_valid_inbox_level (ctxt, rollup) 3 in - let refuter_commitment = - let context_hash11 = hash_string "child11" in - Commitment_repr. - { - predecessor = refuter_commitment_hash; - inbox_level; - number_of_ticks = T.number_of_ticks_exn 10000L; - compressed_state = context_hash11; - } - in - let defender_commitment = - let context_hash21 = hash_string "child21" in - Commitment_repr. - { - predecessor = defender_commitment_hash; - inbox_level; - number_of_ticks = T.number_of_ticks_exn 10000L; - compressed_state = context_hash21; - } - in - let ctxt = T.advance_level_for_commitment ctxt refuter_commitment in - let*@ _, _, ctxt, _ = - Sc_rollup_stake_storage.publish_commitment - ctxt - rollup - refuter - refuter_commitment - in - let*@ _, _, ctxt, _ = - Sc_rollup_stake_storage.publish_commitment - ctxt - rollup - defender - defender_commitment - in - let refuter_commitment_hash = - Sc_rollup_commitment_repr.hash_uncarbonated refuter_commitment - in - let defender_commitment_hash = - Sc_rollup_commitment_repr.hash_uncarbonated defender_commitment - in - let player = refuter - and opponent = defender - and player_commitment_hash = refuter_commitment_hash - and opponent_commitment_hash = defender_commitment_hash in - let*!@ res = - R.start_game - ctxt - rollup - ~player:(player, player_commitment_hash) - ~opponent:(opponent, opponent_commitment_hash) - in - Assert.proto_error - ~loc:__LOC__ - res - (( = ) - (Sc_rollup_errors.Sc_rollup_not_valid_commitments_conflict - (player_commitment_hash, player, opponent_commitment_hash, opponent))) - -let tests = - [ - Tztest.tztest - "A badly distributed dissection is an invalid move." - `Quick - test_poorly_distributed_dissection; - Tztest.tztest - "A single game move with a valid dissection" - `Quick - test_single_valid_game_move; - Tztest.tztest - "Invalid serialized inbox proof is rejected." - `Quick - test_invalid_serialized_inbox_proof; - Tztest.tztest - "start a game with invalid commitment hash (swap commitment)." - `Quick - test_first_move_with_swapped_commitment; - Tztest.tztest - "start a game with invalid commitment hash (op from outsider)." - `Quick - test_first_move_from_invalid_player; - Tztest.tztest - "start a game with invalid commitment hash (opponent is not in game)." - `Quick - test_first_move_with_invalid_opponent; - Tztest.tztest - "start a game with commitment hash that are not the first conflict." - `Quick - test_first_move_with_invalid_ancestor; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup game", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_inbox.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_inbox.ml deleted file mode 100644 index cdf6e830bf9bef9d0bfd97e3d746c3ced87806fc..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_inbox.ml +++ /dev/null @@ -1,944 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (smart contract rollup inbox) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_sc_rollup_inbox.ml - Subject: These unit tests check the off-line inbox implementation for - smart contract rollups -*) - -open Protocol - -let opt_get ~__LOC__ = WithExceptions.Option.get ~loc:__LOC__ - -open Sc_rollup_helpers - -module Merkelized_payload_hashes = - Alpha_context.Sc_rollup.Inbox_merkelized_payload_hashes - -module Message = Alpha_context.Sc_rollup.Inbox_message -module Inbox = Alpha_context.Sc_rollup.Inbox -open Alpha_context - -let assert_equal_payload ~__LOC__ found (expected : Message.serialized) = - Assert.equal_string - ~loc:__LOC__ - (Message.unsafe_to_string expected) - (Message.unsafe_to_string found) - -let assert_equal_payload_option ~__LOC__ found expected = - Assert.equal - ~loc:__LOC__ - (Option.equal (fun v1 v2 -> - String.equal - (Message.unsafe_to_string v1) - (Message.unsafe_to_string v2))) - "Input returned by the production is not the expected one" - (Format.pp_print_option - ~none:(fun fmt () -> Format.pp_print_string fmt "None") - (fun fmt v -> - Format.fprintf fmt "Some \"%S\"" (Message.unsafe_to_string v))) - found - expected - -let assert_inbox_message ~__LOC__ found expected = - Assert.equal - ~loc:__LOC__ - (Option.equal Sc_rollup.inbox_message_equal) - "Input returns by the production is not the expected one" - (Format.pp_print_option Sc_rollup.pp_inbox_message) - found - expected - -let assert_equal_payload_hash ~__LOC__ found expected = - Assert.equal - ~loc:__LOC__ - Message.Hash.equal - "Protocol hashes aren't equal" - Message.Hash.pp - expected - found - -let assert_merkelized_payload ~__LOC__ ~payload_hash ~index found = - let open Lwt_result_syntax in - let found_payload_hash = Merkelized_payload_hashes.get_payload_hash found in - let found_index = Merkelized_payload_hashes.get_index found in - let* () = - assert_equal_payload_hash ~__LOC__ found_payload_hash payload_hash - in - Assert.equal_z ~loc:__LOC__ found_index index - -let assert_equal_merkelized_payload ~__LOC__ ~found ~expected = - let payload_hash = Merkelized_payload_hashes.get_payload_hash expected in - let index = Merkelized_payload_hashes.get_index expected in - assert_merkelized_payload ~__LOC__ ~payload_hash ~index found - -let assert_merkelized_payload_proof_error ~__LOC__ expected_msg result = - let open Result_wrap_syntax in - let@ result in - Assert.error ~loc:__LOC__ result (function - | Environment.Ecoproto_error - (Sc_rollup_inbox_merkelized_payload_hashes_repr - .Merkelized_payload_hashes_proof_error msg) -> - expected_msg = msg - | _ -> false) - -let verify_merkelized_payload_proof_fails ~__LOC__ expected_msg proof = - assert_merkelized_payload_proof_error ~__LOC__ expected_msg - @@ Merkelized_payload_hashes.verify_proof proof - -let assert_equal_history_proof ~__LOC__ found expected = - Assert.equal - ~loc:__LOC__ - Inbox.equal_history_proof - "history_proof are not equal" - Inbox.pp_history_proof - expected - found - -let assert_inbox_proof_error ~__LOC__ expected_msg result = - let open Result_wrap_syntax in - let@ result in - Assert.error ~loc:__LOC__ result (function - | Environment.Ecoproto_error (Sc_rollup_inbox_repr.Inbox_proof_error msg) - -> - expected_msg = msg - | _ -> false) - -let verify_payloads_proof_fails ~__LOC__ expected_msg proof head_cell_hash - message_counter = - assert_inbox_proof_error ~__LOC__ expected_msg - @@ Inbox.Internal_for_tests.verify_payloads_proof - proof - head_cell_hash - message_counter - -let verify_inclusion_proof_fails ~__LOC__ expected_msg proof snapshot = - assert_inbox_proof_error ~__LOC__ expected_msg - @@ Inbox.Internal_for_tests.verify_inclusion_proof proof snapshot - -let gen_payload_size = QCheck2.Gen.(1 -- 10) - -let gen_payload_string = - let open QCheck2.Gen in - string_size gen_payload_size - -let gen_payload = - let open QCheck2.Gen in - let+ payload = gen_payload_string in - Message.unsafe_of_string payload - -let gen_payloads ?(min_size = 2) ?(max_size = 50) () = - let open QCheck2.Gen in - list_size (min_size -- max_size) gen_payload - -let gen_index_of_payloads ?(max_index_offset = 0) payloads = - let open QCheck2.Gen in - let max_index = List.length payloads - 1 - max_index_offset in - let+ index = 0 -- max_index in - Z.of_int index - -let gen_payloads_and_index ?min_size ?max_size ?max_index_offset () = - let open QCheck2.Gen in - let* payloads = gen_payloads ?min_size ?max_size () in - let* index = gen_index_of_payloads ?max_index_offset payloads in - return (payloads, index) - -let gen_payloads_for_level ?(inbox_level = Raw_level.(succ root)) () = - gen_messages inbox_level gen_payload_string - -let gen_level ?(inbox_creation_level = 0) ~max_level () = - let open QCheck2.Gen in - let+ int_level = inbox_creation_level -- max_level in - Raw_level.of_int32_exn (Int32.of_int int_level) - -let gen_payloads_and_level ?inbox_creation_level ?(max_level = 100_000) () = - let open QCheck2.Gen in - let* inbox_level = gen_level ?inbox_creation_level ~max_level () in - gen_payloads_for_level ~inbox_level () - -let gen_payloads_and_level_and_index ?inbox_creation_level ?max_level () = - let open QCheck2.Gen in - let* payloads_for_level = - gen_payloads_and_level ?inbox_creation_level ?max_level () - in - let* index = gen_index_of_payloads payloads_for_level.messages in - return (payloads_for_level, index) - -let gen_payloads_for_levels ?(inbox_creation_level = 0) ?(max_level = 15) () = - gen_payloads_for_levels - ~start_level:(inbox_creation_level + 1) - ~max_level - gen_payload_string - -let gen_payloads_for_levels_and_level ?inbox_creation_level ?max_level - ?(level_offset = 1) () = - let open QCheck2.Gen in - let* payloads_for_levels = - gen_payloads_for_levels ?inbox_creation_level ?max_level () - in - let* payloads_index = - 0 -- (List.length payloads_for_levels - 1 - level_offset) - in - let payloads = - opt_get ~__LOC__ @@ List.nth payloads_for_levels payloads_index - in - return (payloads_for_levels, payloads.level) - -let gen_level_and_index payloads_for_levels = - let open QCheck2.Gen in - let* payloads_index = 0 -- (List.length payloads_for_levels - 1) in - let payloads = - opt_get ~__LOC__ @@ List.nth payloads_for_levels payloads_index - in - let* index = gen_index_of_payloads payloads.Sc_rollup_helpers.inputs in - return (payloads.level, index) - -let gen_payloads_for_levels_and_level_and_index ?inbox_creation_level ?max_level - () = - let open QCheck2.Gen in - let* payloads_for_levels = - gen_payloads_for_levels ?inbox_creation_level ?max_level () - in - let* level, index = gen_level_and_index payloads_for_levels in - return (payloads_for_levels, level, index) - -let gen_payloads_for_levels_and_two_levels_and_two_indexes ?inbox_creation_level - ?max_level () = - let open QCheck2.Gen in - let* payloads_for_levels = - gen_payloads_for_levels ?inbox_creation_level ?max_level () - in - let* level, index = gen_level_and_index payloads_for_levels in - let* level', index' = gen_level_and_index payloads_for_levels in - return (payloads_for_levels, level, index, level', index') - -let fill_merkelized_payload history payloads = - let open Lwt_result_wrap_syntax in - let* first, payloads = - match payloads with - | x :: xs -> return (x, xs) - | [] -> failwith "empty payloads" - in - let*?@ history, merkelized_payload = - Merkelized_payload_hashes.genesis history first - in - let*?@ result = - List.fold_left_e - (fun (history, payloads) payload -> - Merkelized_payload_hashes.add_payload history payloads payload) - (history, merkelized_payload) - payloads - in - return result - -let construct_merkelized_payload_hashes payloads = - let history = Merkelized_payload_hashes.History.empty ~capacity:1000L in - fill_merkelized_payload history payloads - -(** The merkelized payload hashes history is correctly filled with all - values. *) -let test_merkelized_payload_hashes_history payloads = - let open Lwt_result_syntax in - let nb_payloads = List.length payloads in - let* history, merkelized_payloads = - construct_merkelized_payload_hashes payloads - in - let* () = - Assert.equal_z - ~loc:__LOC__ - (Z.of_int nb_payloads) - (Z.succ (Merkelized_payload_hashes.get_index merkelized_payloads)) - in - List.iteri_es - (fun index (expected_payload : Message.serialized) -> - let expected_payload_hash = - Message.hash_serialized_message expected_payload - in - let found_merkelized_payload = - opt_get ~__LOC__ - @@ Merkelized_payload_hashes.Internal_for_tests.find_predecessor_payload - history - ~index:(Z.of_int index) - merkelized_payloads - in - let found_payload_hash = - Merkelized_payload_hashes.get_payload_hash found_merkelized_payload - in - assert_equal_payload_hash - ~__LOC__ - found_payload_hash - expected_payload_hash) - payloads - -(** Produce a merkelized payload hashes proof and verify it's valid. *) -let test_merkelized_payload_hashes_proof (payloads, index) = - let open Lwt_result_wrap_syntax in - let* history, merkelized_payload = - construct_merkelized_payload_hashes payloads - in - let ( Merkelized_payload_hashes. - {merkelized = target_merkelized_payload; payload = proof_payload}, - proof ) = - opt_get ~__LOC__ - @@ Merkelized_payload_hashes.produce_proof history ~index merkelized_payload - in - let payload : Message.serialized = - opt_get ~__LOC__ @@ List.nth payloads (Z.to_int index) - in - let payload_hash = Message.hash_serialized_message payload in - let* () = assert_equal_payload ~__LOC__ proof_payload payload in - let* () = - assert_merkelized_payload - ~__LOC__ - ~index - ~payload_hash - target_merkelized_payload - in - let*?@ proof_ancestor_merkelized, proof_current_merkelized = - Merkelized_payload_hashes.verify_proof proof - in - let* () = - assert_equal_merkelized_payload - ~__LOC__ - ~found:proof_ancestor_merkelized - ~expected:target_merkelized_payload - in - let* () = - assert_equal_merkelized_payload - ~__LOC__ - ~found:proof_current_merkelized - ~expected:merkelized_payload - in - return_unit - -(** Verifying an empty merkelized payload hashes proof fails *) -let test_empty_merkelized_payload_hashes_proof_fails () = - verify_merkelized_payload_proof_fails ~__LOC__ "proof is empty" - @@ Merkelized_payload_hashes.Internal_for_tests.make_proof [] - -(* Test multiple cases of invalid proof. This test is more about testing the - skip list than testing merkelized payload. But it was easier to test with a - skip-list with hashes as pointer. *) -let test_invalid_merkelized_payload_hashes_proof_fails (payloads, index) = - let open Lwt_result_wrap_syntax in - let make_proof = Merkelized_payload_hashes.Internal_for_tests.make_proof in - let hd ~__LOC__ l = List.hd l |> opt_get ~__LOC__ in - let tl ~__LOC__ l = List.tl l |> opt_get ~__LOC__ in - let nth ~__LOC__ idx l = List.nth idx l |> opt_get ~__LOC__ in - let* history, merkelized_payload_hash = - construct_merkelized_payload_hashes payloads - in - let Merkelized_payload_hashes.{merkelized = _target; _}, proof = - opt_get ~__LOC__ - @@ Merkelized_payload_hashes.produce_proof - history - ~index - merkelized_payload_hash - in - let proof :> Merkelized_payload_hashes.t list = proof in - (* We need a proof of more than 3 elements otherwise some tests does not make - sense after. *) - QCheck2.assume Compare.List_length_with.(proof > 3) ; - let proof_len = List.length proof in - let payload = Message.unsafe_of_string "I'm a disruptive payload" in - let payloads' = payload :: payloads in - let* history', merkelized_payload' = - construct_merkelized_payload_hashes payloads' - in - let Merkelized_payload_hashes.{merkelized = target'; payload = _}, proof' = - opt_get ~__LOC__ - @@ Merkelized_payload_hashes.produce_proof - history' - ~index - merkelized_payload' - in - let proof' :> Merkelized_payload_hashes.t list = proof' in - let proof_with_invalid_target = - (* change the target cell. *) - let rest = List.rev proof |> tl ~__LOC__ in - make_proof @@ List.rev (target' :: rest) - in - let proof_with_invalid_cell = - (* change the latest cell. *) - let cell = proof' |> hd ~__LOC__ in - let rest = proof |> tl ~__LOC__ in - make_proof @@ (cell :: rest) - in - let proof_with_only_cell_and_target = - let cell = proof |> hd ~__LOC__ in - let target = List.rev proof |> hd ~__LOC__ in - make_proof @@ [cell; target] - in - let proof_with_invalid_cell_in_path = - let idx = proof_len / 2 in - let rev_prefix, suffix = List.rev_split_n idx proof in - let new_cell = nth ~__LOC__ proof' idx in - let prefix = new_cell :: tl ~__LOC__ rev_prefix |> List.rev in - make_proof @@ prefix @ suffix - in - let proof_with_missing_cell = - let idx = proof_len / 2 in - let rev_prefix, suffix = List.rev_split_n idx proof in - let prefix = tl ~__LOC__ rev_prefix |> List.rev in - make_proof @@ prefix @ suffix - in - let proof_with_extra_step = - let idx = proof_len / 2 in - let rev_prefix, suffix = List.rev_split_n idx proof in - let new_cell = nth ~__LOC__ proof' idx in - let prefix = - match rev_prefix with - | cell :: rest -> List.rev (new_cell :: cell :: rest) - | _ -> assert false - in - make_proof @@ prefix @ suffix - in - let assert_fails ~__LOC__ proof = - verify_merkelized_payload_proof_fails ~__LOC__ "invalid proof" proof - in - let* () = assert_fails ~__LOC__ proof_with_missing_cell in - let* () = assert_fails ~__LOC__ proof_with_invalid_cell_in_path in - let* () = assert_fails ~__LOC__ proof_with_invalid_target in - let* () = assert_fails ~__LOC__ proof_with_invalid_cell in - let* () = assert_fails ~__LOC__ proof_with_only_cell_and_target in - let* () = assert_fails ~__LOC__ proof_with_extra_step in - return_unit - -(** A node produces an inbox inclusion proof and the protocol verify it. *) -let test_inclusion_proof_production (payloads_for_levels, level) = - let open Lwt_result_wrap_syntax in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - payloads_for_levels - in - let node_inbox_snapshot = Inbox.old_levels_messages node_inbox.inbox in - let* proof, node_old_level_messages = - Node_inbox.produce_inclusion_proof node_inbox node_inbox_snapshot level - in - let proto_inbox_snapshot = Inbox.take_snapshot proto_inbox in - let*?@ verified_old_levels_messages = - Inbox.Internal_for_tests.verify_inclusion_proof proof proto_inbox_snapshot - in - assert_equal_history_proof - ~__LOC__ - verified_old_levels_messages - node_old_level_messages - -(** A node produces an inclusion proof and the protocol fails to verify it - against the snapshot of the next (empty) level. *) -let test_inclusion_proof_verification (payloads_for_levels, level) = - let open Lwt_result_wrap_syntax in - let inbox_creation_level = Raw_level.root in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox ~inbox_creation_level payloads_for_levels - in - let node_inbox_snapshot = Inbox.old_levels_messages node_inbox.inbox in - let* proof, _node_old_level_messages = - Node_inbox.produce_inclusion_proof node_inbox node_inbox_snapshot level - in - let*? proto_inbox = - Protocol_inbox.add_new_level ~inbox_creation_level proto_inbox [] - in - (* This snapshot is not the same one as node_inbox_snapshot because we - added an empty level. *) - let proto_inbox_snapshot = Inbox.take_snapshot proto_inbox in - verify_inclusion_proof_fails - ~__LOC__ - "invalid inclusion proof" - proof - proto_inbox_snapshot - -(** The protocol fails to verify an empty inclusion proof. *) -let test_empty_inclusion_proof_fails payloads = - let open Lwt_result_syntax in - let*? proto_inbox = - Protocol_inbox.construct_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let proto_inbox_snapshot = Inbox.take_snapshot proto_inbox in - verify_inclusion_proof_fails - ~__LOC__ - "inclusion proof is empty" - [] - proto_inbox_snapshot - -(** A node produces an inbox payloads proof and the protocol verify it. *) -let test_payloads_proof_production - ((payloads : payloads_per_level), message_counter) = - let open Lwt_result_wrap_syntax in - let payloads_for_levels = [payloads] in - let exp_message = - first_after payloads_for_levels payloads.level message_counter |> function - | Some {payload; _} -> Some payload - | None -> None - in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - payloads_for_levels - in - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - (* Produce a payloads proof using the {!Node_inbox}. *) - let* ({payload = proof_input; _} as proof) = - Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - (* Verify the produced proof using the {!Protocol_inbox}. *) - let proto_head_cell_hash = latest_level_proof_hash proto_inbox in - let*?@ verified_input = - Inbox.Internal_for_tests.verify_payloads_proof - proof - proto_head_cell_hash - message_counter - in - let* () = assert_equal_payload_option ~__LOC__ proof_input verified_input in - assert_equal_payload_option ~__LOC__ exp_message verified_input - -(** A node produces a payloads proof and the protocol fails to verify it - against the snapshot of the next (empty) level. *) -let test_payloads_proof_invalid_inbox_snapshot (payloads, message_counter) = - let open Lwt_result_syntax in - let inbox_creation_level = Raw_level.root in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox ~inbox_creation_level [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - let*? proto_inbox = - Protocol_inbox.add_new_level ~inbox_creation_level proto_inbox [] - in - (* As we added one level in the [proto_inbox], it is one level further than - the [node_inbox]. The proof will not match the history. *) - let head_cell_hash = latest_level_proof_hash proto_inbox in - verify_payloads_proof_fails - ~__LOC__ - "message_proof does not match history" - proof - head_cell_hash - message_counter - -(** Fail to verify a payloads proof with an input when none is expected. *) -let test_payloads_proof_no_payload_expected (payloads : payloads_per_level) = - let open Lwt_result_syntax in - let message_counter = Z.of_int (List.length payloads.inputs) in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - let invalid_proof = - let payload = Some (make_internal_inbox_message Start_of_level) in - Inbox.Internal_for_tests.{proof with payload} - in - let head_cell_hash = latest_level_proof_hash proto_inbox in - verify_payloads_proof_fails - ~__LOC__ - "Payload provided but none expected" - invalid_proof - head_cell_hash - message_counter - -(** Fail to verify a payloads proof with no input when one is expected. *) -let test_payloads_proof_payload_expected payloads = - let open Lwt_result_syntax in - let message_counter = Z.zero in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Sc_rollup_helpers.Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - let invalid_proof = Inbox.Internal_for_tests.{proof with payload = None} in - let head_cell_hash = latest_level_proof_hash proto_inbox in - verify_payloads_proof_fails - ~__LOC__ - "Expected a payload but none provided in the proof" - invalid_proof - head_cell_hash - message_counter - -(** Fail to verify a payloads proof about another index. *) -let test_payloads_proof_incorrect_proof payloads = - let open Lwt_result_syntax in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Node_inbox.produce_payloads_proof node_inbox node_head_cell_hash Z.zero - in - let proof = Inbox.Internal_for_tests.{proof with payload = None} in - let head_cell_hash = latest_level_proof_hash proto_inbox in - let invalid_message_counter = Z.of_int (List.length payloads.inputs) in - verify_payloads_proof_fails - ~__LOC__ - "Provided proof is about a unexpected payload" - proof - head_cell_hash - invalid_message_counter - -(** Fail to verify a payloads proof about another payload. *) -let test_payloads_proof_incorrect_payload payloads = - let open Lwt_result_syntax in - let message_counter = Z.zero in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - let invalid_proof = - let payload = Some (make_internal_inbox_message End_of_level) in - Inbox.Internal_for_tests.{proof with payload} - in - let head_cell_hash = latest_level_proof_hash proto_inbox in - verify_payloads_proof_fails - ~__LOC__ - "the payload provided does not match the payload's hash found in the \ - message proof" - invalid_proof - head_cell_hash - message_counter - -(** Fail to verify a valid payloads proof for an invalid message counter. *) -let test_payloads_proof_incorrect_index payloads = - let open Lwt_result_syntax in - let message_counter = Z.zero in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - let head_cell_hash = latest_level_proof_hash proto_inbox in - let invalid_message_counter = Z.succ message_counter in - verify_payloads_proof_fails - ~__LOC__ - "found index in message_proof is incorrect" - proof - head_cell_hash - invalid_message_counter - -(** Fail to verify a payloads proof with an out of bound index. *) -let test_payloads_proof_out_of_bound_index payloads = - let open Lwt_result_syntax in - let message_counter = Z.zero in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - [payloads] - in - let* proof = - let node_head_cell_hash = latest_level_proof_hash node_inbox.inbox in - Node_inbox.produce_payloads_proof - node_inbox - node_head_cell_hash - message_counter - in - let head_cell_hash = latest_level_proof_hash proto_inbox in - let invalid_message_counter = - Z.of_int @@ succ (List.length payloads.inputs) - in - verify_payloads_proof_fails - ~__LOC__ - "Provided message counter is out of the valid range [0 -- (max_index + 1)]" - proof - head_cell_hash - invalid_message_counter - -(** Produce an inbox proof and verify it. *) -let test_inbox_proof_production (payloads_for_levels, level, message_counter) = - let open Lwt_result_wrap_syntax in - let exp_message = first_after payloads_for_levels level message_counter in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - payloads_for_levels - in - let node_inbox_snapshot = Inbox.take_snapshot node_inbox.inbox in - let* proof, input_of_produced_proof = - Node_inbox.produce_proof - node_inbox - node_inbox_snapshot - (level, message_counter) - in - let proto_inbox_snapshot = Inbox.take_snapshot proto_inbox in - let* () = - assert_equal_history_proof ~__LOC__ node_inbox_snapshot proto_inbox_snapshot - in - let*?@ input_in_proof = - Inbox.verify_proof (level, message_counter) proto_inbox_snapshot proof - in - let* () = - assert_inbox_message ~__LOC__ input_of_produced_proof input_in_proof - in - assert_inbox_message ~__LOC__ exp_message input_in_proof - -(** This test first produces two valid inbox proofs [proof1] and - [proof2] for two different levels [l1; l2], and message counters - [i1; i2]. Then combine the two proofs to create two invalid ones - [{proof1.inclusion_proof; proof2.payloads_prof}] and - [{proof2.inclusion_proof; proof1.payloads_prof}]. Both fail with - all combinations of levels [l1, l2] and messages counter [i1, - i2]. *) -let test_invalid_inbox_proof_fails - (payloads_for_levels, level, message_counter, level', message_counter') = - QCheck2.assume - ((not (Raw_level.equal level level')) - && not (Z.equal message_counter message_counter')) ; - let open Lwt_result_wrap_syntax in - let*? node_inbox, proto_inbox = - construct_node_and_protocol_inbox - ~inbox_creation_level:Raw_level.root - payloads_for_levels - in - let node_inbox_snapshot = Inbox.take_snapshot node_inbox.inbox in - let proto_inbox_snapshot = Inbox.take_snapshot proto_inbox in - assert (node_inbox_snapshot = proto_inbox_snapshot) ; - let* invalid_proof = - let* (inclusion_proof, _message_proof), _input = - Node_inbox.produce_and_expose_proof - node_inbox - node_inbox_snapshot - (level, message_counter) - in - let* (_inclusion_proof', message_proof'), _input = - Node_inbox.produce_and_expose_proof - node_inbox - node_inbox_snapshot - (level', message_counter') - in - return @@ Inbox.Internal_for_tests.make_proof inclusion_proof message_proof' - in - let assert_fails ~__LOC__ (level, message_counter) = - assert_inbox_proof_error ~__LOC__ "message_proof does not match history" - @@ Inbox.verify_proof - (level, message_counter) - proto_inbox_snapshot - invalid_proof - in - let* () = assert_fails ~__LOC__ (level, message_counter) in - let* () = assert_fails ~__LOC__ (level', message_counter) in - let* () = assert_fails ~__LOC__ (level, message_counter') in - let* () = assert_fails ~__LOC__ (level', message_counter') in - return_unit - -(** Verify that the inbox history is correctly filled by calling - {!Inbox.add_all_messages}. *) -let test_messages_are_correctly_added_in_history - {predecessor_timestamp; predecessor; messages; _} = - let open Lwt_result_wrap_syntax in - let inbox = dumb_init Raw_level.root in - let messages = List.map (fun message -> Message.External message) messages in - let*?@ payloads_history, _history, _inbox, witness, messages = - Inbox.add_all_messages - ~first_block:false - ~predecessor_timestamp - ~predecessor - (Inbox.History.empty ~capacity:0L) - inbox - messages - in - List.iteri_es - (fun i message -> - let index = Z.of_int i in - let*?@ expected_payload = Message.serialize message in - let expected_hash = Message.hash_serialized_message expected_payload in - let found_merkelized_opt = - Sc_rollup.Inbox_merkelized_payload_hashes.Internal_for_tests - .find_predecessor_payload - payloads_history - ~index - witness - in - let* found_hash = - match found_merkelized_opt with - | Some x -> - return - (Sc_rollup.Inbox_merkelized_payload_hashes.get_payload_hash x) - | None -> - failwith - "The payload was not found in the payloads_history, this is \ - unexpected" - in - Assert.equal - ~loc:__LOC__ - Message.Hash.equal - "The message was not correctly added to the payloads history" - Message.Hash.pp - expected_hash - found_hash) - messages - -let merkelized_payload_hashes_tests = - [ - Tztest.tztest_qcheck2 - ~count:1000 - ~name: - "Add payloads to merkelized payload hashes then retrieve them from \ - history." - (gen_payloads ()) - test_merkelized_payload_hashes_history; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"Produce a merkelized payload hashes proof and verify its validity." - (gen_payloads_and_index ()) - test_merkelized_payload_hashes_proof; - Tztest.tztest - "Empty merkelized payload hashes proof fails." - `Quick - test_empty_merkelized_payload_hashes_proof_fails; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"Invalid merkelized payload hashes proof fails." - (gen_payloads_and_index - ~min_size:20 - ~max_size:100 - ~max_index_offset:10 - ()) - test_invalid_merkelized_payload_hashes_proof_fails; - ] - -let inbox_tests = - [ - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"produce inclusion proof and verifies it." - (gen_payloads_for_levels_and_level ()) - test_inclusion_proof_production; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"negative test of inclusion proof." - (gen_payloads_for_levels_and_level ()) - test_inclusion_proof_verification; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"verify empty inclusion proof fails." - (gen_payloads_and_level ()) - test_empty_inclusion_proof_fails; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"produce payloads proof and verifies it." - (gen_payloads_and_level_and_index ()) - test_payloads_proof_production; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof not using the correct current level proof." - (gen_payloads_and_level_and_index ()) - test_payloads_proof_invalid_inbox_snapshot; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof without the payload." - (gen_payloads_and_level ()) - test_payloads_proof_no_payload_expected; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof with payload when none is expected." - (gen_payloads_and_level ()) - test_payloads_proof_payload_expected; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof with a proof for another payload." - (gen_payloads_and_level ()) - test_payloads_proof_incorrect_proof; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof with another payload." - (gen_payloads_and_level ()) - test_payloads_proof_incorrect_payload; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof with a payload with an incorrect index." - (gen_payloads_and_level ()) - test_payloads_proof_incorrect_index; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"test to verify a proof with an out of bound index." - (gen_payloads_and_level ()) - test_payloads_proof_out_of_bound_index; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"produce inbox proof and verifies it." - (gen_payloads_for_levels_and_level_and_index ()) - test_inbox_proof_production; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"negative test of inbox proof." - (gen_payloads_for_levels_and_two_levels_and_two_indexes ()) - test_invalid_inbox_proof_fails; - Tztest.tztest_qcheck2 - ~count:1000 - ~name:"messages are correctly added in payloads history" - (gen_payloads_for_level ()) - test_messages_are_correctly_added_in_history; - ] - -let tests = - merkelized_payload_hashes_tests @ inbox_tests - @ Test_sc_rollup_inbox_legacy.tests - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup inbox", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_inbox_legacy.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_inbox_legacy.ml deleted file mode 100644 index 33631e2d249caa79dbe636f546439aa6eb29e384..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_inbox_legacy.ml +++ /dev/null @@ -1,543 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (smart contract rollup inbox) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe - Subject: These unit tests check the off-line inbox implementation for - smart contract rollups -*) - -(* This test file is going to soon disappear. Each tests here are going to be - rewritten in [test_sc_rollup_inbox] in multiples MR. *) -open Protocol -open Sc_rollup_inbox_repr - -exception Sc_rollup_inbox_test_error of string - -let err x = Exn (Sc_rollup_inbox_test_error x) - -let rollup = Sc_rollup_repr.Address.hash_string [""] - -let first_level = Raw_level_repr.(succ root) - -let inbox_message_testable = - Alcotest.testable - Sc_rollup_PVM_sig.pp_inbox_message - Sc_rollup_PVM_sig.inbox_message_equal - -module Payloads_histories = - Map.Make (Sc_rollup_inbox_merkelized_payload_hashes_repr.Hash) - -let get_level_tree_history payloads_histories witness_hash = - Payloads_histories.find witness_hash payloads_histories - |> WithExceptions.Option.get ~loc:__LOC__ - |> Lwt.return - -let make_payload message = - WithExceptions.Result.get_ok ~loc:__LOC__ - @@ Sc_rollup_inbox_message_repr.(serialize @@ External message) - -let make_message message = Sc_rollup_inbox_message_repr.(External message) - -let payloads_from_messages = - List.map (fun Sc_rollup_helpers.{input_repr = input; _} -> - match input with - | Inbox_message {payload; _} -> payload - | Reveal _ -> assert false) - -let populate_inboxes level history inbox inboxes list_of_messages = - let open Result_wrap_syntax in - let rec aux level history payloads_histories inbox inboxes witness = function - | [] -> return (payloads_histories, witness, history, inbox, inboxes) - | messages :: ps -> - let*@ payloads_history, history, inbox, witness, _messages = - add_all_messages - ~protocol_migration_message:None - ~predecessor_timestamp:Time.Protocol.epoch - ~predecessor:Block_hash.zero - history - inbox - messages - in - let witness_hash = - Sc_rollup_inbox_merkelized_payload_hashes_repr.hash witness - in - let payloads_histories = - Payloads_histories.add - witness_hash - payloads_history - payloads_histories - in - let level = Raw_level_repr.succ level in - aux - level - history - payloads_histories - inbox - (inbox :: inboxes) - (Some witness) - ps - in - let payloads_histories = Payloads_histories.empty in - aux level history payloads_histories inbox inboxes None list_of_messages - -let inbox = Sc_rollup_helpers.dumb_init_repr - -let setup_inbox_with_messages list_of_payloads f = - let open Lwt_result_syntax in - let inbox = inbox first_level in - let history = History.empty ~capacity:10000L in - let*? payloads_histories, witness, history, inbox, inboxes = - populate_inboxes first_level history inbox [] list_of_payloads - in - match witness with - | None -> tzfail (err "setup_inbox_with_messages called with no messages") - | Some tree -> f payloads_histories tree history inbox inboxes - -(* An external message is prefixed with a tag whose length is one byte, and - whose value is 1. *) -let encode_external_message message = - let prefix = "\001" in - Bytes.of_string (prefix ^ message) - -let check_payload messages external_message = - let open Lwt_result_syntax in - let*! payload_opt = Environment.Context.Tree.find messages ["payload"] in - match payload_opt with - | None -> tzfail (err "No payload in messages") - | Some payload -> - let expected_payload = encode_external_message external_message in - fail_unless - (expected_payload = payload) - (err - (Printf.sprintf - "Expected payload %s, got %s" - (Bytes.to_string expected_payload) - (Bytes.to_string payload))) - -(** This is basically identical to {!setup_inbox_with_messages}, except - that it uses the {!Node} instance instead of the protocol instance. *) -let setup_node_inbox_with_messages list_of_messages f = - let open Lwt_result_wrap_syntax in - let inbox = inbox first_level in - let history = History.empty ~capacity:10000L in - let payloads_histories = Payloads_histories.empty in - let rec aux level history payloads_histories inbox inboxes witness = function - | [] -> return (payloads_histories, witness, history, inbox, inboxes) - | messages :: ps -> - let*?@ payloads_history, history, inbox, witness, _messages = - add_all_messages - ~protocol_migration_message:None - ~predecessor_timestamp:Time.Protocol.epoch - ~predecessor:Block_hash.zero - history - inbox - messages - in - let witness_hash = - Sc_rollup_inbox_merkelized_payload_hashes_repr.hash witness - in - let payloads_histories = - Payloads_histories.add - witness_hash - payloads_history - payloads_histories - in - let level = Raw_level_repr.succ level in - aux - level - history - payloads_histories - inbox - (inbox :: inboxes) - (Some witness) - ps - in - let* payloads_histories, witness, history, inbox, inboxes = - aux first_level history payloads_histories inbox [] None list_of_messages - in - match witness with - | None -> failwith "setup_inbox_with_messages called with no messages" - | Some tree -> f payloads_histories tree history inbox inboxes - -let level_of_int n = Raw_level_repr.of_int32_exn (Int32.of_int n) - -let level_to_int l = Int32.to_int (Raw_level_repr.to_int32 l) - -let payload_string msg = - Sc_rollup_inbox_message_repr.unsafe_of_string - (Bytes.to_string (encode_external_message msg)) - -let inbox_message_of_input input = - match input with Sc_rollup_PVM_sig.Inbox_message x -> Some x | _ -> None - -let next_inbox_message levels_and_messages l n = - let equal = Raw_level_repr.( = ) in - let messages = - WithExceptions.Option.get ~loc:__LOC__ - @@ List.assoc ~equal l levels_and_messages - in - match List.nth messages (Z.to_int n) with - | Some Sc_rollup_helpers.{input_repr = input; _} -> - inbox_message_of_input input - | None -> ( - (* If no input at (l, n), the next input is (l+1, 0). *) - match List.assoc ~equal (Raw_level_repr.succ l) levels_and_messages with - | None -> None - | Some messages -> - let Sc_rollup_helpers.{input_repr = input; _} = - Stdlib.List.hd messages - in - inbox_message_of_input input) - -let fail_with_proof_error_msg errors fail_msg = - let msg = - List.find_map - (function - | Environment.Ecoproto_error - (Sc_rollup_inbox_repr.Inbox_proof_error msg) -> - Some msg - | Environment.Ecoproto_error - (Sc_rollup_inbox_merkelized_payload_hashes_repr - .Merkelized_payload_hashes_proof_error msg) -> - Some msg - | _ -> None) - errors - in - let msg = Option.(msg |> map (fun s -> ": " ^ s) |> value ~default:"") in - Lwt_result_syntax.tzfail (err (fail_msg ^ msg)) - -(** This helper function initializes inboxes and histories with different - capacities and populates them. *) -let init_inboxes_histories_with_different_capacities - (nb_levels, default_capacity, small_capacity, next_index) = - let open Lwt_result_syntax in - let* () = - fail_when - Int64.(of_int nb_levels <= small_capacity) - (err - (Format.sprintf - "Bad inputs: nb_levels = %d should be greater than small_capacity \ - = %Ld" - nb_levels - small_capacity)) - in - let* () = - fail_when - Int64.(of_int nb_levels >= default_capacity) - (err - (Format.sprintf - "Bad inputs: nb_levels = %d should be smaller than \ - default_capacity = %Ld" - nb_levels - default_capacity)) - in - let*? messages = - List.init ~when_negative_length:[] nb_levels (fun i -> [string_of_int i]) - in - let mk_history ?(next_index = 0L) ~capacity () = - let inbox = inbox first_level in - let history = - Sc_rollup_inbox_repr.History.Internal_for_tests.empty - ~capacity - ~next_index - in - let messages = List.map (List.map make_message) messages in - populate_inboxes first_level history inbox [] messages - in - (* Here, we have `~capacity:0L`. So no history is kept *) - let*? no_history = mk_history ~capacity:0L () in - (* Here, we set a [default_capacity] supposed to be greater than [nb_levels], - and keep the default [next_index]. This history will serve as a witeness *) - let*? big_history = mk_history ~capacity:default_capacity () in - (* Here, we choose a small capacity supposed to be smaller than [nb_levels] to - cover cases where the history is full and older elements should be removed. - We also set a non-default [next_index] value to cover cases where the - incremented index may overflow or is negative. *) - let*? small_history = mk_history ~next_index ~capacity:small_capacity () in - return (no_history, small_history, big_history) - -(** In this test, we mainly check that the number of entries in histories - doesn't exceed their respective capacities. *) -let test_history_length - ((_nb_levels, default_capacity, small_capacity, _next_index) as params) = - let open Lwt_result_syntax in - let module I = Sc_rollup_inbox_repr in - let err expected given ~exact = - err - @@ Format.sprintf - "We expect a history of %Ld capacity (%s), but we got %d elements" - expected - (if exact then "exactly" else "at most") - given - in - let no_capacity = 0L in - let* no_history, small_history, big_history = - init_inboxes_histories_with_different_capacities params - in - let _level_tree_histories0, _level_tree0, history0, _inbox0, _inboxes0 = - no_history - in - let _level_tree_histories1, _level_tree1, history1, _inbox1, _inboxes1 = - small_history - in - let _level_tree_histories2, _level_tree2, history2, _inbox2, _inboxes2 = - big_history - in - let hh0 = I.History.Internal_for_tests.keys history0 in - let hh1 = I.History.Internal_for_tests.keys history1 in - let hh2 = I.History.Internal_for_tests.keys history2 in - (* The first history is supposed to have exactly 0 elements *) - let* () = - let len = List.length hh0 in - fail_unless - Int64.(equal no_capacity (of_int @@ len)) - (err no_capacity len ~exact:true) - in - (* The second history is supposed to have exactly [small_capacity], because - we are supposed to add _nb_level > small_capacity entries. *) - let* () = - let len = List.length hh1 in - fail_unless - Int64.(small_capacity = of_int len) - (err small_capacity len ~exact:false) - in - (* The third history's capacity, named [default_capacity], is supposed to be - greater than _nb_level. So, we don't expect this history to be full. *) - let* () = - let len = List.length hh2 in - fail_unless - Int64.(default_capacity > of_int len) - (err default_capacity len ~exact:true) - in - return_unit - -(** In this test, we check that for two inboxes of the same content, the entries - of the history with the lower capacity, taken in the insertion order, is a - prefix of the entries of the history with the higher capacity. *) -let test_history_prefix params = - let open Lwt_result_syntax in - let module I = Sc_rollup_inbox_repr in - let* no_history, small_history, big_history = - init_inboxes_histories_with_different_capacities params - in - let _level_tree_histories0, _level_tree0, history0, _inbox0, _inboxes0 = - no_history - in - let _level_tree_histories1, _level_tree1, history1, _inbox1, _inboxes1 = - small_history - in - let _level_tree_histories2, _level_tree2, history2, _inbox2, _inboxes2 = - big_history - in - let hh0 = I.History.Internal_for_tests.keys history0 in - let hh1 = I.History.Internal_for_tests.keys history1 in - let hh2 = I.History.Internal_for_tests.keys history2 in - let check_is_suffix sub super = - let rec aux super to_remove = - let* () = - fail_unless - (to_remove >= 0) - (err "A bigger list cannot be a suffix of a smaller one.") - in - if to_remove = 0 then - fail_unless - (List.for_all2 ~when_different_lengths:false I.Hash.equal sub super - = Ok true) - (err "The smaller list is not a prefix the bigger one.") - else - match List.tl super with - | None -> assert false - | Some super -> aux super (to_remove - 1) - in - aux super (List.length super - List.length sub) - in - (* The empty history's hashes list is supposed to be a suffix of a history - with bigger capacity. *) - let* () = check_is_suffix hh0 hh1 in - (* The history's hashes list of the smaller capacity should be a prefix of - the history's hashes list of a bigger capacity. *) - check_is_suffix hh1 hh2 - -(** In this test, we make some checks on production and verification of - inclusion proofs depending on histories' capacity. *) -let test_inclusion_proofs_depending_on_history_capacity - ((_nb_levels, _default_capacity, _small_capacity, _next_index) as params) = - let open Lwt_result_wrap_syntax in - let module I = Sc_rollup_inbox_repr in - let* no_history, small_history, big_history = - init_inboxes_histories_with_different_capacities params - in - let _level_tree_histories0, _level_tree0, history0, inbox0, _inboxes0 = - no_history - in - let _level_tree_histories1, _level_tree1, history1, inbox1, _inboxes1 = - small_history - in - let _level_tree_histories2, _level_tree2, history2, inbox2, _inboxes2 = - big_history - in - let hp0 = I.old_levels_messages inbox0 in - let hp1 = I.old_levels_messages inbox1 in - let (hp2 as hp) = I.old_levels_messages inbox2 in - let pred_level_of_hp = - WithExceptions.Option.get ~loc:__LOC__ - @@ Raw_level_repr.pred - @@ I.Internal_for_tests.get_level_of_history_proof hp - in - let* () = - fail_unless - (I.equal_history_proof hp0 hp1 && I.equal_history_proof hp1 hp2) - (err - "History proof of equal inboxes shouldn't depend on the capacity of \ - history.") - in - let proof s v = - let*!@ v in - match v with - | Ok v -> return v - | Error _ -> tzfail (err (s ^ ": Expecting some inclusion proof.")) - in - let get_history history inbox = History.find inbox history |> Lwt.return in - (* Producing inclusion proofs using history1 and history2 should succeed. - But, we should not be able to produce any proof with history0 as bound - is 0. *) - let*! ip0 = - I.Internal_for_tests.produce_inclusion_proof - (get_history history0) - hp - pred_level_of_hp - in - let* ip1, hp1' = - proof "history1" - @@ I.Internal_for_tests.produce_inclusion_proof - (get_history history1) - hp - pred_level_of_hp - in - let* ip2, hp2' = - proof "history2" - @@ I.Internal_for_tests.produce_inclusion_proof - (get_history history2) - hp - pred_level_of_hp - in - let* () = - fail_unless - (Result.is_error ip0) - (err - "Should not be able to get inbox inclusion proofs without a history \ - (i.e., a history with no capacity). ") - in - let*?@ hp1'' = I.Internal_for_tests.verify_inclusion_proof ip1 hp1 in - let*?@ hp2'' = I.Internal_for_tests.verify_inclusion_proof ip2 hp2 in - fail_unless - (hp1' = hp1'' && hp2' = hp2'' && hp1' = hp2') - (err "Inclusion proofs are expected to be valid.") - -(** This test checks that inboxes of the same levels that are supposed to contain - the same messages are equal. It also check the level trees obtained from - the last calls to add_messages are equal. *) -let test_for_successive_add_messages_with_different_histories_capacities - ((_nb_levels, _default_capacity, _small_capacity, _next_index) as params) = - let open Lwt_result_syntax in - let module I = Sc_rollup_inbox_repr in - let* no_history, small_history, big_history = - init_inboxes_histories_with_different_capacities params - in - let _level_tree_histories0, level_tree0, _history0, _inbox0, inboxes0 = - no_history - in - let _level_tree_histories1, level_tree1, _history1, _inbox1, inboxes1 = - small_history - in - let _level_tree_histories2, level_tree2, _history2, _inbox2, inboxes2 = - big_history - in - (* The latest inbox's value shouldn't depend on the value of [bound]. *) - let eq_inboxes_list = List.for_all2 ~when_different_lengths:false I.equal in - let* () = - fail_unless - (eq_inboxes_list inboxes0 inboxes1 = Ok true - && eq_inboxes_list inboxes1 inboxes2 = Ok true) - (err "Inboxes at the same level with the same content should be equal.") - in - fail_unless - (Option.equal - Sc_rollup_inbox_merkelized_payload_hashes_repr.equal - level_tree0 - level_tree1 - && Option.equal - Sc_rollup_inbox_merkelized_payload_hashes_repr.equal - level_tree1 - level_tree2) - (err "Trees of (supposedly) equal inboxes should be equal.") - -let tests = - let gen_history_params = - QCheck2.Gen.( - (* We fix the number of levels/ inboxes. *) - let* nb_levels = pure 30 in - (* The default capacity is intentionally very big compared to [nb_levels]. *) - let* default_capacity = - frequencyl [(1, Int64.of_int (1000 * nb_levels)); (1, Int64.max_int)] - in - (* The small capacity is intended to be smaller than nb_levels - (but greater than zero). *) - let* small_capacity = 3 -- (nb_levels / 2) in - let* next_index_delta = -5000 -- 5000 in - let big_next_index = Int64.(add max_int (of_int next_index_delta)) in - (* for the [next_index] counter of the history, we test both default values - (i.e., 0L) and values close to [max_int]. *) - let* next_index = frequencyl [(1, 0L); (1, big_next_index)] in - return - (nb_levels, default_capacity, Int64.of_int small_capacity, next_index)) - in - [ - Tztest.tztest_qcheck2 - ~count:10 - ~name:"Checking inboxes history length" - gen_history_params - test_history_length; - Tztest.tztest_qcheck2 - ~count:10 - ~name:"Checking inboxes history content and order" - gen_history_params - test_history_prefix; - Tztest.tztest_qcheck2 - ~count:10 - ~name:"Checking inclusion proofs validity depending on history capacity" - gen_history_params - test_inclusion_proofs_depending_on_history_capacity; - Tztest.tztest_qcheck2 - ~count:10 - ~name: - "Checking results of add_messages when histories have different \ - capacities" - gen_history_params - test_for_successive_add_messages_with_different_histories_capacities; - ] diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_management_protocol.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_management_protocol.ml deleted file mode 100644 index 7f3f8e82f6ee1ea5a35ab21c5286349dabcea6c2..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_management_protocol.ml +++ /dev/null @@ -1,400 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Rollup Management Protocol) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_sc_rollup_management_protocol.ml - Subject: Sanity checks for the Rollup Management Protocol module. -*) - -open Protocol -open Alpha_context - -let check_encode_decode_inbox_message message = - let open Lwt_result_wrap_syntax in - let open Sc_rollup_management_protocol in - let*?@ bytes = Sc_rollup.Inbox_message.serialize message in - let*?@ message' = Internal_for_tests.deserialize_inbox_message bytes in - let*?@ bytes' = Sc_rollup.Inbox_message.serialize message' in - Assert.equal_string - ~loc:__LOC__ - (Sc_rollup.Inbox_message.unsafe_to_string bytes) - (Sc_rollup.Inbox_message.unsafe_to_string bytes') - -let check_encode_decode_outbox_message_untyped ctxt transactions = - let open Lwt_result_wrap_syntax in - let open Sc_rollup_management_protocol in - let*?@ bytes = - Internal_for_tests.serialize_outbox_transactions_untyped transactions - in - let*?@ message_repr = Sc_rollup.Outbox.Message.deserialize bytes in - let*@ message', _ctxt = - outbox_message_of_outbox_message_repr ctxt message_repr - in - let*?@ bytes' = - match message' with - | Whitelist_update _ -> assert false (* its serialized transaction *) - | Atomic_transaction_batch {transactions} -> - Internal_for_tests.serialize_outbox_transactions_untyped transactions - in - Assert.equal_string - ~loc:__LOC__ - (Sc_rollup.Outbox.Message.unsafe_to_string bytes) - (Sc_rollup.Outbox.Message.unsafe_to_string bytes') - -let check_encode_decode_outbox_message_typed ctxt transactions = - let open Lwt_result_wrap_syntax in - let open Sc_rollup_management_protocol in - let*?@ bytes = - Internal_for_tests.serialize_outbox_transactions_typed transactions - in - let*?@ message_repr = Sc_rollup.Outbox.Message.deserialize bytes in - let*@ message', _ctxt = - outbox_message_of_outbox_message_repr ctxt message_repr - in - let*?@ bytes' = - match message' with - | Whitelist_update _ -> assert false (* its serialized transaction *) - | Atomic_transaction_batch {transactions} -> - Internal_for_tests.serialize_outbox_transactions_typed transactions - in - Assert.equal_string - ~loc:__LOC__ - (Sc_rollup.Outbox.Message.unsafe_to_string bytes) - (Sc_rollup.Outbox.Message.unsafe_to_string bytes') - -let string_ticket ticketer contents amount = - let open WithExceptions in - let amount = - Option.get ~loc:__LOC__ @@ Ticket_amount.of_n @@ Script_int.abs - @@ Script_int.of_int amount - in - let ticketer = Result.get_ok ~loc:__LOC__ (Contract.of_b58check ticketer) in - let contents = - Result.get_ok ~loc:__LOC__ (Script_string.of_string contents) - in - Script_typed_ir.{ticketer; contents; amount} - -let init_ctxt () = - let open Lwt_result_syntax in - let* block, _baker, _contract, _src2 = Contract_helpers.init () in - let+ incr = Incremental.begin_construction block in - Incremental.alpha_ctxt incr - -let assert_encoding_failure ~loc res = - Assert.proto_error_with_info - ~loc - res - "Failed to encode a rollup management protocol inbox message value" - -let test_encode_decode_internal_inbox_message_transfer () = - let open Lwt_result_wrap_syntax in - let open WithExceptions in - let* ctxt = init_ctxt () in - let destination = Sc_rollup.Address.zero in - let sender = - Contract_hash.of_b58check_exn "KT1BuEZtb68c1Q4yjtckcNjGELqWt56Xyesc" - in - let source = - Result.get_ok - ~loc:__LOC__ - (Signature.Public_key_hash.of_b58check - "tz1RjtZUVeLhADFHDL8UwDZA6vjWWhojpu5w") - in - let*?@ (Script_typed_ir.Ty_ex_c pair_nat_ticket_string_ty) = - let open Result_syntax in - let open Script_typed_ir in - let* ticket_t = ticket_t (-1) string_t in - pair_t (-1) nat_t ticket_t - in - let payload = - ( Script_int.(abs @@ of_int 42), - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ) - in - let*@ transfer, ctxt = - Sc_rollup_management_protocol.make_internal_transfer - ctxt - pair_nat_ticket_string_ty - ~payload - ~sender - ~source - ~destination - in - let* () = check_encode_decode_inbox_message transfer in - (* Check that the size of messages that can be encoded is bounded. *) - let msg = String.make 4050 'c' in - let*?@ payload = Script_string.of_string msg in - let*@ transfer, _ctxt = - let open Script_typed_ir in - Sc_rollup_management_protocol.make_internal_transfer - ctxt - String_t - ~payload - ~sender - ~source - ~destination - in - let*! res = check_encode_decode_inbox_message transfer in - assert_encoding_failure ~loc:__LOC__ res - -let test_encode_decode_internal_inbox_message_sol () = - let sol = Sc_rollup.Inbox_message.(Internal Start_of_level) in - check_encode_decode_inbox_message sol - -let test_encode_decode_internal_inbox_message_eol () = - let eol = Sc_rollup.Inbox_message.(Internal End_of_level) in - check_encode_decode_inbox_message eol - -let test_encode_decode_external_inbox_message () = - let open Lwt_result_wrap_syntax in - let assert_prefix message = - let inbox_message = Sc_rollup.Inbox_message.External message in - let*?@ real_encoding = Sc_rollup.Inbox_message.serialize inbox_message in - let real_encoding = - Sc_rollup.Inbox_message.unsafe_to_string real_encoding - in - (* The prefix consists of a tag (0 for internal, 1 for external). *) - let real_prefix = String.get real_encoding 0 in - let expected_prefix = '\001' in - let expected_encoding = Printf.sprintf "%c%s" expected_prefix message in - (* Check that the encode/decode matches. *) - let* () = check_encode_decode_inbox_message inbox_message in - (* Check that the prefix match. *) - let* () = Assert.equal_char ~loc:__LOC__ real_prefix expected_prefix in - (* Check that the encoded string consists of the prefix followed by the - original message. *) - Assert.equal_string ~loc:__LOC__ real_encoding expected_encoding - in - let* () = assert_prefix "" in - let* () = assert_prefix "A" in - let* () = assert_prefix "0123456789" in - let* () = assert_prefix (String.init 256 (Fun.const 'A')) in - let assert_encoding_success message = - let inbox_message = Sc_rollup.Inbox_message.External message in - let*! res = check_encode_decode_inbox_message inbox_message in - assert (Result.is_ok res) ; - return_unit - in - let assert_encoding_failure message = - let inbox_message = Sc_rollup.Inbox_message.External message in - let*! res = check_encode_decode_inbox_message inbox_message in - assert_encoding_failure ~loc:__LOC__ res - in - let max_msg_size = Constants_repr.sc_rollup_message_size_limit in - let message = String.init (max_msg_size - 1) (Fun.const 'A') in - let* () = assert_encoding_success message in - let message = String.init max_msg_size (Fun.const 'b') in - let* () = assert_encoding_failure message in - assert_encoding_failure message - -let init_env () = - let open Lwt_result_syntax in - let* block, baker, contract, _src2 = Contract_helpers.init () in - return (block, baker, contract) - -let ticket_receiver = - {| - { parameter (pair nat (ticket string)); - storage (list (ticket string)); - code { UNPAIR; # [(nat, ticket) ; list] - CDR; # [ticket ; list] - CONS; # [ticket :: list] - NIL operation ; # [[] ; ticket :: list] - PAIR; # [([], ticket :: list)] - } - } - |} - -let add_or_clear = - {| - { parameter (or (pair %add nat string) (unit %clear)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { UNPAIR ; DIG 2 ; SWAP ; DIG 2 ; TICKET ; ASSERT_SOME ; CONS ; NIL operation ; PAIR } - { DROP 2 ; NIL (ticket string) ; NIL operation ; PAIR } } } - |} - -let test_encode_decode_outbox_message () = - let open Lwt_result_wrap_syntax in - let* block, baker, source_contract = init_env () in - let* ticket_receiver, _, block = - Contract_helpers.originate_contract_from_string - ~script:ticket_receiver - ~storage:"{}" - ~source_contract - ~baker - block - in - let* add_or_clear, _, block = - Contract_helpers.originate_contract_from_string - ~script:add_or_clear - ~storage:"{}" - ~source_contract - ~baker - block - in - let* incr = Incremental.begin_construction block in - let ctxt = Incremental.alpha_ctxt incr in - let ticket_receiver_destination = - match ticket_receiver with - | Contract.Originated ch -> ch - | Implicit _ -> assert false - in - let add_or_clear_destination = - match add_or_clear with - | Contract.Originated ch -> ch - | Implicit _ -> assert false - in - (* Transaction to ticket receiver. *) - let*?@ (Script_typed_ir.Ty_ex_c pair_nat_ticket_string_ty) = - let open Result_syntax in - let open Script_typed_ir in - let* ticket_t = ticket_t (-1) string_t in - pair_t (-1) nat_t ticket_t - in - let parameters = - ( Script_int.(abs @@ of_int 42), - string_ticket "KT1ThEdxfUcWUwqsdergy3QnbCWGHSUHeHJq" "red" 1 ) - in - let*@ transaction1, ctxt = - Sc_rollup_management_protocol.Internal_for_tests.make_transaction - ctxt - pair_nat_ticket_string_ty - ~parameters - ~destination:ticket_receiver_destination - ~entrypoint:Entrypoint.default - in - (* Transaction to the `add` endpoint of add-or-clear contract. *) - let*@ transaction2, ctxt = - let*? (Script_typed_ir.Ty_ex_c pair_nat_ticket_string_ty) = - Script_typed_ir.(pair_t (-1) nat_t string_t) - in - let*? content = Script_string.of_string "Hello" in - let parameters = (Script_int.(abs @@ of_int 11), content) in - Sc_rollup_management_protocol.Internal_for_tests.make_transaction - ctxt - pair_nat_ticket_string_ty - ~parameters - ~destination:add_or_clear_destination - ~entrypoint:(Entrypoint.of_string_strict_exn "add") - in - (* Transaction to the `clear` endpoint of add-or-clear contract. *) - let*@ transaction3, ctxt = - Sc_rollup_management_protocol.Internal_for_tests.make_transaction - ctxt - Script_typed_ir.unit_t - ~parameters:() - ~destination:add_or_clear_destination - ~entrypoint:(Entrypoint.of_string_strict_exn "clear") - in - let outbox_message = [transaction1; transaction2; transaction3] in - let* () = check_encode_decode_outbox_message_untyped ctxt outbox_message in - check_encode_decode_outbox_message_typed ctxt outbox_message - -let test_whitelist_encoding_size () = - let open Lwt_result_syntax in - let gen_pkh () = - let account = Account.new_account () in - account.pkh - in - (* 6 is for the rest of encoding: size, tag, ... *) - let max_msg_size = Constants_repr.sc_rollup_message_size_limit - 6 in - let encoding_size = - Data_encoding.Binary.length Signature.Public_key_hash.encoding (gen_pkh ()) - in - let max_allowed_whitelist_size = max_msg_size / encoding_size in - let check_encoding ~valid encoding msg = - let res = Data_encoding.Binary.to_bytes encoding msg in - match res with - | Error _ when valid -> fail @@ [error_of_fmt "valid encoding is invalid"] - | Ok _ when not valid -> fail @@ [error_of_fmt "invalid encoding is valid"] - | _ -> return_unit - in - let*? max_whitelist = - List.init - ~when_negative_length:[error_of_fmt "invalid size"] - max_allowed_whitelist_size - (fun _i -> gen_pkh ()) - in - let* () = - let* () = - check_encoding ~valid:true Sc_rollup.Whitelist.encoding max_whitelist - in - Sc_rollup.Outbox.Message.( - check_encoding - ~valid:true - encoding - (Whitelist_update (Some max_whitelist))) - in - let* () = - let too_big_whitelist = gen_pkh () :: max_whitelist in - let* () = - check_encoding ~valid:false Sc_rollup.Whitelist.encoding too_big_whitelist - in - Sc_rollup.Outbox.Message.( - check_encoding - ~valid:false - encoding - (Whitelist_update (Some too_big_whitelist))) - in - return_unit - -let tests = - [ - Tztest.tztest - "Encode/decode internal inbox message transfer" - `Quick - test_encode_decode_internal_inbox_message_transfer; - Tztest.tztest - "Encode/decode internal inbox message start of level" - `Quick - test_encode_decode_internal_inbox_message_sol; - Tztest.tztest - "Encode/decode internal inbox message end of level" - `Quick - test_encode_decode_internal_inbox_message_eol; - Tztest.tztest - "Encode/decode external inbox message" - `Quick - test_encode_decode_external_inbox_message; - Tztest.tztest - "Encode/decode outbox message" - `Quick - test_encode_decode_outbox_message; - Tztest.tztest - "Whitelist size is borned by max_msg_size" - `Quick - test_whitelist_encoding_size; - ] - -let () = - Alcotest_lwt.run - ~__FILE__ - Protocol.name - [("sc rollup management protocol", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_storage.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_storage.ml deleted file mode 100644 index 46f5328b2671839e0f2e077dbddb90e8e3584a27..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_storage.ml +++ /dev/null @@ -1,2800 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Trili Tech, *) -(* Copyright (c) 2022 Nomadic Labs *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol Sc_rollup_storage - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_sc_rollup_storage.ml - Subject: Tests for the SCORU storage module -*) - -open Protocol -module Commitment_repr = Sc_rollup_commitment_repr - -(** [new_context_n n] creates a context with [n] accounts. *) -let new_context_n nb_stakers = - let open Lwt_result_syntax in - let* b, contracts = Context.init_n nb_stakers () in - let+ inc = Incremental.begin_construction b in - let ctxt = Incremental.alpha_ctxt inc in - (* Necessary to originate rollups. *) - let ctxt = Alpha_context.Origination_nonce.init ctxt Operation_hash.zero in - let ctxt = Alpha_context.Internal_for_tests.to_raw ctxt in - let accounts = - List.map - (function - | Alpha_context.Contract.Implicit key -> key | _ -> assert false) - contracts - in - (ctxt, accounts) - -let new_context () = - let open Lwt_result_syntax in - (* A context needs at least one account to bake. *) - let* ctxt, _accounts = new_context_n 1 in - return ctxt - -let new_context_1 () = - let open Lwt_result_syntax in - let* ctxt, accounts = new_context_n 1 in - match accounts with [account] -> return (ctxt, account) | _ -> assert false - -let new_context_2 () = - let open Lwt_result_syntax in - let* ctxt, accounts = new_context_n 2 in - match accounts with - | [account1; account2] -> return (ctxt, account1, account2) - | _ -> assert false - -let new_sc_rollup ctxt = - let open Lwt_result_wrap_syntax in - let {Michelson_v1_parser.expanded; _}, _ = - Michelson_v1_parser.parse_expression "unit" - in - let parameters_ty = Alpha_context.Script.lazy_expr expanded in - let boot_sector = "" in - let kind = Sc_rollups.Kind.Example_arith in - let*! genesis_commitment = - Sc_rollup_helpers.genesis_commitment_raw - ~boot_sector - ~origination_level:(Raw_context.current_level ctxt).level - kind - in - let* rollup, _size, genesis_hash, ctxt = - Sc_rollup_storage.originate ctxt ~kind ~parameters_ty ~genesis_commitment - in - return (rollup, genesis_hash, ctxt) - -let new_context_with_stakers_and_rollup nb_stakers = - let open Lwt_result_wrap_syntax in - let* ctxt, stakers = new_context_n nb_stakers in - let+@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - (ctxt, rollup, genesis_hash, stakers) - -let new_context_with_rollup () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_context () in - let+@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - (ctxt, rollup, genesis_hash) - -let equal_tez ~loc = - Assert.equal ~loc Tez_repr.( = ) "Tez aren't equal" Tez_repr.pp - -let assert_not_exist ~loc ~pp comp_lwt = - let open Lwt_result_syntax in - let* _ctxt, res_opt = comp_lwt in - Assert.is_none ~loc ~pp res_opt - -let assert_balance_changed op ctxt ctxt' account amount = - let open Lwt_result_wrap_syntax in - let*@ _, balance = Token.Internal_for_tests.balance ctxt account in - let*@ _, balance' = Token.Internal_for_tests.balance ctxt' account in - let*?@ balance_op_amount = op balance amount in - equal_tez balance' ~loc:__LOC__ balance_op_amount - -let assert_balance_increased ctxt ctxt' account amount = - assert_balance_changed Tez_repr.( +? ) ctxt ctxt' account amount - -let assert_balance_decreased ctxt ctxt' account amount = - assert_balance_changed Tez_repr.( -? ) ctxt ctxt' account amount - -let perform_staking_action_and_check ctxt rollup staker do_and_check = - let staker_contract = Contract_repr.Implicit staker in - let stake = Constants_storage.sc_rollup_stake_amount ctxt in - do_and_check ctxt rollup staker_contract stake - -let number_of_ticks_exn n = - match Sc_rollup_repr.Number_of_ticks.of_value n with - | Some x -> x - | None -> Stdlib.failwith "Bad Number_of_ticks" - -module Zero = struct - let staker = Sc_rollup_repr.Staker.zero - - let commitment = - Commitment_repr. - { - compressed_state = Sc_rollup_repr.State_hash.zero; - inbox_level = Raw_level_repr.root; - predecessor = Hash.zero; - number_of_ticks = number_of_ticks_exn 1L; - } - - let commitment_hash = Commitment_repr.Hash.zero - - let rollup = Sc_rollup_repr.Address.zero -end - -let deposit_stake_and_check_balances ctxt rollup staker = - let open Lwt_result_wrap_syntax in - perform_staking_action_and_check - ctxt - rollup - staker - (fun ctxt rollup staker_contract stake -> - let*@ ctxt', _, _ = - Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - rollup - staker - in - let* () = - assert_balance_decreased ctxt ctxt' (`Contract staker_contract) stake - in - let bond_id = Bond_id_repr.Sc_rollup_bond_id rollup in - let bonds_account = `Frozen_bonds (staker_contract, bond_id) in - let+ () = assert_balance_increased ctxt ctxt' bonds_account stake in - ctxt') - -(** Originate a rollup with [nb_stakers] stakers and make a deposit to the - initial LCC. *) -let originate_rollup_and_deposit_with_n_stakers nb_stakers = - let open Lwt_result_syntax in - let* ctxt, rollup, genesis_hash, stakers = - new_context_with_stakers_and_rollup nb_stakers - in - let deposit ctxt staker = - deposit_stake_and_check_balances ctxt rollup staker - in - let+ ctxt = List.fold_left_es deposit ctxt stakers in - (ctxt, rollup, genesis_hash, stakers) - -(** Originate a rollup with one staker and make a deposit to the initial LCC. *) -let originate_rollup_and_deposit_with_one_staker () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker = new_context_1 () in - let*@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - let+ ctxt = deposit_stake_and_check_balances ctxt rollup staker in - (ctxt, rollup, genesis_hash, staker) - -(** Originate a rollup with two stakers and make a deposit to the initial LCC. -*) -let originate_rollup_and_deposit_with_two_stakers () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker1, staker2 = new_context_2 () in - let*@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - let* ctxt = deposit_stake_and_check_balances ctxt rollup staker1 in - let+ ctxt = deposit_stake_and_check_balances ctxt rollup staker2 in - (ctxt, rollup, genesis_hash, staker1, staker2) - -(** Originate a rollup with three stakers and make a deposit to the initial LCC. -*) -let originate_rollup_and_deposit_with_three_stakers () = - let open Lwt_result_syntax in - let+ ctxt, rollup, genesis_hash, stakers = - originate_rollup_and_deposit_with_n_stakers 3 - in - match stakers with - | [staker1; staker2; staker3] -> - (ctxt, rollup, genesis_hash, staker1, staker2, staker3) - | _ -> assert false - -(** Trivial assertion. - - By convention, context is passed linearly as [ctxt]. This takes a context - argument to allow this. -*) -let assert_true _ctxt = Lwt_result_syntax.return_unit - -(** Assert that the computation fails with the given message. *) -let assert_fails_with ~loc k expected_err = - let open Lwt_result_wrap_syntax in - let*!@ res = k in - Assert.proto_error ~loc res (( = ) expected_err) - -let assert_fails_with_f ~loc k pred = - let open Lwt_result_wrap_syntax in - let*!@ res = k in - Assert.proto_error ~loc res pred - -let assert_fails ~loc k = - let open Lwt_result_wrap_syntax in - let*!@ res = k in - Assert.error ~loc res (fun _ -> true) - -(** Assert operation fails because of missing rollup *) -let assert_fails_with_missing_rollup ~loc op = - let open Lwt_result_syntax in - let* ctxt = new_context () in - assert_fails_with - ~loc - (op ctxt Zero.rollup) - (Sc_rollup_errors.Sc_rollup_does_not_exist Zero.rollup) - -(** Assert commitment hash equality. *) -let assert_commitment_hash_equal ~loc x y = - Assert.equal - ~loc - Commitment_repr.Hash.equal - "Compare commitment hash" - Commitment_repr.Hash.pp - x - y - -let assert_level_equal ~loc = - Assert.equal ~loc Raw_level_repr.equal "Compare raw level" Raw_level_repr.pp - -let commitment_equal - Commitment_repr. - { - compressed_state = c1; - inbox_level = l1; - predecessor = p1; - number_of_ticks = n1; - } - Commitment_repr. - { - compressed_state = c2; - inbox_level = l2; - predecessor = p2; - number_of_ticks = n2; - } = - Sc_rollup_repr.State_hash.equal c1 c2 - && Raw_level_repr.equal l1 l2 - && Commitment_repr.Hash.equal p1 p2 - && Sc_rollup_repr.Number_of_ticks.equal n1 n2 - -let assert_commitment_equal ~loc x y = - Assert.equal ~loc commitment_equal "Compare commitment" Commitment_repr.pp x y - -let assert_commitments_with_levels_equal ~loc cs1 cs2 = - let commitment_with_level_pp ppf (hash, level) = - Format.fprintf - ppf - "(%a, %a)" - Sc_rollup_commitment_repr.Hash.pp - hash - Raw_level_repr.pp - level - in - Assert.assert_equal_list - ~loc - (fun (commitment1, level1) (commitment2, level2) -> - Sc_rollup_commitment_repr.Hash.(commitment1 = commitment2) - && Raw_level_repr.(level1 = level2)) - "Unexpected list of cemented commitments" - commitment_with_level_pp - cs1 - cs2 - -(* Artificially advance current level to make stake refinement possible. - The commitment can be posted after the inbox level commited. For example, - if you post a commitment for the inbox level 32, you will be able to - publish the commitment at level 33. -*) -let advance_level_for_commitment ctxt (commitment : Commitment_repr.t) = - let cur_level = Level_storage.(current ctxt).level in - if cur_level > commitment.inbox_level then ctxt - else - let offset = - let open Raw_level_repr in - let open Int32 in - succ @@ sub (to_int32 commitment.inbox_level) (to_int32 cur_level) - in - Raw_context.Internal_for_tests.add_level ctxt (Int32.to_int offset) - -let advance_level_for_cement ctxt rollup (commitment : Commitment_repr.t) = - let open Lwt_result_syntax in - let* ctxt, commitment_added = - Storage.Sc_rollup.Commitment_added.get - (ctxt, rollup) - (Commitment_repr.hash_uncarbonated commitment) - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let cur_level = Level_storage.(current ctxt).level in - let target_level = Raw_level_repr.add commitment_added challenge_window in - if cur_level > target_level then return ctxt - else - let offset = Raw_level_repr.diff target_level cur_level in - return (Raw_context.Internal_for_tests.add_level ctxt (Int32.to_int offset)) - -let advance_level_n_refine_stake ctxt rollup staker commitment = - let ctxt = advance_level_for_commitment ctxt commitment in - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker - commitment - -let valid_inbox_level ctxt = - let root_level = Level_storage.(current ctxt).level in - let commitment_freq = - Constants_storage.sc_rollup_commitment_period_in_blocks ctxt - in - fun i -> - Raw_level_repr.add - root_level - Int32.(to_int (mul (of_int commitment_freq) i)) - -(** A more precise version of {!valid_inbox_level}. Not used everywhere - as it requires more information than {!valid_inbox_level} and is in - the lwt tzresult monad. *) -let proper_valid_inbox_level (ctxt, rollup) i = - let open Lwt_result_syntax in - let+ _, {level = genesis_level; _} = - Sc_rollup_storage.genesis_info ctxt rollup - in - let commitment_freq = - Constants_storage.sc_rollup_commitment_period_in_blocks ctxt - in - Raw_level_repr.add genesis_level (commitment_freq * i) - -let commitment ?compressed_state ?predecessor ?inbox_level ?number_of_ticks () = - let commitment = - Commitment_repr. - { - compressed_state = - Option.value - ~default:Zero.commitment.compressed_state - compressed_state; - predecessor = - Option.value ~default:Zero.commitment.predecessor predecessor; - inbox_level = - Option.value ~default:Zero.commitment.inbox_level inbox_level; - number_of_ticks = - Option.value ~default:Zero.commitment.number_of_ticks number_of_ticks; - } - in - (commitment, Commitment_repr.hash_uncarbonated commitment) - -(** [commitments ~predecessor ?start_at_level ctxt n] creates a branch of - commitment starting at [valid_inbox_level ctxt start_at_level] and with - [predecessor] as commitment's predecessor. The branch is [n] elements - deep. *) -let commitments ~predecessor ?(start_at = 1l) ctxt n = - let n = Int32.(add (of_int n) start_at) in - let rec go predecessor acc l = - if n = l then acc - else - let inbox_level = valid_inbox_level ctxt l in - let commitment, hash = commitment ~predecessor ~inbox_level () in - go hash (commitment :: acc) (Int32.succ l) - in - List.rev (go predecessor [] start_at) - -let publish_commitment ctxt rollup staker commitment = - let open Lwt_result_syntax in - let ctxt = advance_level_for_commitment ctxt commitment in - let* _hash, _publication_level, ctxt, _balance_updates = - Sc_rollup_stake_storage.publish_commitment ctxt rollup staker commitment - in - return ctxt - -let publish_commitments ctxt rollup staker commitments = - List.fold_left_es - (fun ctxt commitment -> publish_commitment ctxt rollup staker commitment) - ctxt - commitments - -let cement_commitment ctxt rollup commitment = - let open Lwt_result_syntax in - let* ctxt = advance_level_for_cement ctxt rollup commitment in - let* ctxt, _commitment, _commitment_hash = - Sc_rollup_stake_storage.cement_commitment ctxt rollup - in - return ctxt - -let cement_commitments ctxt rollup commitments = - List.fold_left_es - (fun ctxt commitment -> cement_commitment ctxt rollup commitment) - ctxt - commitments - -let publish_and_cement_commitment ctxt rollup staker commitment = - let open Lwt_result_syntax in - let* ctxt = publish_commitment ctxt rollup staker commitment in - cement_commitment ctxt rollup commitment - -let publish_and_cement_commitments ctxt rollup staker commitments = - List.fold_left_es - (fun ctxt commitment -> - publish_and_cement_commitment ctxt rollup staker commitment) - ctxt - commitments - -let withdraw ctxt rollup staker = - let open Lwt_result_syntax in - let* ctxt, _balance_updates = - Sc_rollup_stake_storage.withdraw_stake ctxt rollup staker - in - return ctxt - -let assert_staker_exists ctxt rollup staker = - let open Lwt_result_wrap_syntax in - (* Assert the stake was frozen from the balance. *) - let stake = Constants_storage.sc_rollup_stake_amount ctxt in - let*@ frozen_balance = - Contract_storage.(get_frozen_bonds ctxt (Contract_repr.Implicit staker)) - in - let* () = equal_tez ~loc:__LOC__ stake frozen_balance in - (* Assert [staker] was given an index. *) - let*@ ctxt, staker_index_opt = - Sc_rollup_staker_index_storage.find_staker_index_unsafe ctxt rollup staker - in - let* staker_index = Assert.get_some ~loc:__LOC__ staker_index_opt in - let*@ _ctxt, exists = - Sc_rollup_staker_index_storage.is_active ctxt rollup staker_index - in - Assert.equal_bool ~loc:__LOC__ true exists - -let assert_staker_dont_exists ctxt rollup staker = - let open Lwt_result_wrap_syntax in - (* Assert no stake was frozen from the balance. *) - let*@ frozen_balance = - Contract_storage.(get_frozen_bonds ctxt (Contract_repr.Implicit staker)) - in - let* () = equal_tez ~loc:__LOC__ Tez_repr.zero frozen_balance in - (* Assert [staker] has no index. *) - let*@ _ctxt, staker_index_opt = - Sc_rollup_staker_index_storage.find_staker_index_unsafe ctxt rollup staker - in - Assert.is_none ~loc:__LOC__ ~pp:Z.pp_print (staker_index_opt :> Z.t option) - -let assert_staked_or_not ~staked ctxt rollup hash staker = - let open Lwt_result_wrap_syntax in - let*@ _ctxt, stakers_index = - Storage.Sc_rollup.Commitment_stakers.get (ctxt, rollup) hash - in - let*@ _ctxt, staker_index = - Sc_rollup_staker_index_storage.get_staker_index_unsafe ctxt rollup staker - in - Assert.equal_bool - ~loc:__LOC__ - staked - (List.mem ~equal:Z.equal (staker_index :> Z.t) (stakers_index :> Z.t list)) - -let assert_staked_on = assert_staked_or_not ~staked:true - -let assert_not_staked_on = assert_staked_or_not ~staked:false - -let assert_commitment_metadata_exists ?publication_level ctxt rollup commitment - staker = - let open Lwt_result_wrap_syntax in - (* Assert the commitment's metadata exists. *) - let hash = Commitment_repr.hash_uncarbonated commitment in - let*@ _ctxt, actual_publication_level = - Storage.Sc_rollup.Commitment_added.get (ctxt, rollup) hash - in - let* () = - match publication_level with - | None -> return_unit - | Some publication_level -> - assert_level_equal - ~loc:__LOC__ - publication_level - actual_publication_level - in - let* () = assert_staked_on ctxt rollup hash staker in - let*@ _ctxt, commitments_hash = - Storage.Sc_rollup.Commitments_per_inbox_level.get - (ctxt, rollup) - commitment.inbox_level - in - Assert.equal_bool - ~loc:__LOC__ - true - (List.mem ~equal:Commitment_repr.Hash.equal hash commitments_hash) - -let assert_commitment_exists ctxt rollup commitment = - let open Lwt_result_wrap_syntax in - (* Assert commitment exists. *) - let hash = Commitment_repr.hash_uncarbonated commitment in - let*@ actual_commitment_opt, _ctxt = - Sc_rollup_commitment_storage.get_commitment_opt_unsafe ctxt rollup hash - in - let* actual_commitment = Assert.get_some ~loc:__LOC__ actual_commitment_opt in - let* () = assert_commitment_equal ~loc:__LOC__ commitment actual_commitment in - return_unit - -let assert_commitment_metadata_dont_exists ctxt rollup commitment = - let open Lwt_result_wrap_syntax in - (* Assert the commitment's metadata dont exists. *) - let hash = Commitment_repr.hash_uncarbonated commitment in - let*@ _ctxt, exists = - Storage.Sc_rollup.Commitment_added.mem (ctxt, rollup) hash - in - let* () = Assert.equal_bool ~loc:__LOC__ false exists in - let*@ _ctxt, exists = - Storage.Sc_rollup.Commitment_stakers.mem (ctxt, rollup) hash - in - let* () = Assert.equal_bool ~loc:__LOC__ false exists in - let*@ _ctxt, exists = - Storage.Sc_rollup.Commitments_per_inbox_level.mem - (ctxt, rollup) - commitment.inbox_level - in - Assert.equal_bool ~loc:__LOC__ false exists - -let assert_commitment_dont_exists ctxt rollup commitment = - let open Lwt_result_wrap_syntax in - let hash = Commitment_repr.hash_uncarbonated commitment in - let*@ commitment_opt, _ctxt = - Sc_rollup_commitment_storage.get_commitment_opt_unsafe ctxt rollup hash - in - Assert.is_none ~loc:__LOC__ ~pp:Commitment_repr.pp commitment_opt - -(** {2. Tests} *) - -module Stake_storage_tests = struct - let test_last_cemented_commitment_hash_with_level_when_genesis () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_context () in - let*@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - let*@ c1, inbox_level, ctxt = - Sc_rollup_commitment_storage.last_cemented_commitment_hash_with_level - ctxt - rollup - in - let* () = assert_commitment_hash_equal ~loc:__LOC__ genesis_hash c1 in - Assert.equal_int32 - ~loc:__LOC__ - (Raw_level_repr.to_int32 (Raw_context.current_level ctxt).level) - (Raw_level_repr.to_int32 inbox_level) - - (** {2. Deposit unit tests.} *) - - (** Test that deposit initializes the metadata for the staker. *) - let test_deposit () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker = new_context_1 () in - let contract_staker = Contract_repr.Implicit staker in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - let*@ ctxt_after_deposit, _balance_updates, _staker_index = - Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - rollup - staker - in - (* Assert [staker]'s metadata exists. *) - let* () = assert_staker_exists ctxt_after_deposit rollup staker in - let stake = Constants_storage.sc_rollup_stake_amount ctxt in - (* Assert [staker]'s balance decreased of [stake]. *) - let* () = - assert_balance_decreased - ctxt - ctxt_after_deposit - (`Contract contract_staker) - stake - in - let bond_id = Bond_id_repr.Sc_rollup_bond_id rollup in - let bonds_account = `Frozen_bonds (contract_staker, bond_id) in - (* Assert [bond_account]'s balance increased of [stake]. *) - let* () = - assert_balance_increased ctxt ctxt_after_deposit bonds_account stake - in - return_unit - - (** Test that deposit fails if the staker is underfunded. *) - let test_deposit_by_underfunded_staker () = - let open Lwt_result_wrap_syntax in - let* ctxt, sc_rollup, _genesis_hash = new_context_with_rollup () in - let staker = - Sc_rollup_repr.Staker.of_b58check_exn - "tz1hhNZvjed6McQQLWtR7MRzPHpgSFZTXxdW" - in - let stake = Constants_storage.sc_rollup_stake_amount ctxt in - let* () = - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - sc_rollup - staker) - (Sc_rollup_errors.Sc_rollup_staker_funds_too_low - { - staker; - sc_rollup; - staker_balance = Tez_repr.zero; - min_expected_balance = stake; - }) - in - let*?@ staker_balance = Tez_repr.(stake /? 2L) in - let staker_contract = Contract_repr.Implicit staker in - let*@ ctxt, _ = - Token.transfer ctxt `Minted (`Contract staker_contract) staker_balance - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - sc_rollup - staker) - (Sc_rollup_errors.Sc_rollup_staker_funds_too_low - {staker; sc_rollup; staker_balance; min_expected_balance = stake}) - - (** Test that a staker can deposit and then withdraw. *) - let test_deposit_then_withdraw () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, _genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let* () = assert_staker_exists ctxt rollup staker in - let*@ ctxt, _balance_updates = - Sc_rollup_stake_storage.withdraw_stake ctxt rollup staker - in - assert_staker_dont_exists ctxt rollup staker - - (** Test that an account can stake on more than one rollup. *) - let test_deposit_on_two_rollups () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker = new_context_1 () in - let assert_frozen_balance ctxt staker expected = - let*@ frozen_balance = - Contract_storage.(get_frozen_bonds ctxt (Contract_repr.Implicit staker)) - in - equal_tez ~loc:__LOC__ expected frozen_balance - in - let stake = Constants_storage.sc_rollup_stake_amount ctxt in - let* () = assert_frozen_balance ctxt staker Tez_repr.zero in - let*@ rollup1, _genesis_hash, ctxt = new_sc_rollup ctxt in - let*@ ctxt, _balance_updates, _staker_index = - Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - rollup1 - staker - in - let* () = assert_frozen_balance ctxt staker stake in - let*@ rollup2, _genesis_hash, ctxt = new_sc_rollup ctxt in - let*@ ctxt, _balance_updates, _staker_index = - Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - rollup2 - staker - in - let*?@ stake_times_2 = Tez_repr.(stake *? 2L) in - assert_frozen_balance ctxt staker stake_times_2 - - (** Test that deposit twice on the same rollup fails. *) - let test_deposit_twice_fails () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker = new_context_1 () in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - let*@ ctxt, _balance_updates, _staker_index = - Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - rollup - staker - in - assert_fails - ~loc:__LOC__ - (Sc_rollup_stake_storage.Internal_for_tests.deposit_stake - ctxt - rollup - staker) - - (** {2. Publish unit tests.} *) - - (** Test that the staker, the commitment and its metadata exist after - the publish. *) - let test_publish () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker = new_context_1 () in - let*@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment in - (* The staker exists as a stake was deposited. *) - let* () = assert_staker_exists ctxt rollup staker in - (* The commitment and its metadata exists in the storage. *) - let* () = assert_commitment_exists ctxt rollup commitment in - let* () = assert_commitment_metadata_exists ctxt rollup commitment staker in - return_unit - - (** Test that publish twice to the same level is not allowed. *) - let test_publish_twice () = - let open Lwt_result_wrap_syntax in - let* ctxt, staker = new_context_1 () in - let*@ rollup, genesis_hash, ctxt = new_sc_rollup ctxt in - let commitment, hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment in - let* () = assert_commitment_exists ctxt rollup commitment in - let* () = assert_commitment_metadata_exists ctxt rollup commitment staker in - (* Assert that publishing twice the same commitment fails. *) - let* () = - assert_fails_with - ~loc:__LOC__ - (publish_commitment ctxt rollup staker commitment) - (Sc_rollup_errors.Sc_rollup_double_publish hash) - in - (* Assert that publishing twice to the same inbox level but with - distinct commitment fails. *) - let new_commitment = - { - commitment with - compressed_state = - Sc_rollup_repr.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["honest"]); - } - in - let* () = - assert_fails_with - ~loc:__LOC__ - (publish_commitment ctxt rollup staker new_commitment) - Sc_rollup_errors.Sc_rollup_staker_double_stake - in - return_unit - - (** Test that the entrypoint [publish] fails with a nice error if - the rollup is missing. *) - let test_publish_to_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_stake_storage.publish_commitment - ctxt - rollup - Zero.staker - Zero.commitment) - - (** Test that publish to a wrong inbox level is forbidden. *) - let test_publish_wrong_inbox_level () = - let open Lwt_result_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(Raw_level_repr.of_int32_exn 42l) - () - in - assert_fails_with - ~loc:__LOC__ - (publish_commitment ctxt rollup staker commitment) - Sc_rollup_errors.Sc_rollup_bad_inbox_level - - (** Test that two stakers can publish the same commitment. *) - let test_publish_existing_commitment () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = publish_commitment ctxt rollup staker1 commitment in - let*@ ctxt = publish_commitment ctxt rollup staker2 commitment in - (* [staker2] does exist and stakes on [commitment]. *) - let* () = assert_staker_exists ctxt rollup staker2 in - let* () = - assert_commitment_metadata_exists ctxt rollup commitment staker2 - in - let* () = assert_commitment_exists ctxt rollup commitment in - return_unit - - (** Test that publish returns the oldest level at which the commitment - was published. *) - let test_publish_returns_oldest_publish_level () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let ctxt = advance_level_for_commitment ctxt commitment in - let*@ _hash, publish_level, ctxt, _balance_updates = - Sc_rollup_stake_storage.publish_commitment ctxt rollup staker1 commitment - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 42 in - let*@ _hash, publish_level', _ctxt, _balance_updates = - Sc_rollup_stake_storage.publish_commitment ctxt rollup staker2 commitment - in - Assert.equal_int32 - ~loc:__LOC__ - (Raw_level_repr.to_int32 publish_level) - (Raw_level_repr.to_int32 publish_level') - - (** Test that a commitment can not be published from the future. *) - let test_publish_fails_on_commitment_from_future () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let inbox_level = valid_inbox_level ctxt 1l in - let commitment, _hash = - commitment ~predecessor:genesis_hash ~inbox_level () - in - let* () = - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.publish_commitment - ctxt - rollup - staker - commitment) - (Sc_rollup_errors.Sc_rollup_commitment_from_future - {current_level = Raw_level_repr.of_int32_exn 1l; inbox_level}) - in - let ctxt = advance_level_for_commitment ctxt commitment in - let*@ _hash, _publish_level, ctxt, _balance_updates = - Sc_rollup_stake_storage.publish_commitment ctxt rollup staker commitment - in - let* () = assert_commitment_exists ctxt rollup commitment in - assert_commitment_metadata_exists ctxt rollup commitment staker - - (** Test that a staker can publish a commitment when its last commimtent was - cemented. *) - let test_publish_from_behind_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let level l = valid_inbox_level ctxt l in - let level1 = level 1l in - let level2 = level 2l in - let commitment1, hash = - commitment ~predecessor:genesis_hash ~inbox_level:level1 () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment1 in - let*@ ctxt = cement_commitment ctxt rollup commitment1 in - let commitment2, _hash = - commitment ~predecessor:hash ~inbox_level:level2 () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment2 in - let* () = assert_commitment_exists ctxt rollup commitment2 in - assert_commitment_metadata_exists ctxt rollup commitment2 staker - - (** Test that a staker can join another staker's branch without - staking explicitely on each commitment. *) - let test_publish_anywhere_on_branch () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - (* staker1 creates a first branch. *) - let commitments = commitments ~predecessor:genesis_hash ctxt 10 in - let*@ ctxt = publish_commitments ctxt rollup staker1 commitments in - - (* staker2 will stake on only one commitment. *) - let to_stake_commitment = Stdlib.List.nth commitments 6 in - let not_staked_commitments = - List.filter (( <> ) to_stake_commitment) commitments - in - let*@ ctxt = publish_commitment ctxt rollup staker2 to_stake_commitment in - (* Assert [staker2] is staked on [to_stake_commitment] and not on - other commitments. *) - let* () = - assert_staked_on - ctxt - rollup - (Commitment_repr.hash_uncarbonated to_stake_commitment) - staker2 - in - let* () = - List.iter_es - (fun commitment -> - assert_not_staked_on - ctxt - rollup - (Commitment_repr.hash_uncarbonated commitment) - staker2) - not_staked_commitments - in - return_unit - - (** Test that a commitment needs to have a predecessor. *) - let test_publish_without_predecessor_fails () = - let open Lwt_result_syntax in - let* ctxt, rollup, _genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let commitment, _hash = - commitment ~inbox_level:(valid_inbox_level ctxt 42l) () - in - assert_fails_with - ~loc:__LOC__ - (publish_commitment ctxt rollup staker commitment) - (Sc_rollup_errors.Sc_rollup_unknown_commitment commitment.predecessor) - - (** Test that publishing a commitment at the LCC or behind it fails. *) - let test_publish_behind_or_at_lcc_fails () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let commitments = commitments ~predecessor:genesis_hash ctxt 10 in - let*@ ctxt = - publish_and_cement_commitments ctxt rollup staker commitments - in - let*@ _ctxt, last_cemented_inbox_level, _ = - Sc_rollup_commitment_storage.last_cemented_commitment_hash_with_level - ctxt - rollup - in - (* Trying to publish a commitment behind or at lcc will fail. *) - List.iter_es - (fun commitment -> - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.publish_commitment - ctxt - rollup - staker - commitment) - (Sc_rollup_errors.Sc_rollup_commitment_too_old - { - commitment_inbox_level = commitment.inbox_level; - last_cemented_inbox_level; - })) - commitments - - (** {2. Cement unit tests.} *) - - (** Test that cement cleans the commitment's metadata. *) - let test_cement () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment in - let* () = assert_commitment_exists ctxt rollup commitment in - let* () = assert_commitment_metadata_exists ctxt rollup commitment staker in - let*@ ctxt = cement_commitment ctxt rollup commitment in - assert_commitment_metadata_dont_exists ctxt rollup commitment - - (** Test that the entrypoint [cement] fails with a nice error if - the rollup is missing. *) - let test_cement_to_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_stake_storage.cement_commitment ctxt rollup) - - (** Test that if [n] stakers stake on the same commitment, it can be - cemented. *) - let test_cement_with_n_stakers () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, stakers = - originate_rollup_and_deposit_with_n_stakers 10 - in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = - List.fold_left_es - (fun ctxt staker -> publish_commitment ctxt rollup staker commitment) - ctxt - stakers - in - let*@ ctxt = cement_commitment ctxt rollup commitment in - assert_commitment_metadata_dont_exists ctxt rollup commitment - - (** Create and cement three commitments: - - [c3 -> c2 -> c1 -> Commitment_hash.zero] - - This is useful to catch potential issues with de-allocation of [c2], - as we deallocate the old LCC when a new LCC is cemented. - *) - let test_cement_n_commitments () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let commitments = commitments ~predecessor:genesis_hash ctxt 10 in - let*@ ctxt = publish_commitments ctxt rollup staker commitments in - let*@ ctxt = - advance_level_for_cement - ctxt - rollup - (List.rev commitments |> Stdlib.List.hd) - in - let*@ _ctxt, cemented_commitments = - List.fold_left_es - (fun (ctxt, acc) _commitment -> - let* ctxt, cemented_commitment, _cemented_commitment_hash = - Sc_rollup_stake_storage.cement_commitment ctxt rollup - in - return (ctxt, cemented_commitment :: acc)) - (ctxt, []) - commitments - in - let* () = - List.iter2_es - ~when_different_lengths:[] - (fun commitment cemented_commitment -> - assert_commitment_equal ~loc:__LOC__ commitment cemented_commitment) - commitments - (List.rev cemented_commitments) - in - return_unit - - (** Test that a number of commitments are saved in the storage after - cementation, and other are completely removed. Note that the - metadata for both saved and removed commitments are removed. *) - let test_cement_clean_commitments () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let max_number_of_stored_commitments = - Constants_storage.max_number_of_stored_cemented_commitments ctxt - in - let commitments = - commitments - ~predecessor:genesis_hash - ctxt - (max_number_of_stored_commitments * 2) - in - let*@ ctxt = publish_commitments ctxt rollup staker commitments in - let*@ ctxt = cement_commitments ctxt rollup commitments in - (* Assert that [max_number_of_stored_commitments] cemented commitments - exists, i.e. the commitment and not its metadata. The rest are cleaned. *) - let* () = - List.iter_es - (assert_commitment_metadata_dont_exists ctxt rollup) - commitments - in - let removed_commitments, saved_commitments = - List.split_n max_number_of_stored_commitments commitments - in - let* () = - List.iter_es - (assert_commitment_dont_exists ctxt rollup) - removed_commitments - in - let* () = - List.iter_es - (fun commitment -> assert_commitment_exists ctxt rollup commitment) - saved_commitments - in - return_unit - - let test_cement_conflicted_branches () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2, staker3 = - originate_rollup_and_deposit_with_three_stakers () - in - - (* Create an honest and dishonest branch. *) - let honest_commitment, honest_commitment_hash = - let compressed_state = - Sc_rollup_repr.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["honest"]) - in - commitment - ~predecessor:genesis_hash - ~compressed_state - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let honest_commitments = - honest_commitment - :: commitments ~predecessor:honest_commitment_hash ~start_at:2l ctxt 10 - in - let dishonest_commitment, dishonest_commitment_hash = - let compressed_state = - Sc_rollup_repr.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["dishonest"]) - in - commitment - ~predecessor:genesis_hash - ~compressed_state - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let dishonest_commitments = - dishonest_commitment - :: commitments ~predecessor:dishonest_commitment_hash ~start_at:2l ctxt 10 - in - (* Conflict begins. *) - let*@ ctxt = publish_commitments ctxt rollup staker1 honest_commitments in - let*@ ctxt = - publish_commitments ctxt rollup staker2 dishonest_commitments - in - let*@ ctxt = - publish_commitments ctxt rollup staker3 dishonest_commitments - in - - (* No one can cement their branches. *) - let cant_cement ctxt = - List.iter_es (fun commitment -> - assert_fails_with_f - ~loc:__LOC__ - (cement_commitment ctxt rollup commitment) - (let open Sc_rollup_errors in - function - | Sc_rollup_disputed | Sc_rollup_parent_not_lcc - | Raw_context.Storage_error (Missing_key _) - (* missing commitment *) -> - true - | _ -> false)) - in - let* () = cant_cement ctxt honest_commitments in - let* () = cant_cement ctxt dishonest_commitments in - - (* Simulate a conflict's resolution through [remove_staker]. *) - let*@ ctxt, _balance_updates = - Sc_rollup_stake_storage.remove_staker ctxt rollup staker2 - in - (* [staker1] is not yet able to cement, [staker3] still stake on the - dishonest branch. *) - let* () = cant_cement ctxt honest_commitments in - (* Simulate the second conflict's resolution. *) - let*@ ctxt, _balance_updates = - Sc_rollup_stake_storage.remove_staker ctxt rollup staker3 - in - (* [staker1] can now cement its branch. The dishonest branch can not - be cemented, before and after the honest branch was cemented. *) - let*@ _ctxt = cement_commitments ctxt rollup honest_commitments in - return_unit - - (** {2. Withdraw unit tests.} *) - - (** Test that the entrypoint [withdraw] fails with a nice error if - the rollup is missing. *) - let test_withdraw_to_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_stake_storage.withdraw_stake ctxt rollup Zero.staker) - - (* Test that withdraw fail if the account has not deposited. *) - let test_withdraw_when_not_staked () = - let open Lwt_result_wrap_syntax in - let* ctxt, account = new_context_1 () in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.withdraw_stake ctxt rollup account) - Sc_rollup_errors.Sc_rollup_not_staked - - (** Test that you can withdraw only once (you need to deposit again). *) - let test_withdraw_twice_fails () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, _genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let*@ ctxt, _balance_updates = - Sc_rollup_stake_storage.withdraw_stake ctxt rollup staker - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.withdraw_stake ctxt rollup staker) - Sc_rollup_errors.Sc_rollup_not_staked - - (** Test that withdraw when the stakers's newest staked commitment is - after the LCC fails. *) - let test_withdraw_fails_staked_after_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.withdraw_stake ctxt rollup staker) - Sc_rollup_errors.Sc_rollup_not_staked_on_lcc_or_ancestor - - (** Test that withdraw succeeds when the the staker staked on a branch older - than the LCC. *) - let test_withdraw_staked_before_or_at_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitments = commitments ~predecessor:genesis_hash ctxt 10 in - let commitment, commitments = - match commitments with x :: xs -> (x, xs) | _ -> assert false - in - let*@ ctxt = publish_commitment ctxt rollup staker1 commitment in - let*@ ctxt = publish_commitments ctxt rollup staker2 commitments in - let*@ ctxt = cement_commitment ctxt rollup commitment in - let*@ ctxt = cement_commitments ctxt rollup commitments in - let*@ _ctxt = withdraw ctxt rollup staker1 in - return_unit - - (** Test that [remove_staker] cleans the stakers' metadata. *) - let test_remove_staker () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, _genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let*@ ctxt, _balance_updates = - Sc_rollup_stake_storage.remove_staker ctxt rollup staker - in - assert_staker_dont_exists ctxt rollup staker - - (** Test that a staker can come back after being slashed. *) - let test_come_back_after_remove_staker () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let* () = assert_staker_exists ctxt rollup staker in - let commitment, _hash = - commitment - ~predecessor:genesis_hash - ~inbox_level:(valid_inbox_level ctxt 1l) - () - in - let*@ ctxt = publish_commitment ctxt rollup staker commitment in - let* () = assert_commitment_exists ctxt rollup commitment in - let* () = assert_commitment_metadata_exists ctxt rollup commitment staker in - (* We simulate a conflict resolution through [remove_staker] *) - let*@ ctxt, _balance_updates = - Sc_rollup_stake_storage.remove_staker ctxt rollup staker - in - let* () = assert_staker_dont_exists ctxt rollup staker in - (* The staker can come back through a new index. *) - let new_commitment = - { - commitment with - compressed_state = - Sc_rollup_repr.State_hash.context_hash_to_state_hash - (Context_hash.hash_string ["honest"]); - } - in - let*@ ctxt = publish_commitment ctxt rollup staker new_commitment in - let* () = assert_commitment_exists ctxt rollup new_commitment in - let* () = - assert_commitment_metadata_exists ctxt rollup new_commitment staker - in - let* () = assert_staker_exists ctxt rollup staker in - (* Furthermore, the commitment can be cemented. *) - let*@ _ctxt = cement_commitment ctxt rollup commitment in - return_unit - - let assert_balance_unchanged ctxt ctxt' account = - let open Lwt_result_wrap_syntax in - let*@ _, balance = Token.Internal_for_tests.balance ctxt account in - let*@ _, balance' = Token.Internal_for_tests.balance ctxt' account in - equal_tez ~loc:__LOC__ balance' balance - - let remove_staker_and_check_balances ctxt rollup staker = - let open Lwt_result_wrap_syntax in - perform_staking_action_and_check - ctxt - rollup - staker - (fun ctxt rollup staker_contract stake -> - let*@ ctxt', _ = - Sc_rollup_stake_storage.remove_staker ctxt rollup staker - in - let* () = - assert_balance_unchanged ctxt ctxt' (`Contract staker_contract) - in - let bond_id = Bond_id_repr.Sc_rollup_bond_id rollup in - let bonds_account = `Frozen_bonds (staker_contract, bond_id) in - let+ () = assert_balance_decreased ctxt ctxt' bonds_account stake in - ctxt') - - let produce_and_refine ctxt ~number_of_commitments ?(start_at_level = 1) - ~predecessor staker rollup = - let open Lwt_result_syntax in - let inbox_level = proper_valid_inbox_level (ctxt, rollup) in - let rec aux ctxt n l predecessor result = - if n = 0 then return @@ (List.rev result, ctxt) - else - let* inbox_level = inbox_level l in - let commitment = - Commitment_repr. - { - predecessor; - inbox_level; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let* c, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker commitment - in - aux ctxt (n - 1) (l + 1) c (c :: result) - in - aux ctxt number_of_commitments start_at_level predecessor [] - - let rec cement_commitments ctxt commitments rollup = - let open Lwt_result_syntax in - match commitments with - | [] -> return ctxt - | _c :: commitments -> - let* ctxt, _commitment, _commitment_hash = - Sc_rollup_stake_storage.cement_commitment ctxt rollup - in - cement_commitments ctxt commitments rollup - - let test_cement_fail_too_recent () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let level = valid_inbox_level ctxt in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let commitment = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _c1, level, ctxt = - advance_level_n_refine_stake ctxt rollup staker commitment - in - let min_cementation_level = Raw_level_repr.add level challenge_window in - let* () = - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.cement_commitment ctxt rollup) - (Sc_rollup_errors.Sc_rollup_commitment_too_recent - {current_level = level; min_level = min_cementation_level}) - in - let ctxt = - Raw_context.Internal_for_tests.add_level ctxt (challenge_window - 1) - in - let level = (Raw_context.current_level ctxt).level in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.cement_commitment ctxt rollup) - (Sc_rollup_errors.Sc_rollup_commitment_too_recent - {current_level = level; min_level = min_cementation_level}) - - let test_cement_deadline_uses_oldest_add_time () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitment = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = valid_inbox_level ctxt 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - - let*@ c2, _level, _ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment - in - let*@ _ctxt = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - assert_commitment_hash_equal ~loc:__LOC__ c1 c2 - - let test_last_cemented_commitment_hash_with_level () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker = - originate_rollup_and_deposit_with_one_staker () - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let inbox_level = valid_inbox_level ctxt 1l in - let commitment = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker commitment - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - let*@ ctxt, _, _ = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - let*@ c1', inbox_level', _ctxt = - Sc_rollup_commitment_storage.last_cemented_commitment_hash_with_level - ctxt - rollup - in - let* () = assert_commitment_hash_equal ~loc:__LOC__ c1 c1' in - Assert.equal_int32 - ~loc:__LOC__ - (Raw_level_repr.to_int32 inbox_level) - (Raw_level_repr.to_int32 inbox_level') - - let test_cement_with_two_stakers () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _node, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 commitment2 - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - - let*@ ctxt = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - assert_true ctxt - - let test_can_remove_staker () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _node, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 commitment2 - in - let* ctxt = remove_staker_and_check_balances ctxt rollup staker1 in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - (* It needs to have a staker on [c1] to cement it, otherwise it's not - an active commitment. *) - assert_fails - ~loc:__LOC__ - (Sc_rollup_stake_storage.cement_commitment ctxt rollup) - - let test_can_remove_staker2 () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _node, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 commitment2 - in - let* ctxt = remove_staker_and_check_balances ctxt rollup staker2 in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - let*@ ctxt = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - assert_true ctxt - - let test_removed_staker_can_not_withdraw () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _node, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 commitment2 - in - let*@ ctxt, _ = Sc_rollup_stake_storage.remove_staker ctxt rollup staker2 in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.withdraw_stake ctxt rollup staker2) - Sc_rollup_errors.Sc_rollup_not_staked - - let test_no_cement_on_conflict () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 44L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _node, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment2 - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_stake_storage.cement_commitment ctxt rollup) - Sc_rollup_errors.Sc_rollup_disputed - - let test_finds_conflict_point_at_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 55L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _c2, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment2 - in - let*@ (left, _right), _ctxt = - Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2 - in - assert_commitment_hash_equal ~loc:__LOC__ left.hash c1 - - let test_finds_conflict_point_beneath_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c2, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment2 - in - let commitment3 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 7373L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c3, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment3 - in - let*@ (left, right), _ctxt = - Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2 - in - let* () = assert_commitment_hash_equal ~loc:__LOC__ left.hash c2 in - assert_commitment_hash_equal ~loc:__LOC__ right.hash c3 - - let test_conflict_point_is_first_point_of_disagreement () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c2, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment2 - in - let commitment3 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 7373L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c3, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment3 - in - let commitment4 = - Commitment_repr. - { - predecessor = c2; - inbox_level = level 3l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _c4, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment4 - in - let*@ (left, right), _ctxt = - Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2 - in - let* () = assert_commitment_hash_equal ~loc:__LOC__ left.hash c2 in - assert_commitment_hash_equal ~loc:__LOC__ right.hash c3 - - let test_conflict_point_computation_fits_in_gas_limit () = - let open Lwt_result_wrap_syntax in - (* Worst case of conflict point computation: two branches of maximum - length rooted just after the LCC. *) - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let max_commits = - let commitment_freq = - Constants_storage.sc_rollup_commitment_period_in_blocks ctxt - in - Int32.div - (Constants_storage.sc_rollup_max_lookahead_in_blocks ctxt) - (Int32.of_int commitment_freq) - in - let root_commitment = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ root_commitment_hash, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 root_commitment - in - let*@ _node, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - root_commitment - in - let rec branch ctxt staker_id predecessor i max acc = - let open Result_syntax in - let commitment = - Commitment_repr. - { - predecessor; - inbox_level = level i; - number_of_ticks = number_of_ticks_exn staker_id; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let* ctxt, commitment_hash = - Sc_rollup_commitment_storage.hash ctxt commitment - in - if i = max then - return (List.rev ((commitment, commitment_hash) :: acc), ctxt) - else - branch - ctxt - staker_id - commitment_hash - (Int32.succ i) - max - ((commitment, commitment_hash) :: acc) - in - let*?@ branch_1, ctxt = - branch ctxt 1L root_commitment_hash 2l max_commits [] - in - let*?@ branch_2, ctxt = - branch ctxt 2L root_commitment_hash 2l max_commits [] - in - let both_branches = List.combine_drop branch_1 branch_2 in - let*@ ctxt = - List.fold_left_es - (fun ctxt ((c1, _c1h), (c2, _c2h)) -> - let* _ch, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 c1 - in - let+ _ch, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 c2 - in - ctxt) - ctxt - both_branches - in - let ctxt = - Raw_context.set_gas_limit - ctxt - (Constants_storage.hard_gas_limit_per_operation ctxt) - in - let*@ (left, right), _ctxt = - Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2 - in - let head_hash branch = - match List.hd branch with Some x -> snd x | None -> assert false - in - let* () = - assert_commitment_hash_equal ~loc:__LOC__ left.hash (head_hash branch_1) - in - assert_commitment_hash_equal ~loc:__LOC__ right.hash (head_hash branch_2) - - let test_no_conflict_point_one_staker_at_lcc_preboot () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitment = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = valid_inbox_level ctxt 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2) - Sc_rollup_errors.Sc_rollup_no_conflict - - let test_no_conflict_point_both_stakers_at_lcc_preboot () = - let open Lwt_result_syntax in - let* ctxt, rollup, _genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2) - Sc_rollup_errors.Sc_rollup_no_conflict - - let test_no_conflict_point_one_staker_at_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = c1; - inbox_level = level 2l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _node, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 commitment2 - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - let*@ ctxt, _, _ = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2) - Sc_rollup_errors.Sc_rollup_no_conflict - - let test_no_conflict_point_both_stakers_at_lcc () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = valid_inbox_level ctxt 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ _c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let*@ _node, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment1 - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - let*@ ctxt, _, _ = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2) - Sc_rollup_errors.Sc_rollup_no_conflict - - let test_last_cemented_commitment_of_missing_rollup () = - assert_fails_with_missing_rollup - ~loc:__LOC__ - Sc_rollup_commitment_storage.last_cemented_commitment - - let test_last_cemented_commitment_hash_with_level_of_missing_rollup () = - assert_fails_with_missing_rollup - ~loc:__LOC__ - Sc_rollup_commitment_storage.last_cemented_commitment_hash_with_level - - let test_get_commitment_of_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_commitment_storage.get_commitment - ctxt - rollup - Commitment_repr.Hash.zero) - - let test_get_missing_commitment () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_context () in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - let commitment_hash = Commitment_repr.Hash.zero in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_commitment_storage.get_commitment ctxt rollup commitment_hash) - (Sc_rollup_errors.Sc_rollup_unknown_commitment commitment_hash) - - let test_genesis_info_of_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ Sc_rollup_storage.genesis_info - - let test_concurrent_refinement_point_of_conflict () = - let open Lwt_result_wrap_syntax in - let* before_ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level before_ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let commitment2 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 7373L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ (c1, c2), _ctxt = - let* _c1, _level, ctxt = - advance_level_n_refine_stake before_ctxt rollup staker1 commitment1 - in - let* _c2, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker2 commitment2 - in - Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2 - in - let*@ (c1', c2'), _ctxt = - let* _c2, _level, ctxt = - advance_level_n_refine_stake before_ctxt rollup staker2 commitment2 - in - let* _c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - Sc_rollup_refutation_storage.Internal_for_tests.get_conflict_point - ctxt - rollup - staker1 - staker2 - in - let* () = assert_commitment_hash_equal ~loc:__LOC__ c1.hash c1'.hash in - assert_commitment_hash_equal ~loc:__LOC__ c2.hash c2'.hash - - let test_concurrent_refinement_cement () = - let open Lwt_result_wrap_syntax in - let* before_ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let commitment = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = valid_inbox_level before_ctxt 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _ctxt = - let* _c1, _level, ctxt = - advance_level_n_refine_stake before_ctxt rollup staker1 commitment - in - let* _c2, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = - Raw_context.Internal_for_tests.add_level ctxt challenge_window - in - let* ctxt, _, _ = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - Sc_rollup_commitment_storage.last_cemented_commitment ctxt rollup - in - let*@ c2, _ctxt = - let* _c2, _level, ctxt = - advance_level_n_refine_stake before_ctxt rollup staker2 commitment - in - let* _c1, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker1 - commitment - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - let ctxt = - Raw_context.Internal_for_tests.add_level ctxt challenge_window - in - let* ctxt, _, _ = Sc_rollup_stake_storage.cement_commitment ctxt rollup in - Sc_rollup_commitment_storage.last_cemented_commitment ctxt rollup - in - assert_commitment_hash_equal ~loc:__LOC__ c1 c2 - - let record ctxt rollup level message_index = - Sc_rollup_outbox_storage.record_applied_message - ctxt - rollup - (Raw_level_repr.of_int32_exn @@ Int32.of_int level) - ~message_index - - (* Recreating the indexing logic to make sure messages are applied. *) - let assert_is_already_applied ~loc ctxt rollup level message_index = - let open Lwt_result_wrap_syntax in - let level = Raw_level_repr.of_int32_exn (Int32.of_int level) in - let level_index = - let max_active_levels = - Constants_storage.sc_rollup_max_active_outbox_levels ctxt - in - Int32.rem (Raw_level_repr.to_int32 level) max_active_levels - in - let*@ _ctxt, level_and_bitset_opt = - Storage.Sc_rollup.Applied_outbox_messages.find (ctxt, rollup) level_index - in - match level_and_bitset_opt with - | Some (existing_level, bitset) when Raw_level_repr.(existing_level = level) - -> - let*?@ is_set = Bitset.mem bitset message_index in - Assert.equal_bool ~loc is_set true - | _ -> Stdlib.failwith "Expected a bitset and a matching level." - - (** Test outbox for applied messages. *) - let test_storage_outbox () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_context () in - let*@ rollup1, _genesis_hash, ctxt = new_sc_rollup ctxt in - let level1 = 100 in - (* Test that is-applied is false for non-recorded messages. *) - let*@ _size_diff, ctxt = record ctxt rollup1 level1 1 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup1 level1 1 in - (* Record the same level and message twice should fail. *) - let* () = - assert_fails_with - ~loc:__LOC__ - (record ctxt rollup1 level1 1) - Sc_rollup_errors.Sc_rollup_outbox_message_already_applied - in - let*@ _size_diff, ctxt = record ctxt rollup1 level1 2 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup1 level1 2 in - (* Record messages for new level. *) - let level2 = level1 + 3 in - let*@ _size_diff, ctxt = record ctxt rollup1 level2 47 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup1 level2 47 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup1 level1 1 in - (* Record for a new rollup. *) - let*@ rollup2, _genesis_hash, ctxt = new_sc_rollup ctxt in - let*@ _size_diff, ctxt = record ctxt rollup2 level1 1 in - let*@ _size_diff, ctxt = record ctxt rollup2 level1 3 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup2 level1 1 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup2 level1 3 in - assert_is_already_applied ~loc:__LOC__ ctxt rollup1 level1 1 - - (** Test limits for applied outbox messages. *) - let test_storage_outbox_exceed_limits () = - let open Lwt_result_wrap_syntax in - let level = 1234 in - let* ctxt = new_context () in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - (* Assert that recording a message index that exceeds max outbox messages per - level fails. *) - let* () = - let max_message_index = - Constants_storage.sc_rollup_max_outbox_messages_per_level ctxt - in - assert_fails_with - ~loc:__LOC__ - (record ctxt rollup level max_message_index) - Sc_rollup_errors.Sc_rollup_invalid_outbox_message_index - in - let* () = - assert_fails_with - ~loc:__LOC__ - (record ctxt rollup level (-1)) - Sc_rollup_errors.Sc_rollup_invalid_outbox_message_index - in - let max_active_levels = - Int32.to_int @@ Constants_storage.sc_rollup_max_active_outbox_levels ctxt - in - (* Record message 42 at level 15 *) - let*@ _size_diff, ctxt = record ctxt rollup 15 42 in - let* () = assert_is_already_applied ~loc:__LOC__ ctxt rollup 15 42 in - (* Record message 42 at level [max_active_levels + 15] *) - let*@ _size_diff, ctxt = record ctxt rollup (max_active_levels + 15) 42 in - (* Record message 42 at level 15 again should fail as it's expired. *) - let* () = - assert_fails_with - ~loc:__LOC__ - (record ctxt rollup 15 42) - Sc_rollup_errors.Sc_rollup_outbox_level_expired - in - return_unit - - (** Test storage outbox size diff. Note that these tests depend on the constant. - [sc_rollup_max_outbox_messages_per_level] which controls the maximum size - of bitsets required to store applied messages per level. - - Here's a breakdown of the size for applied-outbox-messages storage: - - [size_of_level = 4] - - [max_size_per_level < (2 * (sc_rollup_max_outbox_messages_per_level / 8))] - - [max_size_per_level < size_of_level + size_of_bitset] - - [total_size < sc_rollup_max_active_outbox_levels * max_size_per_level] - *) - let test_storage_outbox_size_diff () = - let open Lwt_result_wrap_syntax in - (* This is the maximum additional storage space required to store one message. - It depends on [sc_rollup_max_outbox_messages_per_level]. *) - let max_size_diff = 19 in - let* ctxt = new_context () in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - let level = 15 in - let max_message_index = - Constants_storage.sc_rollup_max_outbox_messages_per_level ctxt - 1 - in - let max_active_levels = - Int32.to_int @@ Constants_storage.sc_rollup_max_active_outbox_levels ctxt - in - (* Record a new message. *) - let*@ size_diff, ctxt = record ctxt rollup level 1 in - (* Size diff is 11 bytes. 4 bytes for level and 7 bytes for a new Z.t *) - let* () = Assert.equal_int ~loc:__LOC__ (Z.to_int size_diff) 5 in - let*@ size_diff, ctxt = record ctxt rollup level 2 in - (* Recording a new message in the bitset at a lower index does not occupy - any additional space. *) - let* () = Assert.equal_int ~loc:__LOC__ (Z.to_int size_diff) 0 in - (* Record a new message at the highest index at an existing level. This - expands the bitset but does not charge for the level. *) - let*@ size_diff, ctxt = record ctxt rollup level max_message_index in - let* () = Assert.equal_int ~loc:__LOC__ (Z.to_int size_diff) 14 in - (* Record a new message at the highest index at a new level. This charges for - space for level and maximum bitset. *) - let*@ size_diff, ctxt = record ctxt rollup (level + 1) max_message_index in - let* () = - Assert.equal_int ~loc:__LOC__ (Z.to_int size_diff) max_size_diff - in - (* Record a new message for a level that resets an index. This replaces the - bitset with a smaller one. Hence we get a negative size diff. *) - let*@ size_diff, _ctxt = record ctxt rollup (level + max_active_levels) 0 in - let* () = Assert.equal_int ~loc:__LOC__ (Z.to_int size_diff) (-14) in - return_unit - - let test_get_cemented_commitments_with_levels_of_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_commitment_storage.Internal_for_tests - .get_cemented_commitments_with_levels - ctxt - rollup) - - let test_get_cemented_commitments_with_levels () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, c0, staker = - originate_rollup_and_deposit_with_one_staker () - in - let level = valid_inbox_level ctxt in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - (* Produce and stake on n commitments, each on top of the other. *) - (* Fetch number of stored commitments in context. *) - let max_num_stored_cemented_commitments = - (Raw_context.constants ctxt).sc_rollup - .max_number_of_stored_cemented_commitments - in - (* Produce and stake more commitments than the number of cemented - commitments that can be stored. *) - let number_of_commitments = max_num_stored_cemented_commitments + 5 in - let*@ commitments, ctxt = - produce_and_refine - ~number_of_commitments - ~predecessor:c0 - ctxt - staker - rollup - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - (* Cement all commitments that have been produced. *) - let*@ ctxt = cement_commitments ctxt commitments rollup in - (* Add genesis commitment to list of produced commitments. *) - let commitments = c0 :: commitments in - let number_of_cemented_commitments = List.length commitments in - (* Fetch cemented commitments that are kept in context. *) - let*@ cemented_commitments_with_levels, _ctxt = - Sc_rollup_commitment_storage.Internal_for_tests - .get_cemented_commitments_with_levels - ctxt - rollup - in - (* Check that only ctxt.sc_rollup.max_number_of_stored_cemented_commitments - are kept in context. *) - let* () = - Assert.equal_int - ~loc:__LOC__ - (List.length cemented_commitments_with_levels) - max_num_stored_cemented_commitments - in - (* Check that the commitments that are kept in context are the - last [ctxt.sc_rollup.max_number_of_stored_cemented_commitments]. - commitments that have been cemented. *) - let dropped_commitments = - number_of_cemented_commitments - max_num_stored_cemented_commitments - in - let expected_commitments_with_levels = - commitments - |> List.drop_n dropped_commitments - |> List.mapi (fun i c -> - (c, level @@ Int32.of_int (i + dropped_commitments))) - in - assert_commitments_with_levels_equal - ~loc:__LOC__ - cemented_commitments_with_levels - expected_commitments_with_levels - - (* Produces [max_num_stored_cemented_commitments] number of commitments and - verifies that each of them is an ancestor of the last cemented commitment. *) - let test_are_commitments_related_when_related () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, c0, staker = - originate_rollup_and_deposit_with_one_staker () - in - let challenge_window = - Constants_storage.sc_rollup_challenge_window_in_blocks ctxt - in - (* Produce and stake on n commitments, each on top of the other. *) - (* Fetch number of stored commitments in context. *) - let max_num_stored_cemented_commitments = - (Raw_context.constants ctxt).sc_rollup - .max_number_of_stored_cemented_commitments - in - (* Produce and store a number of commitments equal to the maximum number of - cemented commitments that can be stored. *) - let number_of_commitments = max_num_stored_cemented_commitments in - let*@ commitments, ctxt = - produce_and_refine - ~number_of_commitments - ~predecessor:c0 - ctxt - staker - rollup - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt challenge_window in - (* Cement all commitments that have been produced. *) - let*@ ctxt = cement_commitments ctxt commitments rollup in - (* Check that check_if_commitments_are_related detects that each - cemented commitment is an ancestor of the last cemented commitment. *) - let*@ lcc, ctxt = - Sc_rollup_commitment_storage.last_cemented_commitment ctxt rollup - in - commitments - |> List.iter_es (fun commitment -> - let*@ is_commitment_cemented, _ctxt = - Sc_rollup_commitment_storage.check_if_commitments_are_related - ctxt - rollup - ~descendant:lcc - ~ancestor:commitment - in - Assert.equal_bool ~loc:__LOC__ is_commitment_cemented true) - - (** Tests that [check_if_commitments_are_related] returns false for two - unrelated commitments. *) - let test_unrelated_commitments () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let level = valid_inbox_level ctxt in - let commitment1 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 1232909L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c1, _level, ctxt = - advance_level_n_refine_stake ctxt rollup staker1 commitment1 - in - let commitment2 = - Commitment_repr. - { - predecessor = genesis_hash; - inbox_level = level 1l; - number_of_ticks = number_of_ticks_exn 44L; - compressed_state = Sc_rollup_repr.State_hash.zero; - } - in - let*@ c2, _level, ctxt = - Sc_rollup_stake_storage.Internal_for_tests.refine_stake - ctxt - rollup - staker2 - commitment2 - in - let*@ are_commitments_related, _ctxt = - Sc_rollup_commitment_storage.check_if_commitments_are_related - ctxt - rollup - ~descendant:c1 - ~ancestor:c2 - in - Assert.equal_bool ~loc:__LOC__ are_commitments_related false - - let test_fresh_index_correctly_increment () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, _genesis_hash, staker1, staker2 = - originate_rollup_and_deposit_with_two_stakers () - in - let assert_staker_index ~__LOC__ ctxt staker expected_index = - let*@ _, (found_index : Sc_rollup_staker_index_repr.t) = - Storage.Sc_rollup.Staker_index.get (ctxt, rollup) staker - in - Assert.equal_z ~loc:__LOC__ (found_index :> Z.t) expected_index - in - let* () = assert_staker_index ~__LOC__ ctxt staker1 Z.zero in - let* () = assert_staker_index ~__LOC__ ctxt staker2 Z.one in - let Account.{pkh; _} = Account.new_account () in - let*@ ctxt, fresh_staker3_index = - Sc_rollup_staker_index_storage.fresh_staker_index ctxt rollup pkh - in - let* () = assert_staker_index ~__LOC__ ctxt pkh Z.(succ one) in - Assert.equal_z ~loc:__LOC__ (fresh_staker3_index :> Z.t) Z.(succ one) - - let tests = - [ - (* Deposit tests: *) - Tztest.tztest "deposit" `Quick test_deposit; - Tztest.tztest - "deposit by underfunded staker" - `Quick - test_deposit_by_underfunded_staker; - Tztest.tztest "deposit then withdraw" `Quick test_deposit_then_withdraw; - Tztest.tztest "deposit on two rollups" `Quick test_deposit_on_two_rollups; - Tztest.tztest "deposit twice fails" `Quick test_deposit_twice_fails; - (* Publish tests: *) - Tztest.tztest "publish" `Quick test_publish; - Tztest.tztest "publish twice" `Quick test_publish_twice; - Tztest.tztest - "publish to missing rollup fails" - `Quick - test_publish_to_missing_rollup; - Tztest.tztest - "publish to wrong inbox level" - `Quick - test_publish_wrong_inbox_level; - Tztest.tztest - "publish existing commitment" - `Quick - test_publish_existing_commitment; - Tztest.tztest - "publish commitment returns level when commitment was first published" - `Quick - test_publish_returns_oldest_publish_level; - Tztest.tztest - "publish from the future is not allowed" - `Quick - test_publish_fails_on_commitment_from_future; - Tztest.tztest - "publish from behind lcc is allowed" - `Quick - test_publish_from_behind_lcc; - Tztest.tztest - "publish to any commitment of a branch" - `Quick - test_publish_anywhere_on_branch; - Tztest.tztest - "publish needs a predecessor" - `Quick - test_publish_without_predecessor_fails; - Tztest.tztest - "publish behind or at LCC" - `Quick - test_publish_behind_or_at_lcc_fails; - (* Cement tests: *) - Tztest.tztest "cement" `Quick test_cement; - Tztest.tztest - "cement to missing rollup fails" - `Quick - test_cement_to_missing_rollup; - Tztest.tztest "cement with n stakers" `Quick test_cement_with_n_stakers; - Tztest.tztest "cement n commitments" `Quick test_cement_n_commitments; - Tztest.tztest - "cement clean commitment(s)" - `Quick - test_cement_clean_commitments; - Tztest.tztest - "cement conflicted branches" - `Quick - test_cement_conflicted_branches; - (* Withdraw tests: *) - Tztest.tztest - "withdraw to missing rollup fails" - `Quick - test_withdraw_to_missing_rollup; - Tztest.tztest - "withdraw when not staked fails" - `Quick - test_withdraw_when_not_staked; - Tztest.tztest "withdraw twice fails" `Quick test_withdraw_twice_fails; - Tztest.tztest - "withdraw fails when staked after LCC" - `Quick - test_withdraw_fails_staked_after_lcc; - Tztest.tztest - "withdraw when staked before or at LCC" - `Quick - test_withdraw_staked_before_or_at_lcc; - (* Remove staker tests: *) - Tztest.tztest "remove staker" `Quick test_remove_staker; - (* Misc tests: *) - Tztest.tztest - "staker come back after being slashed" - `Quick - test_come_back_after_remove_staker; - ] - - (* These tests were written for the old mechanism of staking (calling it - the old design would be a too strong statement). - They need to polished if necessary. - *) - let tests = - tests - @ [ - Tztest.tztest - "cement fails when too recent" - `Quick - test_cement_fail_too_recent; - Tztest.tztest - "cement deadline uses oldest add time" - `Quick - test_cement_deadline_uses_oldest_add_time; - Tztest.tztest - "last cemented commitment hash and level returns correct information" - `Quick - test_last_cemented_commitment_hash_with_level; - Tztest.tztest - "cement with two stakers" - `Quick - test_cement_with_two_stakers; - Tztest.tztest "no cement on conflict" `Quick test_no_cement_on_conflict; - Tztest.tztest - "finds conflict point at LCC" - `Quick - test_finds_conflict_point_at_lcc; - Tztest.tztest - "finds conflict point beneath LCC" - `Quick - test_finds_conflict_point_beneath_lcc; - Tztest.tztest - "finds first point of disagreement when as point of conflict" - `Quick - test_conflict_point_is_first_point_of_disagreement; - Tztest.tztest - "finds no conflict point with two stakers, one of which is at LCC \ - (PVM in preboot)" - `Quick - test_no_conflict_point_one_staker_at_lcc_preboot; - Tztest.tztest - "finds no conflict point when both stakers commit to LCC (PVM in \ - preboot)" - `Quick - test_no_conflict_point_both_stakers_at_lcc_preboot; - Tztest.tztest - "finds no conflict point with two stakers, one of which is at LCC" - `Quick - test_no_conflict_point_one_staker_at_lcc; - Tztest.tztest - "finds no conflict point when both stakers commit to LCC" - `Quick - test_no_conflict_point_both_stakers_at_lcc; - Tztest.tztest - "conflict_point_computation_fits_in_gas_limit" - `Quick - test_conflict_point_computation_fits_in_gas_limit; - Tztest.tztest "can remove staker 1" `Quick test_can_remove_staker; - Tztest.tztest "can remove staker 2" `Quick test_can_remove_staker2; - Tztest.tztest - "removed staker can not withdraw" - `Quick - test_removed_staker_can_not_withdraw; - Tztest.tztest - "fetching last final commitment of missing rollup fails" - `Quick - test_last_cemented_commitment_of_missing_rollup; - Tztest.tztest - "fetching last final commitment hash and level of missing rollup \ - fails" - `Quick - test_last_cemented_commitment_hash_with_level_of_missing_rollup; - Tztest.tztest - "fetching commitment of missing rollup fails" - `Quick - test_get_commitment_of_missing_rollup; - Tztest.tztest - "fetching non-existing commitment of rollup fails" - `Quick - test_get_missing_commitment; - Tztest.tztest - "initial level of missing rollup fails" - `Quick - test_genesis_info_of_missing_rollup; - Tztest.tztest - "Refinement operations are commutative (point of conflict)" - `Quick - test_concurrent_refinement_point_of_conflict; - Tztest.tztest - "Refinement operations are commutative (cement)" - `Quick - test_concurrent_refinement_cement; - Tztest.tztest - "Record messages in storage outbox" - `Quick - test_storage_outbox; - Tztest.tztest - "Record messages in storage outbox limits" - `Quick - test_storage_outbox_exceed_limits; - Tztest.tztest - "Record messages size diffs" - `Quick - test_storage_outbox_size_diff; - Tztest.tztest - "Originating a rollup creates a genesis commitment" - `Quick - test_last_cemented_commitment_hash_with_level_when_genesis; - Tztest.tztest - "Getting cemented commitments with levels of missing rollups fails" - `Quick - test_get_cemented_commitments_with_levels_of_missing_rollup; - Tztest.tztest - "Getting cemented commitments returns multiple cemented commitments" - `Quick - test_get_cemented_commitments_with_levels; - Tztest.tztest - "All cemented commitments are ancestors of last cemented commitment" - `Quick - test_are_commitments_related_when_related; - Tztest.tztest - "Unrelated commitments are classified as such" - `Quick - test_unrelated_commitments; - Tztest.tztest - "fresh index is correcly incremented" - `Quick - test_fresh_index_correctly_increment; - ] -end - -module Rollup_storage_tests = struct - let test_genesis_info_of_rollup () = - let open Lwt_result_wrap_syntax in - let* ctxt = new_context () in - let level_before_rollup = (Raw_context.current_level ctxt).level in - let*@ rollup, _genesis_hash, ctxt = new_sc_rollup ctxt in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 10 in - let*@ _ctxt, genesis_info = Sc_rollup_storage.genesis_info ctxt rollup in - let initial_level = genesis_info.level in - Assert.equal_int32 - ~loc:__LOC__ - (Raw_level_repr.to_int32 level_before_rollup) - (Raw_level_repr.to_int32 initial_level) - - let test_initial_state_is_pre_boot () = - let open Lwt_result_wrap_syntax in - let* ctxt, rollup, genesis_hash = new_context_with_rollup () in - let*@ lcc, _ctxt = - Sc_rollup_commitment_storage.last_cemented_commitment ctxt rollup - in - assert_commitment_hash_equal ~loc:__LOC__ lcc genesis_hash - - let test_kind_of_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_storage.kind ctxt rollup) - - let tests = - [ - Tztest.tztest - "initial_level returns correct level" - `Quick - test_genesis_info_of_rollup; - Tztest.tztest - "rollup starts in pre-boot state" - `Quick - test_initial_state_is_pre_boot; - Tztest.tztest - "kind of missing rollup is None" - `Quick - test_kind_of_missing_rollup; - ] -end - -let tests = Stake_storage_tests.tests @ Rollup_storage_tests.tests - -(* FIXME: https://gitlab.com/tezos/tezos/-/issues/2460 - Further tests to be added. -*) - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup storage", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_wasm.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_wasm.ml deleted file mode 100644 index 863cf7bcc3a48e9df8119da56946389a930b25e8..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_sc_rollup_wasm.ml +++ /dev/null @@ -1,435 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs *) -(* Copyright (c) 2022 Trili Tech, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Rollup layer 1 logic - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_sc_rollup_wasm.ml - Subject: Unit test for the Wasm PVM -*) - -open Protocol -open Tezos_micheline.Micheline -open Michelson_v1_primitives -open Tezos_webassembly_interpreter -module Context = Tezos_context_memory.Context_binary -open Wasm_utils - -module Proof_encoding = - Tezos_context_merkle_proof_encoding.Merkle_proof_encoding - -module Wasm_context = struct - module Tree = struct - include Context.Tree - - type tree = Context.tree - - type t = Context.t - - type key = string list - - type value = bytes - end - - type tree = Context.tree - - type proof = Context.Proof.tree Context.Proof.t - - let verify_proof p f = - Lwt.map Result.to_option (Context.verify_tree_proof p f) - - let produce_proof context tree step = - let open Lwt_syntax in - let* context = Context.add_tree context [] tree in - let* (_hash : Context_hash.t) = - Context.commit ~time:Time.Protocol.epoch context - in - let index = Context.index context in - match Context.Tree.kinded_key tree with - | Some k -> - let* p = Context.produce_tree_proof index k step in - return_some p - | None -> return_none - - let kinded_hash_to_state_hash = function - | `Value hash | `Node hash -> - Sc_rollup_repr.State_hash.context_hash_to_state_hash hash - - let proof_before proof = kinded_hash_to_state_hash proof.Context.Proof.before - - let proof_after proof = kinded_hash_to_state_hash proof.Context.Proof.after - - let proof_encoding = Proof_encoding.V2.Tree2.tree_proof_encoding -end - -module Full_Wasm = - Sc_rollup_wasm.V2_0_0.Make (Environment.Wasm_2_0_0.Make) (Wasm_context) - -let test_metadata_size () = - let address = Sc_rollup_repr.Address.of_bytes_exn (Bytes.make 20 '\000') in - let metadata = - Sc_rollup_metadata_repr.{address; origination_level = Raw_level_repr.root} - in - let bytes = - Data_encoding.Binary.to_bytes_exn Sc_rollup_metadata_repr.encoding metadata - in - assert ( - Bytes.length bytes - = Tezos_scoru_wasm.Host_funcs.Internal_for_tests.metadata_size) ; - Lwt_result_syntax.return_unit - -let test_l1_input_kind () = - let open Lwt_result_wrap_syntax in - let open Sc_rollup_inbox_message_repr in - let open Tezos_scoru_wasm in - let check_msg msg expected = - let*?@ msg = serialize msg in - let msg = unsafe_to_string msg |> Pvm_input_kind.from_raw_input in - assert (msg = expected) ; - return_unit - in - let* () = check_msg (Internal Start_of_level) (Internal Start_of_level) in - let* () = check_msg (Internal End_of_level) (Internal End_of_level) in - let* () = check_msg (External "payload") External in - - return_unit - -let make_transaction value text contract = - let entrypoint = Entrypoint_repr.default in - let destination : Contract_hash.t = - Contract_hash.of_bytes_exn @@ Bytes.of_string contract - in - let unparsed_parameters = - strip_locations - @@ Prim - ( 0, - I_TICKET, - [Prim (0, I_PAIR, [Int (0, Z.of_int32 value); String (1, text)], [])], - [] ) - in - Sc_rollup_outbox_message_repr.{unparsed_parameters; entrypoint; destination} - -let make_transactions () = - let l = - QCheck2.Gen.( - generate1 - @@ list_size - (return 3) - (triple (string_size @@ return 20) int32 (small_string ~gen:char))) - in - List.map (fun (contract, i, s) -> make_transaction i s contract) l - -(* This is simple "echo kernel" it spits out the first four inputs (SOL, - Info_per_level, input, EOL) it receives. It uses the [write_output] host - function and so it is used to test this function. *) -let test_output () = - let open Lwt_result_wrap_syntax in - let level_offset = 20 in - let dst = 60 in - let max_bytes = 3600 in - let dst_without_header = dst + 2 in - let modul = - Format.sprintf - {| - (module - (type $t0 (func (param i32 i32) (result i32))) - (type $t3 (func (param i32 i32 i32) (result i32))) - (import "smart_rollup_core" "read_input" (func $read_input (type $t3))) - (import "smart_rollup_core" "write_output" (func $write_output (type $t0))) - (memory 1) - (export "memory" (memory 0)) - (func (export "kernel_run") - (local $size i32) - (local.set $size (call $read_input - (i32.const %d) - (i32.const %d) - (i32.const %d))) - (call $write_output (i32.const %d) - (i32.sub (local.get $size) (i32.const 2))) - (local.set $size (call $read_input - (i32.const %d) - (i32.const %d) - (i32.const %d))) - (call $write_output (i32.const %d) - (i32.sub (local.get $size) (i32.const 2))) - (local.set $size (call $read_input - (i32.const %d) - (i32.const %d) - (i32.const %d))) - (call $write_output (i32.const %d) - (i32.sub (local.get $size) (i32.const 2))) - (local.set $size (call $read_input - (i32.const %d) - (i32.const %d) - (i32.const %d))) - (call $write_output (i32.const %d) - (local.get $size)) - drop) - ) - - |} - level_offset - dst - max_bytes - dst_without_header - level_offset - dst - max_bytes - dst_without_header - level_offset - dst - max_bytes - dst_without_header - level_offset - dst - max_bytes - dst_without_header - in - - let*! dummy = Context.init "/tmp" in - let dummy_context = Context.empty dummy in - let (empty_tree : Wasm.tree) = Context.Tree.empty dummy_context in - let parsed = Parse.string_to_module modul in - let parsed = - match parsed.it with Script.Textual m -> m | _ -> assert false - in - let*! boot_sector = Encode.encode parsed in - let*! tree = - Wasm.initial_state Sc_rollup_wasm.V2_0_0.current_version empty_tree - in - let*! tree = - Wasm.install_boot_sector - ~ticks_per_snapshot:Sc_rollup_wasm.V2_0_0.ticks_per_snapshot - ~outbox_validity_period:Sc_rollup_wasm.V2_0_0.outbox_validity_period - ~outbox_message_limit:Sc_rollup_wasm.V2_0_0.outbox_message_limit - boot_sector - tree - in - let*! tree = - Wasm.Internal_for_tests.set_max_nb_ticks (Z.of_int64 50_000_000L) tree - in - let transactions = make_transactions () in - let out = - Sc_rollup_outbox_message_repr.(Atomic_transaction_batch {transactions}) - in - let string_input_message = - Data_encoding.Binary.to_string_exn - Sc_rollup_outbox_message_repr.encoding - out - in - let*! tree = eval_until_input_requested tree in - let*! tree = set_full_input_step [string_input_message] 0l tree in - let*! final_tree = eval_until_input_requested tree in - let*! output = Wasm.Internal_for_tests.get_output_buffer final_tree in - let* last_outbox_level = - match output.Tezos_webassembly_interpreter.Output_buffer.last_level with - | Some level -> return level - | None -> failwith "The PVM output buffer does not contain any outbox." - in - let*! last_outbox = - Tezos_webassembly_interpreter.Output_buffer.Internal_for_tests.get_outbox - output - last_outbox_level - in - let* end_of_level_message_index = - match - Output_buffer.Internal_for_tests.get_outbox_last_message_index last_outbox - with - | Some index -> return index - | None -> failwith "The PVM output buffer does not contain any outbox." - in - (* The last message in the outbox corresponds to EOL, due to the nature of the - kernel. As such we must take the one preceding it. *) - let message_index = Z.pred end_of_level_message_index in - - let*! bytes_output_message = - Tezos_webassembly_interpreter.Output_buffer.( - get_message output {outbox_level = last_outbox_level; message_index}) - in - assert (string_input_message = Bytes.to_string bytes_output_message) ; - let message = - Data_encoding.Binary.of_bytes_exn - Sc_rollup_outbox_message_repr.encoding - bytes_output_message - in - assert (message = out) ; - let*?@ outbox_level = Raw_level_repr.of_int32 last_outbox_level in - let output = Sc_rollup_PVM_sig.{outbox_level; message_index; message} in - - let*! pf = Full_Wasm.produce_output_proof dummy_context final_tree output in - - match pf with - | Ok proof -> - let*! valid = Full_Wasm.verify_output_proof proof in - fail_unless - (Result.is_ok valid) - (Exn (Failure "An output proof is not valid.")) - | Error _ -> failwith "Error during proof generation" - -let test_reveal_compat_metadata () = - let open Alpha_context.Sc_rollup in - let open Tezos_scoru_wasm.Wasm_pvm_state in - let (Reveal_raw metadata_scoru_wasm) = reveal_metadata in - let metadata_protocol = - Data_encoding.Binary.to_string_exn reveal_encoding Reveal_metadata - in - Assert.equal_string ~loc:__LOC__ metadata_scoru_wasm metadata_protocol - -let test_reveal_compat_raw_data () = - let open Alpha_context.Sc_rollup in - let open Tezos_scoru_wasm.Wasm_pvm_state in - let hash = Wasm_2_0_0PVM.well_known_reveal_hash in - let hash_string = - Data_encoding.Binary.to_string_exn Sc_rollup_reveal_hash.encoding hash - in - let (Reveal_raw raw_data_scoru_wasm) = reveal_raw_data hash_string in - let raw_data_protocol = - Data_encoding.Binary.to_string_exn reveal_encoding (Reveal_raw_data hash) - in - Assert.equal_string ~loc:__LOC__ raw_data_scoru_wasm raw_data_protocol - -(* When snapshoting a new protocol, to fix this test, the following - action should be done. - - - In [src/lib_scoru_wasm/constants.ml], add a new variable before - [proto_alpha_name] using the name of the new protocol, and whose - value is [Raw_context.version_value]. - - Update [src/lib_scoru_wasm/pvm_input_kind.ml] to add a new case - to the type [protocol], and update the functions - [protocol_from_raw] and [Internal_for_tests.proto_to_binary] - accordingly (by copy/pasting the [Proto_alpha] case and doing - the necessary renaming. - - Update [src/lib_scoru_wasm/wasm_vm.ml], more precisely the - [version_for_protocol] function, to take into account the new - protocol. The expected result is the same as for - [Proto_alpha]. *) -let test_protocol_names () = - let open Alpha_context.Sc_rollup.Inbox_message in - let protocol_migration_message_str = - Data_encoding.Binary.to_string_exn - encoding - (Internal protocol_migration_internal_message) - in - let kind = - Tezos_scoru_wasm.Pvm_input_kind.from_raw_input - protocol_migration_message_str - in - assert (kind = Internal (Protocol_migration ParisB)) ; - assert ( - protocol_migration_internal_message - = Protocol_migration Tezos_scoru_wasm.Constants.parisb_name) ; - Lwt_result_syntax.return_unit - -let test_reveal_host_function_can_request_dal_pages () = - let open Alpha_context in - let wasm_hex str = - String.concat - "" - (String.fold_right - (fun c hex -> - let x, y = Hex.of_char c in - Format.sprintf "\\%c%c" x y :: hex) - str - []) - in - let request_dal_module level slot_index page_index payload_addr - destination_addr max_bytes = - let payload_value = - Sc_rollup.Request_dal_page - { - slot_id = - {published_level = Raw_level.of_int32_exn level; index = slot_index}; - page_index; - } - in - let payload = - Data_encoding.Binary.to_string_exn Sc_rollup.reveal_encoding payload_value - in - let kernel = - Format.sprintf - {| - (module - (import "smart_rollup_core" "reveal" - (func $reveal (param i32 i32 i32 i32) (result i32))) - (memory 1) - (data (i32.const %ld) "%s") - (export "mem" (memory 0)) - (func (export "kernel_run") - (call $reveal (i32.const %ld) (i32.const %ld) (i32.const %ld) (i32.const %ld)))) - |} - payload_addr - (wasm_hex payload) - payload_addr - (String.length payload |> Int32.of_int) - destination_addr - max_bytes - in - (payload_value, kernel) - in - let payload_value, kernel = - request_dal_module 10l Dal.Slot_index.zero 4 100l 200l 4_096l - in - let* tree = Wasm_utils.initial_tree ~version:V3 kernel in - let* tree = Wasm_utils.set_empty_inbox_step 0l tree in - let* tree = - Wasm_utils.eval_until_input_requested ~reveal_builtins:None tree - in - let* info = Wasm_utils.Wasm.get_info tree in - match info.input_request with - | Reveal_required (Reveal_raw payload) -> ( - match - Data_encoding.Binary.of_string Sc_rollup.reveal_encoding payload - with - | Ok payload -> - assert (payload_value = payload) ; - Lwt_result_syntax.return_unit - | Error _ -> assert false) - | _ -> assert false - -let tests = - [ - Tztest.tztest "size of a rollup metadata" `Quick test_metadata_size; - Tztest.tztest "l1 input kind" `Quick test_l1_input_kind; - Tztest.tztest "output proofs" `Quick test_output; - Tztest.tztest - "lib_scoru_wasm reveal encoding compatibility: Reveal_metadata" - `Quick - test_reveal_compat_metadata; - Tztest.tztest - "lib_scoru_wasm reveal encoding compatibility: Reveal_raw_data" - `Quick - test_reveal_compat_raw_data; - Tztest.tztest "protocol names consistency" `Quick test_protocol_names; - Tztest.tztest - "reveal host function can request DAL pages" - `Quick - test_reveal_host_function_can_request_dal_pages; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("sc rollup wasm", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_skip_list_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_skip_list_repr.ml deleted file mode 100644 index 033675cca2c38b511bf11cb7f3191bdcc9538000..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_skip_list_repr.ml +++ /dev/null @@ -1,188 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (skip lists) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_skip_list_repr.ml - Subject: Test skip list implementation -*) - -open Protocol - -exception Skip_list_test_error of string - -let err x = Exn (Skip_list_test_error x) - -(* - - In this test, we check that [best_basis] should be used to optimize - the size of Merkel proofs based on skip lists. In such a context, - the skip lists are referenced by Blake2B hashes (32 bytes-long) and - their contents are also Blake2B hashes. Besides, a Merkel proof is - a list of cells. - - To that end, we consider a deterministic sample of pairs [(n, - target)] when [n] is the length of the skip list and [target] is - the index of a cell in the skip list. Then, for each basis in [2 - .. max_basis] distinct from [best_basis], we check that the largest - proof is larger than the largest proof of [best_basis]. - -*) -let test_skip_list_proof_size () = - let module H = Sc_rollup_inbox_merkelized_payload_hashes_repr.Hash in - (* - - Basis [4] is very close to [3] as the best basis... therefore, we - use a fixed seed for the random number generator to avoid any - flakiness in the test. - - *) - let () = Random.init 0xC0FFEE in - let best_basis = 4 in - - (* - - For the CI, we use relatively small values to avoid slowdowns. - - We choose [max_length] to be of the same order of magnitude as - the longest lists we can meet in practice in the smart rollups - inboxes. - - The real [max_length] can be found in [constants_repr.ml]. At the time - of writing this message, the value is [1_000_000]. - - *) - let max_basis = 7 and nsample = 2048 and max_length = 100_000 in - - (* - - Locally, one can we use large values to get higher confidence: - - *) - (* let max_basis = 13 and nsample = 4096 and max_length = 200_000 in *) - - (* A sample is a pair [(n, k)] where [k <= n]. *) - let samples = - let get () = - let n = 1 + Random.int (max_length - 1) in - let target = Random.int (1 + n) in - (n, Z.of_int target) - in - let rec aux r n = if n = 0 then r else aux (get () :: r) (n - 1) in - aux [] nsample - in - - (* - - For a given [basis], we compute the largest proof when processing - [samples]. The considered lists hold the same contents in each cell, - allowing us to store lists of size [k] in a cache. - - *) - let largest_proof basis = - let module M = Skip_list.Make (struct - let basis = basis - end) in - let cell_encoding = M.encoding H.encoding H.encoding in - let proof_encoding = Data_encoding.list cell_encoding in - let hash_cell cell = - let payload_hash = M.content cell in - let back_pointers_hashes = M.back_pointers cell in - H.to_bytes payload_hash :: List.map H.to_bytes back_pointers_hashes - |> H.hash_bytes - in - let dummy_content = H.hash_string ["HumptyDumpty"] in - let cache = - let cache = Stdlib.Hashtbl.create 13 in - let rec make_list k n map prev_cell = - if n = k then - let prev_cell_ptr = hash_cell prev_cell in - let map = H.Map.add prev_cell_ptr prev_cell map in - Stdlib.Hashtbl.add cache k (map, prev_cell_ptr) - else - let prev_cell_ptr = hash_cell prev_cell in - let next_cell = M.next ~prev_cell ~prev_cell_ptr dummy_content in - let map = H.Map.add prev_cell_ptr prev_cell map in - Stdlib.Hashtbl.add cache k (map, prev_cell_ptr) ; - make_list (succ k) n map next_cell - in - make_list 0 max_length H.Map.empty (M.genesis dummy_content) ; - cache - in - let proof_of_path deref = - List.map (fun ptr -> Stdlib.Option.get (deref ptr)) - in - let proof_size (n, target_index) = - let make_list n = Stdlib.Hashtbl.find cache n in - let map, cell_ptr = make_list n in - let deref ptr = H.Map.find ptr map in - let path = - Stdlib.Option.get @@ M.back_path ~deref ~cell_ptr ~target_index - in - let proof = proof_of_path deref path in - let encoded_proof = - Data_encoding.Binary.to_bytes_exn proof_encoding proof - in - Bytes.length encoded_proof - in - List.map proof_size samples |> List.fold_left max min_int - in - let largest_proofs = - List.map (fun basis -> (basis, largest_proof basis)) (2 -- max_basis) - in - let () = - List.iter - (fun (b, p) -> - Format.eprintf "@[Basis = %d,@, Largest proof = %d@]@;" b p) - largest_proofs - in - let smallest_largest_proofs_basis, _ = - List.fold_left - (fun (b1, p1) (b2, p2) -> if p1 < p2 then (b1, p1) else (b2, p2)) - (Stdlib.List.hd largest_proofs) - (Stdlib.List.tl largest_proofs) - in - fail_unless - (smallest_largest_proofs_basis = best_basis) - (err - (Format.asprintf - "According to the test, %d is the best basis, not %d." - smallest_largest_proofs_basis - best_basis)) - -let tests = - [ - Tztest.tztest - "Skip list: check if the best basis for merkelized skip list is indeed \ - the best" - `Quick - test_skip_list_proof_size; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("skip list", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_slashing_percentage.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_slashing_percentage.ml deleted file mode 100644 index 6fbd40779140721d8d02494a7b8c6d37f35a572b..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_slashing_percentage.ml +++ /dev/null @@ -1,194 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (quantities) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_slashing_percentage.ml - Subject: On slashing double attestations. -*) - -open Protocol - -let assert_equal ~loc pct1 pct2 = - let open Lwt_result_syntax in - let* pct1 in - let* pct2 in - let pct1_q = Percentage.to_q pct1 in - let pct2_q = Percentage.to_q pct2 in - Assert.equal_q ~loc pct1_q pct2_q - -let assert_equal_int ~loc n (pct : Percentage.t tzresult Lwt.t) = - let open Lwt_result_syntax in - let* pct in - let pct_q = Percentage.to_q pct in - Assert.equal_q ~loc Q.(n // 100) pct_q - -let assert_not_equal_int ~loc n (pct : Percentage.t tzresult Lwt.t) = - let open Lwt_result_syntax in - let* pct in - let pct_q = Percentage.to_q pct in - Assert.not_equal ~loc Q.equal "Values are equal" Q.pp_print Q.(n // 100) pct_q - -let raw_context ~max_slashing_threshold ~max_slashing_per_block ~ns_enable () = - let open Constants_helpers in - let constants = - Default_parameters.constants_test - |> Set.Adaptive_issuance.force_activation true - |> Set.Adaptive_issuance.ns_enable ns_enable - |> Set.max_slashing_threshold max_slashing_threshold - |> Set.max_slashing_per_block max_slashing_per_block - in - Context.raw_context_from_constants constants - -let make_fake_culprits_with_rights_from_int_list il = - let open Result_syntax in - let n = List.length il in - let* accounts_list = Account.generate_accounts n in - let pkh_list = List.map (fun x -> x.Account.pkh) accounts_list in - let pkh_rights_list = Stdlib.List.combine pkh_list il in - let map = - List.fold_left - (fun map (pkh, rights) -> - Environment.Signature.Public_key_hash.Map.add pkh rights map) - Environment.Signature.Public_key_hash.Map.empty - pkh_rights_list - in - return (map, pkh_list) - -let get_pct ~ns_enable ~max_slashing_threshold ~max_slashing_per_block int_list - = - let open Lwt_result_syntax in - let* ctxt = - raw_context ~max_slashing_threshold ~max_slashing_per_block ~ns_enable () - in - let*? map, pkh_list = make_fake_culprits_with_rights_from_int_list int_list in - return - @@ Protocol.Slash_percentage.Internal_for_tests.for_double_attestation - ctxt - map - pkh_list - -(** Test the double attesting slash is always 50% with ns_enable = false *) -let test_ns_enable_disable () = - let open Lwt_result_syntax in - let f x = - get_pct - ~ns_enable:false - ~max_slashing_threshold:100 - ~max_slashing_per_block:Percentage.p100 - [x] - in - let* () = assert_equal_int ~loc:__LOC__ 50 (f 0) in - let* () = assert_equal_int ~loc:__LOC__ 50 (f 1) in - let* () = assert_equal_int ~loc:__LOC__ 50 (f 100) in - let* () = assert_equal_int ~loc:__LOC__ 50 (f 10000) in - return_unit - -(** We set ns_enable = true for the following tests *) -let get_pct = get_pct ~ns_enable:true - -(** Tests that the slashing amount for several delegates is the same as long - as the sum of their rights is the same *) -let test_list_and_sum () = - let open Lwt_result_syntax in - (* A max slashing threshold of 100 ensures that x -> f [x] is injective *) - let f x = - get_pct - ~max_slashing_threshold:100 - ~max_slashing_per_block:Percentage.p100 - x - in - let* () = assert_equal ~loc:__LOC__ (f [0; 0]) (f [0]) in - let* () = assert_equal ~loc:__LOC__ (f [1; 2; 3]) (f [3; 3]) in - let* () = assert_equal ~loc:__LOC__ (f [120]) (f [60; 60; 0]) in - let* () = assert_equal ~loc:__LOC__ (f []) (f [0]) in - return_unit - -(** We test only one slashed delegate from now on *) -let get_pct i = get_pct [i] - -(** Tests the max_slashing_per_block parameter *) -let test_max_slashing_per_block () = - let open Lwt_result_syntax in - let f max_slash x = - let max_slashing_per_block = - Percentage.of_q_bounded ~round:`Up Q.(max_slash // 100) - in - get_pct ~max_slashing_threshold:100 ~max_slashing_per_block x - in - let* () = assert_equal_int ~loc:__LOC__ 100 (f 100 200) in - let* () = assert_equal_int ~loc:__LOC__ 1 (f 1 200) in - let* () = assert_equal_int ~loc:__LOC__ 49 (f 49 200) in - let* () = assert_equal_int ~loc:__LOC__ 100 (f 100 100) in - let* () = assert_not_equal_int ~loc:__LOC__ 100 (f 100 99) in - return_unit - -(** We now test with max slashing to 100% (mainnet value) *) -let get_pct = - get_pct - ~max_slashing_per_block: - Default_parameters.constants_mainnet.max_slashing_per_block - -(** Tests the max_slashing_threshold parameter *) -let test_max_slashing_threshold () = - let open Lwt_result_syntax in - let f max_slashing_threshold x = get_pct ~max_slashing_threshold x in - let* () = assert_equal_int ~loc:__LOC__ 100 (f 100 20000) in - let* () = assert_equal_int ~loc:__LOC__ 100 (f 1000 1001) in - let* () = assert_equal_int ~loc:__LOC__ 100 (f 1000 1000) in - let* () = assert_not_equal_int ~loc:__LOC__ 100 (f 1000 999) in - return_unit - -(** We now test with max slashing threshold to 2334 (mainnet value) *) -let get_pct = - get_pct - ~max_slashing_threshold: - Default_parameters.constants_mainnet.max_slashing_threshold - -(** Test slashing values for mainnet constants *) -let test_mainnet_values () = - let open Lwt_result_syntax in - let f x = get_pct x in - (* percentage with two decimals *) - let assert_equal_precise_int ~loc n (pct : Percentage.t tzresult Lwt.t) = - let open Lwt_result_syntax in - let* pct in - let pct_q = Percentage.to_q pct in - Assert.equal_q ~loc Q.(n // 10000) pct_q - in - let* () = assert_equal_precise_int ~loc:__LOC__ 0 (f 0) in - (* For 1 right, up to 23, slash is 0.01% *) - let* () = assert_equal_precise_int ~loc:__LOC__ 1 (f 1) in - let* () = assert_equal_precise_int ~loc:__LOC__ 1 (f 23) in - let* () = assert_equal_precise_int ~loc:__LOC__ 2 (f 24) in - (* Some random value points *) - let* () = assert_equal_precise_int ~loc:__LOC__ 19 (f 100) in - let* () = assert_equal_precise_int ~loc:__LOC__ 459 (f 500) in - let* () = assert_equal_precise_int ~loc:__LOC__ 1836 (f 1000) in - (* Highest non-saturated slash is 99.92% *) - let* () = assert_equal_precise_int ~loc:__LOC__ 9983 (f 2332) in - let* () = assert_equal_precise_int ~loc:__LOC__ 9992 (f 2333) in - let* () = assert_equal_precise_int ~loc:__LOC__ 10000 (f 2334) in - let* () = assert_equal_precise_int ~loc:__LOC__ 10000 (f 7000) in - let* () = assert_equal_precise_int ~loc:__LOC__ 10000 (f 70000) in - return_unit - -let tests = - Tztest. - [ - tztest "Test ns_enable = false" `Quick test_ns_enable_disable; - tztest "Test only sum of rights counts" `Quick test_list_and_sum; - tztest "Test max_slashing_per_block" `Quick test_max_slashing_per_block; - tztest "Test max_slashing_threshold" `Quick test_max_slashing_threshold; - tztest "Test exact slashing values" `Quick test_mainnet_values; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("slashing_percentage", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_tez_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_tez_repr.ml deleted file mode 100644 index e31894b1bcfec2857f40332981c8856a01ac6a49..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_tez_repr.ml +++ /dev/null @@ -1,208 +0,0 @@ -(*****************************************************************************) -(* *) -(* Open Source License *) -(* Copyright (c) 2021 Marigold *) -(* *) -(* Permission is hereby granted, free of charge, to any person obtaining a *) -(* copy of this software and associated documentation files (the "Software"),*) -(* to deal in the Software without restriction, including without limitation *) -(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) -(* and/or sell copies of the Software, and to permit persons to whom the *) -(* Software is furnished to do so, subject to the following conditions: *) -(* *) -(* The above copyright notice and this permission notice shall be included *) -(* in all copies or substantial portions of the Software. *) -(* *) -(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) -(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) -(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) -(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) -(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) -(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) -(* DEALINGS IN THE SOFTWARE. *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Tez_repr - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_tez_repr.ml - Dependencies: -- - Subject: To test the modules (including the top-level) - in tez_repr.ml as individual units, particularly - failure cases. Superficial goal: increase coverage percentage. -*) -open Protocol - -open Tztest - -module Test_tez_repr = struct - (** Testing predefined units: zero, one_mutez etc *) - let test_predefined_values () = - let open Lwt_result_syntax in - let zero_int64 = Tez_repr.to_mutez Tez_repr.zero in - let* () = Assert.equal_int64 ~loc:__LOC__ zero_int64 0L in - let one_mutez_int64 = Tez_repr.to_mutez Tez_repr.one_mutez in - let* () = Assert.equal_int64 ~loc:__LOC__ one_mutez_int64 1L in - let one_cent_int64 = Tez_repr.to_mutez Tez_repr.one_cent in - let* () = Assert.equal_int64 ~loc:__LOC__ one_cent_int64 10000L in - let fifty_cents_int64 = Tez_repr.to_mutez Tez_repr.fifty_cents in - let* () = Assert.equal_int64 ~loc:__LOC__ fifty_cents_int64 500000L in - let one_int64 = Tez_repr.to_mutez Tez_repr.one in - Assert.equal_int64 ~loc:__LOC__ one_int64 1000000L - - let test_subtract () = - let open Lwt_result_wrap_syntax in - let*?@ res = Tez_repr.(one -? zero) in - Assert.equal_int64 ~loc:__LOC__ (Tez_repr.to_mutez res) 1000000L - - let test_substract_underflow () = - let open Lwt_result_syntax in - match Tez_repr.(zero -? one) with - | Ok _ -> failwith "Expected to underflow" - | Error _ -> return_unit - - let test_addition () = - let open Lwt_result_wrap_syntax in - let*?@ res = Tez_repr.(one +? zero) in - Assert.equal_int64 ~loc:__LOC__ (Tez_repr.to_mutez res) 1000000L - - let test_addition_overflow () = - let open Lwt_result_syntax in - match Tez_repr.(of_mutez_exn 0x7fffffffffffffffL +? one) with - | Ok _ -> failwith "Expected to overflow" - | Error _ -> return_unit - - let test_mul () = - let open Lwt_result_wrap_syntax in - let*?@ res = Tez_repr.(zero *? 1L) in - Assert.equal_int64 ~loc:__LOC__ (Tez_repr.to_mutez res) 0L - - let test_mul_overflow () = - let open Lwt_result_syntax in - match Tez_repr.(of_mutez_exn 0x7fffffffffffffffL *? 2L) with - | Ok _ -> failwith "Expected to overflow" - | Error _ -> return_unit - - let test_div () = - let open Lwt_result_wrap_syntax in - let*?@ res = Tez_repr.(one *? 1L) in - Assert.equal_int64 ~loc:__LOC__ (Tez_repr.to_mutez res) 1000000L - - let test_div_by_zero () = - let open Lwt_result_syntax in - match Tez_repr.(one /? 0L) with - | Ok _ -> failwith "Expected to overflow" - | Error _ -> return_unit - - let test_to_mutez () = - let int64v = Tez_repr.(to_mutez one) in - Assert.equal_int64 ~loc:__LOC__ int64v 1000000L - - let test_of_mutez_non_negative () = - match Tez_repr.of_mutez 1000000L with - | Some tz -> - Assert.equal_int64 - ~loc:__LOC__ - (Tez_repr.to_mutez tz) - Tez_repr.(to_mutez one) - | None -> failwith "should have successfully converted 1000000L to tez" - - let test_of_mutez_negative () = - let open Lwt_result_syntax in - match Tez_repr.of_mutez (-1000000L) with - | Some _ -> failwith "should have failed to converted -1000000L to tez" - | None -> return_unit - - let test_of_mutez_exn () = - try - let tz = Tez_repr.of_mutez_exn 1000000L in - Assert.equal_int64 - ~loc:__LOC__ - (Tez_repr.to_mutez tz) - Tez_repr.(to_mutez one) - with e -> - let msg = Printexc.to_string e and stack = Printexc.get_backtrace () in - failwith "Unexpected exception: %s %s" msg stack - - let test_of_mutez_exn_negative () = - let open Lwt_result_syntax in - try - let (_ : Tez_repr.t) = Tez_repr.of_mutez_exn (-1000000L) in - failwith "should have failed to converted -1000000L to tez" - with - | Invalid_argument _ -> return_unit - | e -> - let msg = Printexc.to_string e and stack = Printexc.get_backtrace () in - failwith "Unexpected exception: %s %s" msg stack - - (* NOTE: Avoid assertions against too many functions from Tez_repr. Convert them to - int64 and compare instead of using [Tez_repr]'s compare *) - - (** Testing [encoding], int64 underneath, by applying it with Data_encoding *) - let test_data_encoding () = - let open Lwt_result_syntax in - let encoding = Tez_repr.encoding in - let bytes = - Data_encoding.Binary.to_bytes_exn Data_encoding.n (Z.of_int 1000000) - in - let* v = - match Data_encoding.Binary.of_bytes encoding bytes with - | Ok x -> return x - | Error e -> - failwith - "Data_encoding.Binary.read shouldn't have failed with \ - Tez_repr.encoding: %a" - Data_encoding.Binary.pp_read_error - e - in - Assert.equal_int64 ~loc:__LOC__ (Tez_repr.to_mutez v) 1000000L -end - -let tests = - [ - tztest - "Check if predefined values hold expected values" - `Quick - Test_tez_repr.test_predefined_values; - tztest "Tez.substract: basic behaviour" `Quick Test_tez_repr.test_subtract; - tztest - "Tez.substract: underflow case" - `Quick - Test_tez_repr.test_substract_underflow; - tztest - "Tez.add: basic behaviour (one + zero)" - `Quick - Test_tez_repr.test_addition; - tztest "Tez.add: overflow" `Quick Test_tez_repr.test_addition_overflow; - tztest "Tez.mul: basic case" `Quick Test_tez_repr.test_mul; - tztest "Tez.mul: overflow case" `Quick Test_tez_repr.test_mul_overflow; - tztest "Tez.div: basic case" `Quick Test_tez_repr.test_div; - tztest "Tez.div: division by zero" `Quick Test_tez_repr.test_div_by_zero; - tztest "Tez.to_mutez: basic assertion" `Quick Test_tez_repr.test_to_mutez; - tztest - "Tez.of_mutez: of non-negative ints" - `Quick - Test_tez_repr.test_of_mutez_non_negative; - tztest - "Tez.of_mutez: of negative ints" - `Quick - Test_tez_repr.test_of_mutez_negative; - tztest - "Tez.of_mutez_exn: of non-negative ints" - `Quick - Test_tez_repr.test_of_mutez_non_negative; - tztest - "Tez.of_mutez_exn: of negative ints" - `Quick - Test_tez_repr.test_of_mutez_negative; - tztest - "Tez.data_encoding: must encode tezzies correctly" - `Quick - Test_tez_repr.test_data_encoding; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("Tez_repr.ml", tests)] - |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_time_repr.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_time_repr.ml deleted file mode 100644 index 1b7037975b6879b462b3648be4baedfb23b03f83..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_time_repr.ml +++ /dev/null @@ -1,58 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2024 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (time repr) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_time_repr.ml - Subject: Error handling of time operations -*) - -open Protocol - -let test_nominal_add () = - let open Result_syntax in - let t = Time_repr.of_seconds (Int64.of_int 2) in - let addition = - let* p = Period_repr.of_seconds Int64.one in - Time_repr.( +? ) t p - in - match addition with - | Ok v -> - Assert.equal - ~loc:__LOC__ - Time_repr.equal - "test_nominal_add" - Time_repr.pp_hum - v - (Time_repr.of_seconds (Int64.of_int 3)) - | Error _ -> failwith "Addition has overflowed" - -let test_overflow_add () = - let open Lwt_result_syntax in - let t = Time_repr.of_seconds Int64.max_int in - match Period_repr.of_seconds Int64.one with - | Error _ -> failwith "period_repr conversion" - | Ok p -> ( - match Time_repr.( +? ) t p with - | Error _ -> return_unit - | Ok tres -> - failwith - "No overflow: %Ld + %Ld = %Ld" - (Time_repr.to_seconds t) - (Period_repr.to_seconds p) - (Time_repr.to_seconds tres)) - -let tests = - [ - Tztest.tztest "non-overflowing addition" `Quick test_nominal_add; - Tztest.tztest "overflowing addition" `Quick test_overflow_add; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("time", tests)] |> Lwt_main.run diff --git a/src/proto_019_PtParisB/lib_protocol/test/unit/test_zk_rollup_storage.ml b/src/proto_019_PtParisB/lib_protocol/test/unit/test_zk_rollup_storage.ml deleted file mode 100644 index 9c808d7c518fc40a899dc9a63f9914188b047c07..0000000000000000000000000000000000000000 --- a/src/proto_019_PtParisB/lib_protocol/test/unit/test_zk_rollup_storage.ml +++ /dev/null @@ -1,370 +0,0 @@ -(*****************************************************************************) -(* *) -(* SPDX-License-Identifier: MIT *) -(* Copyright (c) 2022 Nomadic Labs, *) -(* *) -(*****************************************************************************) - -(** Testing - ------- - Component: Protocol (Zk_rollup) - Invocation: dune exec src/proto_019_PtParisB/lib_protocol/test/unit/main.exe \ - -- --file test_zk_rollup_storage.ml - Subject: On ZK Rollup storage -*) - -open Protocol - -let batch_size = 10 - -module ZKRU = struct - include Alpha_context.Zk_rollup - - type pkh = Signature.Public_key_hash.t - - let pkh_encoding = Signature.Public_key_hash.encoding - - type ticket_hash = Alpha_context.Ticket_hash.t - - let ticket_hash_encoding = Alpha_context.Ticket_hash.encoding -end - -module Operator = Dummy_zk_rollup.Operator (struct - let batch_size = batch_size -end) - -let no_ticket op = (op, None) - -module Raw_context_tests = struct - module Helpers = struct - let is_empty : Zk_rollup_repr.pending_list -> bool = function - | Zk_rollup_repr.Empty _ -> true - | _ -> false - - let pending_length : Zk_rollup_repr.pending_list -> int = - let open Zk_rollup_repr in - function Empty _ -> 0 | Pending {length; _} -> length - - let get_pending_list = - let open Lwt_result_wrap_syntax in - let open Zk_rollup_repr in - fun ctx rollup -> function - | Empty _ -> return (ctx, []) - | Pending {next_index; length} -> - let head = Int64.(sub next_index (of_int length)) in - let to_get = - Stdlib.List.init length (fun x -> Int64.(add (of_int x) head)) - in - let* ctx, ops = - List.fold_left_es - (fun (ctx, acc) i -> - let*@ ctx, op = - Storage.Zk_rollup.Pending_operation.get (ctx, rollup) i - in - return (ctx, op :: acc)) - (ctx, []) - to_get - in - return (ctx, List.rev ops) - end - - let initial_ctx () = - let open Lwt_result_wrap_syntax in - let* b, contract = Context.init1 () in - let*@ ctx = - Raw_context.prepare - b.context - ~level:b.header.shell.level - ~predecessor_timestamp:b.header.shell.timestamp - ~timestamp:b.header.shell.timestamp - ~adaptive_issuance_enable:false - in - let nonce = Operation_hash.hash_string ["nonce_hash"] in - return (Raw_context.init_origination_nonce ctx nonce, contract) - - (* Context with an originated ZKRU *) - let originate_ctx () = - let open Lwt_result_wrap_syntax in - let open Zk_rollup_account_repr in - let* ctx, contract = initial_ctx () in - let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in - let state = Operator.init_state in - let state_length = Array.length state in - let circuits_info = SMap.of_seq @@ Kzg.SMap.to_seq Operator.circuits in - let nb_ops = 1 in - let*@ ctx, rollup, _size = - Zk_rollup_storage.originate - ctx - {public_parameters; state_length; circuits_info; nb_ops} - ~init_state:state - in - return (ctx, rollup, contract) - - (* Check that the pending list of a new ZKRU is empty *) - let pending_list_origination_is_empty () = - let open Lwt_result_wrap_syntax in - let* ctx, rollup, _contract = originate_ctx () in - let*@ _ctx, pending = Storage.Zk_rollup.Pending_list.get ctx rollup in - assert (Helpers.is_empty pending) ; - return_unit - - (* Check that appending an L2 operation with the [add_to_pending] helper - correctly updates both the pending list descriptor and the actual - operations under the [pending_operations] directory. *) - let pending_list_append () = - let open Lwt_result_wrap_syntax in - let* ctx, rollup, _contract = originate_ctx () in - let pkh, _, _ = Signature.generate_key () in - let op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 0; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [||]; - } - in - (* Append first operation *) - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op] in - let*@ ctx, pending = Storage.Zk_rollup.Pending_list.get ctx rollup in - assert (Helpers.pending_length pending = 1) ; - let* ctx, ops = Helpers.get_pending_list ctx rollup pending in - assert (List.length ops = 1) ; - (* Append second operation *) - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op] in - let*@ ctx, pending = Storage.Zk_rollup.Pending_list.get ctx rollup in - let* _ctx, ops = Helpers.get_pending_list ctx rollup pending in - assert (Helpers.pending_length pending = 2) ; - assert (List.length ops = 2) ; - return_unit - - let pending_list_append_errors () = - let open Lwt_result_wrap_syntax in - let* ctx, rollup, _contract = originate_ctx () in - let pkh, _, _ = Signature.generate_key () in - let op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 0; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [||]; - } - in - (* Append first operation *) - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op] in - let*@ ctx, pending = Storage.Zk_rollup.Pending_list.get ctx rollup in - assert (Helpers.pending_length pending = 1) ; - let* ctx, ops = Helpers.get_pending_list ctx rollup pending in - assert (List.length ops = 1) ; - (* Invalid op code *) - let wrong_op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 1; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [||]; - } - in - let*!@ e = Zk_rollup_storage.add_to_pending ctx rollup [wrong_op] in - let* () = - Assert.proto_error_with_info ~loc:__LOC__ e "Invalid op code in append" - in - (* Invalid rollup address *) - let*?@ _ctx, nonce = Raw_context.increment_origination_nonce ctx in - let*?@ address = - Zk_rollup_repr.Address.from_nonce (Origination_nonce.incr nonce) - in - let*!@ e = Zk_rollup_storage.add_to_pending ctx address [op] in - let expected_message = "Storage error (fatal internal error)" in - Assert.proto_error_with_info ~loc:__LOC__ e expected_message - - (* Check that the [get_prefix] helper actually returns a list of the - desired length. *) - let pending_list_get () = - let open Lwt_result_wrap_syntax in - let* ctx, rollup, _contract = originate_ctx () in - let pkh, _pk, _sk = Signature.generate_key () in - let op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 0; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [|Bls12_381.Fr.one|]; - } - in - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op; op] in - let*@ _ctx, prefix = Zk_rollup_storage.get_prefix ctx rollup 1 in - assert (List.length prefix = 1) ; - return_unit - - (* Check the [get_prefix] errors. *) - let pending_list_errors () = - let open Lwt_result_wrap_syntax in - let* ctx, rollup, _contract = originate_ctx () in - let pkh, _pk, _sk = Signature.generate_key () in - let op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 0; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [|Bls12_381.Fr.one|]; - } - in - (* Initialise the pending list with 2 operations *) - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op; op] in - (* Check that retrieving too many ops returns an error *) - let*!@ e = Zk_rollup_storage.get_prefix ctx rollup 3 in - let* () = - Assert.proto_error_with_info ~loc:__LOC__ e "Pending list is too short" - in - (* Check that retrieving a negative number of ops returns an error *) - let*!@ e = Zk_rollup_storage.get_prefix ctx rollup (-1) in - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - e - "Negative length for pending list prefix" - in - (* Check that get prefix fails with invalid zkru address *) - let*?@ _ctx, nonce = Raw_context.increment_origination_nonce ctx in - let*?@ address = - Zk_rollup_repr.Address.from_nonce (Origination_nonce.incr nonce) - in - let*!@ e = Zk_rollup_storage.get_prefix ctx address (-1) in - Assert.proto_error_with_info - ~loc:__LOC__ - e - "Storage error (fatal internal error)" - - (* Check that the [update] helper correctly removes a prefix of the - pending list (both in the descriptor and the actual operations storage). - *) - let test_update () = - let open Lwt_result_wrap_syntax in - (* Originate rollup and contract *) - let* ctx, rollup, contract = originate_ctx () in - let pkh = - match contract with Originated _ -> assert false | Implicit pkh -> pkh - in - let op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 0; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [|Bls12_381.Fr.one|]; - } - in - (* Populate rollup with 2 ops *) - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op; op] in - let*@ ctx, acc = Storage.Zk_rollup.Account.get ctx rollup in - (* Processing first pending op *) - let*@ ctx = - Zk_rollup_storage.update ctx rollup ~pending_to_drop:1 ~new_account:acc - in - (* Check that op at index 0 has been removed *) - let*@ ctx, opt = - Storage.Zk_rollup.Pending_operation.find (ctx, rollup) 0L - in - assert (Option.is_none opt) ; - (* Check that pending list still has one op *) - let*@ ctx, pending = Storage.Zk_rollup.Pending_list.get ctx rollup in - assert (Helpers.pending_length pending = 1) ; - let* _ctx, ops = Helpers.get_pending_list ctx rollup pending in - assert (List.length ops = 1) ; - return_unit - - let test_update_errors () = - let open Lwt_result_wrap_syntax in - (* Originate rollup and contract *) - let* ctx, rollup, contract = originate_ctx () in - let pkh = - match contract with Originated _ -> assert false | Implicit pkh -> pkh - in - let op = - no_ticket - Zk_rollup_operation_repr. - { - op_code = 0; - price = {id = Ticket_hash_repr.zero; amount = Z.zero}; - l1_dst = pkh; - rollup_id = rollup; - payload = [|Bls12_381.Fr.one|]; - } - in - (* Populate rollup with 2 ops *) - let*@ ctx, _size = Zk_rollup_storage.add_to_pending ctx rollup [op; op] in - let*@ ctx, acc = Storage.Zk_rollup.Account.get ctx rollup in - (* Processing too many ops *) - let*!@ e = - Zk_rollup_storage.update ctx rollup ~pending_to_drop:3 ~new_account:acc - in - let* () = - Assert.proto_error_with_info ~loc:__LOC__ e "Pending list is too short" - in - (* Processing negative number of ops *) - let*!@ e = - Zk_rollup_storage.update ctx rollup ~pending_to_drop:(-3) ~new_account:acc - in - let* () = - Assert.proto_error_with_info - ~loc:__LOC__ - e - "Negative length for pending list prefix" - in - (* Update with wrong address *) - let*?@ _ctx, nonce = Raw_context.increment_origination_nonce ctx in - let*?@ address = - Zk_rollup_repr.Address.from_nonce (Origination_nonce.incr nonce) - in - let*!@ e = - Zk_rollup_storage.update ctx address ~pending_to_drop:1 ~new_account:acc - in - Assert.proto_error_with_info - ~loc:__LOC__ - e - "Storage error (fatal internal error)" -end - -let tests = - [ - Tztest.tztest - "origination_pending_is_empty" - `Quick - Raw_context_tests.pending_list_origination_is_empty; - Tztest.tztest - "pending_list_append" - `Quick - Raw_context_tests.pending_list_append; - Tztest.tztest - "pending_list_append errors" - `Quick - Raw_context_tests.pending_list_append_errors; - Tztest.tztest "pending_list_get" `Quick Raw_context_tests.pending_list_get; - Tztest.tztest - "pending_list_get errors" - `Quick - Raw_context_tests.pending_list_errors; - Tztest.tztest "update" `Quick Raw_context_tests.test_update; - Tztest.tztest "update errors" `Quick Raw_context_tests.test_update_errors; - ] - -let () = - Alcotest_lwt.run ~__FILE__ Protocol.name [("zk rollup storage", tests)] - |> Lwt_main.run diff --git a/src/proto_alpha/lib_protocol/init_storage.ml b/src/proto_alpha/lib_protocol/init_storage.ml index eff9f1abc5387dd5ca85f620aa29cf0865283d15..245659ae08f1a55fba9ca1a627e60f8f5e9102b3 100644 --- a/src/proto_alpha/lib_protocol/init_storage.ml +++ b/src/proto_alpha/lib_protocol/init_storage.ml @@ -184,7 +184,7 @@ let prepare_first_block chain_id ctxt ~typecheck_smart_contract let* ctxt = Sc_rollup_inbox_storage.init_inbox ~predecessor ctxt in let* ctxt = Adaptive_issuance_storage.init ctxt in return (ctxt, commitments_balance_updates @ bootstrap_balance_updates) - | ParisB_019 + | ParisC_020 (* Please update [next_protocol] and [previous_protocol] in [tezt/lib_tezos/protocol.ml] when you update this value. *) -> (* TODO (#2704): possibly handle attestations for migration block (in bakers); diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index b4d6028256ba28cf9c633a07790405c988167081..3f8385ad4c9e45736c46a568c51c403d7c982cf2 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -881,7 +881,7 @@ let prepare ~level ~predecessor_timestamp ~timestamp ~adaptive_issuance_enable }; } -type previous_protocol = Genesis of Parameters_repr.t | ParisB_019 +type previous_protocol = Genesis of Parameters_repr.t | ParisC_020 let check_and_update_protocol_version ctxt = let open Lwt_result_syntax in @@ -897,7 +897,7 @@ let check_and_update_protocol_version ctxt = else if Compare.String.(s = "genesis") then let+ param, ctxt = get_proto_param ctxt in (Genesis param, ctxt) - else if Compare.String.(s = "paris_019") then return (ParisB_019, ctxt) + else if Compare.String.(s = "paris_020") then return (ParisC_020, ctxt) else Lwt.return @@ storage_error (Incompatible_protocol_version s) in let*! ctxt = @@ -1016,7 +1016,7 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = let* ctxt = set_cycle_eras ctxt cycle_eras in let*! result = add_constants ctxt param.constants in return (result, None) - | ParisB_019 -> + | ParisC_020 -> let*! c = get_previous_protocol_constants ctxt in let dal = diff --git a/src/proto_alpha/lib_protocol/raw_context.mli b/src/proto_alpha/lib_protocol/raw_context.mli index 1f34b498ba21119992bbcf0908fae58712ee4f41..e1215c20854f4824e43b2990fe8e2fba17b50477 100644 --- a/src/proto_alpha/lib_protocol/raw_context.mli +++ b/src/proto_alpha/lib_protocol/raw_context.mli @@ -93,7 +93,7 @@ val prepare : Context.t -> t tzresult Lwt.t -type previous_protocol = Genesis of Parameters_repr.t | ParisB_019 +type previous_protocol = Genesis of Parameters_repr.t | ParisC_020 val prepare_first_block : level:int32 -> diff --git a/tezt/lib_tezos/constant.ml b/tezt/lib_tezos/constant.ml index 90fe0238b8a3c38249df9226c88284c8945640be..25cc5e41a23ab78c5962799c8d73d877029f5bf1 100644 --- a/tezt/lib_tezos/constant.ml +++ b/tezt/lib_tezos/constant.ml @@ -75,6 +75,14 @@ let smart_rollup_installer = let _octez_smart_rollup_wasm_debugger = Uses.make ~tag:"wasm_debugger" ~path:"./octez-smart-rollup-wasm-debugger" +(* To be removed after Oxford is frozen *) +let _octez_accuser_PtParisB = + Uses.make ~tag:"accuser_ptparisb" ~path:"./octez-accuser-PtParisB" + +(* To be removed after Oxford is frozen *) +let _octez_baker_PtParisB = + Uses.make ~tag:"baker_ptparisb" ~path:"./octez-baker-PtParisB" + module WASM = struct let dal_echo_kernel = Uses.make ~tag:"dal_echo_kernel" ~path:"dal_echo_kernel.wasm" diff --git a/tezt/lib_tezos/protocol.ml b/tezt/lib_tezos/protocol.ml index 9f7b377c327d19a2282644599a1fa88607b2aa38..f8b1a22b24af6d7099424886aaeaa420da0f276f 100644 --- a/tezt/lib_tezos/protocol.ml +++ b/tezt/lib_tezos/protocol.ml @@ -25,13 +25,11 @@ (*****************************************************************************) (* Declaration order must respect the version order. *) -type t = ParisB | ParisC | Alpha +type t = ParisC | Alpha -let all = [ParisB; ParisC; Alpha] +let all = [ParisC; Alpha] -let encoding = - Data_encoding.string_enum - [("parisb", ParisB); ("parisc", ParisC); ("alpha", Alpha)] +let encoding = Data_encoding.string_enum [("parisc", ParisC); ("alpha", Alpha)] type constants = | Constants_sandbox @@ -45,13 +43,12 @@ let constants_to_string = function | Constants_mainnet_with_chain_id -> "mainnet-with-chain-id" | Constants_test -> "test" -let name = function Alpha -> "Alpha" | ParisB -> "Parisb" | ParisC -> "Parisc" +let name = function Alpha -> "Alpha" | ParisC -> "Parisc" -let number = function ParisB -> 019 | ParisC -> 020 | Alpha -> 021 +let number = function ParisC -> 020 | Alpha -> 021 let directory = function | Alpha -> "proto_alpha" - | ParisB -> "proto_019_PtParisB" | ParisC -> "proto_020_PsParisC" (* Test tags must be lowercase. *) @@ -59,7 +56,6 @@ let tag protocol = String.lowercase_ascii (name protocol) let hash = function | Alpha -> "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK" - | ParisB -> "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ" | ParisC -> "PsParisCZo7KAh1Z1smVd9ZMZ1HHn5gkzbM94V3PLCpknFWhUAi" let genesis_hash = "ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im" @@ -269,10 +265,7 @@ let write_parameter_file : JSON.encode_to_file_u output_file parameters ; Lwt.return output_file -let previous_protocol = function - | Alpha -> Some ParisB - | ParisC -> Some ParisB - | ParisB -> None +let previous_protocol = function Alpha -> Some ParisC | ParisC -> None let has_predecessor p = previous_protocol p <> None diff --git a/tezt/lib_tezos/protocol.mli b/tezt/lib_tezos/protocol.mli index bc0d385ce44eacfc0da355789722c45280cc9aee..ca93538be4f9a3b0c7684401f4d4819f21ac14e7 100644 --- a/tezt/lib_tezos/protocol.mli +++ b/tezt/lib_tezos/protocol.mli @@ -24,7 +24,7 @@ (*****************************************************************************) (** Protocols we may want to test with. *) -type t = ParisB | ParisC | Alpha +type t = ParisC | Alpha val encoding : t Data_encoding.t diff --git a/tezt/tests/adaptive_issuance.ml b/tezt/tests/adaptive_issuance.ml index 8ae929431f094b494eb2241a2ed48854711b8a1f..6a8ad64f41d9df06be40e2f86d5f269e4eb51c0c 100644 --- a/tezt/tests/adaptive_issuance.ml +++ b/tezt/tests/adaptive_issuance.ml @@ -214,7 +214,7 @@ let activate_ai protocol sandbox_client sandbox_endpoint = let test_AI_activation = Protocol.register_test ~__FILE__ - ~supports:Protocol.(From_protocol (number ParisB)) + ~supports:Protocol.(From_protocol (number ParisC)) ~title:"AI Activation - test AI activation after feature vote" ~tags:["adaptive_issuance"; "staking"] @@ fun protocol -> @@ -303,7 +303,7 @@ let test_AI_activation = let test_AI_activation_bypass_vote = Protocol.register_test ~__FILE__ - ~supports:Protocol.(From_protocol (number ParisB)) + ~supports:Protocol.(From_protocol (number ParisC)) ~title: "AI Activation - test AI activation with feature flag force_activation \ set" @@ -473,7 +473,7 @@ let test_staking = ~__FILE__ ~title: "Staking - test staking with delegate and staker in a simple scenario" - ~supports:Protocol.(From_protocol (number ParisB)) + ~supports:Protocol.(From_protocol (number ParisC)) ~tags: [ "adaptive_issuance"; @@ -1415,7 +1415,7 @@ let check_rpc_ok client rpc = let test_fix_delegated_balance = Protocol.register_test ~__FILE__ - ~supports:Protocol.(From_protocol (number ParisB)) + ~supports:Protocol.(From_protocol (number ParisC)) ~title:"Test protocol fix for delegated balance rpc" ~tags:["rpc"; "delegated_balance"] @@ fun protocol -> diff --git a/tezt/tests/dal.ml b/tezt/tests/dal.ml index 98807ec8b65625343463ad21df5b9bd8000042d6..9c2269642e7e447ad2df1eabcba925d2e46dfd0c 100644 --- a/tezt/tests/dal.ml +++ b/tezt/tests/dal.ml @@ -1876,7 +1876,7 @@ let test_dal_node_startup = ~title:"dal node startup" ~tags:[Tag.tezos2; "dal"] ~uses:(fun _protocol -> [Constant.octez_dal_node]) - ~supports:(Protocol.From_protocol 20) + ~supports:(Protocol.From_protocol 21) @@ fun protocol -> let run_dal = Dal_node.run ~wait_ready:false in let nodes_args = Node.[Synchronisation_threshold 0] in diff --git a/tezt/tests/dune b/tezt/tests/dune index 01aff2db4565d5155fbafac15645531f536b5b72..9c0b2f99f31552a735c88c5bff2e25db89db49c2 100644 --- a/tezt/tests/dune +++ b/tezt/tests/dune @@ -49,20 +49,6 @@ src_proto_020_PsParisC_lib_dac_plugin_test_tezt_lib src_proto_020_PsParisC_lib_client_test_tezt_lib src_proto_019_PtParisB_lib_sc_rollup_node_test_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_unit_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_regression_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_pbt_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_integration_validate_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_integration_operations_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_integration_michelson_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_integration_gas_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_integration_consensus_tezt_lib - src_proto_019_PtParisB_lib_protocol_test_integration_tezt_lib - src_proto_019_PtParisB_lib_plugin_test_tezt_lib - src_proto_019_PtParisB_lib_delegate_test_tezt_lib - src_proto_019_PtParisB_lib_dal_test_tezt_lib - src_proto_019_PtParisB_lib_dac_plugin_test_tezt_lib - src_proto_019_PtParisB_lib_client_test_tezt_lib src_lib_workers_test_tezt_lib src_lib_webassembly_tests_tezt_lib src_lib_wasmer_test_tezt_lib diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- adaptive_issuance.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- adaptive_issuance.out deleted file mode 100644 index 0114e0aaadd53c9afe261e65d41096dffdf379c1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- adaptive_issuance.out +++ /dev/null @@ -1,66 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/total_supply -"20000001000100" - -./octez-client rpc get /chains/main/blocks/head/context/total_frozen_stake -"1000000000000" - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate -"210.260" - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_exact -{ "numerator": "42052105987200", "denominator": "200000010001" } - -./octez-client rpc get /chains/main/blocks/head/context/issuance/issuance_per_minute -"80007812" - -./octez-client rpc get /chains/main/blocks/head/context/adaptive_issuance_launch_cycle -null - -./octez-client rpc get /chains/main/blocks/head/context/issuance/expected_issuance -[ { "cycle": 0, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 1, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 2, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" } ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/stakers' -[ { "staker": "[PUBLIC_KEY_HASH]", - "frozen_deposits": "200000000000" } ] - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_details -{ "static": { "numerator": "42052105987200", "denominator": "200000010001" }, - "dynamic": { "numerator": "0", "denominator": "1" } } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/total_delegated_stake' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_denominator' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/staking_numerator' -"0" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- contracts.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- contracts.out deleted file mode 100644 index f0233dd45418b0f458d9608c5aa07939a96fd0e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- contracts.out +++ /dev/null @@ -1,553 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "3800000000000", - "delegate": "[PUBLIC_KEY_HASH]", "counter": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "100000000", "counter": "1" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"100000000" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"1" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "99999566", "delegate": "[PUBLIC_KEY_HASH]", - "counter": "4" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"99999566" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"4" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": - { "prim": "Some", "args": [ { "string": "initial storage" } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": {} } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": { "prim": "Some", "args": [ { "string": "initial storage" } ] } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Some", "args": [ { "string": "initial storage" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", - "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": - [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": - { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": - { "rem_right": { "prim": "string" }, "rem_left": { "prim": "string" }, - "rem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%rem_left" ] }, - { "prim": "string", "annots": [ "%rem_right" ] } ] }, - "mem_right": { "prim": "string" }, "mem_left": { "prim": "string" }, - "mem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", "annots": [ "%mem_right" ] } ] }, - "default": { "prim": "unit" }, - "add_right": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add_left": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add": - { "prim": "or", - "args": - [ { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_right" ] } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "test" - }, - "type": { - "prim": "string" - } -}' -null - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "dup" - }, - "type": { - "prim": "string" - } -}' -null diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- delegates.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- delegates.out deleted file mode 100644 index 29602dc55a142c53e37b467120970e13c4e5ad95..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- delegates.out +++ /dev/null @@ -1,102 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 5, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -"200000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -false - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -[ "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -5 - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -Fatal error: - Command failed: The implicit account ([PUBLIC_KEY_HASH]) whose balance was requested is not a registered delegate. To get the balance of this account you can use the ../context/contracts/[PUBLIC_KEY_HASH]/balance RPC. - The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- mempool.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- mempool.out deleted file mode 100644 index 0fddb1a0a16287b6c0d5efad957005d1c848e31f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- mempool.out +++ /dev/null @@ -1,570 +0,0 @@ - -curl -s 'http://[HOST]:[PORT]/chains/main/mempool/monitor_operations?validated=true&outdated=true&branch_delayed=true&refused=true&branch_refused=true' -[] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"branch","id":"proto.019-PtParisB.contract.counter_in_the_past","contract":"[PUBLIC_KEY_HASH]","expected":"2","found":"1"}]}] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"5","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"temporary","id":"proto.019-PtParisB.contract.counter_in_the_future","contract":"[PUBLIC_KEY_HASH]","expected":"1","found":"5"}]}] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"0","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]"}] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]"}] - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=0' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": [], "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=3' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=0&validation_pass=3' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=1&validation_pass=2' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": [], "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=false&outdated=false&branch_delayed=false&branch_refused=false' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": [], "outdated": [], "branch_refused": [], "branch_delayed": [], - "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=true&outdated=false&branch_delayed=false&branch_refused=false' -{ "validated": [], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], "branch_refused": [], "branch_delayed": [], - "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=false&outdated=false&branch_delayed=true&branch_refused=false' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=false&outdated=false&branch_delayed=false&branch_refused=true' -{ "validated": [], "refused": [], "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], "branch_delayed": [], - "unprocessed": [] } - -./octez-client rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=false&outdated=true&branch_delayed=false&branch_refused=false' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": [], "unprocessed": [] } - -curl -s 'http://[HOST]:[PORT]/chains/main/mempool/monitor_operations?validated=true&outdated=true&branch_delayed=true&refused=true&branch_refused=true' -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]"},{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"0","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"permanent","id":"proto.019-PtParisB.prefilter.fees_too_low"}]},{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"branch","id":"proto.019-PtParisB.contract.counter_in_the_past","contract":"[PUBLIC_KEY_HASH]","expected":"2","found":"1"}]},{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"5","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"temporary","id":"proto.019-PtParisB.contract.counter_in_the_future","contract":"[PUBLIC_KEY_HASH]","expected":"1","found":"5"}]}] - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=false' -{} - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "1", - "minimal_nanotez_per_gas_unit": [ - "2", - "3" - ], - "minimal_nanotez_per_byte": [ - "4", - "5" - ], - "replace_by_fee_factor": [ - "6", - "7" - ], - "max_operations": 8, - "max_total_bytes": 9 -}' -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "25", - "minimal_nanotez_per_byte": [ - "1050", - "1" - ], - "max_operations": 2000 -}' -{ "minimal_fees": "25", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1050", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 2000, - "max_total_bytes": 10000000 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "25", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1050", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 2000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "25", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1050", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 2000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_fees": "25", "minimal_nanotez_per_byte": [ "1050", "1" ], - "max_operations": 2000 } - -./octez-client rpc post /chains/main/mempool/filter with '{}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=false' -{} - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100", - "0" - ] -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "0" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "0" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "0" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_nanotez_per_gas_unit": [ "100", "0" ] } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100", - "1" - ], - "minimal_nanotez_per_byte": [ - "4611686018427387903", - "1" - ], - "max_operations": 10000, - "max_total_bytes": 0 -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "100", - "minimal_nanotez_per_gas_unit": [ - "1050", - "1" - ], - "minimal_nanotez_per_byte": [ - "7", - "5" - ], - "replace_by_fee_factor": [ - "21", - "20" - ], - "max_operations": 10, - "max_total_bytes": 10000000, - "invalid_field_name": 100 -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "true" -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "max_operations": "1000" -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100" - ] -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100", - "1", - "10" - ] -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "-1" -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc post /chains/main/mempool/filter with '{ - "max_operations": -1 -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- misc_protocol.out deleted file mode 100644 index 7b3a6b1d2504a7d714361dc18c4be0c80483a83e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- misc_protocol.out +++ /dev/null @@ -1,137 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/constants -{ "proof_of_work_nonce_size": 8, "nonce_length": 32, - "max_anon_ops_per_block": 132, "max_operation_data_length": 32768, - "max_proposals_per_delegate": 20, "max_micheline_node_count": 50000, - "max_micheline_bytes_limit": 50000, - "max_allowed_global_constants_depth": 10000, "cache_layout_size": 3, - "michelson_maximum_type_size": 2001, "max_slashing_period": 2, - "smart_rollup_max_wrapped_proof_binary_size": 30000, - "smart_rollup_message_size_limit": 4096, - "smart_rollup_max_number_of_messages_per_level": "1000000", - "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, - "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, - "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", - "hard_gas_limit_per_block": "1733333", - "proof_of_work_threshold": "4611686018427387903", - "minimal_stake": "6000000000", "minimal_frozen_stake": "600000000", - "vdf_difficulty": "50000", "origination_size": 257, - "issuance_weights": - { "base_total_issued_per_minute": "80007812", - "baking_reward_fixed_portion_weight": 5120, - "baking_reward_bonus_weight": 5120, "attesting_reward_weight": 10240, - "seed_nonce_revelation_tip_weight": 1, "vdf_revelation_tip_weight": 1 }, - "cost_per_byte": "250", "hard_storage_limit_per_operation": "60000", - "quorum_min": 2000, "quorum_max": 7000, "min_proposal_quorum": 500, - "liquidity_baking_subsidy": "5000000", - "liquidity_baking_toggle_ema_threshold": 1000000000, - "max_operations_time_to_live": 8, "minimal_block_delay": "1", - "delay_increment_per_round": "1", "consensus_committee_size": 256, - "consensus_threshold": 0, - "minimal_participation_ratio": { "numerator": 2, "denominator": 3 }, - "limit_of_delegation_over_baking": 19, - "percentage_of_frozen_deposits_slashed_per_double_baking": 500, - "percentage_of_frozen_deposits_slashed_per_double_attestation": 5000, - "max_slashing_per_block": 10000, "max_slashing_threshold": 86, - "cache_script_size": 100000000, "cache_stake_distribution_cycles": 8, - "cache_sampler_state_cycles": 8, - "dal_parametric": - { "feature_enable": true, "incentives_enable": false, - "number_of_slots": 16, "attestation_lag": 8, - "attestation_threshold": 66, "redundancy_factor": 8, "page_size": 3967, - "slot_size": 126944, "number_of_shards": 256 }, - "smart_rollup_arith_pvm_enable": false, - "smart_rollup_origination_size": 6314, - "smart_rollup_challenge_window_in_blocks": 120960, - "smart_rollup_stake_amount": "10000000000", - "smart_rollup_commitment_period_in_blocks": 90, - "smart_rollup_max_lookahead_in_blocks": 259200, - "smart_rollup_max_active_outbox_levels": 120960, - "smart_rollup_max_outbox_messages_per_level": 100, - "smart_rollup_number_of_sections_in_dissection": 32, - "smart_rollup_timeout_period_in_blocks": 60480, - "smart_rollup_max_number_of_cemented_commitments": 5, - "smart_rollup_max_number_of_parallel_games": 32, - "smart_rollup_reveal_activation_level": - { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 1, - "dal_parameters": 1, "dal_attested_slots_validity_lag": 241920 }, - "smart_rollup_private_enable": true, - "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, - "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, - "zk_rollup_max_ticket_payload_size": 2048, - "global_limit_of_staking_over_baking": 5, - "edge_of_staking_over_delegation": 2, - "adaptive_issuance_launch_ema_threshold": 0, - "adaptive_rewards_params": - { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, - "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, - "issuance_ratio_initial_min": - { "numerator": "9", "denominator": "200" }, - "issuance_ratio_initial_max": - { "numerator": "11", "denominator": "200" }, "initial_period": 10, - "transition_period": 50, "max_bonus": "50000000000000", - "growth_rate": { "numerator": "1", "denominator": "100" }, - "center_dz": { "numerator": "1", "denominator": "2" }, - "radius_dz": { "numerator": "1", "denominator": "50" } }, - "adaptive_issuance_activation_vote_enable": true, - "autostaking_enable": true, "adaptive_issuance_force_activation": false, - "ns_enable": true, "direct_ticket_spending_enable": false } - -./octez-client rpc get /chains/main/blocks/head/helpers/baking_rights -[ { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 0, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 1, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 3, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 10, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/baking_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/current_level?offset=0' -{ "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } - -./octez-client rpc get /chains/main/blocks/head/context/denunciations -[] - -./octez-client rpc get /chains/main/blocks/head/helpers/attestation_rights -[ { "level": 1, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 11, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 4, "attestation_power": 47, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 2, "attestation_power": 46, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 55, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 0, "attestation_power": 58, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/attestation_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 1, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 11, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle -{ "first": 1, "last": 8 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- votes.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- votes.out deleted file mode 100644 index aceb75eb281b7565ecb06fb9af9fd16e97505d7a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode client) RPC regression tests- votes.out +++ /dev/null @@ -1,78 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/votes/ballot_list -[] - -./octez-client rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "0", "nay": "0", "pass": "0" } - -./octez-client rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 1, "remaining": 2 } - -./octez-client rpc get /chains/main/blocks/head/votes/current_proposal -null - -./octez-client rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/proposals -[ [ "ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp", "4000000000000" ] ] - -./octez-client rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 2, "remaining": 1 } - -./octez-client rpc get /chains/main/blocks/head/votes/total_voting_power -"20000000000000" - -./octez-client rpc get /chains/main/blocks/head/votes/ballot_list -[ { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "nay" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "pass" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "yay" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "4000001679643", "nay": "4000000000000", "pass": "4000000000000" } - -./octez-client rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 0, "remaining": 3 } - -./octez-client rpc get /chains/main/blocks/head/votes/current_proposal -"ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp" - -./octez-client rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000001679643" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/proposals -[] - -./octez-client rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 1, "remaining": 2 } - -./octez-client rpc get /chains/main/blocks/head/votes/total_voting_power -"20000001679643" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- adaptive_issuance.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- adaptive_issuance.out deleted file mode 100644 index 4cd8cf5d10846ee831565be86e59b74b09c52bff..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- adaptive_issuance.out +++ /dev/null @@ -1,66 +0,0 @@ - -./octez-client --mode light rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get /chains/main/blocks/head/context/total_supply -"20000001000100" - -./octez-client --mode light rpc get /chains/main/blocks/head/context/total_frozen_stake -"1000000000000" - -./octez-client --mode light rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate -"210.260" - -./octez-client --mode light rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_exact -{ "numerator": "42052105987200", "denominator": "200000010001" } - -./octez-client --mode light rpc get /chains/main/blocks/head/context/issuance/issuance_per_minute -"80007812" - -./octez-client --mode light rpc get /chains/main/blocks/head/context/adaptive_issuance_launch_cycle -null - -./octez-client --mode light rpc get /chains/main/blocks/head/context/issuance/expected_issuance -[ { "cycle": 0, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 1, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 2, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" } ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/stakers' -[ { "staker": "[PUBLIC_KEY_HASH]", - "frozen_deposits": "200000000000" } ] - -./octez-client --mode light rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_details -{ "static": { "numerator": "42052105987200", "denominator": "200000010001" }, - "dynamic": { "numerator": "0", "denominator": "1" } } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/total_delegated_stake' -"0" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_denominator' -"0" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/staking_numerator' -"0" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- contracts.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- contracts.out deleted file mode 100644 index cd67573dc9ab84c3c7559446938a1c2154d1d2d9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- contracts.out +++ /dev/null @@ -1,553 +0,0 @@ - -./octez-client --mode light rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "3800000000000", - "delegate": "[PUBLIC_KEY_HASH]", "counter": "0" } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800000000000" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"0" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "0" } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "100000000", "counter": "1" } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"100000000" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"1" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -null - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "99999566", "delegate": "[PUBLIC_KEY_HASH]", - "counter": "4" } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"99999566" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"4" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": - { "prim": "Some", "args": [ { "string": "initial storage" } ] } } } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": {} } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": { "prim": "Some", "args": [ { "string": "initial storage" } ] } } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Some", "args": [ { "string": "initial storage" } ] } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", - "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": - [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": - { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client --mode light rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": - { "rem_right": { "prim": "string" }, "rem_left": { "prim": "string" }, - "rem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%rem_left" ] }, - { "prim": "string", "annots": [ "%rem_right" ] } ] }, - "mem_right": { "prim": "string" }, "mem_left": { "prim": "string" }, - "mem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", "annots": [ "%mem_right" ] } ] }, - "default": { "prim": "unit" }, - "add_right": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add_left": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add": - { "prim": "or", - "args": - [ { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_right" ] } ] } } } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } - -./octez-client --mode light rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "test" - }, - "type": { - "prim": "string" - } -}' -null - -./octez-client --mode light rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "dup" - }, - "type": { - "prim": "string" - } -}' -null diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- delegates.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- delegates.out deleted file mode 100644 index d3577edcf2c118f6708f122400183f745bcfaee5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- delegates.out +++ /dev/null @@ -1,102 +0,0 @@ - -./octez-client --mode light rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 5, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -"4000000000000" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -"200000000000" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -false - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -"0" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -[ "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -5 - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -"4000000000000" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -"4000000000000" - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -Fatal error: - Command failed: The implicit account ([PUBLIC_KEY_HASH]) whose balance was requested is not a registered delegate. To get the balance of this account you can use the ../context/contracts/[PUBLIC_KEY_HASH]/balance RPC. - The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode light rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- misc_protocol.out deleted file mode 100644 index e3fcc9f9b786e88a016451a3b6dc859214a6244f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- misc_protocol.out +++ /dev/null @@ -1,137 +0,0 @@ - -./octez-client --mode light rpc get /chains/main/blocks/head/context/constants -{ "proof_of_work_nonce_size": 8, "nonce_length": 32, - "max_anon_ops_per_block": 132, "max_operation_data_length": 32768, - "max_proposals_per_delegate": 20, "max_micheline_node_count": 50000, - "max_micheline_bytes_limit": 50000, - "max_allowed_global_constants_depth": 10000, "cache_layout_size": 3, - "michelson_maximum_type_size": 2001, "max_slashing_period": 2, - "smart_rollup_max_wrapped_proof_binary_size": 30000, - "smart_rollup_message_size_limit": 4096, - "smart_rollup_max_number_of_messages_per_level": "1000000", - "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, - "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, - "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", - "hard_gas_limit_per_block": "1733333", - "proof_of_work_threshold": "4611686018427387903", - "minimal_stake": "6000000000", "minimal_frozen_stake": "600000000", - "vdf_difficulty": "50000", "origination_size": 257, - "issuance_weights": - { "base_total_issued_per_minute": "80007812", - "baking_reward_fixed_portion_weight": 5120, - "baking_reward_bonus_weight": 5120, "attesting_reward_weight": 10240, - "seed_nonce_revelation_tip_weight": 1, "vdf_revelation_tip_weight": 1 }, - "cost_per_byte": "250", "hard_storage_limit_per_operation": "60000", - "quorum_min": 2000, "quorum_max": 7000, "min_proposal_quorum": 500, - "liquidity_baking_subsidy": "5000000", - "liquidity_baking_toggle_ema_threshold": 1000000000, - "max_operations_time_to_live": 8, "minimal_block_delay": "1", - "delay_increment_per_round": "1", "consensus_committee_size": 256, - "consensus_threshold": 0, - "minimal_participation_ratio": { "numerator": 2, "denominator": 3 }, - "limit_of_delegation_over_baking": 19, - "percentage_of_frozen_deposits_slashed_per_double_baking": 500, - "percentage_of_frozen_deposits_slashed_per_double_attestation": 5000, - "max_slashing_per_block": 10000, "max_slashing_threshold": 86, - "cache_script_size": 100000000, "cache_stake_distribution_cycles": 8, - "cache_sampler_state_cycles": 8, - "dal_parametric": - { "feature_enable": true, "incentives_enable": false, - "number_of_slots": 16, "attestation_lag": 8, - "attestation_threshold": 66, "redundancy_factor": 8, "page_size": 3967, - "slot_size": 126944, "number_of_shards": 256 }, - "smart_rollup_arith_pvm_enable": false, - "smart_rollup_origination_size": 6314, - "smart_rollup_challenge_window_in_blocks": 120960, - "smart_rollup_stake_amount": "10000000000", - "smart_rollup_commitment_period_in_blocks": 90, - "smart_rollup_max_lookahead_in_blocks": 259200, - "smart_rollup_max_active_outbox_levels": 120960, - "smart_rollup_max_outbox_messages_per_level": 100, - "smart_rollup_number_of_sections_in_dissection": 32, - "smart_rollup_timeout_period_in_blocks": 60480, - "smart_rollup_max_number_of_cemented_commitments": 5, - "smart_rollup_max_number_of_parallel_games": 32, - "smart_rollup_reveal_activation_level": - { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 1, - "dal_parameters": 1, "dal_attested_slots_validity_lag": 241920 }, - "smart_rollup_private_enable": true, - "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, - "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, - "zk_rollup_max_ticket_payload_size": 2048, - "global_limit_of_staking_over_baking": 5, - "edge_of_staking_over_delegation": 2, - "adaptive_issuance_launch_ema_threshold": 0, - "adaptive_rewards_params": - { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, - "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, - "issuance_ratio_initial_min": - { "numerator": "9", "denominator": "200" }, - "issuance_ratio_initial_max": - { "numerator": "11", "denominator": "200" }, "initial_period": 10, - "transition_period": 50, "max_bonus": "50000000000000", - "growth_rate": { "numerator": "1", "denominator": "100" }, - "center_dz": { "numerator": "1", "denominator": "2" }, - "radius_dz": { "numerator": "1", "denominator": "50" } }, - "adaptive_issuance_activation_vote_enable": true, - "autostaking_enable": true, "adaptive_issuance_force_activation": false, - "ns_enable": true, "direct_ticket_spending_enable": false } - -./octez-client --mode light rpc get /chains/main/blocks/head/helpers/baking_rights -[ { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 0, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 1, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 3, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 10, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/helpers/baking_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/helpers/current_level?offset=0' -{ "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } - -./octez-client --mode light rpc get /chains/main/blocks/head/context/denunciations -[] - -./octez-client --mode light rpc get /chains/main/blocks/head/helpers/attestation_rights -[ { "level": 1, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 11, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 4, "attestation_power": 47, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 2, "attestation_power": 46, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 55, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 0, "attestation_power": 58, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client --mode light rpc get '/chains/main/blocks/head/helpers/attestation_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 1, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 11, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client --mode light rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle -{ "first": 1, "last": 8 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- votes.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- votes.out deleted file mode 100644 index 8baa3dc263188b5593965cdc11cab0961ef74cc1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode light) RPC regression tests- votes.out +++ /dev/null @@ -1,78 +0,0 @@ - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/ballot_list -[] - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "0", "nay": "0", "pass": "0" } - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 1, "remaining": 2 } - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/current_proposal -null - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" } ] - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/proposals -[ [ "ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp", "4000000000000" ] ] - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 2, "remaining": 1 } - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/total_voting_power -"20000000000000" - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/ballot_list -[ { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "nay" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "pass" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "yay" } ] - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "4000001679643", "nay": "4000000000000", "pass": "4000000000000" } - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 0, "remaining": 3 } - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/current_proposal -"ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp" - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000001679643" } ] - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/proposals -[] - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 1, "remaining": 2 } - -./octez-client --mode light rpc get /chains/main/blocks/head/votes/total_voting_power -"20000001679643" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- adaptive_issuance.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- adaptive_issuance.out deleted file mode 100644 index 964ebe4746333305442b6b905abe24770d55749e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- adaptive_issuance.out +++ /dev/null @@ -1,66 +0,0 @@ - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/total_supply -"20000001000100" - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/total_frozen_stake -"1000000000000" - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate -"210.260" - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_exact -{ "numerator": "42052105987200", "denominator": "200000010001" } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/issuance/issuance_per_minute -"80007812" - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/adaptive_issuance_launch_cycle -null - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/issuance/expected_issuance -[ { "cycle": 0, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 1, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 2, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" } ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/stakers' -[ { "staker": "[PUBLIC_KEY_HASH]", - "frozen_deposits": "200000000000" } ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_details -{ "static": { "numerator": "42052105987200", "denominator": "200000010001" }, - "dynamic": { "numerator": "0", "denominator": "1" } } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/total_delegated_stake' -"0" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_denominator' -"0" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/staking_numerator' -"0" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- contracts.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- contracts.out deleted file mode 100644 index f9a84fa4175175605fe822370747c85920b0cc54..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- contracts.out +++ /dev/null @@ -1,553 +0,0 @@ - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "3800000000000", - "delegate": "[PUBLIC_KEY_HASH]", "counter": "0" } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800000000000" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"0" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "0" } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "100000000", "counter": "1" } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"100000000" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"1" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -null - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "99999566", "delegate": "[PUBLIC_KEY_HASH]", - "counter": "4" } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"99999566" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"4" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": - { "prim": "Some", "args": [ { "string": "initial storage" } ] } } } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": {} } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": { "prim": "Some", "args": [ { "string": "initial storage" } ] } } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Some", "args": [ { "string": "initial storage" } ] } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", - "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": - [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": - { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client --mode proxy rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": - { "rem_right": { "prim": "string" }, "rem_left": { "prim": "string" }, - "rem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%rem_left" ] }, - { "prim": "string", "annots": [ "%rem_right" ] } ] }, - "mem_right": { "prim": "string" }, "mem_left": { "prim": "string" }, - "mem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", "annots": [ "%mem_right" ] } ] }, - "default": { "prim": "unit" }, - "add_right": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add_left": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add": - { "prim": "or", - "args": - [ { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_right" ] } ] } } } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } - -./octez-client --mode proxy rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "test" - }, - "type": { - "prim": "string" - } -}' -null - -./octez-client --mode proxy rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "dup" - }, - "type": { - "prim": "string" - } -}' -null diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- delegates.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- delegates.out deleted file mode 100644 index 6982ef2ae258d70a82143ca34669eacf515ae1c2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- delegates.out +++ /dev/null @@ -1,102 +0,0 @@ - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 5, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -"4000000000000" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -"200000000000" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -false - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -"0" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -[ "[PUBLIC_KEY_HASH]" ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -5 - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -"4000000000000" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -"4000000000000" - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -Fatal error: - Command failed: The implicit account ([PUBLIC_KEY_HASH]) whose balance was requested is not a registered delegate. To get the balance of this account you can use the ../context/contracts/[PUBLIC_KEY_HASH]/balance RPC. - The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- mempool.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- mempool.out deleted file mode 100644 index 1e3d15de5d2e0a4cc2543aad3945b8dff36959a4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- mempool.out +++ /dev/null @@ -1,570 +0,0 @@ - -curl -s 'http://[HOST]:[PORT]/chains/main/mempool/monitor_operations?validated=true&outdated=true&branch_delayed=true&refused=true&branch_refused=true' -[] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"branch","id":"proto.019-PtParisB.contract.counter_in_the_past","contract":"[PUBLIC_KEY_HASH]","expected":"2","found":"1"}]}] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"5","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"temporary","id":"proto.019-PtParisB.contract.counter_in_the_future","contract":"[PUBLIC_KEY_HASH]","expected":"1","found":"5"}]}] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"0","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]"}] -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]"}] - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=0' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": [], "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=3' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=0&validation_pass=3' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=true&outdated=true&branch_delayed=true&branch_refused=true&validation_pass=1&validation_pass=2' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": [], "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=true&refused=false&outdated=false&branch_delayed=false&branch_refused=false' -{ "validated": - [ { "hash": "[OPERATION_HASH]", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]" } ], - "refused": [], "outdated": [], "branch_refused": [], "branch_delayed": [], - "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=true&outdated=false&branch_delayed=false&branch_refused=false' -{ "validated": [], - "refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", "fee": "0", - "counter": "1", "gas_limit": "1040", "storage_limit": "257", - "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "permanent", - "id": "proto.019-PtParisB.prefilter.fees_too_low" } ] } ], - "outdated": [], "branch_refused": [], "branch_delayed": [], - "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=false&outdated=false&branch_delayed=true&branch_refused=false' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "5", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "temporary", - "id": "proto.019-PtParisB.contract.counter_in_the_future", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "1", "found": "5" } ] } ], "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=false&outdated=false&branch_delayed=false&branch_refused=true' -{ "validated": [], "refused": [], "outdated": [], - "branch_refused": - [ { "hash": "[OPERATION_HASH]", - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "branch": "[BRANCH_HASH]", - "contents": - [ { "kind": "transaction", - "source": "[PUBLIC_KEY_HASH]", - "fee": "1000", "counter": "1", "gas_limit": "1040", - "storage_limit": "257", "amount": "1000000", - "destination": "[PUBLIC_KEY_HASH]" } ], - "signature": - "[SIGNATURE]", - "error": - [ { "kind": "branch", - "id": "proto.019-PtParisB.contract.counter_in_the_past", - "contract": "[PUBLIC_KEY_HASH]", - "expected": "2", "found": "1" } ] } ], "branch_delayed": [], - "unprocessed": [] } - -./octez-client --mode proxy rpc get '/chains/main/mempool/pending_operations?version=2&validated=false&refused=false&outdated=true&branch_delayed=false&branch_refused=false' -{ "validated": [], "refused": [], "outdated": [], "branch_refused": [], - "branch_delayed": [], "unprocessed": [] } - -curl -s 'http://[HOST]:[PORT]/chains/main/mempool/monitor_operations?validated=true&outdated=true&branch_delayed=true&refused=true&branch_refused=true' -[{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]"},{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"0","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"permanent","id":"proto.019-PtParisB.prefilter.fees_too_low"}]},{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"1","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"branch","id":"proto.019-PtParisB.contract.counter_in_the_past","contract":"[PUBLIC_KEY_HASH]","expected":"2","found":"1"}]},{"hash":"[OPERATION_HASH]","protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","branch":"[BRANCH_HASH]","contents":[{"kind":"transaction","source":"[PUBLIC_KEY_HASH]","fee":"1000","counter":"5","gas_limit":"1040","storage_limit":"257","amount":"1000000","destination":"[PUBLIC_KEY_HASH]"}],"signature":"[SIGNATURE]","error":[{"kind":"temporary","id":"proto.019-PtParisB.contract.counter_in_the_future","contract":"[PUBLIC_KEY_HASH]","expected":"1","found":"5"}]}] - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=false' -{} - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "1", - "minimal_nanotez_per_gas_unit": [ - "2", - "3" - ], - "minimal_nanotez_per_byte": [ - "4", - "5" - ], - "replace_by_fee_factor": [ - "6", - "7" - ], - "max_operations": 8, - "max_total_bytes": 9 -}' -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_fees": "1", "minimal_nanotez_per_gas_unit": [ "2", "3" ], - "minimal_nanotez_per_byte": [ "4", "5" ], - "replace_by_fee_factor": [ "6", "7" ], "max_operations": 8, - "max_total_bytes": 9 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "25", - "minimal_nanotez_per_byte": [ - "1050", - "1" - ], - "max_operations": 2000 -}' -{ "minimal_fees": "25", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1050", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 2000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "25", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1050", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 2000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "25", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1050", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 2000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_fees": "25", "minimal_nanotez_per_byte": [ "1050", "1" ], - "max_operations": 2000 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=false' -{} - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100", - "0" - ] -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "0" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "0" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "0" ], - "minimal_nanotez_per_byte": [ "1000", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 10000000 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_nanotez_per_gas_unit": [ "100", "0" ] } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100", - "1" - ], - "minimal_nanotez_per_byte": [ - "4611686018427387903", - "1" - ], - "max_operations": 10000, - "max_total_bytes": 0 -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=true' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get '/chains/main/mempool/filter?include_default=false' -{ "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "100", - "minimal_nanotez_per_gas_unit": [ - "1050", - "1" - ], - "minimal_nanotez_per_byte": [ - "7", - "5" - ], - "replace_by_fee_factor": [ - "21", - "20" - ], - "max_operations": 10, - "max_total_bytes": 10000000, - "invalid_field_name": 100 -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "true" -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "max_operations": "1000" -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100" - ] -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_nanotez_per_gas_unit": [ - "100", - "1", - "10" - ] -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "minimal_fees": "-1" -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc post /chains/main/mempool/filter with '{ - "max_operations": -1 -}' -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } - -./octez-client --mode proxy rpc get /chains/main/mempool/filter -{ "minimal_fees": "100", "minimal_nanotez_per_gas_unit": [ "100", "1" ], - "minimal_nanotez_per_byte": [ "4611686018427387903", "1" ], - "replace_by_fee_factor": [ "21", "20" ], "max_operations": 10000, - "max_total_bytes": 0 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- misc_protocol.out deleted file mode 100644 index 67dcdd688e7155afb284b508f0e6e50dbe36a741..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- misc_protocol.out +++ /dev/null @@ -1,137 +0,0 @@ - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/constants -{ "proof_of_work_nonce_size": 8, "nonce_length": 32, - "max_anon_ops_per_block": 132, "max_operation_data_length": 32768, - "max_proposals_per_delegate": 20, "max_micheline_node_count": 50000, - "max_micheline_bytes_limit": 50000, - "max_allowed_global_constants_depth": 10000, "cache_layout_size": 3, - "michelson_maximum_type_size": 2001, "max_slashing_period": 2, - "smart_rollup_max_wrapped_proof_binary_size": 30000, - "smart_rollup_message_size_limit": 4096, - "smart_rollup_max_number_of_messages_per_level": "1000000", - "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, - "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, - "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", - "hard_gas_limit_per_block": "1733333", - "proof_of_work_threshold": "4611686018427387903", - "minimal_stake": "6000000000", "minimal_frozen_stake": "600000000", - "vdf_difficulty": "50000", "origination_size": 257, - "issuance_weights": - { "base_total_issued_per_minute": "80007812", - "baking_reward_fixed_portion_weight": 5120, - "baking_reward_bonus_weight": 5120, "attesting_reward_weight": 10240, - "seed_nonce_revelation_tip_weight": 1, "vdf_revelation_tip_weight": 1 }, - "cost_per_byte": "250", "hard_storage_limit_per_operation": "60000", - "quorum_min": 2000, "quorum_max": 7000, "min_proposal_quorum": 500, - "liquidity_baking_subsidy": "5000000", - "liquidity_baking_toggle_ema_threshold": 1000000000, - "max_operations_time_to_live": 8, "minimal_block_delay": "1", - "delay_increment_per_round": "1", "consensus_committee_size": 256, - "consensus_threshold": 0, - "minimal_participation_ratio": { "numerator": 2, "denominator": 3 }, - "limit_of_delegation_over_baking": 19, - "percentage_of_frozen_deposits_slashed_per_double_baking": 500, - "percentage_of_frozen_deposits_slashed_per_double_attestation": 5000, - "max_slashing_per_block": 10000, "max_slashing_threshold": 86, - "cache_script_size": 100000000, "cache_stake_distribution_cycles": 8, - "cache_sampler_state_cycles": 8, - "dal_parametric": - { "feature_enable": true, "incentives_enable": false, - "number_of_slots": 16, "attestation_lag": 8, - "attestation_threshold": 66, "redundancy_factor": 8, "page_size": 3967, - "slot_size": 126944, "number_of_shards": 256 }, - "smart_rollup_arith_pvm_enable": false, - "smart_rollup_origination_size": 6314, - "smart_rollup_challenge_window_in_blocks": 120960, - "smart_rollup_stake_amount": "10000000000", - "smart_rollup_commitment_period_in_blocks": 90, - "smart_rollup_max_lookahead_in_blocks": 259200, - "smart_rollup_max_active_outbox_levels": 120960, - "smart_rollup_max_outbox_messages_per_level": 100, - "smart_rollup_number_of_sections_in_dissection": 32, - "smart_rollup_timeout_period_in_blocks": 60480, - "smart_rollup_max_number_of_cemented_commitments": 5, - "smart_rollup_max_number_of_parallel_games": 32, - "smart_rollup_reveal_activation_level": - { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 1, - "dal_parameters": 1, "dal_attested_slots_validity_lag": 241920 }, - "smart_rollup_private_enable": true, - "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, - "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, - "zk_rollup_max_ticket_payload_size": 2048, - "global_limit_of_staking_over_baking": 5, - "edge_of_staking_over_delegation": 2, - "adaptive_issuance_launch_ema_threshold": 0, - "adaptive_rewards_params": - { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, - "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, - "issuance_ratio_initial_min": - { "numerator": "9", "denominator": "200" }, - "issuance_ratio_initial_max": - { "numerator": "11", "denominator": "200" }, "initial_period": 10, - "transition_period": 50, "max_bonus": "50000000000000", - "growth_rate": { "numerator": "1", "denominator": "100" }, - "center_dz": { "numerator": "1", "denominator": "2" }, - "radius_dz": { "numerator": "1", "denominator": "50" } }, - "adaptive_issuance_activation_vote_enable": true, - "autostaking_enable": true, "adaptive_issuance_force_activation": false, - "ns_enable": true, "direct_ticket_spending_enable": false } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/helpers/baking_rights -[ { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 0, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 1, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 3, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 10, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/helpers/baking_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 2, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/helpers/current_level?offset=0' -{ "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/context/denunciations -[] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/helpers/attestation_rights -[ { "level": 1, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 11, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 4, "attestation_power": 47, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 2, "attestation_power": 46, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 55, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 0, "attestation_power": 58, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client --mode proxy rpc get '/chains/main/blocks/head/helpers/attestation_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 1, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 11, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle -{ "first": 1, "last": 8 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- votes.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- votes.out deleted file mode 100644 index 1bf5d004e2814659860c1ee4a48a8baf08d0760a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy) RPC regression tests- votes.out +++ /dev/null @@ -1,78 +0,0 @@ - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/ballot_list -[] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "0", "nay": "0", "pass": "0" } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 1, "remaining": 2 } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/current_proposal -null - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" } ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/proposals -[ [ "ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp", "4000000000000" ] ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 2, "remaining": 1 } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/total_voting_power -"20000000000000" - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/ballot_list -[ { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "nay" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "pass" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "yay" } ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "4000001679643", "nay": "4000000000000", "pass": "4000000000000" } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 0, "remaining": 3 } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/current_proposal -"ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp" - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000001679643" } ] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/proposals -[] - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 1, "remaining": 2 } - -./octez-client --mode proxy rpc get /chains/main/blocks/head/votes/total_voting_power -"20000001679643" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- adaptive_issuance.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- adaptive_issuance.out deleted file mode 100644 index ad45f80f6fdecb4ad9a84a1d9e7f8a083ea4b5c4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- adaptive_issuance.out +++ /dev/null @@ -1,67 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/total_supply -"20000001416766" - -./octez-client rpc get /chains/main/blocks/head/context/total_frozen_stake -"1000000000000" - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate -"210.260" - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_exact -{ "numerator": "700868433120000", "denominator": "3333333569461" } - -./octez-client rpc get /chains/main/blocks/head/context/issuance/issuance_per_minute -"80007812" - -./octez-client rpc get /chains/main/blocks/head/context/adaptive_issuance_launch_cycle -5 - -./octez-client rpc get /chains/main/blocks/head/context/issuance/expected_issuance -[ { "cycle": 0, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 1, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 2, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" } ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/stakers' -[ { "staker": "[PUBLIC_KEY_HASH]", - "frozen_deposits": "200000000000" } ] - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_details -{ "static": - { "numerator": "700868433120000", "denominator": "3333333569461" }, - "dynamic": { "numerator": "0", "denominator": "1" } } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/total_delegated_stake' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_denominator' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/staking_numerator' -"0" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- contracts.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- contracts.out deleted file mode 100644 index f0233dd45418b0f458d9608c5aa07939a96fd0e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- contracts.out +++ /dev/null @@ -1,553 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "3800000000000", - "delegate": "[PUBLIC_KEY_HASH]", "counter": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "100000000", "counter": "1" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"100000000" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"1" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "99999566", "delegate": "[PUBLIC_KEY_HASH]", - "counter": "4" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"99999566" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"4" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": - { "prim": "Some", "args": [ { "string": "initial storage" } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": {} } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": { "prim": "Some", "args": [ { "string": "initial storage" } ] } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Some", "args": [ { "string": "initial storage" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", - "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": - [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": - { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": - { "rem_right": { "prim": "string" }, "rem_left": { "prim": "string" }, - "rem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%rem_left" ] }, - { "prim": "string", "annots": [ "%rem_right" ] } ] }, - "mem_right": { "prim": "string" }, "mem_left": { "prim": "string" }, - "mem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", "annots": [ "%mem_right" ] } ] }, - "default": { "prim": "unit" }, - "add_right": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add_left": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add": - { "prim": "or", - "args": - [ { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_right" ] } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "test" - }, - "type": { - "prim": "string" - } -}' -null - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "dup" - }, - "type": { - "prim": "string" - } -}' -null diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- delegates.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- delegates.out deleted file mode 100644 index 29602dc55a142c53e37b467120970e13c4e5ad95..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- delegates.out +++ /dev/null @@ -1,102 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 5, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -"200000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -false - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -[ "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -5 - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -Fatal error: - Command failed: The implicit account ([PUBLIC_KEY_HASH]) whose balance was requested is not a registered delegate. To get the balance of this account you can use the ../context/contracts/[PUBLIC_KEY_HASH]/balance RPC. - The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out deleted file mode 100644 index 01b7d506f3afe0d243b50dbc504207baed613774..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out +++ /dev/null @@ -1,137 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/constants -{ "proof_of_work_nonce_size": 8, "nonce_length": 32, - "max_anon_ops_per_block": 132, "max_operation_data_length": 32768, - "max_proposals_per_delegate": 20, "max_micheline_node_count": 50000, - "max_micheline_bytes_limit": 50000, - "max_allowed_global_constants_depth": 10000, "cache_layout_size": 3, - "michelson_maximum_type_size": 2001, "max_slashing_period": 2, - "smart_rollup_max_wrapped_proof_binary_size": 30000, - "smart_rollup_message_size_limit": 4096, - "smart_rollup_max_number_of_messages_per_level": "1000000", - "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, - "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, - "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", - "hard_gas_limit_per_block": "1733333", - "proof_of_work_threshold": "4611686018427387903", - "minimal_stake": "6000000000", "minimal_frozen_stake": "600000000", - "vdf_difficulty": "50000", "origination_size": 257, - "issuance_weights": - { "base_total_issued_per_minute": "80007812", - "baking_reward_fixed_portion_weight": 5120, - "baking_reward_bonus_weight": 5120, "attesting_reward_weight": 10240, - "seed_nonce_revelation_tip_weight": 1, "vdf_revelation_tip_weight": 1 }, - "cost_per_byte": "250", "hard_storage_limit_per_operation": "60000", - "quorum_min": 2000, "quorum_max": 7000, "min_proposal_quorum": 500, - "liquidity_baking_subsidy": "5000000", - "liquidity_baking_toggle_ema_threshold": 1000000000, - "max_operations_time_to_live": 8, "minimal_block_delay": "1", - "delay_increment_per_round": "1", "consensus_committee_size": 256, - "consensus_threshold": 0, - "minimal_participation_ratio": { "numerator": 2, "denominator": 3 }, - "limit_of_delegation_over_baking": 19, - "percentage_of_frozen_deposits_slashed_per_double_baking": 500, - "percentage_of_frozen_deposits_slashed_per_double_attestation": 5000, - "max_slashing_per_block": 10000, "max_slashing_threshold": 86, - "cache_script_size": 100000000, "cache_stake_distribution_cycles": 8, - "cache_sampler_state_cycles": 8, - "dal_parametric": - { "feature_enable": true, "incentives_enable": false, - "number_of_slots": 16, "attestation_lag": 8, - "attestation_threshold": 66, "redundancy_factor": 8, "page_size": 3967, - "slot_size": 126944, "number_of_shards": 256 }, - "smart_rollup_arith_pvm_enable": false, - "smart_rollup_origination_size": 6314, - "smart_rollup_challenge_window_in_blocks": 120960, - "smart_rollup_stake_amount": "10000000000", - "smart_rollup_commitment_period_in_blocks": 90, - "smart_rollup_max_lookahead_in_blocks": 259200, - "smart_rollup_max_active_outbox_levels": 120960, - "smart_rollup_max_outbox_messages_per_level": 100, - "smart_rollup_number_of_sections_in_dissection": 32, - "smart_rollup_timeout_period_in_blocks": 60480, - "smart_rollup_max_number_of_cemented_commitments": 5, - "smart_rollup_max_number_of_parallel_games": 32, - "smart_rollup_reveal_activation_level": - { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 1, - "dal_parameters": 1, "dal_attested_slots_validity_lag": 241920 }, - "smart_rollup_private_enable": true, - "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, - "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, - "zk_rollup_max_ticket_payload_size": 2048, - "global_limit_of_staking_over_baking": 5, - "edge_of_staking_over_delegation": 2, - "adaptive_issuance_launch_ema_threshold": 0, - "adaptive_rewards_params": - { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, - "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, - "issuance_ratio_initial_min": - { "numerator": "9", "denominator": "200" }, - "issuance_ratio_initial_max": - { "numerator": "11", "denominator": "200" }, "initial_period": 10, - "transition_period": 50, "max_bonus": "50000000000000", - "growth_rate": { "numerator": "1", "denominator": "100" }, - "center_dz": { "numerator": "1", "denominator": "2" }, - "radius_dz": { "numerator": "1", "denominator": "50" } }, - "adaptive_issuance_activation_vote_enable": true, - "autostaking_enable": true, "adaptive_issuance_force_activation": false, - "ns_enable": true, "direct_ticket_spending_enable": false } - -./octez-client rpc get /chains/main/blocks/head/helpers/baking_rights -[ { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 0, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 1, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 3, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 4, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/baking_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/current_level?offset=0' -{ "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } - -./octez-client rpc get /chains/main/blocks/head/context/denunciations -[] - -./octez-client rpc get /chains/main/blocks/head/helpers/attestation_rights -[ { "level": 2, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 10, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 3, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 2, "attestation_power": 65, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 0, "attestation_power": 41, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/attestation_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 2, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle -{ "first": 1, "last": 8 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- votes.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- votes.out deleted file mode 100644 index 92b45913298ab40ace37da5ad42cf7f5dd881f91..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_data_dir) RPC regression tests- votes.out +++ /dev/null @@ -1,78 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/votes/ballot_list -[] - -./octez-client rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "0", "nay": "0", "pass": "0" } - -./octez-client rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 2, "remaining": 1 } - -./octez-client rpc get /chains/main/blocks/head/votes/current_proposal -null - -./octez-client rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/proposals -[ [ "ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp", "4000000000000" ] ] - -./octez-client rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 3, "remaining": 0 } - -./octez-client rpc get /chains/main/blocks/head/votes/total_voting_power -"20000000000000" - -./octez-client rpc get /chains/main/blocks/head/votes/ballot_list -[ { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "nay" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "pass" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "yay" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "4000001679643", "nay": "4000000000000", "pass": "4000000000000" } - -./octez-client rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 1, "remaining": 2 } - -./octez-client rpc get /chains/main/blocks/head/votes/current_proposal -"ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp" - -./octez-client rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000001679643" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/proposals -[] - -./octez-client rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 2, "remaining": 1 } - -./octez-client rpc get /chains/main/blocks/head/votes/total_voting_power -"20000001679643" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- adaptive_issuance.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- adaptive_issuance.out deleted file mode 100644 index ad45f80f6fdecb4ad9a84a1d9e7f8a083ea4b5c4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- adaptive_issuance.out +++ /dev/null @@ -1,67 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/total_supply -"20000001416766" - -./octez-client rpc get /chains/main/blocks/head/context/total_frozen_stake -"1000000000000" - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate -"210.260" - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_exact -{ "numerator": "700868433120000", "denominator": "3333333569461" } - -./octez-client rpc get /chains/main/blocks/head/context/issuance/issuance_per_minute -"80007812" - -./octez-client rpc get /chains/main/blocks/head/context/adaptive_issuance_launch_cycle -5 - -./octez-client rpc get /chains/main/blocks/head/context/issuance/expected_issuance -[ { "cycle": 0, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 1, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" }, - { "cycle": 2, "baking_reward_fixed_portion": "333333", - "baking_reward_bonus_per_slot": "1302", - "attesting_reward_per_slot": "2604", "seed_nonce_revelation_tip": "260", - "vdf_revelation_tip": "260" } ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/stakers' -[ { "staker": "[PUBLIC_KEY_HASH]", - "frozen_deposits": "200000000000" } ] - -./octez-client rpc get /chains/main/blocks/head/context/issuance/current_yearly_rate_details -{ "static": - { "numerator": "700868433120000", "denominator": "3333333569461" }, - "dynamic": { "numerator": "0", "denominator": "1" } } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/total_delegated_stake' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_denominator' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/staking_numerator' -"0" diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- contracts.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- contracts.out deleted file mode 100644 index f0233dd45418b0f458d9608c5aa07939a96fd0e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- contracts.out +++ /dev/null @@ -1,553 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "3800000000000", - "delegate": "[PUBLIC_KEY_HASH]", "counter": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "100000000", "counter": "1" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"100000000" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"1" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "99999566", "delegate": "[PUBLIC_KEY_HASH]", - "counter": "4" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"99999566" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/counter' -"4" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/manager_key' -"[PUBLIC_KEY]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/delegate' -"[PUBLIC_KEY_HASH]" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/entrypoints' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/script' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/storage' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": - { "prim": "Some", "args": [ { "string": "initial storage" } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": {} } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": { "prim": "Some", "args": [ { "string": "initial storage" } ] } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Some", "args": [ { "string": "initial storage" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]' -{ "balance": "0", - "script": - { "code": - [ { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", - "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": - [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": - "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": - { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/counter' -Fatal error: - No service found at this URL - - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/manager_key' -Fatal error: - No service found at this URL - - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "int": "0" - }, - "type": { - "prim": "int" - } -}' -null - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/entrypoints' -{ "entrypoints": - { "rem_right": { "prim": "string" }, "rem_left": { "prim": "string" }, - "rem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%rem_left" ] }, - { "prim": "string", "annots": [ "%rem_right" ] } ] }, - "mem_right": { "prim": "string" }, "mem_left": { "prim": "string" }, - "mem": - { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", "annots": [ "%mem_right" ] } ] }, - "default": { "prim": "unit" }, - "add_right": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add_left": - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - "add": - { "prim": "or", - "args": - [ { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": [ { "prim": "string" }, { "prim": "nat" } ], - "annots": [ "%add_right" ] } ] } } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/script' -{ "code": - [ { "prim": "storage", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] }, - { "prim": "big_map", - "args": [ { "prim": "string" }, { "prim": "nat" } ] } ] } ] }, - { "prim": "parameter", - "args": - [ { "prim": "or", - "args": - [ { "prim": "unit", "annots": [ "%default" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "string", "annots": [ "%mem_left" ] }, - { "prim": "string", - "annots": [ "%mem_right" ] } ], - "annots": [ "%mem" ] }, - { "prim": "or", - "args": - [ { "prim": "or", - "args": - [ { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_left" ] }, - { "prim": "pair", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ], - "annots": [ "%add_right" ] } ], - "annots": [ "%add" ] }, - { "prim": "or", - "args": - [ { "prim": "string", - "annots": [ "%rem_left" ] }, - { "prim": "string", - "annots": [ "%rem_right" ] } ], - "annots": [ "%rem" ] } ] } ] } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DROP" }, { "prim": "DUP" }, - { "prim": "CAR" }, - { "prim": "PUSH", - "args": [ { "prim": "mutez" }, { "int": "0" } ] }, - { "prim": "NONE", "args": [ { "prim": "key_hash" } ] }, - { "prim": "CREATE_CONTRACT", - "args": - [ [ { "prim": "parameter", - "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "big_map", - "args": - [ { "prim": "string" }, - { "prim": "nat" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DROP" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] }, - { "prim": "DIP", "args": [ [ { "prim": "DROP" } ] ] }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "SWAP" }, { "prim": "CONS" }, - { "prim": "PAIR" } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ] ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": [ [ { "prim": "DUP" } ] ] }, - { "prim": "MEM" }, - [ { "prim": "IF", - "args": - [ [], - [ [ { "prim": "UNIT" }, - { "prim": "FAILWITH" } ] ] ] } ], - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "UNPAIR" }, - { "prim": "DIP", - "args": - [ { "int": "2" }, - [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "SOME" } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ], - [ { "prim": "IF_LEFT", - "args": - [ [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" } ], - [ { "prim": "DIP", - "args": - [ [ { "prim": "UNPAIR" }, - { "prim": "SWAP" } ] ] }, - { "prim": "DIP", - "args": - [ [ { "prim": "NONE", - "args": - [ { "prim": "nat" } ] } ] ] }, - { "prim": "UPDATE" }, - { "prim": "SWAP" } ] ] } ] ] } ] ] }, - { "prim": "PAIR" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ] ] } ], - "storage": { "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "prim": "Pair", "args": [ { "int": "4" }, { "int": "5" } ] } - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "test" - }, - "type": { - "prim": "string" - } -}' -null - -./octez-client rpc post '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/big_map_get' with '{ - "key": { - "string": "dup" - }, - "type": { - "prim": "string" - } -}' -null diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- delegates.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- delegates.out deleted file mode 100644 index 29602dc55a142c53e37b467120970e13c4e5ad95..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- delegates.out +++ /dev/null @@ -1,102 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/contracts -[ "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[CONTRACT_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get /chains/main/blocks/head/context/delegates -[ "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]", - "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 5, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -"200000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -false - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -[ "[PUBLIC_KEY_HASH]" ] - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -5 - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -"4000000000000" - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/full_balance' -Fatal error: - Command failed: The implicit account ([PUBLIC_KEY_HASH]) whose balance was requested is not a registered delegate. To get the balance of this account you can use the ../context/contracts/[PUBLIC_KEY_HASH]/balance RPC. - The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/frozen_deposits' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/deactivated' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/delegated_contracts' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/grace_period' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/staking_balance' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]/voting_power' -Fatal error: - Command failed: The provided public key hash ([PUBLIC_KEY_HASH]) is not the address of a registered delegate. If you own this account and want to register it as a delegate, use a delegation operation to delegate the account to itself. - diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out deleted file mode 100644 index 01b7d506f3afe0d243b50dbc504207baed613774..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out +++ /dev/null @@ -1,137 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/context/constants -{ "proof_of_work_nonce_size": 8, "nonce_length": 32, - "max_anon_ops_per_block": 132, "max_operation_data_length": 32768, - "max_proposals_per_delegate": 20, "max_micheline_node_count": 50000, - "max_micheline_bytes_limit": 50000, - "max_allowed_global_constants_depth": 10000, "cache_layout_size": 3, - "michelson_maximum_type_size": 2001, "max_slashing_period": 2, - "smart_rollup_max_wrapped_proof_binary_size": 30000, - "smart_rollup_message_size_limit": 4096, - "smart_rollup_max_number_of_messages_per_level": "1000000", - "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, - "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, - "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", - "hard_gas_limit_per_block": "1733333", - "proof_of_work_threshold": "4611686018427387903", - "minimal_stake": "6000000000", "minimal_frozen_stake": "600000000", - "vdf_difficulty": "50000", "origination_size": 257, - "issuance_weights": - { "base_total_issued_per_minute": "80007812", - "baking_reward_fixed_portion_weight": 5120, - "baking_reward_bonus_weight": 5120, "attesting_reward_weight": 10240, - "seed_nonce_revelation_tip_weight": 1, "vdf_revelation_tip_weight": 1 }, - "cost_per_byte": "250", "hard_storage_limit_per_operation": "60000", - "quorum_min": 2000, "quorum_max": 7000, "min_proposal_quorum": 500, - "liquidity_baking_subsidy": "5000000", - "liquidity_baking_toggle_ema_threshold": 1000000000, - "max_operations_time_to_live": 8, "minimal_block_delay": "1", - "delay_increment_per_round": "1", "consensus_committee_size": 256, - "consensus_threshold": 0, - "minimal_participation_ratio": { "numerator": 2, "denominator": 3 }, - "limit_of_delegation_over_baking": 19, - "percentage_of_frozen_deposits_slashed_per_double_baking": 500, - "percentage_of_frozen_deposits_slashed_per_double_attestation": 5000, - "max_slashing_per_block": 10000, "max_slashing_threshold": 86, - "cache_script_size": 100000000, "cache_stake_distribution_cycles": 8, - "cache_sampler_state_cycles": 8, - "dal_parametric": - { "feature_enable": true, "incentives_enable": false, - "number_of_slots": 16, "attestation_lag": 8, - "attestation_threshold": 66, "redundancy_factor": 8, "page_size": 3967, - "slot_size": 126944, "number_of_shards": 256 }, - "smart_rollup_arith_pvm_enable": false, - "smart_rollup_origination_size": 6314, - "smart_rollup_challenge_window_in_blocks": 120960, - "smart_rollup_stake_amount": "10000000000", - "smart_rollup_commitment_period_in_blocks": 90, - "smart_rollup_max_lookahead_in_blocks": 259200, - "smart_rollup_max_active_outbox_levels": 120960, - "smart_rollup_max_outbox_messages_per_level": 100, - "smart_rollup_number_of_sections_in_dissection": 32, - "smart_rollup_timeout_period_in_blocks": 60480, - "smart_rollup_max_number_of_cemented_commitments": 5, - "smart_rollup_max_number_of_parallel_games": 32, - "smart_rollup_reveal_activation_level": - { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 1, - "dal_parameters": 1, "dal_attested_slots_validity_lag": 241920 }, - "smart_rollup_private_enable": true, - "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, - "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, - "zk_rollup_max_ticket_payload_size": 2048, - "global_limit_of_staking_over_baking": 5, - "edge_of_staking_over_delegation": 2, - "adaptive_issuance_launch_ema_threshold": 0, - "adaptive_rewards_params": - { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, - "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, - "issuance_ratio_initial_min": - { "numerator": "9", "denominator": "200" }, - "issuance_ratio_initial_max": - { "numerator": "11", "denominator": "200" }, "initial_period": 10, - "transition_period": 50, "max_bonus": "50000000000000", - "growth_rate": { "numerator": "1", "denominator": "100" }, - "center_dz": { "numerator": "1", "denominator": "2" }, - "radius_dz": { "numerator": "1", "denominator": "50" } }, - "adaptive_issuance_activation_vote_enable": true, - "autostaking_enable": true, "adaptive_issuance_force_activation": false, - "ns_enable": true, "direct_ticket_spending_enable": false } - -./octez-client rpc get /chains/main/blocks/head/helpers/baking_rights -[ { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 0, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 1, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 3, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 4, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/baking_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 3, "delegate": "[PUBLIC_KEY_HASH]", - "round": 2, "estimated_time": "[TIMESTAMP]", - "consensus_key": "[PUBLIC_KEY_HASH]" } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/current_level?offset=0' -{ "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } - -./octez-client rpc get /chains/main/blocks/head/context/denunciations -[] - -./octez-client rpc get /chains/main/blocks/head/helpers/attestation_rights -[ { "level": 2, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 10, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 3, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 2, "attestation_power": 65, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" }, - { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 0, "attestation_power": 41, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client rpc get '/chains/main/blocks/head/helpers/attestation_rights?delegate=[PUBLIC_KEY_HASH]' -[ { "level": 2, - "delegates": - [ { "delegate": "[PUBLIC_KEY_HASH]", - "first_slot": 1, "attestation_power": 50, - "consensus_key": "[PUBLIC_KEY_HASH]" } ] } ] - -./octez-client rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle -{ "first": 1, "last": 8 } diff --git a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- votes.out b/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- votes.out deleted file mode 100644 index 92b45913298ab40ace37da5ad42cf7f5dd881f91..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/RPC_test.ml/Parisb- (mode proxy_server_rpc) RPC regression tests- votes.out +++ /dev/null @@ -1,78 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/votes/ballot_list -[] - -./octez-client rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "0", "nay": "0", "pass": "0" } - -./octez-client rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 2, "remaining": 1 } - -./octez-client rpc get /chains/main/blocks/head/votes/current_proposal -null - -./octez-client rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/proposals -[ [ "ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp", "4000000000000" ] ] - -./octez-client rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 3, "remaining": 0 } - -./octez-client rpc get /chains/main/blocks/head/votes/total_voting_power -"20000000000000" - -./octez-client rpc get /chains/main/blocks/head/votes/ballot_list -[ { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "nay" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "pass" }, - { "pkh": "[PUBLIC_KEY_HASH]", "ballot": "yay" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/ballots -{ "yay": "4000001679643", "nay": "4000000000000", "pass": "4000000000000" } - -./octez-client rpc get /chains/main/blocks/head/votes/current_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 1, "remaining": 2 } - -./octez-client rpc get /chains/main/blocks/head/votes/current_proposal -"ProtoDemoNoopsDemoNoopsDemoNoopsDemoNoopsDemo6XBoYp" - -./octez-client rpc get /chains/main/blocks/head/votes/current_quorum -5500 - -./octez-client rpc get /chains/main/blocks/head/votes/listings -[ { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000000000000" }, - { "pkh": "[PUBLIC_KEY_HASH]", - "voting_power": "4000001679643" } ] - -./octez-client rpc get /chains/main/blocks/head/votes/proposals -[] - -./octez-client rpc get /chains/main/blocks/head/votes/successor_period -{ "voting_period": { "index": 1, "kind": "exploration", "start_position": 4 }, - "position": 2, "remaining": 1 } - -./octez-client rpc get /chains/main/blocks/head/votes/total_voting_power -"20000001679643" diff --git a/tezt/tests/expected/baker_test.ml/Parisb- Baker rewards.out b/tezt/tests/expected/baker_test.ml/Parisb- Baker rewards.out deleted file mode 100644 index 9c50f00304990485e52419cad6770666b1867a21..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/baker_test.ml/Parisb- Baker rewards.out +++ /dev/null @@ -1,133 +0,0 @@ - -./octez-client rpc get /chains/main/blocks/head/metadata -{ "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "next_protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "test_chain_status": { "status": "not_running" }, "max_operations_ttl": 2, - "max_operation_data_length": 32768, "max_block_header_length": 289, - "max_operation_list_length": - [ { "max_size": 4194304, "max_op": 2048 }, { "max_size": 32768 }, - { "max_size": 135168, "max_op": 132 }, { "max_size": 524288 } ], - "proposer": "[PUBLIC_KEY_HASH]", - "baker": "[PUBLIC_KEY_HASH]", - "level_info": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false }, - "voting_period_info": - { "voting_period": - { "index": 0, "kind": "proposal", "start_position": 0 }, - "position": 1, "remaining": 122878 }, "nonce_hash": null, - "deactivated": [], - "balance_updates": - [ { "kind": "minted", "category": "bootstrap", - "change": "-20000000000000", "origin": "migration" }, - { "kind": "freezer", "category": "deposits", - "staker": - { "baker_own_stake": "[PUBLIC_KEY_HASH]" }, - "change": "400000000000", "origin": "migration" }, - { "kind": "freezer", "category": "deposits", - "staker": - { "baker_own_stake": "[PUBLIC_KEY_HASH]" }, - "change": "400000000000", "origin": "migration" }, - { "kind": "freezer", "category": "deposits", - "staker": - { "baker_own_stake": "[PUBLIC_KEY_HASH]" }, - "change": "400000000000", "origin": "migration" }, - { "kind": "freezer", "category": "deposits", - "staker": - { "baker_own_stake": "[PUBLIC_KEY_HASH]" }, - "change": "400000000000", "origin": "migration" }, - { "kind": "freezer", "category": "deposits", - "staker": - { "baker_own_stake": "[PUBLIC_KEY_HASH]" }, - "change": "400000000000", "origin": "migration" }, - { "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "3600000000000", "origin": "migration" }, - { "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "3600000000000", "origin": "migration" }, - { "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "3600000000000", "origin": "migration" }, - { "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "3600000000000", "origin": "migration" }, - { "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "3600000000000", "origin": "migration" }, - { "kind": "minted", "category": "baking rewards", "change": "-333334", - "origin": "block" }, - { "kind": "freezer", "category": "deposits", - "staker": - { "baker_own_stake": "[PUBLIC_KEY_HASH]" }, - "change": "333334", "origin": "block" }, - { "kind": "minted", "category": "baking rewards", "change": "-2999999", - "origin": "block" }, - { "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "2999999", "origin": "block" } ], - "liquidity_baking_toggle_ema": 0, "adaptive_issuance_vote_ema": 0, - "adaptive_issuance_activation_cycle": 5, - "implicit_operations_results": - [ { "kind": "origination", - "balance_updates": - [ { "kind": "minted", "category": "subsidy", "change": "-64250", - "origin": "migration" }, - { "kind": "burned", "category": "storage fees", - "change": "64250", "origin": "migration" }, - { "kind": "minted", "category": "subsidy", "change": "-1157000", - "origin": "migration" }, - { "kind": "burned", "category": "storage fees", - "change": "1157000", "origin": "migration" }, - { "kind": "minted", "category": "subsidy", "change": "-100", - "origin": "migration" }, - { "kind": "contract", - "contract": "[CONTRACT_HASH]", - "change": "100", "origin": "migration" } ], - "originated_contracts": [ "[CONTRACT_HASH]" ], - "storage_size": "4628", "paid_storage_size_diff": "4628" }, - { "kind": "origination", - "balance_updates": - [ { "kind": "minted", "category": "subsidy", "change": "-64250", - "origin": "migration" }, - { "kind": "burned", "category": "storage fees", - "change": "64250", "origin": "migration" }, - { "kind": "minted", "category": "subsidy", "change": "-494500", - "origin": "migration" }, - { "kind": "burned", "category": "storage fees", - "change": "494500", "origin": "migration" } ], - "originated_contracts": [ "[CONTRACT_HASH]" ], - "storage_size": "1978", "paid_storage_size_diff": "1978" }, - { "kind": "origination", - "balance_updates": - [ { "kind": "minted", "category": "subsidy", "change": "-64250", - "origin": "migration" }, - { "kind": "burned", "category": "storage fees", - "change": "64250", "origin": "migration" }, - { "kind": "minted", "category": "subsidy", "change": "-477750", - "origin": "migration" }, - { "kind": "burned", "category": "storage fees", - "change": "477750", "origin": "migration" }, - { "kind": "minted", "category": "subsidy", "change": "-1000000", - "origin": "migration" }, - { "kind": "contract", - "contract": "[CONTRACT_HASH]", - "change": "1000000", "origin": "migration" } ], - "originated_contracts": [ "[CONTRACT_HASH]" ], - "storage_size": "1911", "paid_storage_size_diff": "1911" }, - { "kind": "transaction", - "storage": - [ { "int": "1" }, { "int": "833433" }, { "int": "100" }, - { "bytes": "01e927f00ef734dfc85919635e9afc9166c83ef9fc00" }, - { "bytes": "0115eb0104481a6d7921160bc982c5e0a561cd8a3a00" } ], - "balance_updates": - [ { "kind": "minted", "category": "subsidy", "change": "-833333", - "origin": "subsidy" }, - { "kind": "contract", - "contract": "[CONTRACT_HASH]", - "change": "833333", "origin": "subsidy" } ], - "consumed_milligas": "2261927", "storage_size": "4629", - "paid_storage_size_diff": "1" } ], - "proposer_consensus_key": "[PUBLIC_KEY_HASH]", - "baker_consensus_key": "[PUBLIC_KEY_HASH]", - "consumed_milligas": "0", "dal_attestation": "0" } diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker - delegate - consensus - destination).out b/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker - delegate - consensus - destination).out deleted file mode 100644 index 6c45d78fb53022a565cbb7b4b0187e8fe1062fdc..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker - delegate - consensus - destination).out +++ /dev/null @@ -1,143 +0,0 @@ - -./octez-client --wait none set consensus key for bootstrap1 to dummy_account_0 -Node is bootstrapped. -Estimated gas: 168.946 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000284 - Expected counter: 1 - Gas limit: 269 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000284 - payload fees(the block proposer) ....... +ꜩ0.000284 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 168.880 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000333333", "current_frozen_deposits": "200000016667", - "frozen_deposits": "200000000000", "staking_balance": "4000000333333", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3799999999716", - "level": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000003298113", "current_frozen_deposits": "200000164906", - "frozen_deposits": "200000000000", "staking_balance": "4000003298113", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001595660", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000003298113", "current_frozen_deposits": "200000164906", - "frozen_deposits": "200000000000", "staking_balance": "4000003298113", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001595660", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800003133203" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client --wait none drain delegate bootstrap1 to dummy_account_0 with dummy_account_0 -Node is bootstrapped. -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Drain delegate: - Consensus key hash: [PUBLIC_KEY_HASH] - Delegate: [PUBLIC_KEY_HASH] - Destination: [PUBLIC_KEY_HASH] (allocated) - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ3762003.038264 - [PUBLIC_KEY_HASH] ... +ꜩ3762003.038264 - [PUBLIC_KEY_HASH] ... -ꜩ38000.030689 - [PUBLIC_KEY_HASH] ... +ꜩ38000.030689 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "238000528932", "current_frozen_deposits": "200000181573", - "frozen_deposits": "200000083983", "staking_balance": "238000528932", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "4", - "level": - { "level": 9, "level_position": 8, "cycle": 2, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 4, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"38000347355" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3762003038264" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3762003038264" diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker - delegate - consensus -- destination).out b/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker - delegate - consensus -- destination).out deleted file mode 100644 index 181861305420bd8379b873bd4fb3d966b9ccf293..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker - delegate - consensus -- destination).out +++ /dev/null @@ -1,143 +0,0 @@ - -./octez-client --wait none set consensus key for bootstrap1 to dummy_account_0 -Node is bootstrapped. -Estimated gas: 168.946 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000284 - Expected counter: 1 - Gas limit: 269 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000284 - payload fees(the block proposer) ....... +ꜩ0.000284 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 168.880 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000333333", "current_frozen_deposits": "200000016667", - "frozen_deposits": "200000000000", "staking_balance": "4000000333333", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3799999999716", - "level": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000003298113", "current_frozen_deposits": "200000164906", - "frozen_deposits": "200000000000", "staking_balance": "4000003298113", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001595660", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000003298113", "current_frozen_deposits": "200000164906", - "frozen_deposits": "200000000000", "staking_balance": "4000003298113", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001595660", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800003133203" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client --wait none drain delegate bootstrap1 to dummy_account_1 with dummy_account_0 -Node is bootstrapped. -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Drain delegate: - Consensus key hash: [PUBLIC_KEY_HASH] - Delegate: [PUBLIC_KEY_HASH] - Destination: [PUBLIC_KEY_HASH] (allocated) - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ3762003.038264 - [PUBLIC_KEY_HASH] ... +ꜩ3762003.038264 - [PUBLIC_KEY_HASH] ... -ꜩ38000.030689 - [PUBLIC_KEY_HASH] ... +ꜩ38000.030689 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "238000528932", "current_frozen_deposits": "200000181573", - "frozen_deposits": "200000083983", "staking_balance": "238000528932", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "4", - "level": - { "level": 9, "level_position": 8, "cycle": 2, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 4, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"38000347355" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3762003038264" diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker -- delegate - consensus - destination).out b/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker -- delegate - consensus - destination).out deleted file mode 100644 index 3a0272bda3bb286fc205e3e3e7fcb6e164217d91..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker -- delegate - consensus - destination).out +++ /dev/null @@ -1,143 +0,0 @@ - -./octez-client --wait none set consensus key for bootstrap1 to dummy_account_0 -Node is bootstrapped. -Estimated gas: 168.946 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000284 - Expected counter: 1 - Gas limit: 269 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000284 - payload fees(the block proposer) ....... +ꜩ0.000284 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 168.880 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "3999999999716", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "3999999999716", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3799999999716", - "level": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000002964496", "current_frozen_deposits": "200000148225", - "frozen_deposits": "200000000000", "staking_balance": "4000002964496", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001278724", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000002964496", "current_frozen_deposits": "200000148225", - "frozen_deposits": "200000000000", "staking_balance": "4000002964496", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001278724", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800002816253" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client --wait none drain delegate bootstrap1 to dummy_account_0 with dummy_account_0 -Node is bootstrapped. -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Drain delegate: - Consensus key hash: [PUBLIC_KEY_HASH] - Delegate: [PUBLIC_KEY_HASH] - Destination: [PUBLIC_KEY_HASH] (allocated) - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ3762002.724483 - [PUBLIC_KEY_HASH] ... +ꜩ3762002.724483 - [PUBLIC_KEY_HASH] ... -ꜩ38000.02752 - [PUBLIC_KEY_HASH] ... +ꜩ38000.02752 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "238000509096", "current_frozen_deposits": "200000164892", - "frozen_deposits": "200000067302", "staking_balance": "238000509096", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "18", - "level": - { "level": 9, "level_position": 8, "cycle": 2, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 4, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"38000344186" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3762002724483" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3762002724483" diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker -- delegate - consensus -- destination).out b/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker -- delegate - consensus -- destination).out deleted file mode 100644 index 77a75198688fcff55e059df8846293314615f088..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test drain delegate with (baker -- delegate - consensus -- destination).out +++ /dev/null @@ -1,143 +0,0 @@ - -./octez-client --wait none set consensus key for bootstrap1 to dummy_account_0 -Node is bootstrapped. -Estimated gas: 168.946 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000284 - Expected counter: 1 - Gas limit: 269 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000284 - payload fees(the block proposer) ....... +ꜩ0.000284 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 168.880 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "3999999999716", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "3999999999716", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3799999999716", - "level": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000002964496", "current_frozen_deposits": "200000148225", - "frozen_deposits": "200000000000", "staking_balance": "4000002964496", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001278724", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000002964496", "current_frozen_deposits": "200000148225", - "frozen_deposits": "200000000000", "staking_balance": "4000002964496", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001278724", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3800002816253" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client --wait none drain delegate bootstrap1 to dummy_account_1 with dummy_account_0 -Node is bootstrapped. -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Drain delegate: - Consensus key hash: [PUBLIC_KEY_HASH] - Delegate: [PUBLIC_KEY_HASH] - Destination: [PUBLIC_KEY_HASH] (allocated) - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ3762002.724483 - [PUBLIC_KEY_HASH] ... +ꜩ3762002.724483 - [PUBLIC_KEY_HASH] ... -ꜩ38000.02752 - [PUBLIC_KEY_HASH] ... +ꜩ38000.02752 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "238000509096", "current_frozen_deposits": "200000164892", - "frozen_deposits": "200000067302", "staking_balance": "238000509096", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "18", - "level": - { "level": 9, "level_position": 8, "cycle": 2, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 4, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"38000344186" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"0" - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/balance' -"3762002724483" diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test register with consensus key.out b/tezt/tests/expected/consensus_key.ml/Parisb- Test register with consensus key.out deleted file mode 100644 index 4430708cc7461bd8752d3bd6370c6f1acd1c6381..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test register with consensus key.out +++ /dev/null @@ -1,90 +0,0 @@ - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "1" } - -./octez-client --wait none register key dummy_account_0 as delegate with consensus key dummy_account_1 -Node is bootstrapped. -Estimated gas: 172.756 units (will add 0 for safety) -Estimated storage: no bytes added -Estimated gas: 100 units (will add 0 for safety) -Estimated storage: no bytes added -Estimated gas: 100 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000275 - Expected counter: 2 - Gas limit: 173 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000275 - payload fees(the block proposer) ....... +ꜩ0.000275 - Revelation of manager public key: - Contract: [PUBLIC_KEY_HASH] - Key: [PUBLIC_KEY] - This revelation was successfully applied - Consumed gas: 172.524 - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000159 - Expected counter: 3 - Gas limit: 100 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000159 - payload fees(the block proposer) ....... +ꜩ0.000159 - Delegation: - Contract: [PUBLIC_KEY_HASH] - To: [PUBLIC_KEY_HASH] - This delegation was successfully applied - Consumed gas: 100 - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000181 - Expected counter: 4 - Gas limit: 200 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000181 - payload fees(the block proposer) ....... +ꜩ0.000181 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 100 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "999999999385", "current_frozen_deposits": "0", - "frozen_deposits": "0", "staking_balance": "999999999385", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "999999999385", - "level": - { "level": 3, "level_position": 2, "cycle": 0, "cycle_position": 2, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]' -{ "balance": "0", "counter": "4" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "999999999385", "current_frozen_deposits": "49999999970", - "frozen_deposits": "0", "staking_balance": "999999999385", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": { "amount": "949999999415" }, - "deactivated": false, "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "active_consensus_key": "[PUBLIC_KEY_HASH]" } diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test set consensus key - baker is delegate.out b/tezt/tests/expected/consensus_key.ml/Parisb- Test set consensus key - baker is delegate.out deleted file mode 100644 index b410b3ee2c9eee814d21f63c3886beee474bd985..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test set consensus key - baker is delegate.out +++ /dev/null @@ -1,73 +0,0 @@ - -./octez-client --wait none set consensus key for bootstrap1 to dummy_account_0 -Node is bootstrapped. -Estimated gas: 168.946 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000284 - Expected counter: 1 - Gas limit: 269 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000284 - payload fees(the block proposer) ....... +ꜩ0.000284 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 168.880 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000333333", "current_frozen_deposits": "200000016667", - "frozen_deposits": "200000000000", "staking_balance": "4000000333333", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3799999999716", - "level": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000003298113", "current_frozen_deposits": "200000164906", - "frozen_deposits": "200000000000", "staking_balance": "4000003298113", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001595660", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } diff --git a/tezt/tests/expected/consensus_key.ml/Parisb- Test set consensus key - baker is not delegate.out b/tezt/tests/expected/consensus_key.ml/Parisb- Test set consensus key - baker is not delegate.out deleted file mode 100644 index bc49237f11bc75d0a93ae6ea78a4a74befb45435..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/consensus_key.ml/Parisb- Test set consensus key - baker is not delegate.out +++ /dev/null @@ -1,73 +0,0 @@ - -./octez-client --wait none set consensus key for bootstrap1 to dummy_account_0 -Node is bootstrapped. -Estimated gas: 168.946 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000284 - Expected counter: 1 - Gas limit: 269 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000284 - payload fees(the block proposer) ....... +ꜩ0.000284 - Update_consensus_key: - Public key hash: [PUBLIC_KEY_HASH] - This consensus key update was successfully applied - Consumed gas: 168.880 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000000000000", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "4000000000000", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800000000000", - "level": - { "level": 1, "level_position": 0, "cycle": 0, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "3999999999716", "current_frozen_deposits": "200000000000", - "frozen_deposits": "200000000000", "staking_balance": "3999999999716", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3799999999716", - "level": - { "level": 2, "level_position": 1, "cycle": 0, "cycle_position": 1, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]", - "pending_consensus_keys": - [ { "cycle": 2, "pkh": "[PUBLIC_KEY_HASH]" } ] } - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "4000002964496", "current_frozen_deposits": "200000148225", - "frozen_deposits": "200000000000", "staking_balance": "4000002964496", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "3800001278724", - "level": - { "level": 5, "level_position": 4, "cycle": 1, "cycle_position": 0, - "expected_commitment": false } }, "deactivated": false, - "grace_period": 3, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "voting_power": "4000000000000", "remaining_proposals": 20, - "active_consensus_key": "[PUBLIC_KEY_HASH]" } diff --git a/tezt/tests/expected/contract_liquidity_baking.ml/Parisb- Test add-approve-transfer-remove liquidity.out b/tezt/tests/expected/contract_liquidity_baking.ml/Parisb- Test add-approve-transfer-remove liquidity.out deleted file mode 100644 index cd9ec1cd3f985892a13f5a35c2bfff5676cdd19e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_liquidity_baking.ml/Parisb- Test add-approve-transfer-remove liquidity.out +++ /dev/null @@ -1,416 +0,0 @@ - -./octez-client --mode mockup rpc get /chains/main/blocks/head/context/liquidity_baking/cpmm_address -"KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" - -./octez-client --mode mockup get contract storage for KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 -Pair 1 - 100 - 100 - "KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN" - "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap1 --entrypoint mintOrBurn --arg '(Pair 100000000 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx")' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2375.517 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'opNV92qwY7YfY6exkBrJqnJyotKXFbxHdXEk7xNQFNsPRQ7TEjF' -NOT waiting for the operation to be included. -Use command - octez-client wait for opNV92qwY7YfY6exkBrJqnJyotKXFbxHdXEk7xNQFNsPRQ7TEjF to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.00056 - Expected counter: 1 - Gas limit: 2476 - Storage limit: 91 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.00056 - payload fees(the block proposer) ....... +ꜩ0.00056 - Transaction: - Amount: ꜩ0 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: mintOrBurn - Parameter: (Pair 100000000 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx") - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(0)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 100000000 - Storage size: 1982 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2375.881 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap1 --entrypoint approve --arg '(Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2377.220 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'op968yui6vHCCztECXMB24FEWbMUHed9jQkXbhL5WGM8wXJw96Q' -NOT waiting for the operation to be included. -Use command - octez-client wait for op968yui6vHCCztECXMB24FEWbMUHed9jQkXbhL5WGM8wXJw96Q to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.000558 - Expected counter: 2 - Gas limit: 2478 - Storage limit: 91 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.000558 - payload fees(the block proposer) ....... +ꜩ0.000558 - Transaction: - Amount: ꜩ0 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: approve - Parameter: (Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 1000000000 - Storage size: 2053 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2377.584 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap2 --entrypoint approve --arg '(Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2377.220 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'op8vSFsuf9xDtpELfAXrAD31oBWvx4kvW2QWoEBUKqsiADKYgZB' -NOT waiting for the operation to be included. -Use command - octez-client wait for op8vSFsuf9xDtpELfAXrAD31oBWvx4kvW2QWoEBUKqsiADKYgZB to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.000558 - Expected counter: 1 - Gas limit: 2478 - Storage limit: 91 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.000558 - payload fees(the block proposer) ....... +ꜩ0.000558 - Transaction: - Amount: ꜩ0 - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: approve - Parameter: (Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 1000000000 - Storage size: 2124 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2377.584 - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap3 --entrypoint approve --arg '(Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2377.220 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'opG2xrHRo7XfsfQ6ury6ArfyEJ7SbyhGtpuMS5nTuqjV78pJbh8' -NOT waiting for the operation to be included. -Use command - octez-client wait for opG2xrHRo7XfsfQ6ury6ArfyEJ7SbyhGtpuMS5nTuqjV78pJbh8 to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - Fee to the baker: ꜩ0.000558 - Expected counter: 1 - Gas limit: 2478 - Storage limit: 91 bytes - Balance updates: - tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU ... -ꜩ0.000558 - payload fees(the block proposer) ....... +ꜩ0.000558 - Transaction: - Amount: ꜩ0 - From: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: approve - Parameter: (Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 1000000000 - Storage size: 2195 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2377.584 - Balance updates: - tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup --wait none transfer 9001 from bootstrap1 to KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 --burn-cap 10 --entrypoint addLiquidity --arg '(Pair "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" 0 1000000000 "2050-01-01T00:00:00Z")' -Node is bootstrapped. -Estimated gas: 9497.488 units (will add 100 for safety) -Estimated storage: 147 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'onsvTjspvs6n3R9fbuQ1ZDvzEibrTJyZaxvrn4hwAEz135CrT5k' -NOT waiting for the operation to be included. -Use command - octez-client wait for onsvTjspvs6n3R9fbuQ1ZDvzEibrTJyZaxvrn4hwAEz135CrT5k to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.001315 - Expected counter: 3 - Gas limit: 9598 - Storage limit: 167 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.001315 - payload fees(the block proposer) ....... +ꜩ0.001315 - Transaction: - Amount: ꜩ9001 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - Entrypoint: addLiquidity - Parameter: (Pair "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" 0 1000000000 "2050-01-01T00:00:00Z") - This transaction was successfully applied - Updated storage: - { 21599 ; - 9001416765 ; - 2159830 ; - 0x01e927f00ef734dfc85919635e9afc9166c83ef9fc00 ; - 0x0115eb0104481a6d7921160bc982c5e0a561cd8a3a00 } - Storage size: 4635 bytes - Paid storage size diff: 6 bytes - Consumed gas: 1450.590 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.0015 - storage fees ........................... +ꜩ0.0015 - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ9001 - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... +ꜩ9001 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: transfer - Parameter: (Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - (Pair 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 21598)) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 999978402 - Set map(0)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 99978402 - Set map(0)[0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600] to 21598 - Storage size: 2264 bytes - Paid storage size diff: 69 bytes - Consumed gas: 3690.965 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.01725 - storage fees ........................... +ꜩ0.01725 - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo - Entrypoint: mintOrBurn - Parameter: (Pair 2159730 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78) - This transaction was successfully applied - Updated storage: - { 2 ; 3 ; 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 ; 2159830 } - Updated big_maps: - Set map(2)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 2159730 - Storage size: 2050 bytes - Paid storage size diff: 72 bytes - Consumed gas: 2300.350 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.018 - storage fees ........................... +ꜩ0.018 - - -./octez-client --mode mockup call KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo from bootstrap1 --entrypoint approve --arg '(Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 1000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2376.999 units (will add 100 for safety) -Estimated storage: 68 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'ootV3zW3k66DvpHiUBoAVhb5dvGaFXD1vFcjNiHvLTJhpSTvk41' -NOT waiting for the operation to be included. -Use command - octez-client wait for ootV3zW3k66DvpHiUBoAVhb5dvGaFXD1vFcjNiHvLTJhpSTvk41 to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.000555 - Expected counter: 4 - Gas limit: 2477 - Storage limit: 88 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.000555 - payload fees(the block proposer) ....... +ꜩ0.000555 - Transaction: - Amount: ꜩ0 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo - Entrypoint: approve - Parameter: (Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 1000) - This transaction was successfully applied - Updated storage: - { 2 ; 3 ; 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 ; 2159830 } - Updated big_maps: - Set map(3)[(Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c)] to 1000 - Storage size: 2118 bytes - Paid storage size diff: 68 bytes - Consumed gas: 2377.362 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.017 - storage fees ........................... +ꜩ0.017 - - -./octez-client --mode mockup call KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo from bootstrap2 --entrypoint transfer --arg '(Pair "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 1000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 3741.852 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is 'oo8sACXKDiJJ27gt8kko7jDvywwUS3oLr8ZVEPJ2Kz8HtkQMBya' -NOT waiting for the operation to be included. -Use command - octez-client wait for oo8sACXKDiJJ27gt8kko7jDvywwUS3oLr8ZVEPJ2Kz8HtkQMBya to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.000742 - Expected counter: 2 - Gas limit: 3842 - Storage limit: 0 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.000742 - payload fees(the block proposer) ....... +ꜩ0.000742 - Transaction: - Amount: ꜩ0 - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo - Entrypoint: transfer - Parameter: (Pair "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" - 1000) - This transaction was successfully applied - Updated storage: - { 2 ; 3 ; 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 ; 2159830 } - Updated big_maps: - Unset map(3)[(Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c)] - Set map(2)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 2158730 - Set map(2)[0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c] to 1000 - Storage size: 2118 bytes - Consumed gas: 3742.216 - - -./octez-client --mode mockup call KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 from bootstrap2 --entrypoint removeLiquidity --arg '(Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 1000 0 0 "2050-01-01T00:00:00Z")' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 9102.578 units (will add 100 for safety) -Estimated storage: 67 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'oocZ2DJUHkYB3mFFwk3enBtC39BKNEu6pvyLC7dwnsa6NiDUbJA' -NOT waiting for the operation to be included. -Use command - octez-client wait for oocZ2DJUHkYB3mFFwk3enBtC39BKNEu6pvyLC7dwnsa6NiDUbJA to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.001273 - Expected counter: 3 - Gas limit: 9203 - Storage limit: 87 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.001273 - payload fees(the block proposer) ....... +ꜩ0.001273 - Transaction: - Amount: ꜩ0 - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - Entrypoint: removeLiquidity - Parameter: (Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 1000 0 0 "2050-01-01T00:00:00Z") - This transaction was successfully applied - Updated storage: - { 21589 ; - 8997498998 ; - 2158830 ; - 0x01e927f00ef734dfc85919635e9afc9166c83ef9fc00 ; - 0x0115eb0104481a6d7921160bc982c5e0a561cd8a3a00 } - Storage size: 4635 bytes - Consumed gas: 1452.097 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo - Entrypoint: mintOrBurn - Parameter: (Pair -1000 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c) - This transaction was successfully applied - Updated storage: - { 2 ; 3 ; 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 ; 2158830 } - Updated big_maps: - Unset map(2)[0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c] - Storage size: 2050 bytes - Consumed gas: 2500.309 - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: transfer - Parameter: (Pair 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 - (Pair 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c 10)) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(0)[0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600] to 21588 - Set map(0)[0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c] to 10 - Storage size: 2331 bytes - Paid storage size diff: 67 bytes - Consumed gas: 2994.305 - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.01675 - storage fees ........................... +ꜩ0.01675 - Internal Transaction: - Amount: ꜩ4.167766 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - This transaction was successfully applied - Consumed gas: 100 - Balance updates: - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... -ꜩ4.167766 - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... +ꜩ4.167766 - - -./octez-client --mode mockup get contract storage for KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo -Pair 2 3 "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 2158830 - -./octez-client --mode mockup get contract storage for KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN -Pair 0 1 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" 100010000 diff --git a/tezt/tests/expected/contract_liquidity_baking.ml/Parisb- Test trades.out b/tezt/tests/expected/contract_liquidity_baking.ml/Parisb- Test trades.out deleted file mode 100644 index 24323c4f03b066c87464bbee246e34c3c366eb9b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_liquidity_baking.ml/Parisb- Test trades.out +++ /dev/null @@ -1,446 +0,0 @@ - -./octez-client --mode mockup rpc get /chains/main/blocks/head/context/liquidity_baking/cpmm_address -"KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" - -./octez-client --mode mockup get contract storage for KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 -Pair 1 - 100 - 100 - "KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN" - "KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo" - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap1 --entrypoint mintOrBurn --arg '(Pair 100000000 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx")' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2375.517 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'opNV92qwY7YfY6exkBrJqnJyotKXFbxHdXEk7xNQFNsPRQ7TEjF' -NOT waiting for the operation to be included. -Use command - octez-client wait for opNV92qwY7YfY6exkBrJqnJyotKXFbxHdXEk7xNQFNsPRQ7TEjF to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.00056 - Expected counter: 1 - Gas limit: 2476 - Storage limit: 91 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.00056 - payload fees(the block proposer) ....... +ꜩ0.00056 - Transaction: - Amount: ꜩ0 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: mintOrBurn - Parameter: (Pair 100000000 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx") - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(0)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 100000000 - Storage size: 1982 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2375.881 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap1 --entrypoint approve --arg '(Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2377.220 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'op968yui6vHCCztECXMB24FEWbMUHed9jQkXbhL5WGM8wXJw96Q' -NOT waiting for the operation to be included. -Use command - octez-client wait for op968yui6vHCCztECXMB24FEWbMUHed9jQkXbhL5WGM8wXJw96Q to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.000558 - Expected counter: 2 - Gas limit: 2478 - Storage limit: 91 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.000558 - payload fees(the block proposer) ....... +ꜩ0.000558 - Transaction: - Amount: ꜩ0 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: approve - Parameter: (Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 1000000000 - Storage size: 2053 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2377.584 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap2 --entrypoint approve --arg '(Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2377.220 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'op8vSFsuf9xDtpELfAXrAD31oBWvx4kvW2QWoEBUKqsiADKYgZB' -NOT waiting for the operation to be included. -Use command - octez-client wait for op8vSFsuf9xDtpELfAXrAD31oBWvx4kvW2QWoEBUKqsiADKYgZB to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.000558 - Expected counter: 1 - Gas limit: 2478 - Storage limit: 91 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.000558 - payload fees(the block proposer) ....... +ꜩ0.000558 - Transaction: - Amount: ꜩ0 - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: approve - Parameter: (Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 1000000000 - Storage size: 2124 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2377.584 - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap3 --entrypoint approve --arg '(Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 2377.220 units (will add 100 for safety) -Estimated storage: 71 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'opG2xrHRo7XfsfQ6ury6ArfyEJ7SbyhGtpuMS5nTuqjV78pJbh8' -NOT waiting for the operation to be included. -Use command - octez-client wait for opG2xrHRo7XfsfQ6ury6ArfyEJ7SbyhGtpuMS5nTuqjV78pJbh8 to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - Fee to the baker: ꜩ0.000558 - Expected counter: 1 - Gas limit: 2478 - Storage limit: 91 bytes - Balance updates: - tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU ... -ꜩ0.000558 - payload fees(the block proposer) ....... +ꜩ0.000558 - Transaction: - Amount: ꜩ0 - From: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: approve - Parameter: (Pair "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 1000000000) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 1000000000 - Storage size: 2195 bytes - Paid storage size diff: 71 bytes - Consumed gas: 2377.584 - Balance updates: - tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU ... -ꜩ0.01775 - storage fees ........................... +ꜩ0.01775 - - -./octez-client --mode mockup --wait none transfer 9001 from bootstrap1 to KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 --burn-cap 10 --entrypoint addLiquidity --arg '(Pair "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" 0 1000000000 "2050-01-01T00:00:00Z")' -Node is bootstrapped. -Estimated gas: 9497.488 units (will add 100 for safety) -Estimated storage: 147 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'onsvTjspvs6n3R9fbuQ1ZDvzEibrTJyZaxvrn4hwAEz135CrT5k' -NOT waiting for the operation to be included. -Use command - octez-client wait for onsvTjspvs6n3R9fbuQ1ZDvzEibrTJyZaxvrn4hwAEz135CrT5k to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.001315 - Expected counter: 3 - Gas limit: 9598 - Storage limit: 167 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.001315 - payload fees(the block proposer) ....... +ꜩ0.001315 - Transaction: - Amount: ꜩ9001 - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - To: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - Entrypoint: addLiquidity - Parameter: (Pair "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" 0 1000000000 "2050-01-01T00:00:00Z") - This transaction was successfully applied - Updated storage: - { 21599 ; - 9001416765 ; - 2159830 ; - 0x01e927f00ef734dfc85919635e9afc9166c83ef9fc00 ; - 0x0115eb0104481a6d7921160bc982c5e0a561cd8a3a00 } - Storage size: 4635 bytes - Paid storage size diff: 6 bytes - Consumed gas: 1450.590 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.0015 - storage fees ........................... +ꜩ0.0015 - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ9001 - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... +ꜩ9001 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: transfer - Parameter: (Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - (Pair 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 21598)) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 999978402 - Set map(0)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 99978402 - Set map(0)[0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600] to 21598 - Storage size: 2264 bytes - Paid storage size diff: 69 bytes - Consumed gas: 3690.965 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.01725 - storage fees ........................... +ꜩ0.01725 - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo - Entrypoint: mintOrBurn - Parameter: (Pair 2159730 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78) - This transaction was successfully applied - Updated storage: - { 2 ; 3 ; 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 ; 2159830 } - Updated big_maps: - Set map(2)[0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78] to 2159730 - Storage size: 2050 bytes - Paid storage size diff: 72 bytes - Consumed gas: 2300.350 - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.018 - storage fees ........................... +ꜩ0.018 - - -./octez-client --mode mockup --wait none transfer 9001 from bootstrap2 to KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 --burn-cap 10 --entrypoint xtzToToken --arg '(Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 0 "2050-01-01T00:00:00Z")' -Node is bootstrapped. -Estimated gas: 6070.421 units (will add 100 for safety) -Estimated storage: 327 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'oogc3Wbh8bGJdTZYeAaKP7YmR9nmp51JCCYPeEc3hqBZ27jKzaK' -NOT waiting for the operation to be included. -Use command - octez-client wait for oogc3Wbh8bGJdTZYeAaKP7YmR9nmp51JCCYPeEc3hqBZ27jKzaK to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.000965 - Expected counter: 2 - Gas limit: 6171 - Storage limit: 347 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.000965 - payload fees(the block proposer) ....... +ꜩ0.000965 - Transaction: - Amount: ꜩ9001 - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - Entrypoint: xtzToToken - Parameter: (Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" 0 "2050-01-01T00:00:00Z") - This transaction was successfully applied - Updated storage: - { 10811 ; - 17993499098 ; - 2159830 ; - 0x01e927f00ef734dfc85919635e9afc9166c83ef9fc00 ; - 0x0115eb0104481a6d7921160bc982c5e0a561cd8a3a00 } - Storage size: 4636 bytes - Paid storage size diff: 1 bytes - Consumed gas: 920.247 - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.00025 - storage fees ........................... +ꜩ0.00025 - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ9001 - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... +ꜩ9001 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: transfer - Parameter: (Pair 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 - (Pair 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c 10788)) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(0)[0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600] to 10810 - Set map(0)[0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c] to 10788 - Storage size: 2333 bytes - Paid storage size diff: 69 bytes - Consumed gas: 2994.339 - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.01725 - storage fees ........................... +ꜩ0.01725 - Internal Transaction: - Amount: ꜩ9.001 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU - This transaction was successfully applied - Consumed gas: 100 - Balance updates: - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... -ꜩ9.001 - tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU ... +ꜩ9.001 - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - - -./octez-client --mode mockup call KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN from bootstrap2 --entrypoint transfer --arg '(Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU" 100)' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 3075.593 units (will add 100 for safety) -Estimated storage: 68 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is 'opCvYgUossHCJMw2bwAuZsKVWZPerUVdvQWEo2JpoM7SAWmX5LU' -NOT waiting for the operation to be included. -Use command - octez-client wait for opCvYgUossHCJMw2bwAuZsKVWZPerUVdvQWEo2JpoM7SAWmX5LU to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.000675 - Expected counter: 3 - Gas limit: 3176 - Storage limit: 88 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.000675 - payload fees(the block proposer) ....... +ꜩ0.000675 - Transaction: - Amount: ꜩ0 - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: transfer - Parameter: (Pair "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" - "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU" - 100) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(0)[0x0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6] to 100 - Set map(0)[0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c] to 10688 - Storage size: 2401 bytes - Paid storage size diff: 68 bytes - Consumed gas: 3075.957 - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.017 - storage fees ........................... +ꜩ0.017 - - -./octez-client --mode mockup call KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 from bootstrap3 --entrypoint tokenToXtz --arg '(Pair "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU" 100 0 "2050-01-01T00:00:00Z")' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 7067.428 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is 'opSJtQyATVZNAw8iVpDX7V7RU82Q3Kczsjn262NH2jsSJSqzMt6' -NOT waiting for the operation to be included. -Use command - octez-client wait for opSJtQyATVZNAw8iVpDX7V7RU82Q3Kczsjn262NH2jsSJSqzMt6 to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisCCCCCeZiLHU -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - Fee to the baker: ꜩ0.001062 - Expected counter: 2 - Gas limit: 7168 - Storage limit: 0 bytes - Balance updates: - tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU ... -ꜩ0.001062 - payload fees(the block proposer) ....... +ꜩ0.001062 - Transaction: - Amount: ꜩ0 - From: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - To: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - Entrypoint: tokenToXtz - Parameter: (Pair "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU" 100 0 "2050-01-01T00:00:00Z") - This transaction was successfully applied - Updated storage: - { 10911 ; - 17828916091 ; - 2159830 ; - 0x01e927f00ef734dfc85919635e9afc9166c83ef9fc00 ; - 0x0115eb0104481a6d7921160bc982c5e0a561cd8a3a00 } - Storage size: 4636 bytes - Consumed gas: 920.738 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN - Entrypoint: transfer - Parameter: (Pair 0x0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6 - (Pair 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600 100)) - This transaction was successfully applied - Updated storage: - { 0 ; 1 ; 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 ; 100010000 } - Updated big_maps: - Set map(1)[(Pair 0x0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6 - 0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600)] to 999999900 - Unset map(0)[0x0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6] - Set map(0)[0x01d496def47a3be89f5d54c6e6bb13cc6645d6e16600] to 10910 - Storage size: 2333 bytes - Consumed gas: 3890.781 - Internal Transaction: - Amount: ꜩ164.584923 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU - This transaction was successfully applied - Consumed gas: 100 - Balance updates: - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... -ꜩ164.584923 - tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU ... +ꜩ164.584923 - Internal Transaction: - Amount: ꜩ0.16475 - From: KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 - To: tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU - This transaction was successfully applied - Consumed gas: 100 - Balance updates: - KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5 ... -ꜩ0.16475 - tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU ... +ꜩ0.16475 - - -./octez-client --mode mockup get contract storage for KT1AafHA1C1vk959wvHWBispY9Y2f3fxBUUo -Pair 2 3 "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5" 2159830 - -./octez-client --mode mockup get contract storage for KT1VqarPDicMFn1ejmQqqshUkUXTCTXwmkCN -Pair 0 1 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" 100010000 diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert.out deleted file mode 100644 index 5931ced0f2885671e35fb8e5eef4a192b65132e1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert.out +++ /dev/null @@ -1,8 +0,0 @@ -{ parameter bool ; - storage unit ; - code { CAR ; - { IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpeq.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpeq.out deleted file mode 100644 index bbe353a76a189a98ae79ea6c49e66ff0e5a2e283..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpeq.out +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpge.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpge.out deleted file mode 100644 index d56c3a72c717f4409c4b5417ac0714b91eb3568c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpge.out +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpgt.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpgt.out deleted file mode 100644 index ad6419cc57afa115c55795729bef4ccadd719d9e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpgt.out +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - { { COMPARE ; GT } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmple.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmple.out deleted file mode 100644 index 80d82ea4eb1e955cb430ec30a56e2294962b640d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmple.out +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - { { COMPARE ; LE } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmplt.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmplt.out deleted file mode 100644 index a0b5c69b4c9055716e73873da5bb90a1a31954a8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmplt.out +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - { { COMPARE ; LT } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpneq.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpneq.out deleted file mode 100644 index 9ae5ea93cbd0d39b3292b27c9c78a51b268632a3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_cmpneq.out +++ /dev/null @@ -1,11 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - { { COMPARE ; NEQ } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_eq.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_eq.out deleted file mode 100644 index ddbecad17d4a330eb6e145393dbe893cd2013284..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_eq.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - { EQ ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_ge.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_ge.out deleted file mode 100644 index d4c1645d0517dc41de8816756e48243d6d0ccb2d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_ge.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - { GE ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_gt.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_gt.out deleted file mode 100644 index 6cf69f3845cfeb14fb4f92a46a30a3d5c976d008..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_gt.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - { GT ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_le.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_le.out deleted file mode 100644 index 81938328c570b0166c42d185a2b6ce63c22fad71..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_le.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - { LE ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_lt.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_lt.out deleted file mode 100644 index 3faecebbb2be184a35ff7557eac73a07e9fd6c68..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_lt.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - { LT ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_neq.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_neq.out deleted file mode 100644 index 97ad56e0faf131260ad5612a73ffaf8da85bb954..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-assert_neq.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - { NEQ ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-big_map_get_add.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-big_map_get_add.out deleted file mode 100644 index fd1950c5e72d53e259f6fff982fc1e7b7ee10184..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-big_map_get_add.out +++ /dev/null @@ -1,22 +0,0 @@ -{ parameter (pair (pair %set_pair int (option int)) (pair %check_pair int (option int))) ; - storage (pair (big_map int int) unit) ; - code { DUP ; - DIP { { CDR ; CAR } } ; - DUP ; - DIP { { CAR ; CDR } ; DUP ; CAR ; DIP { CDR } ; UPDATE ; DUP } ; - { CAR ; CDR } ; - DUP ; - CDR ; - DIP { CAR ; GET } ; - { IF_NONE - { { IF_NONE {} { { UNIT ; FAILWITH } } } } - { SWAP ; - { IF_NONE - { { UNIT ; FAILWITH } } - { { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } } } } } ; - UNIT ; - SWAP ; - PAIR ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-big_map_mem.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-big_map_mem.out deleted file mode 100644 index 7f58503d9114e46369f1526e539f05609b2a1df6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-big_map_mem.out +++ /dev/null @@ -1,13 +0,0 @@ -{ parameter (pair int bool) ; - storage (pair (big_map int unit) unit) ; - code { DUP ; - DUP ; - { CAR ; CDR } ; - DIP { { CAR ; CAR } ; DIP { { CDR ; CAR } ; DUP } ; MEM } ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - UNIT ; - SWAP ; - PAIR ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-build_list.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-build_list.out deleted file mode 100644 index 4ef9f940b1d09e5f091c44d92cd1e8120bed4ae8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-build_list.out +++ /dev/null @@ -1,23 +0,0 @@ -{ parameter nat ; - storage (list nat) ; - code { CAR @counter ; - NIL @acc nat ; - SWAP ; - DUP @cmp_num ; - PUSH nat 0 ; - { COMPARE ; NEQ } ; - LOOP { DUP ; - DIP { SWAP } ; - CONS @acc ; - SWAP ; - PUSH nat 1 ; - SWAP ; - SUB @counter ; - DUP ; - DIP { ABS } ; - PUSH int 0 ; - { COMPARE ; NEQ } } ; - CONS ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-carn_and_cdrn.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-carn_and_cdrn.out deleted file mode 100644 index 4cda8ad36989edf874e1741e67a7208ec9bbb1c3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-carn_and_cdrn.out +++ /dev/null @@ -1,28 +0,0 @@ -{ parameter (pair nat nat nat unit) ; - storage unit ; - code { CAR ; - DUP ; - CAR ; - PUSH nat 1 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - { GET 1 } ; - PUSH nat 1 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - { GET 3 } ; - PUSH nat 4 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - { GET 5 } ; - PUSH nat 2 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DUP ; - { GET 6 } ; - UNIT ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - DROP ; - UNIT ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-compare.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-compare.out deleted file mode 100644 index 4292f6769b9169727ec60fd90bee4b98841c42de..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-compare.out +++ /dev/null @@ -1,21 +0,0 @@ -{ parameter (pair mutez mutez) ; - storage (list bool) ; - code { CAR ; - DUP ; - DUP ; - DUP ; - DUP ; - DIP 5 { NIL bool } ; - DIP 4 { DUP ; CAR ; DIP { CDR } ; COMPARE ; LE ; CONS } ; - DIP 3 { DUP ; CAR ; DIP { CDR } ; COMPARE ; GE ; CONS } ; - DIP 2 { DUP ; CAR ; DIP { CDR } ; COMPARE ; LT ; CONS } ; - DIP { DUP ; CAR ; DIP { CDR } ; COMPARE ; GT ; CONS } ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - EQ ; - CONS ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-compare_bytes.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-compare_bytes.out deleted file mode 100644 index 0b52eb3a3741f4c1435b715eaae9c243c97abe81..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-compare_bytes.out +++ /dev/null @@ -1,21 +0,0 @@ -{ parameter (pair bytes bytes) ; - storage (list bool) ; - code { CAR ; - DUP ; - DUP ; - DUP ; - DUP ; - DIP 5 { NIL bool } ; - DIP 4 { DUP ; CAR ; DIP { CDR } ; COMPARE ; LE ; CONS } ; - DIP 3 { DUP ; CAR ; DIP { CDR } ; COMPARE ; GE ; CONS } ; - DIP 2 { DUP ; CAR ; DIP { CDR } ; COMPARE ; LT ; CONS } ; - DIP { DUP ; CAR ; DIP { CDR } ; COMPARE ; GT ; CONS } ; - DUP ; - CAR ; - DIP { CDR } ; - COMPARE ; - EQ ; - CONS ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-fail.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-fail.out deleted file mode 100644 index a3007c04a48a9142ad11df7d66d9a58a8ae3a58c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-fail.out +++ /dev/null @@ -1,2 +0,0 @@ -{ parameter unit ; storage unit ; code { { UNIT ; FAILWITH } } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-guestbook.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-guestbook.out deleted file mode 100644 index 007315d9f5c1eb2bfe1b55ec41a92411593015a8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-guestbook.out +++ /dev/null @@ -1,17 +0,0 @@ -{ parameter string ; - storage (map address (option string)) ; - code { UNPAIR @message @guestbook ; - SWAP ; - DUP ; - SENDER ; - GET @previous_message ; - { IF_NONE { { UNIT ; FAILWITH } } {} } ; - { IF_NONE {} { { UNIT ; FAILWITH } } } ; - SWAP ; - SOME ; - SOME ; - SENDER ; - UPDATE ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-macro_annotations.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-macro_annotations.out deleted file mode 100644 index e0004b030af09d7c3e55c8453ddadc31f163cc42..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-macro_annotations.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter unit ; - storage (pair (unit %truc) unit) ; - code { DROP ; - UNIT ; - UNIT ; - PAIR %truc ; - UNIT ; - DUP @new_storage 2 ; - DIP { DROP ; DROP } ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-map_caddaadr.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-map_caddaadr.out deleted file mode 100644 index 58b5cf2acdeec0c5562e7958eed49119111f790e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-map_caddaadr.out +++ /dev/null @@ -1,39 +0,0 @@ -{ parameter unit ; - storage (pair (pair nat (pair nat (pair (pair (pair (nat %p) (mutez %value)) nat) nat))) nat) ; - code { { DUP ; - DIP { CDR @%% ; - { DUP ; - DIP { CAR @%% ; - { DUP ; - DIP { CDR @%% ; - { DUP ; - DIP { CDR @%% ; - { DUP ; - DIP { CAR @%% ; - { DUP ; - DIP { CAR @%% ; - { DUP ; - CDR @value ; - { PUSH mutez 1000000 ; ADD } ; - SWAP ; - CAR @%% ; - PAIR %@ %value } } ; - CDR @%% ; - SWAP ; - PAIR %@ %@ } } ; - CDR @%% ; - SWAP ; - PAIR %@ %@ } } ; - CAR @%% ; - PAIR %@ %@ } } ; - CAR @%% ; - PAIR %@ %@ } } ; - CDR @%% ; - SWAP ; - PAIR %@ %@ } } ; - CAR @%% ; - PAIR %@ %@ @new_storage } ; - NIL operation ; - SWAP ; - { CDR @%% ; SWAP ; PAIR % %@ } } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-max_in_list.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-max_in_list.out deleted file mode 100644 index 73b02aecae216bfe6604cb2eca077ae9653137ec..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-max_in_list.out +++ /dev/null @@ -1,16 +0,0 @@ -{ parameter (list int) ; - storage (option int) ; - code { CAR ; - DIP { NONE int } ; - ITER { SWAP ; - IF_NONE - { SOME } - { DIP { DUP } ; - DUP ; - DIP { SWAP } ; - { COMPARE ; LE } ; - IF { DROP } { DIP { DROP } } ; - SOME } } ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-min.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-min.out deleted file mode 100644 index 25b53381539f982059ea8c5849f2f7461302542f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-min.out +++ /dev/null @@ -1,12 +0,0 @@ -{ parameter (pair int int) ; - storage int ; - code { CAR ; - DUP ; - DUP ; - CAR ; - DIP { CDR } ; - { COMPARE ; LT } ; - IF { CAR } { CDR } ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-pair_macro.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-pair_macro.out deleted file mode 100644 index c690e041b539e73b649228376196f6fc1e65b1ea..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-pair_macro.out +++ /dev/null @@ -1,17 +0,0 @@ -{ parameter unit ; - storage unit ; - code { UNIT ; - UNIT ; - UNIT ; - UNIT ; - UNIT ; - { DIP 3 { PAIR %x4 %x5 } ; - DIP 2 { PAIR %x3 } ; - DIP { PAIR %x2 } ; - PAIR %x1 @name } ; - { CDR ; CDR ; CDR ; CAR %x4 @fourth } ; - DROP ; - CDR ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-set_caddaadr.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-set_caddaadr.out deleted file mode 100644 index 40e1f41cf5b3ebfd8eadc5bfa5c9a697bb9d1d19..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-set_caddaadr.out +++ /dev/null @@ -1,32 +0,0 @@ -{ parameter mutez ; - storage (pair (pair nat (pair nat (pair (pair (pair (nat %p) (mutez %value)) nat) nat))) nat) ; - code { DUP ; - CAR ; - SWAP ; - CDR ; - { DUP ; - DIP { CAR @%% ; - { DUP ; - DIP { CDR @%% ; - { DUP ; - DIP { CDR @%% ; - { DUP ; - DIP { CAR @%% ; - { DUP ; - DIP { CAR @%% ; { DUP ; CDR %value ; DROP ; CAR @%% ; PAIR %@ %value } } ; - CDR @%% ; - SWAP ; - PAIR %@ %@ } } ; - CDR @%% ; - SWAP ; - PAIR %@ %@ } } ; - CAR @%% ; - PAIR %@ %@ } } ; - CAR @%% ; - PAIR %@ %@ } } ; - CDR @%% ; - SWAP ; - PAIR %@ %@ @toplevel_pair_name } ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-take_my_money.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-take_my_money.out deleted file mode 100644 index e337e046dd675429bc54557ed5d09fd463deea05..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-take_my_money.out +++ /dev/null @@ -1,13 +0,0 @@ -{ parameter key_hash ; - storage unit ; - code { CAR ; - IMPLICIT_ACCOUNT ; - DIP { UNIT } ; - PUSH mutez 1000000 ; - UNIT ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } } - diff --git a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-unpair_macro.out b/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-unpair_macro.out deleted file mode 100644 index 54c838c9052c00e9a3df0a3d10a0a11c92f848da..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_macros.ml/Parisb- Macro expansion- macros-unpair_macro.out +++ /dev/null @@ -1,19 +0,0 @@ -{ parameter (unit :param_unit) ; - storage (unit :u1) ; - code { DROP ; - UNIT :u4 @a4 ; - UNIT :u3 @a3 ; - UNIT :u2 @a2 ; - UNIT :u1 @a1 ; - PAIR ; - UNPAIR @x1 @x2 ; - { DIP 2 { PAIR %x3 %x4 } ; PAIR %x1 %x2 ; PAIR @p1 } ; - { UNPAIR ; UNPAIR ; DIP 2 { UNPAIR } } ; - { DIP 2 { PAIR %x3 %x4 } ; DIP { PAIR %x2 } ; PAIR %x1 @p2 } ; - { UNPAIR ; DIP { UNPAIR } ; DIP 2 { UNPAIR } } ; - { DIP { PAIR %x2 %x3 } ; DIP { PAIR % %x4 } ; PAIR %x1 @p3 } ; - { UNPAIR ; DIP { UNPAIR } ; DIP { UNPAIR } } ; - DIP { DROP ; DROP ; DROP } ; - NIL operation ; - PAIR } } - diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_big_map_origination.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_big_map_origination.out deleted file mode 100644 index 83ccf3fe08bd301b805873f4a72a04467d2017de..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_big_map_origination.out +++ /dev/null @@ -1,148 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract originate_big_map transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/originate_big_map.tz --init '{Elt 0 0}' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 813.249 units (will add 100 for safety) -Estimated storage: 403 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000374 - Expected counter: 1 - Gas limit: 914 - Storage limit: 423 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000374 - payload fees(the block proposer) ....... +ꜩ0.000374 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (big_map int int) ; - storage (big_map int int) ; - code { CAR ; NIL operation ; PAIR } } - Initial storage: { Elt 0 0 } - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 146 bytes - Updated big_maps: - New map(4) of type (big_map int int) - Set map(4)[0] to 0 - Paid storage size diff: 146 bytes - Consumed gas: 813.216 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0365 - storage fees ........................... +ꜩ0.0365 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as originate_big_map. - -./octez-client --mode mockup --wait none originate contract originate_big_map transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/originate_big_map.tz --init 0 --burn-cap 10 --force -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (big_map int int) ; - storage (big_map int int) ; - code { CAR ; NIL operation ; PAIR } } - Initial storage: 0 - No delegate for this contract - This operation FAILED. - -Ill typed data: 1: 0 is not an expression of type big_map int int -At line 1 characters 0 to 1, value 0 is invalid for type big_map int int. -At line 1 characters 0 to 1, -Unexpected forged value. -Fatal error: - origination simulation failed - -./octez-client --mode mockup --wait none originate contract originate_big_map transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/originate_big_map.tz --init 'Pair 0 {Elt 1 (Some 4)}' --burn-cap 10 --force -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (big_map int int) ; - storage (big_map int int) ; - code { CAR ; NIL operation ; PAIR } } - Initial storage: (Pair 0 { Elt 1 (Some 4) }) - No delegate for this contract - This operation FAILED. - -Ill typed data: 1: (Pair 0 { Elt 1 (Some 4) }) -is not an expression of type big_map int int -At line 1 characters 0 to 26, value (Pair 0 { Elt 1 (Some 4) }) -is invalid for type big_map int int. -At line 1 characters 6 to 7, -Unexpected forged value. -Fatal error: - origination simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg 0 -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: 0 - This operation FAILED. - -Invalid argument passed to contract [CONTRACT_HASH]. -At (unshown) location 0, value 0 is invalid for type big_map int int. -At (unshown) location 0, Unexpected forged value. -Fatal error: - transfer simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg 'Pair 0 {Elt 1 (Some 4)}' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0 { Elt 1 (Some 4) }) - This operation FAILED. - -Invalid argument passed to contract [CONTRACT_HASH]. -At (unshown) location 0, value (Pair 0 { Elt 1 (Some 4) }) -is invalid for type big_map int int. -At (unshown) location 1, Unexpected forged value. -Fatal error: - transfer simulation failed diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_contract_fails.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_contract_fails.out deleted file mode 100644 index 4d8accb66a88bf940a6184c72b0fe01a61adcb63..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_contract_fails.out +++ /dev/null @@ -1,70 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract contract transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/contract.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 589.063 units (will add 100 for safety) -Estimated storage: 329 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000368 - Expected counter: 1 - Gas limit: 690 - Storage limit: 349 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000368 - payload fees(the block proposer) ....... +ꜩ0.000368 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter address ; - storage unit ; - code { CAR ; CONTRACT unit ; ASSERT_SOME ; DROP ; UNIT ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 72 bytes - Paid storage size diff: 72 bytes - Consumed gas: 589.029 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.018 - storage fees ........................... +ꜩ0.018 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as contract. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 1: { parameter address ; - 2: storage unit ; - 3: code { CAR ; CONTRACT unit ; ASSERT_SOME ; DROP ; UNIT ; NIL operation ; PAIR } } -At line 3 characters 31 to 42, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_level.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_level.out deleted file mode 100644 index 7e80a9ada435eb2e38cd0b153d2eb697fa85078c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_level.out +++ /dev/null @@ -1,113 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract level transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/level.tz --init 9999999 --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 579.482 units (will add 100 for safety) -Estimated storage: 300 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000338 - Expected counter: 1 - Gas limit: 680 - Storage limit: 320 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000338 - payload fees(the block proposer) ....... +ꜩ0.000338 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage nat ; - code { DROP ; LEVEL ; NIL operation ; PAIR } } - Initial storage: 9999999 - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 43 bytes - Paid storage size diff: 43 bytes - Consumed gas: 579.449 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01075 - storage fees ........................... +ꜩ0.01075 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as level. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1277.146 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000386 - Expected counter: 2 - Gas limit: 1378 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000386 - payload fees(the block proposer) ....... +ꜩ0.000386 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 1 - Storage size: 40 bytes - Consumed gas: 1277.818 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -1 - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -1 - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1277.758 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000386 - Expected counter: 3 - Gas limit: 1378 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000386 - payload fees(the block proposer) ....... +ꜩ0.000386 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 4 - Storage size: 40 bytes - Consumed gas: 1277.692 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -4 diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_now.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_now.out deleted file mode 100644 index 44009ded0d20a94b41ec81e618842fac92cb657f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_now.out +++ /dev/null @@ -1,77 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract store_now transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/store_now.tz --init '"[TIMESTAMP]"' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 580.706 units (will add 100 for safety) -Estimated storage: 301 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000359 - Expected counter: 1 - Gas limit: 681 - Storage limit: 321 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000359 - payload fees(the block proposer) ....... +ꜩ0.000359 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage timestamp ; - code { DROP ; NOW ; NIL operation ; PAIR } } - Initial storage: "[TIMESTAMP]" - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 44 bytes - Paid storage size diff: 44 bytes - Consumed gas: 580.673 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.011 - storage fees ........................... +ꜩ0.011 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as store_now. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1277.238 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000386 - Expected counter: 2 - Gas limit: 1378 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000386 - payload fees(the block proposer) ....... +ꜩ0.000386 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 1 - Storage size: 40 bytes - Consumed gas: 1277.860 - - -./octez-client --mode mockup rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/storage' -{ "string": "[TIMESTAMP]" } diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_self.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_self.out deleted file mode 100644 index a45707bfefb9c84ffb2c9839ab5d5aee9d72d94a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_self.out +++ /dev/null @@ -1,77 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract self transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/self.tz --init '"[PUBLIC_KEY_HASH]"' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 586.589 units (will add 100 for safety) -Estimated storage: 324 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000377 - Expected counter: 1 - Gas limit: 687 - Storage limit: 344 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000377 - payload fees(the block proposer) ....... +ꜩ0.000377 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage address ; - code { DROP ; SELF ; ADDRESS ; NIL operation ; PAIR } } - Initial storage: "[PUBLIC_KEY_HASH]" - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 67 bytes - Paid storage size diff: 67 bytes - Consumed gas: 586.556 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01675 - storage fees ........................... +ꜩ0.01675 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as self. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1279.520 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000386 - Expected counter: 2 - Gas limit: 1380 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000386 - payload fees(the block proposer) ....... +ꜩ0.000386 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 0x01fabd76c7ade40ef0e6a7b2be514d9e617e0a424800 - Storage size: 67 bytes - Consumed gas: 1280.099 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"[CONTRACT_HASH]" diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_sender.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_sender.out deleted file mode 100644 index caf29e0cef4dd5299d43ed1b9ebd0bf3bc947e66..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_sender.out +++ /dev/null @@ -1,170 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract proxy transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/proxy.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 585.098 units (will add 100 for safety) -Estimated storage: 312 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000351 - Expected counter: 1 - Gas limit: 686 - Storage limit: 332 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000351 - payload fees(the block proposer) ....... +ꜩ0.000351 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (contract unit) ; - storage unit ; - code { UNPAIR ; - AMOUNT ; - UNIT ; - TRANSFER_TOKENS ; - DIP { NIL operation } ; - CONS ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 55 bytes - Paid storage size diff: 55 bytes - Consumed gas: 585.065 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01375 - storage fees ........................... +ꜩ0.01375 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as proxy. - -./octez-client --mode mockup --wait none originate contract sender transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/sender.tz --init '"[PUBLIC_KEY_HASH]"' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 585.452 units (will add 100 for safety) -Estimated storage: 322 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000375 - Expected counter: 2 - Gas limit: 686 - Storage limit: 342 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000375 - payload fees(the block proposer) ....... +ꜩ0.000375 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage address ; - code { DROP ; SENDER ; NIL operation ; PAIR } } - Initial storage: "[PUBLIC_KEY_HASH]" - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 65 bytes - Paid storage size diff: 65 bytes - Consumed gas: 585.419 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01625 - storage fees ........................... +ꜩ0.01625 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as sender. - -./octez-client --mode mockup --wait none transfer 0 from '[PUBLIC_KEY_HASH]' to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1278.793 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000386 - Expected counter: 1 - Gas limit: 1379 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000386 - payload fees(the block proposer) ....... +ꜩ0.000386 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c - Storage size: 65 bytes - Consumed gas: 1279.372 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"[PUBLIC_KEY_HASH]" - -./octez-client --mode mockup --wait none transfer 0 from '[PUBLIC_KEY_HASH]' to '[CONTRACT_HASH]' --burn-cap 10 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 2948.882 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000599 - Expected counter: 2 - Gas limit: 3049 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000599 - payload fees(the block proposer) ....... +ꜩ0.000599 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 55 bytes - Consumed gas: 1739.356 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 0x01c144b1848cb3943f64c69648f0b9e477d96c540600 - Storage size: 65 bytes - Consumed gas: 1210.707 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"[CONTRACT_HASH]" diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_set_delegate.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_set_delegate.out deleted file mode 100644 index c7e436fac34befbf707d64621628700f6636ada8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_set_delegate.out +++ /dev/null @@ -1,118 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract set_delegate transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/set_delegate.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 582.907 units (will add 100 for safety) -Estimated storage: 308 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000347 - Expected counter: 1 - Gas limit: 683 - Storage limit: 328 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000347 - payload fees(the block proposer) ....... +ꜩ0.000347 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (option key_hash) ; - storage unit ; - code { UNPAIR ; SET_DELEGATE ; DIP { NIL operation } ; CONS ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 51 bytes - Paid storage size diff: 51 bytes - Consumed gas: 582.874 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01275 - storage fees ........................... +ꜩ0.01275 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as set_delegate. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Some "[PUBLIC_KEY_HASH]")' -Node is bootstrapped. -Estimated gas: 1385.229 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000445 - Expected counter: 2 - Gas limit: 1486 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000445 - payload fees(the block proposer) ....... +ꜩ0.000445 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Some "[PUBLIC_KEY_HASH]") - This transaction was successfully applied - Updated storage: Unit - Storage size: 51 bytes - Consumed gas: 1285.808 - Internal operations: - Internal Delegation: - Contract: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - This delegation was successfully applied - Consumed gas: 100 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg None -Node is bootstrapped. -Estimated gas: 1379.351 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000403 - Expected counter: 3 - Gas limit: 1480 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000403 - payload fees(the block proposer) ....... +ꜩ0.000403 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: None - This transaction was successfully applied - Updated storage: Unit - Storage size: 51 bytes - Consumed gas: 1279.930 - Internal operations: - Internal Delegation: - Contract: [CONTRACT_HASH] - To: nobody - This delegation was successfully applied - Consumed gas: 100 - diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_slice.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_slice.out deleted file mode 100644 index f59e583b179c896f1c81306978e5c9d8410eb87c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_slice.out +++ /dev/null @@ -1,461 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract slices transferring 1 from bootstrap1 running michelson_test_scripts/opcodes/slices.tz --init '"sppk7dBPqMPjDjXgKbb5f7V3PuKUrA4Zuwc3c3H7XqQerqPUWbK7Hna"' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 832.884 units (will add 100 for safety) -Estimated storage: 835 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000922 - Expected counter: 1 - Gas limit: 933 - Storage limit: 855 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000922 - payload fees(the block proposer) ....... +ꜩ0.000922 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ1 - Script: - { parameter (pair bytes signature) ; - storage key ; - code { DUP ; - CAAR ; - DUP ; - SIZE ; - PUSH nat 128 ; - SWAP ; - SUB ; - ISNAT ; - ASSERT_SOME ; - PUSH nat 128 ; - SLICE @payload ; - ASSERT_SOME ; - DUP ; - DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 0 ; SLICE ; ASSERT_SOME } ; - SHA256 ; - ASSERT_CMPEQ } ; - DUP ; - DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 32 ; SLICE ; ASSERT_SOME } ; - BLAKE2B ; - ASSERT_CMPEQ } ; - DUP ; - DIP { DIP { DUP ; CAAR ; PUSH nat 64 ; PUSH nat 64 ; SLICE ; ASSERT_SOME } ; - SHA512 ; - ASSERT_CMPEQ } ; - DIP { DUP ; CDR ; DIP { DUP ; CADR } } ; - SWAP ; - DIP { SWAP } ; - CHECK_SIGNATURE ; - ASSERT ; - CDR ; - DUP ; - HASH_KEY ; - IMPLICIT_ACCOUNT ; - BALANCE ; - UNIT ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } } - Initial storage: - "sppk7dBPqMPjDjXgKbb5f7V3PuKUrA4Zuwc3c3H7XqQerqPUWbK7Hna" - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 578 bytes - Paid storage size diff: 578 bytes - Consumed gas: 832.851 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.1445 - storage fees ........................... +ꜩ0.1445 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - -New contract [CONTRACT_HASH] originated. -Contract memorized as slices. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 "p2sigsceCzcDw2AeYDzUonj4JT341WC9Px4wdhHBxbZcG1FhfqFVuG7f2fGCzrEHSAZgrsrQWpxduDPk9qZRgrpzwJnSHC3gZJ")' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 - "p2sigsceCzcDw2AeYDzUonj4JT341WC9Px4wdhHBxbZcG1FhfqFVuG7f2fGCzrEHSAZgrsrQWpxduDPk9qZRgrpzwJnSHC3gZJ") - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 01: { parameter (pair bytes signature) ; - 02: storage key ; - 03: code { DUP ; - 04: CAAR ; - 05: DUP ; - 06: SIZE ; - 07: PUSH nat 128 ; - 08: SWAP ; - 09: SUB ; - 10: ISNAT ; - 11: ASSERT_SOME ; - 12: PUSH nat 128 ; - 13: SLICE @payload ; - 14: ASSERT_SOME ; - 15: DUP ; - 16: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 0 ; SLICE ; ASSERT_SOME } ; - 17: SHA256 ; - 18: ASSERT_CMPEQ } ; - 19: DUP ; - 20: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 32 ; SLICE ; ASSERT_SOME } ; - 21: BLAKE2B ; - 22: ASSERT_CMPEQ } ; - 23: DUP ; - 24: DIP { DIP { DUP ; CAAR ; PUSH nat 64 ; PUSH nat 64 ; SLICE ; ASSERT_SOME } ; - 25: SHA512 ; - 26: ASSERT_CMPEQ } ; - 27: DIP { DUP ; CDR ; DIP { DUP ; CADR } } ; - 28: SWAP ; - 29: DIP { SWAP } ; - 30: CHECK_SIGNATURE ; - 31: ASSERT ; - 32: CDR ; - 33: DUP ; - 34: HASH_KEY ; - 35: IMPLICIT_ACCOUNT ; - 36: BALANCE ; - 37: UNIT ; - 38: TRANSFER_TOKENS ; - 39: NIL operation ; - 40: SWAP ; - 41: CONS ; - 42: PAIR } } -At line 31 characters 9 to 15, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Pair 0xeaa9ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm")' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0xeaa9ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 - "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm") - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 01: { parameter (pair bytes signature) ; - 02: storage key ; - 03: code { DUP ; - 04: CAAR ; - 05: DUP ; - 06: SIZE ; - 07: PUSH nat 128 ; - 08: SWAP ; - 09: SUB ; - 10: ISNAT ; - 11: ASSERT_SOME ; - 12: PUSH nat 128 ; - 13: SLICE @payload ; - 14: ASSERT_SOME ; - 15: DUP ; - 16: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 0 ; SLICE ; ASSERT_SOME } ; - 17: SHA256 ; - 18: ASSERT_CMPEQ } ; - 19: DUP ; - 20: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 32 ; SLICE ; ASSERT_SOME } ; - 21: BLAKE2B ; - 22: ASSERT_CMPEQ } ; - 23: DUP ; - 24: DIP { DIP { DUP ; CAAR ; PUSH nat 64 ; PUSH nat 64 ; SLICE ; ASSERT_SOME } ; - 25: SHA512 ; - 26: ASSERT_CMPEQ } ; - 27: DIP { DUP ; CDR ; DIP { DUP ; CADR } } ; - 28: SWAP ; - 29: DIP { SWAP } ; - 30: CHECK_SIGNATURE ; - 31: ASSERT ; - 32: CDR ; - 33: DUP ; - 34: HASH_KEY ; - 35: IMPLICIT_ACCOUNT ; - 36: BALANCE ; - 37: UNIT ; - 38: TRANSFER_TOKENS ; - 39: NIL operation ; - 40: SWAP ; - 41: CONS ; - 42: PAIR } } -At line 18 characters 15 to 27, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2deaad01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm")' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2deaad01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 - "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm") - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 01: { parameter (pair bytes signature) ; - 02: storage key ; - 03: code { DUP ; - 04: CAAR ; - 05: DUP ; - 06: SIZE ; - 07: PUSH nat 128 ; - 08: SWAP ; - 09: SUB ; - 10: ISNAT ; - 11: ASSERT_SOME ; - 12: PUSH nat 128 ; - 13: SLICE @payload ; - 14: ASSERT_SOME ; - 15: DUP ; - 16: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 0 ; SLICE ; ASSERT_SOME } ; - 17: SHA256 ; - 18: ASSERT_CMPEQ } ; - 19: DUP ; - 20: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 32 ; SLICE ; ASSERT_SOME } ; - 21: BLAKE2B ; - 22: ASSERT_CMPEQ } ; - 23: DUP ; - 24: DIP { DIP { DUP ; CAAR ; PUSH nat 64 ; PUSH nat 64 ; SLICE ; ASSERT_SOME } ; - 25: SHA512 ; - 26: ASSERT_CMPEQ } ; - 27: DIP { DUP ; CDR ; DIP { DUP ; CADR } } ; - 28: SWAP ; - 29: DIP { SWAP } ; - 30: CHECK_SIGNATURE ; - 31: ASSERT ; - 32: CDR ; - 33: DUP ; - 34: HASH_KEY ; - 35: IMPLICIT_ACCOUNT ; - 36: BALANCE ; - 37: UNIT ; - 38: TRANSFER_TOKENS ; - 39: NIL operation ; - 40: SWAP ; - 41: CONS ; - 42: PAIR } } -At line 22 characters 15 to 27, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150733eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm")' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150733eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 - "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm") - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 01: { parameter (pair bytes signature) ; - 02: storage key ; - 03: code { DUP ; - 04: CAAR ; - 05: DUP ; - 06: SIZE ; - 07: PUSH nat 128 ; - 08: SWAP ; - 09: SUB ; - 10: ISNAT ; - 11: ASSERT_SOME ; - 12: PUSH nat 128 ; - 13: SLICE @payload ; - 14: ASSERT_SOME ; - 15: DUP ; - 16: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 0 ; SLICE ; ASSERT_SOME } ; - 17: SHA256 ; - 18: ASSERT_CMPEQ } ; - 19: DUP ; - 20: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 32 ; SLICE ; ASSERT_SOME } ; - 21: BLAKE2B ; - 22: ASSERT_CMPEQ } ; - 23: DUP ; - 24: DIP { DIP { DUP ; CAAR ; PUSH nat 64 ; PUSH nat 64 ; SLICE ; ASSERT_SOME } ; - 25: SHA512 ; - 26: ASSERT_CMPEQ } ; - 27: DIP { DUP ; CDR ; DIP { DUP ; CADR } } ; - 28: SWAP ; - 29: DIP { SWAP } ; - 30: CHECK_SIGNATURE ; - 31: ASSERT ; - 32: CDR ; - 33: DUP ; - 34: HASH_KEY ; - 35: IMPLICIT_ACCOUNT ; - 36: BALANCE ; - 37: UNIT ; - 38: TRANSFER_TOKENS ; - 39: NIL operation ; - 40: SWAP ; - 41: CONS ; - 42: PAIR } } -At line 26 characters 15 to 27, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Pair 0xe009ab79e8b84ef0 "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm")' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 2 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0xe009ab79e8b84ef0 - "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm") - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 01: { parameter (pair bytes signature) ; - 02: storage key ; - 03: code { DUP ; - 04: CAAR ; - 05: DUP ; - 06: SIZE ; - 07: PUSH nat 128 ; - 08: SWAP ; - 09: SUB ; - 10: ISNAT ; - 11: ASSERT_SOME ; - 12: PUSH nat 128 ; - 13: SLICE @payload ; - 14: ASSERT_SOME ; - 15: DUP ; - 16: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 0 ; SLICE ; ASSERT_SOME } ; - 17: SHA256 ; - 18: ASSERT_CMPEQ } ; - 19: DUP ; - 20: DIP { DIP { DUP ; CAAR ; PUSH nat 32 ; PUSH nat 32 ; SLICE ; ASSERT_SOME } ; - 21: BLAKE2B ; - 22: ASSERT_CMPEQ } ; - 23: DUP ; - 24: DIP { DIP { DUP ; CAAR ; PUSH nat 64 ; PUSH nat 64 ; SLICE ; ASSERT_SOME } ; - 25: SHA512 ; - 26: ASSERT_CMPEQ } ; - 27: DIP { DUP ; CDR ; DIP { DUP ; CADR } } ; - 28: SWAP ; - 29: DIP { SWAP } ; - 30: CHECK_SIGNATURE ; - 31: ASSERT ; - 32: CDR ; - 33: DUP ; - 34: HASH_KEY ; - 35: IMPLICIT_ACCOUNT ; - 36: BALANCE ; - 37: UNIT ; - 38: TRANSFER_TOKENS ; - 39: NIL operation ; - 40: SWAP ; - 41: CONS ; - 42: PAIR } } -At line 11 characters 9 to 20, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '(Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm")' -Node is bootstrapped. -Estimated gas: 1625.177 units (will add 100 for safety) -Estimated storage: 257 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00068 - Expected counter: 2 - Gas limit: 1726 - Storage limit: 277 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00068 - payload fees(the block proposer) ....... +ꜩ0.00068 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0xe009ab79e8b84ef0e55c43a9a857214d8761e67b75ba63500a5694fb2ffe174acc2de22d01ccb7259342437f05e1987949f0ad82e9f32e9a0b79cb252d7f7b8236ad728893f4e7150742eefdbeda254970f9fcd92c6228c178e1a923e5600758eb83f2a05edd0be7625657901f2ba81eaf145d003dbef78e33f43a32a3788bdf0501000000085341554349535345 - "spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm") - This transaction was successfully applied - Updated storage: - 0x0103fe5753baadb56a4836e34571ce4cbe82158ee40eba872b848f709699019725ba - Storage size: 578 bytes - Consumed gas: 1525.659 - Internal operations: - Internal Transaction: - Amount: ꜩ1 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - This transaction was successfully applied - Consumed gas: 100 - Balance updates: - [CONTRACT_HASH] ... -ꜩ1 - [PUBLIC_KEY_HASH] ... +ꜩ1 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_source.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_source.out deleted file mode 100644 index b7c989cd3449ed2af9efc4cb5557cf0970eb3be7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_source.out +++ /dev/null @@ -1,170 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract proxy transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/proxy.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 585.098 units (will add 100 for safety) -Estimated storage: 312 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000351 - Expected counter: 1 - Gas limit: 686 - Storage limit: 332 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000351 - payload fees(the block proposer) ....... +ꜩ0.000351 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (contract unit) ; - storage unit ; - code { UNPAIR ; - AMOUNT ; - UNIT ; - TRANSFER_TOKENS ; - DIP { NIL operation } ; - CONS ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 55 bytes - Paid storage size diff: 55 bytes - Consumed gas: 585.065 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01375 - storage fees ........................... +ꜩ0.01375 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as proxy. - -./octez-client --mode mockup --wait none originate contract source transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/source.tz --init '"[PUBLIC_KEY_HASH]"' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 585.452 units (will add 100 for safety) -Estimated storage: 322 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000375 - Expected counter: 2 - Gas limit: 686 - Storage limit: 342 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000375 - payload fees(the block proposer) ....... +ꜩ0.000375 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage address ; - code { DROP ; SOURCE ; NIL operation ; PAIR } } - Initial storage: "[PUBLIC_KEY_HASH]" - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 65 bytes - Paid storage size diff: 65 bytes - Consumed gas: 585.419 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01625 - storage fees ........................... +ꜩ0.01625 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as source. - -./octez-client --mode mockup --wait none transfer 0 from '[PUBLIC_KEY_HASH]' to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1278.793 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000386 - Expected counter: 1 - Gas limit: 1379 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000386 - payload fees(the block proposer) ....... +ꜩ0.000386 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c - Storage size: 65 bytes - Consumed gas: 1279.372 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"[PUBLIC_KEY_HASH]" - -./octez-client --mode mockup --wait none transfer 0 from '[PUBLIC_KEY_HASH]' to '[CONTRACT_HASH]' --burn-cap 10 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 2948.882 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000599 - Expected counter: 2 - Gas limit: 3049 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000599 - payload fees(the block proposer) ....... +ꜩ0.000599 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 55 bytes - Consumed gas: 1739.356 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 0x0000e7670f32038107a59a2b9cfefae36ea21f5aa63c - Storage size: 65 bytes - Consumed gas: 1210.707 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"[PUBLIC_KEY_HASH]" diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_split_bytes.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_split_bytes.out deleted file mode 100644 index 7ed8e75b7ac652a39a1f5ea4d38e9c2687e7b1f8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_split_bytes.out +++ /dev/null @@ -1,142 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract split_bytes transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/split_bytes.tz --init '{}' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 649.771 units (will add 100 for safety) -Estimated storage: 511 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000556 - Expected counter: 1 - Gas limit: 750 - Storage limit: 531 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000556 - payload fees(the block proposer) ....... +ꜩ0.000556 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter bytes ; - storage (list bytes) ; - code { UNPAIR ; - DIP { NIL bytes ; SWAP ; ITER { CONS } } ; - DUP ; - SIZE ; - PUSH nat 0 ; - CMPNEQ ; - DIP { PUSH @index nat 0 } ; - LOOP { PAIR ; - DUP ; - DIP { UNPAIR ; DIP { PUSH nat 1 } ; SLICE ; ASSERT_SOME ; CONS @storage } ; - UNPAIR ; - PUSH nat 1 ; - ADD @index ; - DUP ; - DIP { DIP { DUP } ; SWAP ; SIZE ; CMPNEQ } ; - SWAP } ; - DROP ; - DROP ; - NIL bytes ; - SWAP ; - ITER { CONS } ; - NIL operation ; - PAIR } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 254 bytes - Paid storage size diff: 254 bytes - Consumed gas: 649.738 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0635 - storage fees ........................... +ꜩ0.0635 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as split_bytes. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg 0xaabbcc -Node is bootstrapped. -Estimated gas: 1319.826 units (will add 100 for safety) -Estimated storage: 18 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000403 - Expected counter: 2 - Gas limit: 1420 - Storage limit: 38 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000403 - payload fees(the block proposer) ....... +ꜩ0.000403 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: 0xaabbcc - This transaction was successfully applied - Updated storage: { 0xaa ; 0xbb ; 0xcc } - Storage size: 272 bytes - Paid storage size diff: 18 bytes - Consumed gas: 1320.319 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0045 - storage fees ........................... +ꜩ0.0045 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -{ 0xaa ; 0xbb ; 0xcc } - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg 0xddeeff -Node is bootstrapped. -Estimated gas: 1322.442 units (will add 100 for safety) -Estimated storage: 18 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000404 - Expected counter: 3 - Gas limit: 1423 - Storage limit: 38 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000404 - payload fees(the block proposer) ....... +ꜩ0.000404 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: 0xddeeff - This transaction was successfully applied - Updated storage: { 0xaa ; 0xbb ; 0xcc ; 0xdd ; 0xee ; 0xff } - Storage size: 290 bytes - Paid storage size diff: 18 bytes - Consumed gas: 1322.935 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0045 - storage fees ........................... +ꜩ0.0045 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -{ 0xaa ; 0xbb ; 0xcc ; 0xdd ; 0xee ; 0xff } diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_split_string.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_split_string.out deleted file mode 100644 index 13dea81cffaf4fc7199ba9d22e5c6d83564e5d62..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_split_string.out +++ /dev/null @@ -1,142 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract split_string transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/split_string.tz --init '{}' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 649.771 units (will add 100 for safety) -Estimated storage: 511 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000556 - Expected counter: 1 - Gas limit: 750 - Storage limit: 531 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000556 - payload fees(the block proposer) ....... +ꜩ0.000556 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter string ; - storage (list string) ; - code { UNPAIR ; - DIP { NIL string ; SWAP ; ITER { CONS } } ; - DUP ; - SIZE ; - PUSH nat 0 ; - CMPNEQ ; - DIP { PUSH @index nat 0 } ; - LOOP { PAIR ; - DUP ; - DIP { UNPAIR ; DIP { PUSH nat 1 } ; SLICE ; ASSERT_SOME ; CONS @storage } ; - UNPAIR ; - PUSH nat 1 ; - ADD @index ; - DUP ; - DIP { DIP { DUP } ; SWAP ; SIZE ; CMPNEQ } ; - SWAP } ; - DROP ; - DROP ; - NIL string ; - SWAP ; - ITER { CONS } ; - NIL operation ; - PAIR } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 254 bytes - Paid storage size diff: 254 bytes - Consumed gas: 649.738 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0635 - storage fees ........................... +ꜩ0.0635 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as split_string. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"abc"' -Node is bootstrapped. -Estimated gas: 1319.891 units (will add 100 for safety) -Estimated storage: 18 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000403 - Expected counter: 2 - Gas limit: 1420 - Storage limit: 38 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000403 - payload fees(the block proposer) ....... +ꜩ0.000403 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "abc" - This transaction was successfully applied - Updated storage: { "a" ; "b" ; "c" } - Storage size: 272 bytes - Paid storage size diff: 18 bytes - Consumed gas: 1320.384 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0045 - storage fees ........................... +ꜩ0.0045 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -{ "a" ; "b" ; "c" } - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"def"' -Node is bootstrapped. -Estimated gas: 1322.582 units (will add 100 for safety) -Estimated storage: 18 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000404 - Expected counter: 3 - Gas limit: 1423 - Storage limit: 38 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000404 - payload fees(the block proposer) ....... +ꜩ0.000404 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "def" - This transaction was successfully applied - Updated storage: { "a" ; "b" ; "c" ; "d" ; "e" ; "f" } - Storage size: 290 bytes - Paid storage size diff: 18 bytes - Consumed gas: 1323.075 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0045 - storage fees ........................... +ꜩ0.0045 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -{ "a" ; "b" ; "c" ; "d" ; "e" ; "f" } diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_store_input.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_store_input.out deleted file mode 100644 index 4a2d23ec90c16cebe5eb7a6c433a764db18414f3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_store_input.out +++ /dev/null @@ -1,116 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract store_input transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/store_input.tz --init '""' --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 578.287 units (will add 100 for safety) -Estimated storage: 298 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000336 - Expected counter: 1 - Gas limit: 679 - Storage limit: 318 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000336 - payload fees(the block proposer) ....... +ꜩ0.000336 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter string ; - storage string ; - code { CAR ; NIL operation ; PAIR } } - Initial storage: "" - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 41 bytes - Paid storage size diff: 41 bytes - Consumed gas: 578.254 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01025 - storage fees ........................... +ꜩ0.01025 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as store_input. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"abcdefg"' -Node is bootstrapped. -Estimated gas: 1277.540 units (will add 100 for safety) -Estimated storage: 7 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000403 - Expected counter: 2 - Gas limit: 1378 - Storage limit: 27 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000403 - payload fees(the block proposer) ....... +ꜩ0.000403 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "abcdefg" - This transaction was successfully applied - Updated storage: "abcdefg" - Storage size: 48 bytes - Paid storage size diff: 7 bytes - Consumed gas: 1278.162 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00175 - storage fees ........................... +ꜩ0.00175 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"abcdefg" - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"xyz"' -Node is bootstrapped. -Estimated gas: 1277.556 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000399 - Expected counter: 3 - Gas limit: 1378 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000399 - payload fees(the block proposer) ....... +ꜩ0.000399 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "xyz" - This transaction was successfully applied - Updated storage: "xyz" - Storage size: 44 bytes - Consumed gas: 1278.178 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -"xyz" diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_trace_origination_compare_big_type.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_trace_origination_compare_big_type.out deleted file mode 100644 index efac8b5b355c7b02c73be30ecb6d6feb8ba30b63..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_trace_origination_compare_big_type.out +++ /dev/null @@ -1,89 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract compare_big_type transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/compare_big_type.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 1495.073 units (will add 100 for safety) -Estimated storage: 385 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000515 - Expected counter: 1 - Gas limit: 1596 - Storage limit: 405 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000515 - payload fees(the block proposer) ....... +ꜩ0.000515 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage unit ; - code { DROP ; - PUSH nat 0 ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DROP ; - UNIT ; - NIL operation ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 128 bytes - Paid storage size diff: 128 bytes - Consumed gas: 1495.039 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.032 - storage fees ........................... +ꜩ0.032 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as compare_big_type. diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_trace_origination_compare_big_type2.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_trace_origination_compare_big_type2.out deleted file mode 100644 index 515d82971a648689edb68dd12054ae1beac8bd98..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_trace_origination_compare_big_type2.out +++ /dev/null @@ -1,93 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract compare_big_type2 transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/compare_big_type2.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 1635.852 units (will add 100 for safety) -Estimated storage: 393 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000537 - Expected counter: 1 - Gas limit: 1736 - Storage limit: 413 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000537 - payload fees(the block proposer) ....... +ꜩ0.000537 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage unit ; - code { DROP ; - PUSH nat 0 ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - PAIR ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DUP ; - DUP ; - COMPARE ; - DROP ; - DROP ; - UNIT ; - NIL operation ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 136 bytes - Paid storage size diff: 136 bytes - Consumed gas: 1635.818 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.034 - storage fees ........................... +ꜩ0.034 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as compare_big_type2. diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_transfer_amount.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_transfer_amount.out deleted file mode 100644 index d9fe0987239bec5025e5c85650696f0d54d72c53..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_transfer_amount.out +++ /dev/null @@ -1,83 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract transfer_amount transferring 0 from bootstrap1 running michelson_test_scripts/opcodes/transfer_amount.tz --init 0 --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 579.161 units (will add 100 for safety) -Estimated storage: 297 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000335 - Expected counter: 1 - Gas limit: 680 - Storage limit: 317 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000335 - payload fees(the block proposer) ....... +ꜩ0.000335 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage mutez ; - code { DROP ; AMOUNT ; NIL operation ; PAIR } } - Initial storage: 0 - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 40 bytes - Paid storage size diff: 40 bytes - Consumed gas: 579.127 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01 - storage fees ........................... +ꜩ0.01 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as transfer_amount. - -./octez-client --mode mockup --wait none transfer 500 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg Unit -Node is bootstrapped. -Estimated gas: 1277.412 units (will add 100 for safety) -Estimated storage: 4 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00039 - Expected counter: 2 - Gas limit: 1378 - Storage limit: 24 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00039 - payload fees(the block proposer) ....... +ꜩ0.00039 - Transaction: - Amount: ꜩ500 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: 500000000 - Storage size: 44 bytes - Paid storage size diff: 4 bytes - Consumed gas: 1277.991 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.001 - storage fees ........................... +ꜩ0.001 - [PUBLIC_KEY_HASH] ... -ꜩ500 - [CONTRACT_HASH] ... +ꜩ500 - - -./octez-client --mode mockup get contract storage for '[CONTRACT_HASH]' -500000000 diff --git a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_transfer_tokens.out b/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_transfer_tokens.out deleted file mode 100644 index 336a37392f680ddb84669e56b61aaf5f5a398ae8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_onchain_opcodes.ml/Parisb- Contract onchain opcodes- test_transfer_tokens.out +++ /dev/null @@ -1,228 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract test_transfer_contract1 transferring 100 from bootstrap1 running michelson_test_scripts/opcodes/noop.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 578.200 units (will add 100 for safety) -Estimated storage: 295 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000336 - Expected counter: 1 - Gas limit: 679 - Storage limit: 315 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000336 - payload fees(the block proposer) ....... +ꜩ0.000336 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ100 - Script: - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 38 bytes - Paid storage size diff: 38 bytes - Consumed gas: 578.167 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0095 - storage fees ........................... +ꜩ0.0095 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ100 - [CONTRACT_HASH] ... +ꜩ100 - -New contract [CONTRACT_HASH] originated. -Contract memorized as test_transfer_contract1. - -./octez-client --mode mockup --wait none originate contract test_transfer_contract2 transferring 20 from bootstrap1 running michelson_test_scripts/opcodes/noop.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 578.200 units (will add 100 for safety) -Estimated storage: 295 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000336 - Expected counter: 2 - Gas limit: 679 - Storage limit: 315 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000336 - payload fees(the block proposer) ....... +ꜩ0.000336 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ20 - Script: - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 38 bytes - Paid storage size diff: 38 bytes - Consumed gas: 578.167 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0095 - storage fees ........................... +ꜩ0.0095 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ20 - [CONTRACT_HASH] ... +ꜩ20 - -New contract [CONTRACT_HASH] originated. -Contract memorized as test_transfer_contract2. - -./octez-client --mode mockup --wait none originate contract transfer_tokens transferring 1000 from bootstrap1 running michelson_test_scripts/opcodes/transfer_tokens.tz --burn-cap 10 --force -Node is bootstrapped. -Estimated gas: 589.146 units (will add 100 for safety) -Estimated storage: 323 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000366 - Expected counter: 3 - Gas limit: 690 - Storage limit: 343 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000366 - payload fees(the block proposer) ....... +ꜩ0.000366 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ1000 - Script: - { parameter (contract unit) ; - storage unit ; - code { CAR ; - DIP { UNIT } ; - PUSH mutez 100000000 ; - UNIT ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 66 bytes - Paid storage size diff: 66 bytes - Consumed gas: 589.113 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ1000 - [CONTRACT_HASH] ... +ꜩ1000 - -New contract [CONTRACT_HASH] originated. -Contract memorized as transfer_tokens. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 2948.415 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000599 - Expected counter: 4 - Gas limit: 3049 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000599 - payload fees(the block proposer) ....... +ꜩ0.000599 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 66 bytes - Consumed gas: 1741.268 - Internal operations: - Internal Transaction: - Amount: ꜩ100 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: Unit - Storage size: 38 bytes - Consumed gas: 1208.328 - Balance updates: - [CONTRACT_HASH] ... -ꜩ100 - [CONTRACT_HASH] ... +ꜩ100 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 10 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 2948.415 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000599 - Expected counter: 5 - Gas limit: 3049 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000599 - payload fees(the block proposer) ....... +ꜩ0.000599 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 66 bytes - Consumed gas: 1741.268 - Internal operations: - Internal Transaction: - Amount: ꜩ100 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: Unit - Storage size: 38 bytes - Consumed gas: 1208.328 - Balance updates: - [CONTRACT_HASH] ... -ꜩ100 - [CONTRACT_HASH] ... +ꜩ100 - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input254251340-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input254251340-.out deleted file mode 100644 index daa5eb931057f16babc8c258662a5fa61f00067a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input254251340-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/abs.tz on storage Unit and input 948 --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 9.929) - [ (Pair 948 Unit) ] - - location: 7 (just consumed gas: 0.010) - [ 948 ] - - location: 8 (just consumed gas: 0.010) - [ 948 - 948 ] - - location: 9 (just consumed gas: 0.026) - [ -948 - 948 ] - - location: 10 (just consumed gas: 0.021) - [ 948 - 948 ] - - location: 11 (just consumed gas: 0.035) - [ 0 ] - - location: 13 (just consumed gas: 0.010) - [ True ] - - location: 14 (just consumed gas: 0.010) - [ ] - - location: 14 (just consumed gas: 0.025) - [ ] - - location: 20 (just consumed gas: 0.010) - [ Unit ] - - location: 21 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input420401245-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input420401245-.out deleted file mode 100644 index a3e70d63ab9cb54b7ad104081773b7804411702d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input420401245-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/abs.tz on storage Unit and input 12039123919239192312931 --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 9.929) - [ (Pair 12039123919239192312931 Unit) ] - - location: 7 (just consumed gas: 0.010) - [ 12039123919239192312931 ] - - location: 8 (just consumed gas: 0.010) - [ 12039123919239192312931 - 12039123919239192312931 ] - - location: 9 (just consumed gas: 0.030) - [ -12039123919239192312931 - 12039123919239192312931 ] - - location: 10 (just consumed gas: 0.025) - [ 12039123919239192312931 - 12039123919239192312931 ] - - location: 11 (just consumed gas: 0.035) - [ 0 ] - - location: 13 (just consumed gas: 0.010) - [ True ] - - location: 14 (just consumed gas: 0.010) - [ ] - - location: 14 (just consumed gas: 0.025) - [ ] - - location: 20 (just consumed gas: 0.010) - [ Unit ] - - location: 21 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input680650890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input680650890-.out deleted file mode 100644 index 5b2e87995780005ca10244d0d0a3e45119d65294..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -abs--storage125992234--input680650890-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/abs.tz on storage Unit and input 0 --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 9.929) - [ (Pair 0 Unit) ] - - location: 7 (just consumed gas: 0.010) - [ 0 ] - - location: 8 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 9 (just consumed gas: 0.025) - [ 0 - 0 ] - - location: 10 (just consumed gas: 0.020) - [ 0 - 0 ] - - location: 11 (just consumed gas: 0.035) - [ 0 ] - - location: 13 (just consumed gas: 0.010) - [ True ] - - location: 14 (just consumed gas: 0.010) - [ ] - - location: 14 (just consumed gas: 0.025) - [ ] - - location: 20 (just consumed gas: 0.010) - [ Unit ] - - location: 21 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add--storage125992234--input125992234-.out deleted file mode 100644 index 94421e6d5c500c941e1ad50f7bdc72221b138260..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add--storage125992234--input125992234-.out +++ /dev/null @@ -1,211 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 67.780) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ Unit ] - - location: 8 (just consumed gas: 0.010) - [ 2 - Unit ] - - location: 11 (just consumed gas: 0.010) - [ 2 - 2 - Unit ] - - location: 14 (just consumed gas: 0.035) - [ 4 - Unit ] - - location: 15 (just consumed gas: 0.010) - [ 4 - 4 - Unit ] - - location: 20 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 21 (just consumed gas: 0.010) - [ True - Unit ] - - location: 22 (just consumed gas: 0.010) - [ Unit ] - - location: 22 (just consumed gas: 0.025) - [ Unit ] - - location: 28 (just consumed gas: 0.010) - [ 2 - Unit ] - - location: 31 (just consumed gas: 0.010) - [ 2 - 2 - Unit ] - - location: 34 (just consumed gas: 0.035) - [ 4 - Unit ] - - location: 35 (just consumed gas: 0.010) - [ 4 - 4 - Unit ] - - location: 40 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 41 (just consumed gas: 0.010) - [ True - Unit ] - - location: 42 (just consumed gas: 0.010) - [ Unit ] - - location: 42 (just consumed gas: 0.025) - [ Unit ] - - location: 48 (just consumed gas: 0.010) - [ 2 - Unit ] - - location: 51 (just consumed gas: 0.010) - [ 2 - 2 - Unit ] - - location: 54 (just consumed gas: 0.035) - [ 4 - Unit ] - - location: 55 (just consumed gas: 0.010) - [ 4 - 4 - Unit ] - - location: 60 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 61 (just consumed gas: 0.010) - [ True - Unit ] - - location: 62 (just consumed gas: 0.010) - [ Unit ] - - location: 62 (just consumed gas: 0.025) - [ Unit ] - - location: 68 (just consumed gas: 0.010) - [ 2 - Unit ] - - location: 71 (just consumed gas: 0.010) - [ 2 - 2 - Unit ] - - location: 74 (just consumed gas: 0.035) - [ 4 - Unit ] - - location: 75 (just consumed gas: 0.010) - [ 4 - 4 - Unit ] - - location: 80 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 81 (just consumed gas: 0.010) - [ True - Unit ] - - location: 82 (just consumed gas: 0.010) - [ Unit ] - - location: 82 (just consumed gas: 0.025) - [ Unit ] - - location: 88 (just consumed gas: 0.010) - [ 2 - Unit ] - - location: 91 (just consumed gas: 0.010) - [ 2 - 2 - Unit ] - - location: 94 (just consumed gas: 0.035) - [ 4 - Unit ] - - location: 95 (just consumed gas: 0.010) - [ 4 - 4 - Unit ] - - location: 100 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 101 (just consumed gas: 0.010) - [ True - Unit ] - - location: 102 (just consumed gas: 0.010) - [ Unit ] - - location: 102 (just consumed gas: 0.025) - [ Unit ] - - location: 108 (just consumed gas: 0.010) - [ 60 - Unit ] - - location: 111 (just consumed gas: 0.010) - [ "2019-09-09T12:08:37Z" - 60 - Unit ] - - location: 114 (just consumed gas: 0.037) - [ "2019-09-09T12:09:37Z" - Unit ] - - location: 115 (just consumed gas: 0.010) - [ "2019-09-09T12:09:37Z" - "2019-09-09T12:09:37Z" - Unit ] - - location: 120 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 121 (just consumed gas: 0.010) - [ True - Unit ] - - location: 122 (just consumed gas: 0.010) - [ Unit ] - - location: 122 (just consumed gas: 0.025) - [ Unit ] - - location: 128 (just consumed gas: 0.010) - [ "2019-09-09T12:08:37Z" - Unit ] - - location: 131 (just consumed gas: 0.010) - [ 60 - "2019-09-09T12:08:37Z" - Unit ] - - location: 134 (just consumed gas: 0.037) - [ "2019-09-09T12:09:37Z" - Unit ] - - location: 135 (just consumed gas: 0.010) - [ "2019-09-09T12:09:37Z" - "2019-09-09T12:09:37Z" - Unit ] - - location: 140 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 141 (just consumed gas: 0.010) - [ True - Unit ] - - location: 142 (just consumed gas: 0.010) - [ Unit ] - - location: 142 (just consumed gas: 0.025) - [ Unit ] - - location: 148 (just consumed gas: 0.010) - [ 1000 - Unit ] - - location: 151 (just consumed gas: 0.010) - [ 1000 - 1000 - Unit ] - - location: 154 (just consumed gas: 0.020) - [ 2000 - Unit ] - - location: 155 (just consumed gas: 0.010) - [ 2000 - 2000 - Unit ] - - location: 160 (just consumed gas: 0.035) - [ 0 - Unit ] - - location: 161 (just consumed gas: 0.010) - [ True - Unit ] - - location: 162 (just consumed gas: 0.010) - [ Unit ] - - location: 162 (just consumed gas: 0.025) - [ Unit ] - - location: 168 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 170 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input322109491-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input322109491-.out deleted file mode 100644 index a04104a67df6b74c2d76293f2ee4701becb6aab0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input322109491-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x01 0x00' --level 1 --trace-stack -storage - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.239) - [ (Pair (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000) - None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 11 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.030) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} - (Some 0x0100000000000000000000000000000000000000000000000000000000000000)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input461261325-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input461261325-.out deleted file mode 100644 index dcb02ab992f0a92d0c3abe37bda25e1180652bce..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input461261325-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x010000 0x010000' --level 1 --trace-stack -storage - (Some 0x0200000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.239) - [ (Pair (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0100000000000000000000000000000000000000000000000000000000000000) - None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 11 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.030) - [ 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 0x0200000000000000000000000000000000000000000000000000000000000000) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 0x0200000000000000000000000000000000000000000000000000000000000000) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} - (Some 0x0200000000000000000000000000000000000000000000000000000000000000)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input530006774-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input530006774-.out deleted file mode 100644 index 5ba52fc32be426c2b87e27e466b3a0ace540f12b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input530006774-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x010000 0x00' --level 1 --trace-stack -storage - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.239) - [ (Pair (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000) - None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 11 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.030) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} - (Some 0x0100000000000000000000000000000000000000000000000000000000000000)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input712570300-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input712570300-.out deleted file mode 100644 index 9db2dd8b71ec6456bc3e16a58ca7c171abb66c10..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_bls12_381_fr--storage921624073--input712570300-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x00 0x00' --level 1 --trace-stack -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.239) - [ (Pair (Pair 0x0000000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000) - None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0x0000000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 11 (just consumed gas: 0.010) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.030) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} - (Some 0x0000000000000000000000000000000000000000000000000000000000000000)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input249636002-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input249636002-.out deleted file mode 100644 index 29f2a2d912a941e428b91dea743eef5091a33743..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input249636002-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_delta_timestamp.tz on storage None and input '(Pair 100 100)' --level 1 --trace-stack -storage - (Some "1970-01-01T00:03:20Z") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 8.093) - [ (Pair (Pair 100 "1970-01-01T00:01:40Z") None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 100 "1970-01-01T00:01:40Z") ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 100 "1970-01-01T00:01:40Z") - (Pair 100 "1970-01-01T00:01:40Z") ] - - location: 12 (just consumed gas: 0.010) - [ 100 - (Pair 100 "1970-01-01T00:01:40Z") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair 100 "1970-01-01T00:01:40Z") ] - - location: 15 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" ] - - location: 13 (just consumed gas: 0.035) - [ 100 - "1970-01-01T00:01:40Z" ] - - location: 16 (just consumed gas: 0.035) - [ "1970-01-01T00:03:20Z" ] - - location: 17 (just consumed gas: 0.010) - [ (Some "1970-01-01T00:03:20Z") ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Some "1970-01-01T00:03:20Z") ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some "1970-01-01T00:03:20Z")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input267363182-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input267363182-.out deleted file mode 100644 index 1611b9ca557af9fc7121f40809a6b150c1981dd0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input267363182-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_delta_timestamp.tz on storage None and input '(Pair -100 100)' --level 1 --trace-stack -storage - (Some "1970-01-01T00:00:00Z") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 8.093) - [ (Pair (Pair -100 "1970-01-01T00:01:40Z") None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair -100 "1970-01-01T00:01:40Z") ] - - location: 11 (just consumed gas: 0.010) - [ (Pair -100 "1970-01-01T00:01:40Z") - (Pair -100 "1970-01-01T00:01:40Z") ] - - location: 12 (just consumed gas: 0.010) - [ -100 - (Pair -100 "1970-01-01T00:01:40Z") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair -100 "1970-01-01T00:01:40Z") ] - - location: 15 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" ] - - location: 13 (just consumed gas: 0.035) - [ -100 - "1970-01-01T00:01:40Z" ] - - location: 16 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" ] - - location: 17 (just consumed gas: 0.010) - [ (Some "1970-01-01T00:00:00Z") ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Some "1970-01-01T00:00:00Z") ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some "1970-01-01T00:00:00Z")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input438561129-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input438561129-.out deleted file mode 100644 index 1e4b0c03ef1c526a6153a36e1db26668831dc779..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_delta_timestamp--storage921624073--input438561129-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_delta_timestamp.tz on storage None and input '(Pair 0 "1970-01-01T00:00:00Z")' --level 1 --trace-stack -storage - (Some "1970-01-01T00:00:00Z") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 8.201) - [ (Pair (Pair 0 "1970-01-01T00:00:00Z") None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 "1970-01-01T00:00:00Z") ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 0 "1970-01-01T00:00:00Z") - (Pair 0 "1970-01-01T00:00:00Z") ] - - location: 12 (just consumed gas: 0.010) - [ 0 - (Pair 0 "1970-01-01T00:00:00Z") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair 0 "1970-01-01T00:00:00Z") ] - - location: 15 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" ] - - location: 13 (just consumed gas: 0.035) - [ 0 - "1970-01-01T00:00:00Z" ] - - location: 16 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" ] - - location: 17 (just consumed gas: 0.010) - [ (Some "1970-01-01T00:00:00Z") ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Some "1970-01-01T00:00:00Z") ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some "1970-01-01T00:00:00Z")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input249636002-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input249636002-.out deleted file mode 100644 index b9620d91e88f249ded1b8d9f70e857f381ca44ce..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input249636002-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_timestamp_delta.tz on storage None and input '(Pair 100 100)' --level 1 --trace-stack -storage - (Some "1970-01-01T00:03:20Z") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 8.093) - [ (Pair (Pair "1970-01-01T00:01:40Z" 100) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 100) - (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 12 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" - (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 15 (just consumed gas: 0.010) - [ 100 ] - - location: 13 (just consumed gas: 0.035) - [ "1970-01-01T00:01:40Z" - 100 ] - - location: 16 (just consumed gas: 0.035) - [ "1970-01-01T00:03:20Z" ] - - location: 17 (just consumed gas: 0.010) - [ (Some "1970-01-01T00:03:20Z") ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Some "1970-01-01T00:03:20Z") ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some "1970-01-01T00:03:20Z")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input307538219-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input307538219-.out deleted file mode 100644 index ec86cc1aeaa34edca76e2db6dddc3d9c3932143e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input307538219-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_timestamp_delta.tz on storage None and input '(Pair 100 -100)' --level 1 --trace-stack -storage - (Some "1970-01-01T00:00:00Z") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 8.093) - [ (Pair (Pair "1970-01-01T00:01:40Z" -100) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" -100) - (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 12 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" - (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 15 (just consumed gas: 0.010) - [ -100 ] - - location: 13 (just consumed gas: 0.035) - [ "1970-01-01T00:01:40Z" - -100 ] - - location: 16 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" ] - - location: 17 (just consumed gas: 0.010) - [ (Some "1970-01-01T00:00:00Z") ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Some "1970-01-01T00:00:00Z") ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some "1970-01-01T00:00:00Z")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input373737581-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input373737581-.out deleted file mode 100644 index aab9fcf4de0339e36a6712ed6308a7ee536f7b39..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -add_timestamp_delta--storage921624073--input373737581-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/add_timestamp_delta.tz on storage None and input '(Pair "1970-01-01T00:00:00Z" 0)' --level 1 --trace-stack -storage - (Some "1970-01-01T00:00:00Z") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 8.201) - [ (Pair (Pair "1970-01-01T00:00:00Z" 0) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" 0) - (Pair "1970-01-01T00:00:00Z" 0) ] - - location: 12 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" - (Pair "1970-01-01T00:00:00Z" 0) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" 0) ] - - location: 15 (just consumed gas: 0.010) - [ 0 ] - - location: 13 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" - 0 ] - - location: 16 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" ] - - location: 17 (just consumed gas: 0.010) - [ (Some "1970-01-01T00:00:00Z") ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Some "1970-01-01T00:00:00Z") ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some "1970-01-01T00:00:00Z")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -address--storage921624073--input117475800-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -address--storage921624073--input117475800-.out deleted file mode 100644 index aa2ec04a70c723f7c95c28331de50845a96bdacb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -address--storage921624073--input117475800-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/address.tz on storage None and input '"tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5"' --level 1 --trace-stack -storage - (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 8.984) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" None) ] - - location: 9 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 10 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 11 (just consumed gas: 0.010) - [ (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 12 (just consumed gas: 0.010) - [ {} - (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input106930123-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input106930123-.out deleted file mode 100644 index e1519925d15b223698d8ab437bb840f189f508e2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input106930123-.out +++ /dev/null @@ -1,31 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and.tz on storage None and input '(Pair False True)' --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.431) - [ (Pair (Pair False True) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair False True) ] - - location: 11 (just consumed gas: 0.010) - [ False - True ] - - location: 12 (just consumed gas: 0.010) - [ False ] - - location: 13 (just consumed gas: 0.010) - [ (Some False) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input181204719-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input181204719-.out deleted file mode 100644 index 920c8010617bef998f329d79b1f3bed19beca24d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input181204719-.out +++ /dev/null @@ -1,31 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and.tz on storage None and input '(Pair True False)' --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.431) - [ (Pair (Pair True False) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair True False) ] - - location: 11 (just consumed gas: 0.010) - [ True - False ] - - location: 12 (just consumed gas: 0.010) - [ False ] - - location: 13 (just consumed gas: 0.010) - [ (Some False) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input223774825-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input223774825-.out deleted file mode 100644 index 1f4bac722f7650dbe14c7ba0595c582f4f103bba..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input223774825-.out +++ /dev/null @@ -1,31 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and.tz on storage None and input '(Pair False False)' --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.431) - [ (Pair (Pair False False) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair False False) ] - - location: 11 (just consumed gas: 0.010) - [ False - False ] - - location: 12 (just consumed gas: 0.010) - [ False ] - - location: 13 (just consumed gas: 0.010) - [ (Some False) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input908807505-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input908807505-.out deleted file mode 100644 index 198be948df4d20fa58e3c016c26f7d3a6f979664..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and--storage921624073--input908807505-.out +++ /dev/null @@ -1,31 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and.tz on storage None and input '(Pair True True)' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.431) - [ (Pair (Pair True True) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair True True) ] - - location: 11 (just consumed gas: 0.010) - [ True - True ] - - location: 12 (just consumed gas: 0.010) - [ True ] - - location: 13 (just consumed gas: 0.010) - [ (Some True) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_binary--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_binary--storage125992234--input125992234-.out deleted file mode 100644 index c991883c4204006b72cc0f4a7e70bf6fe07ea35b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_binary--storage125992234--input125992234-.out +++ /dev/null @@ -1,93 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and_binary.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 35.762) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 5 ] - - location: 11 (just consumed gas: 0.010) - [ 6 - 5 ] - - location: 14 (just consumed gas: 0.035) - [ 4 ] - - location: 15 (just consumed gas: 0.010) - [ 4 - 4 ] - - location: 20 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 6 ] - - location: 31 (just consumed gas: 0.010) - [ 5 - 6 ] - - location: 34 (just consumed gas: 0.035) - [ 4 ] - - location: 35 (just consumed gas: 0.010) - [ 4 - 4 ] - - location: 40 (just consumed gas: 0.035) - [ 0 ] - - location: 41 (just consumed gas: 0.010) - [ True ] - - location: 42 (just consumed gas: 0.010) - [ ] - - location: 42 (just consumed gas: 0.025) - [ ] - - location: 48 (just consumed gas: 0.010) - [ 12 ] - - location: 51 (just consumed gas: 0.010) - [ -1 - 12 ] - - location: 54 (just consumed gas: 0.035) - [ 12 ] - - location: 55 (just consumed gas: 0.010) - [ 12 - 12 ] - - location: 60 (just consumed gas: 0.035) - [ 0 ] - - location: 61 (just consumed gas: 0.010) - [ True ] - - location: 62 (just consumed gas: 0.010) - [ ] - - location: 62 (just consumed gas: 0.025) - [ ] - - location: 68 (just consumed gas: 0.010) - [ 12 ] - - location: 71 (just consumed gas: 0.010) - [ -5 - 12 ] - - location: 74 (just consumed gas: 0.035) - [ 8 ] - - location: 75 (just consumed gas: 0.010) - [ 8 - 8 ] - - location: 80 (just consumed gas: 0.035) - [ 0 ] - - location: 81 (just consumed gas: 0.010) - [ True ] - - location: 82 (just consumed gas: 0.010) - [ ] - - location: 82 (just consumed gas: 0.025) - [ ] - - location: 88 (just consumed gas: 0.010) - [ Unit ] - - location: 89 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 91 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_bytes--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_bytes--storage125992234--input125992234-.out deleted file mode 100644 index 19e9903f767903030ad2b6b7828b131f650607f6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_bytes--storage125992234--input125992234-.out +++ /dev/null @@ -1,75 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and_bytes_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 27.915) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0x05 ] - - location: 11 (just consumed gas: 0.010) - [ 0x06 - 0x05 ] - - location: 14 (just consumed gas: 0.035) - [ 0x04 ] - - location: 15 (just consumed gas: 0.010) - [ 0x04 - 0x04 ] - - location: 20 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 0x0005 ] - - location: 31 (just consumed gas: 0.010) - [ 0x0106 - 0x0005 ] - - location: 34 (just consumed gas: 0.036) - [ 0x0004 ] - - location: 35 (just consumed gas: 0.010) - [ 0x0004 - 0x0004 ] - - location: 40 (just consumed gas: 0.035) - [ 0 ] - - location: 41 (just consumed gas: 0.010) - [ True ] - - location: 42 (just consumed gas: 0.010) - [ ] - - location: 42 (just consumed gas: 0.025) - [ ] - - location: 48 (just consumed gas: 0.010) - [ 0x05 ] - - location: 51 (just consumed gas: 0.010) - [ 0x0106 - 0x05 ] - - location: 54 (just consumed gas: 0.035) - [ 0x04 ] - - location: 55 (just consumed gas: 0.010) - [ 0x04 - 0x04 ] - - location: 60 (just consumed gas: 0.035) - [ 0 ] - - location: 61 (just consumed gas: 0.010) - [ True ] - - location: 62 (just consumed gas: 0.010) - [ ] - - location: 62 (just consumed gas: 0.025) - [ ] - - location: 68 (just consumed gas: 0.010) - [ Unit ] - - location: 69 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 71 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input106930123-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input106930123-.out deleted file mode 100644 index 1c6cc89dc2dcd701af50cde96be6977ccc57a500..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input106930123-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and_logical_1.tz on storage False and input '(Pair False True)' --level 1 --trace-stack -storage - False -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.330) - [ (Pair (Pair False True) False) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair False True) ] - - location: 10 (just consumed gas: 0.010) - [ False - True ] - - location: 11 (just consumed gas: 0.010) - [ False ] - - location: 12 (just consumed gas: 0.010) - [ {} - False ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} False) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input181204719-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input181204719-.out deleted file mode 100644 index 87b6d5b4957a0b7eb093cf4a40929120fb9e731b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input181204719-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and_logical_1.tz on storage False and input '(Pair True False)' --level 1 --trace-stack -storage - False -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.330) - [ (Pair (Pair True False) False) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair True False) ] - - location: 10 (just consumed gas: 0.010) - [ True - False ] - - location: 11 (just consumed gas: 0.010) - [ False ] - - location: 12 (just consumed gas: 0.010) - [ {} - False ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} False) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input223774825-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input223774825-.out deleted file mode 100644 index 5560cbe3123975398edf1a9dda0f819ba4172118..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input223774825-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and_logical_1.tz on storage False and input '(Pair False False)' --level 1 --trace-stack -storage - False -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.330) - [ (Pair (Pair False False) False) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair False False) ] - - location: 10 (just consumed gas: 0.010) - [ False - False ] - - location: 11 (just consumed gas: 0.010) - [ False ] - - location: 12 (just consumed gas: 0.010) - [ {} - False ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} False) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input908807505-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input908807505-.out deleted file mode 100644 index 550f6b826d7bf9bec94956466bae4f25ba6e49c3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -and_logical_1--storage570553153--input908807505-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/and_logical_1.tz on storage False and input '(Pair True True)' --level 1 --trace-stack -storage - True -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.330) - [ (Pair (Pair True True) False) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair True True) ] - - location: 10 (just consumed gas: 0.010) - [ True - True ] - - location: 11 (just consumed gas: 0.010) - [ True ] - - location: 12 (just consumed gas: 0.010) - [ {} - True ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} True) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -balance--storage492856247--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -balance--storage492856247--input125992234-.out deleted file mode 100644 index 28aa19f86a23ced7a4840a33fee99c2c5e047fd0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -balance--storage492856247--input125992234-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/balance.tz on storage 111 and input Unit --level 1 --trace-stack -storage - 4000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 111) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 4000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 4000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 4000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage495706788--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage495706788--input453441034-.out deleted file mode 100644 index d799c076e9cd96b30830e7c952ac93b9b62ff6fa..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage495706788--input453441034-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_nat.tz on storage '(Pair {} None)' and input 1 --level 1 --trace-stack -storage - (Pair 4 (Some False)) -emitted operations - -big_map diff - New map(4) of type (big_map nat nat) -trace - - location: 12 (just consumed gas: 9.644) - [ (Pair 1 {} None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair {} None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} None) ] - - location: 15 (just consumed gas: 0.010) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.035) - [ 1 - {} - {} ] - - location: 17 (just consumed gas: 0.722) - [ False - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - {} ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair {} (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input453441034-.out deleted file mode 100644 index 0ecb52a86d3057254251eb30b2227ce5a6c78965..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input453441034-.out +++ /dev/null @@ -1,44 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_nat.tz on storage '(Pair { Elt 1 4 ; Elt 2 11 } None)' and input 1 --level 1 --trace-stack -storage - (Pair 4 (Some True)) -emitted operations - -big_map diff - New map(4) of type (big_map nat nat) - Set map(4)[1] to 4 - Set map(4)[2] to 11 -trace - - location: 12 (just consumed gas: 11.552) - [ (Pair 1 { Elt 1 4 ; Elt 2 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 13 (just consumed gas: 0.035) - [ 1 - { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 17 (just consumed gas: 0.723) - [ True - { Elt 1 4 ; Elt 2 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt 1 4 ; Elt 2 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 4 ; Elt 2 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input564400327-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input564400327-.out deleted file mode 100644 index 3f650da8cdb5bf144e10b7a8a2dbbbf94f356637..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input564400327-.out +++ /dev/null @@ -1,44 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_nat.tz on storage '(Pair { Elt 1 4 ; Elt 2 11 } None)' and input 2 --level 1 --trace-stack -storage - (Pair 4 (Some True)) -emitted operations - -big_map diff - New map(4) of type (big_map nat nat) - Set map(4)[1] to 4 - Set map(4)[2] to 11 -trace - - location: 12 (just consumed gas: 11.552) - [ (Pair 2 { Elt 1 4 ; Elt 2 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 2 - (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 13 (just consumed gas: 0.035) - [ 2 - { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 17 (just consumed gas: 0.723) - [ True - { Elt 1 4 ; Elt 2 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt 1 4 ; Elt 2 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 4 ; Elt 2 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input654274102-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input654274102-.out deleted file mode 100644 index bd0fca6d611693a3bbff1d735b7dc61b22d0102a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage56274299--input654274102-.out +++ /dev/null @@ -1,44 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_nat.tz on storage '(Pair { Elt 1 4 ; Elt 2 11 } None)' and input 3 --level 1 --trace-stack -storage - (Pair 4 (Some False)) -emitted operations - -big_map diff - New map(4) of type (big_map nat nat) - Set map(4)[1] to 4 - Set map(4)[2] to 11 -trace - - location: 12 (just consumed gas: 11.552) - [ (Pair 3 { Elt 1 4 ; Elt 2 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 3 - (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 13 (just consumed gas: 0.035) - [ 3 - { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 17 (just consumed gas: 0.723) - [ False - { Elt 1 4 ; Elt 2 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt 1 4 ; Elt 2 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 4 ; Elt 2 11 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 4 ; Elt 2 11 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage690637660--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage690637660--input453441034-.out deleted file mode 100644 index aeab4dc25a000c5ffc35757135c47aa36972e785..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage690637660--input453441034-.out +++ /dev/null @@ -1,43 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_nat.tz on storage '(Pair { Elt 1 0 } None)' and input 1 --level 1 --trace-stack -storage - (Pair 4 (Some True)) -emitted operations - -big_map diff - New map(4) of type (big_map nat nat) - Set map(4)[1] to 0 -trace - - location: 12 (just consumed gas: 10.579) - [ (Pair 1 { Elt 1 0 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair { Elt 1 0 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 0 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 0 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 0 } - { Elt 1 0 } ] - - location: 13 (just consumed gas: 0.035) - [ 1 - { Elt 1 0 } - { Elt 1 0 } ] - - location: 17 (just consumed gas: 0.723) - [ True - { Elt 1 0 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt 1 0 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 0 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 0 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 0 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 0 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage806237530--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage806237530--input453441034-.out deleted file mode 100644 index 78ca3bd186eb98d36fb8038cfa49e90d95be2974..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_nat--storage806237530--input453441034-.out +++ /dev/null @@ -1,43 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_nat.tz on storage '(Pair { Elt 0 1 } None)' and input 1 --level 1 --trace-stack -storage - (Pair 4 (Some False)) -emitted operations - -big_map diff - New map(4) of type (big_map nat nat) - Set map(4)[0] to 1 -trace - - location: 12 (just consumed gas: 10.554) - [ (Pair 1 { Elt 0 1 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair { Elt 0 1 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 0 1 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 0 1 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 0 1 } - { Elt 0 1 } ] - - location: 13 (just consumed gas: 0.035) - [ 1 - { Elt 0 1 } - { Elt 0 1 } ] - - location: 17 (just consumed gas: 0.723) - [ False - { Elt 0 1 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt 0 1 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 0 1 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 0 1 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 0 1 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 0 1 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input1071610051-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input1071610051-.out deleted file mode 100644 index ae4b5932f84870fb460ac4fe345ba86c4daa42a3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input1071610051-.out +++ /dev/null @@ -1,44 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_string.tz on storage '(Pair { Elt "bar" 4 ; Elt "foo" 11 } None)' and input '"baz"' --level 1 --trace-stack -storage - (Pair 4 (Some False)) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["bar"] to 4 - Set map(4)["foo"] to 11 -trace - - location: 12 (just consumed gas: 11.711) - [ (Pair "baz" { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "baz" - (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 13 (just consumed gas: 0.035) - [ "baz" - { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 17 (just consumed gas: 0.735) - [ False - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input700475845-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input700475845-.out deleted file mode 100644 index c71fd19dcad9026dc1dc8e0d2daed1f31993fcc0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input700475845-.out +++ /dev/null @@ -1,44 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_string.tz on storage '(Pair { Elt "bar" 4 ; Elt "foo" 11 } None)' and input '"bar"' --level 1 --trace-stack -storage - (Pair 4 (Some True)) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["bar"] to 4 - Set map(4)["foo"] to 11 -trace - - location: 12 (just consumed gas: 11.711) - [ (Pair "bar" { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "bar" - (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 13 (just consumed gas: 0.035) - [ "bar" - { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 17 (just consumed gas: 0.735) - [ True - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input905318451-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input905318451-.out deleted file mode 100644 index 2ff9d0444c5f38cf14ee1d8102eaa90637f0c3d7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage109689253--input905318451-.out +++ /dev/null @@ -1,44 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_string.tz on storage '(Pair { Elt "bar" 4 ; Elt "foo" 11 } None)' and input '"foo"' --level 1 --trace-stack -storage - (Pair 4 (Some True)) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["bar"] to 4 - Set map(4)["foo"] to 11 -trace - - location: 12 (just consumed gas: 11.711) - [ (Pair "foo" { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "foo" - (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 13 (just consumed gas: 0.035) - [ "foo" - { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 17 (just consumed gas: 0.735) - [ True - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage495706788--input700475845-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage495706788--input700475845-.out deleted file mode 100644 index 563719bfad9e3a8aa72629a9f28f4f8714839e19..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage495706788--input700475845-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_string.tz on storage '(Pair {} None)' and input '"bar"' --level 1 --trace-stack -storage - (Pair 4 (Some False)) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) -trace - - location: 12 (just consumed gas: 9.689) - [ (Pair "bar" {} None) ] - - location: 12 (just consumed gas: 0.010) - [ "bar" - (Pair {} None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} None) ] - - location: 15 (just consumed gas: 0.010) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.035) - [ "bar" - {} - {} ] - - location: 17 (just consumed gas: 0.734) - [ False - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - {} ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair {} (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage915708427--input700475845-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage915708427--input700475845-.out deleted file mode 100644 index 925e32c7eb476e08b6b638b28d195bb3707c1faa..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage915708427--input700475845-.out +++ /dev/null @@ -1,43 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_string.tz on storage '(Pair { Elt "foo" 1 } None)' and input '"bar"' --level 1 --trace-stack -storage - (Pair 4 (Some False)) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["foo"] to 1 -trace - - location: 12 (just consumed gas: 10.681) - [ (Pair "bar" { Elt "foo" 1 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "bar" - (Pair { Elt "foo" 1 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 1 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "foo" 1 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "foo" 1 } - { Elt "foo" 1 } ] - - location: 13 (just consumed gas: 0.035) - [ "bar" - { Elt "foo" 1 } - { Elt "foo" 1 } ] - - location: 17 (just consumed gas: 0.735) - [ False - { Elt "foo" 1 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt "foo" 1 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "foo" 1 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 1 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "foo" 1 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "foo" 1 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage936682951--input905318451-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage936682951--input905318451-.out deleted file mode 100644 index 3d4d2029e1ace7400dd4a9518b97b687140da258..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -big_map_mem_string--storage936682951--input905318451-.out +++ /dev/null @@ -1,43 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/big_map_mem_string.tz on storage '(Pair { Elt "foo" 0 } None)' and input '"foo"' --level 1 --trace-stack -storage - (Pair 4 (Some True)) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["foo"] to 0 -trace - - location: 12 (just consumed gas: 10.681) - [ (Pair "foo" { Elt "foo" 0 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "foo" - (Pair { Elt "foo" 0 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 0 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "foo" 0 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "foo" 0 } - { Elt "foo" 0 } ] - - location: 13 (just consumed gas: 0.035) - [ "foo" - { Elt "foo" 0 } - { Elt "foo" 0 } ] - - location: 17 (just consumed gas: 0.735) - [ True - { Elt "foo" 0 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt "foo" 0 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "foo" 0 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 0 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "foo" 0 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "foo" 0 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_push_bytes_not_padded--storage921624073--input1259.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_push_bytes_not_padded--storage921624073--input1259.out deleted file mode 100644 index 5cc736cbf73d1ab6cd76e4ef9514371bb5b00554..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_push_bytes_not_padded--storage921624073--input1259.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_push_bytes_not_padded.tz on storage None and input Unit --level 1 --trace-stack -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.491) - [ (Pair Unit None) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.010) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Some 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 13 (just consumed gas: 0.010) - [ {} - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair {} - (Some 0x0000000000000000000000000000000000000000000000000000000000000000)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_push_nat--storage921624073--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_push_nat--storage921624073--input125992234-.out deleted file mode 100644 index de34f9b0caf00be53bfddc5ae86131bba42fae5a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_push_nat--storage921624073--input125992234-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_push_nat.tz on storage None and input Unit --level 1 --trace-stack -storage - (Some 0x1000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.491) - [ (Pair Unit None) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.010) - [ 0x1000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Some 0x1000000000000000000000000000000000000000000000000000000000000000) ] - - location: 13 (just consumed gas: 0.010) - [ {} - (Some 0x1000000000000000000000000000000000000000000000000000000000000000) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair {} - (Some 0x1000000000000000000000000000000000000000000000000000000000000000)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input1043734173-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input1043734173-.out deleted file mode 100644 index 1e250be2216bbe57d4597600e42deccb2607d860..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input1043734173-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz on storage 0 and input 0x01 --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0) ] - - location: 7 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.115) - [ 1 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input151303925-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input151303925-.out deleted file mode 100644 index 832d10c0f30bed596ba72846011beab9250ed4e8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input151303925-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz on storage 0 and input 0x00 --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0) ] - - location: 7 (just consumed gas: 0.010) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.115) - [ 0 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input520610122-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input520610122-.out deleted file mode 100644 index 507d7cc64795e72f1b69e08f62e2b7b1e0ae07a7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input520610122-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz on storage 0 and input 0xb9e8abf8dc324a010007addde986fe0f7c81fab16d26819d0534b7691c0b0719 --level 1 --trace-stack -storage - 11320265829256585830781521966149529460476767408210445238902869222031333517497 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 0xb9e8abf8dc324a010007addde986fe0f7c81fab16d26819d0534b7691c0b0719 0) ] - - location: 7 (just consumed gas: 0.010) - [ 0xb9e8abf8dc324a010007addde986fe0f7c81fab16d26819d0534b7691c0b0719 ] - - location: 8 (just consumed gas: 0.115) - [ 11320265829256585830781521966149529460476767408210445238902869222031333517497 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 11320265829256585830781521966149529460476767408210445238902869222031333517497 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} - 11320265829256585830781521966149529460476767408210445238902869222031333517497) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input558805129-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input558805129-.out deleted file mode 100644 index a5e158b993a4e96774d99c615fbc20bd2511bb75..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_int--storage680650890--input558805129-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz on storage 0 and input 0x28db8e57af88d9576acd181b89f24e50a89a6423f939026ed91349fc9af16c27 --level 1 --trace-stack -storage - 17832688077013577776524784494464728518213913213412866604053735695200962927400 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 0x28db8e57af88d9576acd181b89f24e50a89a6423f939026ed91349fc9af16c27 0) ] - - location: 7 (just consumed gas: 0.010) - [ 0x28db8e57af88d9576acd181b89f24e50a89a6423f939026ed91349fc9af16c27 ] - - location: 8 (just consumed gas: 0.115) - [ 17832688077013577776524784494464728518213913213412866604053735695200962927400 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 17832688077013577776524784494464728518213913213412866604053735695200962927400 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} - 17832688077013577776524784494464728518213913213412866604053735695200962927400) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_mutez--storage680650890--input229402968-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_mutez--storage680650890--input229402968-.out deleted file mode 100644 index 027172370fb0e8616e6b9ea7600deb1566048ceb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_to_mutez--storage680650890--input229402968-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_to_mutez.tz on storage 0 and input 0x10 --level 1 --trace-stack -storage - 16 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 9.127) - [ (Pair 0x1000000000000000000000000000000000000000000000000000000000000000 0) ] - - location: 7 (just consumed gas: 0.010) - [ 0x1000000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.115) - [ 16 ] - - location: 9 (just consumed gas: 0.010) - [ (Some 16) ] - - location: 11 (just consumed gas: 0.010) - [ 16 ] - - location: 11 (just consumed gas: 0.025) - [ 16 ] - - location: 17 (just consumed gas: 0.010) - [ 1 - 16 ] - - location: 20 (just consumed gas: 0.050) - [ 16 ] - - location: 21 (just consumed gas: 0.010) - [ {} - 16 ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} 16) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage287336412--input1019409032-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage287336412--input1019409032-.out deleted file mode 100644 index 0bfb9f359ea0fc850b546d24270aef6e4e6c5766..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage287336412--input1019409032-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f and input 22620284817922784902564672469917992996328211127984472897491698543785655336309 --level 1 --trace-stack -storage - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f) ] - - location: 7 (just consumed gas: 0.010) - [ 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f ] - - location: 8 (just consumed gas: 0.299) - [ 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage698210250--input949526473-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage698210250--input949526473-.out deleted file mode 100644 index 1021e562976633941d21467dfe84c679a5fbf259..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage698210250--input949526473-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f and input 33644916630334844239120348434626468649534186770809802792596996408934105684394 --level 1 --trace-stack -storage - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f) ] - - location: 7 (just consumed gas: 0.010) - [ 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f ] - - location: 8 (just consumed gas: 0.299) - [ 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage739946440--input166435292-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage739946440--input166435292-.out deleted file mode 100644 index 516b550f08fd205f621729590cc8a09d51ef4c5f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage739946440--input166435292-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 69615968247920749285624776342583898043608129789011377475114141186797415307882 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage739946440--input583291483-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage739946440--input583291483-.out deleted file mode 100644 index e30d954ee1f5cbd329ca5475a499914bdbb1c283..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage739946440--input583291483-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 17180093072794558806177035834397932205917577288483739652510482486858834123369 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input1055524890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input1055524890-.out deleted file mode 100644 index 323e6fe3db0fd8b476e586b2cdd6813e25ab7d7e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input1055524890-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 52435875175126190479447740508185965837690552500527637822603658699938581184514 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.299) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input453441034-.out deleted file mode 100644 index 193c536647f71f4b34975c7f64d9242c0c1e9494..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input453441034-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 1 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 1 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 1 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.266) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input564400327-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input564400327-.out deleted file mode 100644 index a8d52409456c18652de8e386c1f64b2862bb1a48..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input564400327-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 2 --level 1 --trace-stack -storage - 0x0200000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 2 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 2 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.266) - [ 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0200000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input585234482-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input585234482-.out deleted file mode 100644 index 6bfbec45852c0fb28f15bc4a5012c64601eadd91..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input585234482-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input -42 --level 1 --trace-stack -storage - 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair -42 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ -42 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.266) - [ 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input680650890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input680650890-.out deleted file mode 100644 index cceb158c49522af0051feec8da12787ef1f6ea79..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input680650890-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 0 --level 1 --trace-stack -storage - 0x0000000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 0 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 0 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.265) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0000000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input701858804-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input701858804-.out deleted file mode 100644 index 4037df82a3e16c6889ac4c051f3151b59b4a007a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_int--storage994282947--input701858804-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input -1 --level 1 --trace-stack -storage - 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair -1 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ -1 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.266) - [ 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage287336412--input1019409032-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage287336412--input1019409032-.out deleted file mode 100644 index c63e425d80a2df2670bcfdf725d3ee42ca69a201..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage287336412--input1019409032-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f and input 22620284817922784902564672469917992996328211127984472897491698543785655336309 --level 1 --trace-stack -storage - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f) ] - - location: 7 (just consumed gas: 0.010) - [ 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f ] - - location: 8 (just consumed gas: 0.299) - [ 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage698210250--input949526473-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage698210250--input949526473-.out deleted file mode 100644 index f28b5be51bdc24c4ab034761b261dda14deaa501..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage698210250--input949526473-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f and input 33644916630334844239120348434626468649534186770809802792596996408934105684394 --level 1 --trace-stack -storage - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f) ] - - location: 7 (just consumed gas: 0.010) - [ 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f ] - - location: 8 (just consumed gas: 0.299) - [ 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage739946440--input166435292-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage739946440--input166435292-.out deleted file mode 100644 index f3be560c7cf01851db22dca208fb10a43ddc8139..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage739946440--input166435292-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 69615968247920749285624776342583898043608129789011377475114141186797415307882 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage739946440--input583291483-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage739946440--input583291483-.out deleted file mode 100644 index 578529fb9d8fe8d5bb3a94d899b019b91b5fa10b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage739946440--input583291483-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 17180093072794558806177035834397932205917577288483739652510482486858834123369 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input1055524890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input1055524890-.out deleted file mode 100644 index 3e76dd7c4578241617d0003483786101f370451f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input1055524890-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 52435875175126190479447740508185965837690552500527637822603658699938581184514 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.299) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input453441034-.out deleted file mode 100644 index 960ea801d0b2a8078b42fd81f113338b625b2239..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input453441034-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 1 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 1 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 1 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.266) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input564400327-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input564400327-.out deleted file mode 100644 index 10739b608cd6496e66734b23444739306a130ed5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input564400327-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 2 --level 1 --trace-stack -storage - 0x0200000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 2 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 2 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.266) - [ 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0200000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input680650890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input680650890-.out deleted file mode 100644 index 978234e593592362ee1f4f0d7d825a1578ff3aa0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_fr_z_nat--storage994282947--input680650890-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 0 --level 1 --trace-stack -storage - 0x0000000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.278) - [ (Pair 0 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 0 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.265) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0x0000000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage287336412--input1019409032-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage287336412--input1019409032-.out deleted file mode 100644 index 86edae256761e609bfedf5dbcffbd91f9a4eb3dc..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage287336412--input1019409032-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f and input 22620284817922784902564672469917992996328211127984472897491698543785655336309 --level 1 --trace-stack -storage - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f) ] - - location: 7 (just consumed gas: 0.010) - [ 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f ] - - location: 8 (just consumed gas: 0.010) - [ 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f - 22620284817922784902564672469917992996328211127984472897491698543785655336309 ] - - location: 9 (just consumed gas: 0.299) - [ 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage698210250--input949526473-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage698210250--input949526473-.out deleted file mode 100644 index f76e3cebe48efc3574e7c80a6f11df5d4fbc68e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage698210250--input949526473-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f and input 33644916630334844239120348434626468649534186770809802792596996408934105684394 --level 1 --trace-stack -storage - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f) ] - - location: 7 (just consumed gas: 0.010) - [ 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f ] - - location: 8 (just consumed gas: 0.010) - [ 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f - 33644916630334844239120348434626468649534186770809802792596996408934105684394 ] - - location: 9 (just consumed gas: 0.299) - [ 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage739946440--input166435292-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage739946440--input166435292-.out deleted file mode 100644 index ea121b32133d54168ac2259ce17daca6a392bead..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage739946440--input166435292-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 69615968247920749285624776342583898043608129789011377475114141186797415307882 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.010) - [ 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d - 69615968247920749285624776342583898043608129789011377475114141186797415307882 ] - - location: 9 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage739946440--input583291483-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage739946440--input583291483-.out deleted file mode 100644 index c829568ed6d0a003169d6966c733ccf880a8a1a8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage739946440--input583291483-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 17180093072794558806177035834397932205917577288483739652510482486858834123369 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.010) - [ 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d - 17180093072794558806177035834397932205917577288483739652510482486858834123369 ] - - location: 9 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input1055524890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input1055524890-.out deleted file mode 100644 index 467e4a7b2e23c89c6c70d052edbf4cc22f79f31d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input1055524890-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 52435875175126190479447740508185965837690552500527637822603658699938581184514 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 52435875175126190479447740508185965837690552500527637822603658699938581184514 ] - - location: 9 (just consumed gas: 0.299) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input453441034-.out deleted file mode 100644 index 55414b6ccb79fe6ac7ed6a538e92786736c6919f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input453441034-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 1 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 1 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 1 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 1 ] - - location: 9 (just consumed gas: 0.266) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input564400327-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input564400327-.out deleted file mode 100644 index be8c1f45d5374b5c8fba8509b5abb31a2f08bf0e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input564400327-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 2 --level 1 --trace-stack -storage - 0x0200000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 2 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 2 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 2 ] - - location: 9 (just consumed gas: 0.266) - [ 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0200000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input585234482-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input585234482-.out deleted file mode 100644 index 5d9dd3386c995c83125eb936d3e5713d957ad07a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input585234482-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input -42 --level 1 --trace-stack -storage - 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair -42 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ -42 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - -42 ] - - location: 9 (just consumed gas: 0.266) - [ 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0xd7fffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input680650890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input680650890-.out deleted file mode 100644 index 17d25fbd95e0c947587669d4092d17d2fe9d8bb2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input680650890-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 0 --level 1 --trace-stack -storage - 0x0000000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 0 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 0 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 0 ] - - location: 9 (just consumed gas: 0.265) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0000000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input701858804-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input701858804-.out deleted file mode 100644 index 7257ee2c840c768cb9287ea50b428759f68aa88b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_int--storage994282947--input701858804-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input -1 --level 1 --trace-stack -storage - 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair -1 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ -1 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - -1 ] - - location: 9 (just consumed gas: 0.266) - [ 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage287336412--input1019409032-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage287336412--input1019409032-.out deleted file mode 100644 index 989360c3e082e167e0b063248c9c53ca633140e0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage287336412--input1019409032-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f and input 22620284817922784902564672469917992996328211127984472897491698543785655336309 --level 1 --trace-stack -storage - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f) ] - - location: 7 (just consumed gas: 0.010) - [ 22620284817922784902564672469917992996328211127984472897491698543785655336309 - 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f ] - - location: 8 (just consumed gas: 0.010) - [ 0x4147a5ad0a633e4880d2296f08ec5c12d03e3fa4a6b49ecbd16a30a3cfcdbe3f - 22620284817922784902564672469917992996328211127984472897491698543785655336309 ] - - location: 9 (just consumed gas: 0.299) - [ 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x4e387e0ebfb3d1633153c195036e0c0b672955c4a0e420f93ec20a76fe677c62) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage698210250--input949526473-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage698210250--input949526473-.out deleted file mode 100644 index 6693ee5dc48c347e3ddeb404cca29fadd942ac11..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage698210250--input949526473-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f and input 33644916630334844239120348434626468649534186770809802792596996408934105684394 --level 1 --trace-stack -storage - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f) ] - - location: 7 (just consumed gas: 0.010) - [ 33644916630334844239120348434626468649534186770809802792596996408934105684394 - 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f ] - - location: 8 (just consumed gas: 0.010) - [ 0x5b0ecd0fa853810e356f1eb79721e80b30510fcc3a455f4fc02fdd9a90c5401f - 33644916630334844239120348434626468649534186770809802792596996408934105684394 ] - - location: 9 (just consumed gas: 0.299) - [ 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x2ef123703093cbbbd124e15f2054fa5781ed0b8d092ec3c6e5d76b4ca918a221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage739946440--input166435292-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage739946440--input166435292-.out deleted file mode 100644 index 916fb37fa9e06e1d73878cf6f1dd2d1ce1623ef9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage739946440--input166435292-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 69615968247920749285624776342583898043608129789011377475114141186797415307882 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 69615968247920749285624776342583898043608129789011377475114141186797415307882 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.010) - [ 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d - 69615968247920749285624776342583898043608129789011377475114141186797415307882 ] - - location: 9 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage739946440--input583291483-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage739946440--input583291483-.out deleted file mode 100644 index f8629512a9a5eaaa083e7cd3f28b809a296a12d7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage739946440--input583291483-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d and input 17180093072794558806177035834397932205917577288483739652510482486858834123369 --level 1 --trace-stack -storage - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d) ] - - location: 7 (just consumed gas: 0.010) - [ 17180093072794558806177035834397932205917577288483739652510482486858834123369 - 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d ] - - location: 8 (just consumed gas: 0.010) - [ 0x8578be1766f92cd82c5e5135c374a03a8562e263ea953a3f9711b0153b7fcf2d - 17180093072794558806177035834397932205917577288483739652510482486858834123369 ] - - location: 9 (just consumed gas: 0.299) - [ 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0xfaa60dacea8e26112e524d379720fe4f95fbc5a26f1b1a67e229e26ddecbf221) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input1055524890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input1055524890-.out deleted file mode 100644 index 1b3bf0cdae7338f2e7b4c80b9e5136a0cfb1f727..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input1055524890-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 52435875175126190479447740508185965837690552500527637822603658699938581184514 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 52435875175126190479447740508185965837690552500527637822603658699938581184514 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 52435875175126190479447740508185965837690552500527637822603658699938581184514 ] - - location: 9 (just consumed gas: 0.299) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input453441034-.out deleted file mode 100644 index 549dd5bbe9d5a5683e79b1010233e6c269faf3e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input453441034-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 1 --level 1 --trace-stack -storage - 0x0100000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 1 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 1 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 1 ] - - location: 9 (just consumed gas: 0.266) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0100000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input564400327-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input564400327-.out deleted file mode 100644 index 554a15a2d586aba829195002b6d75e2f4e18e552..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input564400327-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 2 --level 1 --trace-stack -storage - 0x0200000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 2 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 2 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 2 ] - - location: 9 (just consumed gas: 0.266) - [ 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0200000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0200000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input680650890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input680650890-.out deleted file mode 100644 index 3895512752d8f2387cb6336448c30bd82124fa3c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bls12_381_z_fr_nat--storage994282947--input680650890-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz on storage 0x0100000000000000000000000000000000000000000000000000000000000000 and input 0 --level 1 --trace-stack -storage - 0x0000000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.831) - [ (Pair 0 0x0100000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 0 - 0x0100000000000000000000000000000000000000000000000000000000000000 ] - - location: 8 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 0 ] - - location: 9 (just consumed gas: 0.265) - [ 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x0000000000000000000000000000000000000000000000000000000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x0000000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bytes_of_int--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bytes_of_int--storage125992234--input125992234-.out deleted file mode 100644 index 9f7ee2efe814434235f215e1f9e383b14ec59e4f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bytes_of_int--storage125992234--input125992234-.out +++ /dev/null @@ -1,261 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bytes_of_int_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 116.835) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0 ] - - location: 11 (just consumed gas: 0.090) - [ 0x ] - - location: 12 (just consumed gas: 0.010) - [ 0x - 0x ] - - location: 17 (just consumed gas: 0.035) - [ 0 ] - - location: 18 (just consumed gas: 0.010) - [ True ] - - location: 19 (just consumed gas: 0.010) - [ ] - - location: 19 (just consumed gas: 0.025) - [ ] - - location: 25 (just consumed gas: 0.010) - [ 1 ] - - location: 28 (just consumed gas: 0.093) - [ 0x01 ] - - location: 29 (just consumed gas: 0.010) - [ 0x01 - 0x01 ] - - location: 34 (just consumed gas: 0.035) - [ 0 ] - - location: 35 (just consumed gas: 0.010) - [ True ] - - location: 36 (just consumed gas: 0.010) - [ ] - - location: 36 (just consumed gas: 0.025) - [ ] - - location: 42 (just consumed gas: 0.010) - [ 1193046 ] - - location: 45 (just consumed gas: 0.099) - [ 0x123456 ] - - location: 46 (just consumed gas: 0.010) - [ 0x123456 - 0x123456 ] - - location: 51 (just consumed gas: 0.035) - [ 0 ] - - location: 52 (just consumed gas: 0.010) - [ True ] - - location: 53 (just consumed gas: 0.010) - [ ] - - location: 53 (just consumed gas: 0.025) - [ ] - - location: 59 (just consumed gas: 0.010) - [ 0x123456 ] - - location: 62 (just consumed gas: 0.027) - [ 1193046 ] - - location: 63 (just consumed gas: 0.010) - [ 1193046 - 1193046 ] - - location: 68 (just consumed gas: 0.035) - [ 0 ] - - location: 69 (just consumed gas: 0.010) - [ True ] - - location: 70 (just consumed gas: 0.010) - [ ] - - location: 70 (just consumed gas: 0.025) - [ ] - - location: 76 (just consumed gas: 0.010) - [ 0x0000123456 ] - - location: 79 (just consumed gas: 0.032) - [ 1193046 ] - - location: 80 (just consumed gas: 0.010) - [ 1193046 - 1193046 ] - - location: 85 (just consumed gas: 0.035) - [ 0 ] - - location: 86 (just consumed gas: 0.010) - [ True ] - - location: 87 (just consumed gas: 0.010) - [ ] - - location: 87 (just consumed gas: 0.025) - [ ] - - location: 93 (just consumed gas: 0.010) - [ 0x ] - - location: 96 (just consumed gas: 0.020) - [ 0 ] - - location: 97 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 102 (just consumed gas: 0.035) - [ 0 ] - - location: 103 (just consumed gas: 0.010) - [ True ] - - location: 104 (just consumed gas: 0.010) - [ ] - - location: 104 (just consumed gas: 0.025) - [ ] - - location: 110 (just consumed gas: 0.010) - [ 0x0000 ] - - location: 113 (just consumed gas: 0.025) - [ 0 ] - - location: 114 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 119 (just consumed gas: 0.035) - [ 0 ] - - location: 120 (just consumed gas: 0.010) - [ True ] - - location: 121 (just consumed gas: 0.010) - [ ] - - location: 121 (just consumed gas: 0.025) - [ ] - - location: 127 (just consumed gas: 0.010) - [ -128 ] - - location: 130 (just consumed gas: 0.093) - [ 0x80 ] - - location: 131 (just consumed gas: 0.010) - [ 0x80 - 0x80 ] - - location: 136 (just consumed gas: 0.035) - [ 0 ] - - location: 137 (just consumed gas: 0.010) - [ True ] - - location: 138 (just consumed gas: 0.010) - [ ] - - location: 138 (just consumed gas: 0.025) - [ ] - - location: 144 (just consumed gas: 0.010) - [ -129 ] - - location: 147 (just consumed gas: 0.093) - [ 0xff7f ] - - location: 148 (just consumed gas: 0.010) - [ 0xff7f - 0xff7f ] - - location: 153 (just consumed gas: 0.035) - [ 0 ] - - location: 154 (just consumed gas: 0.010) - [ True ] - - location: 155 (just consumed gas: 0.010) - [ ] - - location: 155 (just consumed gas: 0.025) - [ ] - - location: 161 (just consumed gas: 0.010) - [ -33024 ] - - location: 164 (just consumed gas: 0.096) - [ 0xff7f00 ] - - location: 165 (just consumed gas: 0.010) - [ 0xff7f00 - 0xff7f00 ] - - location: 170 (just consumed gas: 0.035) - [ 0 ] - - location: 171 (just consumed gas: 0.010) - [ True ] - - location: 172 (just consumed gas: 0.010) - [ ] - - location: 172 (just consumed gas: 0.025) - [ ] - - location: 178 (just consumed gas: 0.010) - [ -4294967296 ] - - location: 181 (just consumed gas: 0.105) - [ 0xff00000000 ] - - location: 182 (just consumed gas: 0.010) - [ 0xff00000000 - 0xff00000000 ] - - location: 187 (just consumed gas: 0.035) - [ 0 ] - - location: 188 (just consumed gas: 0.010) - [ True ] - - location: 189 (just consumed gas: 0.010) - [ ] - - location: 189 (just consumed gas: 0.025) - [ ] - - location: 195 (just consumed gas: 0.010) - [ 0x80 ] - - location: 198 (just consumed gas: 0.022) - [ -128 ] - - location: 199 (just consumed gas: 0.010) - [ -128 - -128 ] - - location: 204 (just consumed gas: 0.035) - [ 0 ] - - location: 205 (just consumed gas: 0.010) - [ True ] - - location: 206 (just consumed gas: 0.010) - [ ] - - location: 206 (just consumed gas: 0.025) - [ ] - - location: 212 (just consumed gas: 0.010) - [ 0xff7f ] - - location: 215 (just consumed gas: 0.025) - [ -129 ] - - location: 216 (just consumed gas: 0.010) - [ -129 - -129 ] - - location: 221 (just consumed gas: 0.035) - [ 0 ] - - location: 222 (just consumed gas: 0.010) - [ True ] - - location: 223 (just consumed gas: 0.010) - [ ] - - location: 223 (just consumed gas: 0.025) - [ ] - - location: 229 (just consumed gas: 0.010) - [ 0xff7f00 ] - - location: 232 (just consumed gas: 0.027) - [ -33024 ] - - location: 233 (just consumed gas: 0.010) - [ -33024 - -33024 ] - - location: 238 (just consumed gas: 0.035) - [ 0 ] - - location: 239 (just consumed gas: 0.010) - [ True ] - - location: 240 (just consumed gas: 0.010) - [ ] - - location: 240 (just consumed gas: 0.025) - [ ] - - location: 246 (just consumed gas: 0.010) - [ 0xffffff7f00 ] - - location: 249 (just consumed gas: 0.032) - [ -33024 ] - - location: 250 (just consumed gas: 0.010) - [ -33024 - -33024 ] - - location: 255 (just consumed gas: 0.035) - [ 0 ] - - location: 256 (just consumed gas: 0.010) - [ True ] - - location: 257 (just consumed gas: 0.010) - [ ] - - location: 257 (just consumed gas: 0.025) - [ ] - - location: 263 (just consumed gas: 0.010) - [ 0xff00000000 ] - - location: 266 (just consumed gas: 0.032) - [ -4294967296 ] - - location: 267 (just consumed gas: 0.010) - [ -4294967296 - -4294967296 ] - - location: 272 (just consumed gas: 0.035) - [ 0 ] - - location: 273 (just consumed gas: 0.010) - [ True ] - - location: 274 (just consumed gas: 0.010) - [ ] - - location: 274 (just consumed gas: 0.025) - [ ] - - location: 280 (just consumed gas: 0.010) - [ Unit ] - - location: 281 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 283 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bytes_of_nat--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bytes_of_nat--storage125992234--input125992234-.out deleted file mode 100644 index 4c7923e0b080db4feb6de02f2e8fe49b932e59c2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -bytes_of_nat--storage125992234--input125992234-.out +++ /dev/null @@ -1,126 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/bytes_of_nat_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 52.991) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0 ] - - location: 11 (just consumed gas: 0.075) - [ 0x ] - - location: 12 (just consumed gas: 0.010) - [ 0x - 0x ] - - location: 17 (just consumed gas: 0.035) - [ 0 ] - - location: 18 (just consumed gas: 0.010) - [ True ] - - location: 19 (just consumed gas: 0.010) - [ ] - - location: 19 (just consumed gas: 0.025) - [ ] - - location: 25 (just consumed gas: 0.010) - [ 1 ] - - location: 28 (just consumed gas: 0.078) - [ 0x01 ] - - location: 29 (just consumed gas: 0.010) - [ 0x01 - 0x01 ] - - location: 34 (just consumed gas: 0.035) - [ 0 ] - - location: 35 (just consumed gas: 0.010) - [ True ] - - location: 36 (just consumed gas: 0.010) - [ ] - - location: 36 (just consumed gas: 0.025) - [ ] - - location: 42 (just consumed gas: 0.010) - [ 1193046 ] - - location: 45 (just consumed gas: 0.084) - [ 0x123456 ] - - location: 46 (just consumed gas: 0.010) - [ 0x123456 - 0x123456 ] - - location: 51 (just consumed gas: 0.035) - [ 0 ] - - location: 52 (just consumed gas: 0.010) - [ True ] - - location: 53 (just consumed gas: 0.010) - [ ] - - location: 53 (just consumed gas: 0.025) - [ ] - - location: 59 (just consumed gas: 0.010) - [ 0x123456 ] - - location: 62 (just consumed gas: 0.052) - [ 1193046 ] - - location: 63 (just consumed gas: 0.010) - [ 1193046 - 1193046 ] - - location: 68 (just consumed gas: 0.035) - [ 0 ] - - location: 69 (just consumed gas: 0.010) - [ True ] - - location: 70 (just consumed gas: 0.010) - [ ] - - location: 70 (just consumed gas: 0.025) - [ ] - - location: 76 (just consumed gas: 0.010) - [ 0x0000123456 ] - - location: 79 (just consumed gas: 0.057) - [ 1193046 ] - - location: 80 (just consumed gas: 0.010) - [ 1193046 - 1193046 ] - - location: 85 (just consumed gas: 0.035) - [ 0 ] - - location: 86 (just consumed gas: 0.010) - [ True ] - - location: 87 (just consumed gas: 0.010) - [ ] - - location: 87 (just consumed gas: 0.025) - [ ] - - location: 93 (just consumed gas: 0.010) - [ 0x ] - - location: 96 (just consumed gas: 0.045) - [ 0 ] - - location: 97 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 102 (just consumed gas: 0.035) - [ 0 ] - - location: 103 (just consumed gas: 0.010) - [ True ] - - location: 104 (just consumed gas: 0.010) - [ ] - - location: 104 (just consumed gas: 0.025) - [ ] - - location: 110 (just consumed gas: 0.010) - [ 0x0000 ] - - location: 113 (just consumed gas: 0.050) - [ 0 ] - - location: 114 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 119 (just consumed gas: 0.035) - [ 0 ] - - location: 120 (just consumed gas: 0.010) - [ True ] - - location: 121 (just consumed gas: 0.010) - [ ] - - location: 121 (just consumed gas: 0.025) - [ ] - - location: 127 (just consumed gas: 0.010) - [ Unit ] - - location: 128 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 130 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -car--storage680650890--input783124233-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -car--storage680650890--input783124233-.out deleted file mode 100644 index 6b056736c718a5242488fbe682d0d7e8b9e0bee1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -car--storage680650890--input783124233-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/car.tz on storage 0 and input '(Pair 34 17)' --level 1 --trace-stack -storage - 34 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.615) - [ (Pair (Pair 34 17) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair 34 17) ] - - location: 10 (just consumed gas: 0.010) - [ 34 ] - - location: 11 (just consumed gas: 0.010) - [ {} - 34 ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} 34) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cdr--storage680650890--input783124233-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cdr--storage680650890--input783124233-.out deleted file mode 100644 index beac5d8dbf4ff63a3b56eb4d43976e491824a7e4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cdr--storage680650890--input783124233-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/cdr.tz on storage 0 and input '(Pair 34 17)' --level 1 --trace-stack -storage - 17 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.615) - [ (Pair (Pair 34 17) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair 34 17) ] - - location: 10 (just consumed gas: 0.010) - [ 17 ] - - location: 11 (just consumed gas: 0.010) - [ {} - 17 ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} 17) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage109160754--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage109160754--input125992234-.out deleted file mode 100644 index 66e24b15722e238d60a18fe3a76a90d38b6ce651..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage109160754--input125992234-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/chain_id_store.tz on storage '(Some 0x7a06a770)' and input Unit --level 1 --trace-stack -storage - (Some "NetXynUjJNZm7wi") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.057) - [ (Pair Unit (Some "NetXdQprcVkpaWU")) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.015) - [ "NetXynUjJNZm7wi" ] - - location: 10 (just consumed gas: 0.010) - [ (Some "NetXynUjJNZm7wi") ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some "NetXynUjJNZm7wi") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some "NetXynUjJNZm7wi")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage921624073--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage921624073--input125992234-.out deleted file mode 100644 index 957163ec3813eb342176a9eac25487b535ebcc44..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage921624073--input125992234-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/chain_id_store.tz on storage None and input Unit --level 1 --trace-stack -storage - (Some "NetXynUjJNZm7wi") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair Unit None) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.015) - [ "NetXynUjJNZm7wi" ] - - location: 10 (just consumed gas: 0.010) - [ (Some "NetXynUjJNZm7wi") ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some "NetXynUjJNZm7wi") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some "NetXynUjJNZm7wi")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage981066851--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage981066851--input125992234-.out deleted file mode 100644 index 2944915b2e7127feac36307a5e69384c74d75a4a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -chain_id_store--storage981066851--input125992234-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/chain_id_store.tz on storage '(Some "NetXynUjJNZm7wi")' and input Unit --level 1 --trace-stack -storage - (Some "NetXynUjJNZm7wi") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.607) - [ (Pair Unit (Some "NetXynUjJNZm7wi")) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.015) - [ "NetXynUjJNZm7wi" ] - - location: 10 (just consumed gas: 0.010) - [ (Some "NetXynUjJNZm7wi") ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some "NetXynUjJNZm7wi") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some "NetXynUjJNZm7wi")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb--storage950292965--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb--storage950292965--input125992234-.out deleted file mode 100644 index d08f1e25a658175369ccd71187586fd88c317b46..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb--storage950292965--input125992234-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/comb.tz on storage '(Pair 0 0 0)' and input Unit --level 1 --trace-stack -storage - (Pair 1 2 3) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.970) - [ (Pair Unit 0 0 0) ] - - location: 10 (just consumed gas: 0.010) - [ ] - - location: 11 (just consumed gas: 0.010) - [ 3 ] - - location: 14 (just consumed gas: 0.010) - [ 2 - 3 ] - - location: 17 (just consumed gas: 0.010) - [ 1 - 2 - 3 ] - - location: 20 (just consumed gas: 0.010) - [ {} - 1 - 2 - 3 ] - - location: 22 (just consumed gas: 0.046) - [ (Pair {} 1 2 3) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-get--storage125992234--input186507116-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-get--storage125992234--input186507116-.out deleted file mode 100644 index 3b08e7cea04a3e48a2aadc2930d98b969cda3207..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-get--storage125992234--input186507116-.out +++ /dev/null @@ -1,123 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/comb-get.tz on storage Unit and input '(Pair 1 4 2 Unit)' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 42.680) - [ (Pair (Pair 1 4 2 Unit) Unit) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - location: 13 (just consumed gas: 0.010) - [ 1 - (Pair 1 4 2 Unit) ] - - location: 14 (just consumed gas: 0.010) - [ 1 - 1 - (Pair 1 4 2 Unit) ] - - location: 19 (just consumed gas: 0.035) - [ 0 - (Pair 1 4 2 Unit) ] - - location: 20 (just consumed gas: 0.010) - [ True - (Pair 1 4 2 Unit) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 21 (just consumed gas: 0.025) - [ (Pair 1 4 2 Unit) ] - - location: 27 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - location: 28 (just consumed gas: 0.020) - [ 1 - (Pair 1 4 2 Unit) ] - - location: 30 (just consumed gas: 0.010) - [ 1 - 1 - (Pair 1 4 2 Unit) ] - - location: 35 (just consumed gas: 0.035) - [ 0 - (Pair 1 4 2 Unit) ] - - location: 36 (just consumed gas: 0.010) - [ True - (Pair 1 4 2 Unit) ] - - location: 37 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 37 (just consumed gas: 0.025) - [ (Pair 1 4 2 Unit) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - location: 44 (just consumed gas: 0.021) - [ 4 - (Pair 1 4 2 Unit) ] - - location: 46 (just consumed gas: 0.010) - [ 4 - 4 - (Pair 1 4 2 Unit) ] - - location: 51 (just consumed gas: 0.035) - [ 0 - (Pair 1 4 2 Unit) ] - - location: 52 (just consumed gas: 0.010) - [ True - (Pair 1 4 2 Unit) ] - - location: 53 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 53 (just consumed gas: 0.025) - [ (Pair 1 4 2 Unit) ] - - location: 59 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - location: 60 (just consumed gas: 0.022) - [ 2 - (Pair 1 4 2 Unit) ] - - location: 62 (just consumed gas: 0.010) - [ 2 - 2 - (Pair 1 4 2 Unit) ] - - location: 67 (just consumed gas: 0.035) - [ 0 - (Pair 1 4 2 Unit) ] - - location: 68 (just consumed gas: 0.010) - [ True - (Pair 1 4 2 Unit) ] - - location: 69 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 69 (just consumed gas: 0.025) - [ (Pair 1 4 2 Unit) ] - - location: 75 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) - (Pair 1 4 2 Unit) ] - - location: 76 (just consumed gas: 0.023) - [ Unit - (Pair 1 4 2 Unit) ] - - location: 78 (just consumed gas: 0.010) - [ Unit - Unit - (Pair 1 4 2 Unit) ] - - location: 81 (just consumed gas: 0.010) - [ 0 - (Pair 1 4 2 Unit) ] - - location: 82 (just consumed gas: 0.010) - [ True - (Pair 1 4 2 Unit) ] - - location: 83 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 83 (just consumed gas: 0.025) - [ (Pair 1 4 2 Unit) ] - - location: 89 (just consumed gas: 0.010) - [ ] - - location: 90 (just consumed gas: 0.010) - [ Unit ] - - location: 91 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 93 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-set--storage186507116--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-set--storage186507116--input125992234-.out deleted file mode 100644 index 5b446d137d871172749bb136742b0ad29adf861f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-set--storage186507116--input125992234-.out +++ /dev/null @@ -1,39 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/comb-set.tz on storage '(Pair 1 4 2 Unit)' and input Unit --level 1 --trace-stack -storage - (Pair 2 12 8 Unit) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 12.261) - [ (Pair Unit 1 4 2 Unit) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 12 (just consumed gas: 0.010) - [ 2 - (Pair 1 4 2 Unit) ] - - location: 15 (just consumed gas: 0.031) - [ (Pair 2 4 2 Unit) ] - - location: 17 (just consumed gas: 0.010) - [ 12 - (Pair 2 4 2 Unit) ] - - location: 20 (just consumed gas: 0.033) - [ (Pair 2 12 2 Unit) ] - - location: 22 (just consumed gas: 0.010) - [ 8 - (Pair 2 12 2 Unit) ] - - location: 25 (just consumed gas: 0.036) - [ (Pair 2 12 8 Unit) ] - - location: 27 (just consumed gas: 0.010) - [ Unit - (Pair 2 12 8 Unit) ] - - location: 28 (just consumed gas: 0.037) - [ (Pair 2 12 8 Unit) ] - - location: 30 (just consumed gas: 0.010) - [ {} - (Pair 2 12 8 Unit) ] - - location: 32 (just consumed gas: 0.010) - [ (Pair {} 2 12 8 Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-set-2--storage921624073--input186507116-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-set-2--storage921624073--input186507116-.out deleted file mode 100644 index a98f9f82572f8306960b599da5bed89d4dcd87ee..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comb-set-2--storage921624073--input186507116-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/comb-set-2.tz on storage None and input '(Pair 1 4 2 Unit)' --level 1 --trace-stack -storage - (Some (Pair 2 4 "toto" 0x01)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 12.494) - [ (Pair (Pair 1 4 2 Unit) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 1 4 2 Unit) ] - - location: 17 (just consumed gas: 0.010) - [ 2 - (Pair 1 4 2 Unit) ] - - location: 20 (just consumed gas: 0.031) - [ (Pair 2 4 2 Unit) ] - - location: 22 (just consumed gas: 0.010) - [ "toto" - (Pair 2 4 2 Unit) ] - - location: 25 (just consumed gas: 0.036) - [ (Pair 2 4 "toto" Unit) ] - - location: 27 (just consumed gas: 0.010) - [ 0x01 - (Pair 2 4 "toto" Unit) ] - - location: 30 (just consumed gas: 0.037) - [ (Pair 2 4 "toto" 0x01) ] - - location: 32 (just consumed gas: 0.010) - [ (Some (Pair 2 4 "toto" 0x01)) ] - - location: 33 (just consumed gas: 0.010) - [ {} - (Some (Pair 2 4 "toto" 0x01)) ] - - location: 35 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair 2 4 "toto" 0x01))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -compare--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -compare--storage125992234--input125992234-.out deleted file mode 100644 index aa18f87871466a5bfd635db5f191c029a52356e7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -compare--storage125992234--input125992234-.out +++ /dev/null @@ -1,398 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/compare.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 198.113) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ True ] - - location: 11 (just consumed gas: 0.010) - [ True - True ] - - location: 12 (just consumed gas: 0.035) - [ 0 ] - - location: 14 (just consumed gas: 0.010) - [ True ] - - location: 15 (just consumed gas: 0.010) - [ ] - - location: 15 (just consumed gas: 0.025) - [ ] - - location: 21 (just consumed gas: 0.010) - [ False ] - - location: 24 (just consumed gas: 0.010) - [ False - False ] - - location: 25 (just consumed gas: 0.035) - [ 0 ] - - location: 27 (just consumed gas: 0.010) - [ True ] - - location: 28 (just consumed gas: 0.010) - [ ] - - location: 28 (just consumed gas: 0.025) - [ ] - - location: 34 (just consumed gas: 0.010) - [ False ] - - location: 37 (just consumed gas: 0.010) - [ True - False ] - - location: 40 (just consumed gas: 0.035) - [ 1 ] - - location: 42 (just consumed gas: 0.010) - [ True ] - - location: 43 (just consumed gas: 0.010) - [ ] - - location: 43 (just consumed gas: 0.025) - [ ] - - location: 49 (just consumed gas: 0.010) - [ True ] - - location: 52 (just consumed gas: 0.010) - [ False - True ] - - location: 55 (just consumed gas: 0.035) - [ -1 ] - - location: 57 (just consumed gas: 0.010) - [ True ] - - location: 58 (just consumed gas: 0.010) - [ ] - - location: 58 (just consumed gas: 0.025) - [ ] - - location: 64 (just consumed gas: 0.010) - [ 0xaabbcc ] - - location: 67 (just consumed gas: 0.010) - [ 0xaabbcc - 0xaabbcc ] - - location: 68 (just consumed gas: 0.035) - [ 0 ] - - location: 70 (just consumed gas: 0.010) - [ True ] - - location: 71 (just consumed gas: 0.010) - [ ] - - location: 71 (just consumed gas: 0.025) - [ ] - - location: 77 (just consumed gas: 0.010) - [ 0x ] - - location: 80 (just consumed gas: 0.010) - [ 0x - 0x ] - - location: 83 (just consumed gas: 0.035) - [ 0 ] - - location: 85 (just consumed gas: 0.010) - [ True ] - - location: 86 (just consumed gas: 0.010) - [ ] - - location: 86 (just consumed gas: 0.025) - [ ] - - location: 92 (just consumed gas: 0.010) - [ 0x ] - - location: 95 (just consumed gas: 0.010) - [ 0x01 - 0x ] - - location: 98 (just consumed gas: 0.035) - [ 1 ] - - location: 100 (just consumed gas: 0.010) - [ True ] - - location: 101 (just consumed gas: 0.010) - [ ] - - location: 101 (just consumed gas: 0.025) - [ ] - - location: 107 (just consumed gas: 0.010) - [ 0x01 ] - - location: 110 (just consumed gas: 0.010) - [ 0x02 - 0x01 ] - - location: 113 (just consumed gas: 0.035) - [ 1 ] - - location: 115 (just consumed gas: 0.010) - [ True ] - - location: 116 (just consumed gas: 0.010) - [ ] - - location: 116 (just consumed gas: 0.025) - [ ] - - location: 122 (just consumed gas: 0.010) - [ 0x02 ] - - location: 125 (just consumed gas: 0.010) - [ 0x01 - 0x02 ] - - location: 128 (just consumed gas: 0.035) - [ -1 ] - - location: 130 (just consumed gas: 0.010) - [ True ] - - location: 131 (just consumed gas: 0.010) - [ ] - - location: 131 (just consumed gas: 0.025) - [ ] - - location: 137 (just consumed gas: 0.010) - [ 1 ] - - location: 140 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 141 (just consumed gas: 0.035) - [ 0 ] - - location: 143 (just consumed gas: 0.010) - [ True ] - - location: 144 (just consumed gas: 0.010) - [ ] - - location: 144 (just consumed gas: 0.025) - [ ] - - location: 150 (just consumed gas: 0.010) - [ 10 ] - - location: 153 (just consumed gas: 0.010) - [ 5 - 10 ] - - location: 156 (just consumed gas: 0.035) - [ -1 ] - - location: 158 (just consumed gas: 0.010) - [ True ] - - location: 159 (just consumed gas: 0.010) - [ ] - - location: 159 (just consumed gas: 0.025) - [ ] - - location: 165 (just consumed gas: 0.010) - [ -4 ] - - location: 168 (just consumed gas: 0.010) - [ 1923 - -4 ] - - location: 171 (just consumed gas: 0.035) - [ 1 ] - - location: 173 (just consumed gas: 0.010) - [ True ] - - location: 174 (just consumed gas: 0.010) - [ ] - - location: 174 (just consumed gas: 0.025) - [ ] - - location: 180 (just consumed gas: 0.010) - [ 1 ] - - location: 183 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 184 (just consumed gas: 0.035) - [ 0 ] - - location: 186 (just consumed gas: 0.010) - [ True ] - - location: 187 (just consumed gas: 0.010) - [ ] - - location: 187 (just consumed gas: 0.025) - [ ] - - location: 193 (just consumed gas: 0.010) - [ 10 ] - - location: 196 (just consumed gas: 0.010) - [ 5 - 10 ] - - location: 199 (just consumed gas: 0.035) - [ -1 ] - - location: 201 (just consumed gas: 0.010) - [ True ] - - location: 202 (just consumed gas: 0.010) - [ ] - - location: 202 (just consumed gas: 0.025) - [ ] - - location: 208 (just consumed gas: 0.010) - [ 4 ] - - location: 211 (just consumed gas: 0.010) - [ 1923 - 4 ] - - location: 214 (just consumed gas: 0.035) - [ 1 ] - - location: 216 (just consumed gas: 0.010) - [ True ] - - location: 217 (just consumed gas: 0.010) - [ ] - - location: 217 (just consumed gas: 0.025) - [ ] - - location: 223 (just consumed gas: 0.010) - [ "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ] - - location: 226 (just consumed gas: 0.010) - [ "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ] - - location: 227 (just consumed gas: 0.036) - [ 0 ] - - location: 229 (just consumed gas: 0.010) - [ True ] - - location: 230 (just consumed gas: 0.010) - [ ] - - location: 230 (just consumed gas: 0.025) - [ ] - - location: 236 (just consumed gas: 0.010) - [ "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" ] - - location: 239 (just consumed gas: 0.010) - [ "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" ] - - location: 242 (just consumed gas: 0.036) - [ -1 ] - - location: 244 (just consumed gas: 0.010) - [ True ] - - location: 245 (just consumed gas: 0.010) - [ ] - - location: 245 (just consumed gas: 0.025) - [ ] - - location: 251 (just consumed gas: 0.010) - [ "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ] - - location: 254 (just consumed gas: 0.010) - [ "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" - "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ] - - location: 257 (just consumed gas: 0.036) - [ 1 ] - - location: 259 (just consumed gas: 0.010) - [ True ] - - location: 260 (just consumed gas: 0.010) - [ ] - - location: 260 (just consumed gas: 0.025) - [ ] - - location: 266 (just consumed gas: 0.010) - [ 1 ] - - location: 269 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 270 (just consumed gas: 0.035) - [ 0 ] - - location: 272 (just consumed gas: 0.010) - [ True ] - - location: 273 (just consumed gas: 0.010) - [ ] - - location: 273 (just consumed gas: 0.025) - [ ] - - location: 279 (just consumed gas: 0.010) - [ 10 ] - - location: 282 (just consumed gas: 0.010) - [ 5 - 10 ] - - location: 285 (just consumed gas: 0.035) - [ -1 ] - - location: 287 (just consumed gas: 0.010) - [ True ] - - location: 288 (just consumed gas: 0.010) - [ ] - - location: 288 (just consumed gas: 0.025) - [ ] - - location: 294 (just consumed gas: 0.010) - [ 4 ] - - location: 297 (just consumed gas: 0.010) - [ 1923 - 4 ] - - location: 300 (just consumed gas: 0.035) - [ 1 ] - - location: 302 (just consumed gas: 0.010) - [ True ] - - location: 303 (just consumed gas: 0.010) - [ ] - - location: 303 (just consumed gas: 0.025) - [ ] - - location: 309 (just consumed gas: 0.010) - [ "AABBCC" ] - - location: 312 (just consumed gas: 0.010) - [ "AABBCC" - "AABBCC" ] - - location: 313 (just consumed gas: 0.035) - [ 0 ] - - location: 315 (just consumed gas: 0.010) - [ True ] - - location: 316 (just consumed gas: 0.010) - [ ] - - location: 316 (just consumed gas: 0.025) - [ ] - - location: 322 (just consumed gas: 0.010) - [ "" ] - - location: 325 (just consumed gas: 0.010) - [ "" - "" ] - - location: 328 (just consumed gas: 0.035) - [ 0 ] - - location: 330 (just consumed gas: 0.010) - [ True ] - - location: 331 (just consumed gas: 0.010) - [ ] - - location: 331 (just consumed gas: 0.025) - [ ] - - location: 337 (just consumed gas: 0.010) - [ "" ] - - location: 340 (just consumed gas: 0.010) - [ "a" - "" ] - - location: 343 (just consumed gas: 0.035) - [ 1 ] - - location: 345 (just consumed gas: 0.010) - [ True ] - - location: 346 (just consumed gas: 0.010) - [ ] - - location: 346 (just consumed gas: 0.025) - [ ] - - location: 352 (just consumed gas: 0.010) - [ "a" ] - - location: 355 (just consumed gas: 0.010) - [ "b" - "a" ] - - location: 358 (just consumed gas: 0.035) - [ 1 ] - - location: 360 (just consumed gas: 0.010) - [ True ] - - location: 361 (just consumed gas: 0.010) - [ ] - - location: 361 (just consumed gas: 0.025) - [ ] - - location: 367 (just consumed gas: 0.010) - [ "b" ] - - location: 370 (just consumed gas: 0.010) - [ "a" - "b" ] - - location: 373 (just consumed gas: 0.035) - [ -1 ] - - location: 375 (just consumed gas: 0.010) - [ True ] - - location: 376 (just consumed gas: 0.010) - [ ] - - location: 376 (just consumed gas: 0.025) - [ ] - - location: 382 (just consumed gas: 0.010) - [ "2019-09-16T08:38:05Z" ] - - location: 385 (just consumed gas: 0.010) - [ "2019-09-16T08:38:05Z" - "2019-09-16T08:38:05Z" ] - - location: 386 (just consumed gas: 0.035) - [ 0 ] - - location: 388 (just consumed gas: 0.010) - [ True ] - - location: 389 (just consumed gas: 0.010) - [ ] - - location: 389 (just consumed gas: 0.025) - [ ] - - location: 395 (just consumed gas: 0.010) - [ "2017-09-16T08:38:04Z" ] - - location: 398 (just consumed gas: 0.010) - [ "2019-09-16T08:38:05Z" - "2017-09-16T08:38:04Z" ] - - location: 401 (just consumed gas: 0.035) - [ 1 ] - - location: 403 (just consumed gas: 0.010) - [ True ] - - location: 404 (just consumed gas: 0.010) - [ ] - - location: 404 (just consumed gas: 0.025) - [ ] - - location: 410 (just consumed gas: 0.010) - [ "2019-09-16T08:38:05Z" ] - - location: 413 (just consumed gas: 0.010) - [ "2019-09-16T08:38:04Z" - "2019-09-16T08:38:05Z" ] - - location: 416 (just consumed gas: 0.035) - [ -1 ] - - location: 418 (just consumed gas: 0.010) - [ True ] - - location: 419 (just consumed gas: 0.010) - [ ] - - location: 419 (just consumed gas: 0.025) - [ ] - - location: 425 (just consumed gas: 0.010) - [ Unit ] - - location: 426 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 428 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comparisons--storage457300675--input281780712-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comparisons--storage457300675--input281780712-.out deleted file mode 100644 index 823f58e2611a866589b3d2bd5784d8771cf5daee..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -comparisons--storage457300675--input281780712-.out +++ /dev/null @@ -1,350 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/comparisons.tz on storage '{}' and input '{ -9999999; -1 ; 0 ; 1 ; 9999999 }' --level 1 --trace-stack -storage - { { False ; False ; False ; True ; True } ; - { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 29.053) - [ (Pair { -9999999 ; -1 ; 0 ; 1 ; 9999999 } {}) ] - - location: 10 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 11 (just consumed gas: 0.010) - [ {} - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 14 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 16 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 17 (just consumed gas: 0.050) - [ -9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 19 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 17 (just consumed gas: 0.055) - [ -1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 19 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 17 (just consumed gas: 0.055) - [ 0 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 19 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 17 (just consumed gas: 0.055) - [ 1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 19 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 17 (just consumed gas: 0.055) - [ 9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 19 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 17 (just consumed gas: 0.073) - [ { False ; False ; True ; False ; False } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 14 (just consumed gas: 0.035) - [ {} - { False ; False ; True ; False ; False } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 20 (just consumed gas: 0.010) - [ { False ; False ; True ; False ; False } - {} - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 21 (just consumed gas: 0.010) - [ { { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 22 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 24 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 25 (just consumed gas: 0.050) - [ -9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 27 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 25 (just consumed gas: 0.055) - [ -1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 27 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 25 (just consumed gas: 0.055) - [ 0 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 27 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 25 (just consumed gas: 0.055) - [ 1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 27 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 25 (just consumed gas: 0.055) - [ 9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 27 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 25 (just consumed gas: 0.073) - [ { True ; True ; False ; True ; True } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 22 (just consumed gas: 0.035) - [ { { False ; False ; True ; False ; False } } - { True ; True ; False ; True ; True } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 28 (just consumed gas: 0.010) - [ { True ; True ; False ; True ; True } - { { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 29 (just consumed gas: 0.010) - [ { { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 30 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 32 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 33 (just consumed gas: 0.050) - [ -9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 35 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 33 (just consumed gas: 0.055) - [ -1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 35 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 33 (just consumed gas: 0.055) - [ 0 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 35 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 33 (just consumed gas: 0.055) - [ 1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 35 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 33 (just consumed gas: 0.055) - [ 9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 35 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 33 (just consumed gas: 0.073) - [ { True ; True ; True ; False ; False } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 30 (just consumed gas: 0.035) - [ { { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { True ; True ; True ; False ; False } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 36 (just consumed gas: 0.010) - [ { True ; True ; True ; False ; False } - { { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 37 (just consumed gas: 0.010) - [ { { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 38 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 40 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 41 (just consumed gas: 0.050) - [ -9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 43 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 41 (just consumed gas: 0.055) - [ -1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 43 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 41 (just consumed gas: 0.055) - [ 0 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 43 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 41 (just consumed gas: 0.055) - [ 1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 43 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 41 (just consumed gas: 0.055) - [ 9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 43 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 41 (just consumed gas: 0.073) - [ { True ; True ; False ; False ; False } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 38 (just consumed gas: 0.035) - [ { { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { True ; True ; False ; False ; False } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 44 (just consumed gas: 0.010) - [ { True ; True ; False ; False ; False } - { { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 45 (just consumed gas: 0.010) - [ { { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 46 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 48 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 49 (just consumed gas: 0.050) - [ -9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 51 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 49 (just consumed gas: 0.055) - [ -1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 51 (just consumed gas: 0.010) - [ False - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 49 (just consumed gas: 0.055) - [ 0 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 51 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 49 (just consumed gas: 0.055) - [ 1 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 51 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 49 (just consumed gas: 0.055) - [ 9999999 - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 51 (just consumed gas: 0.010) - [ True - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 49 (just consumed gas: 0.073) - [ { False ; False ; True ; True ; True } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 46 (just consumed gas: 0.035) - [ { { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { False ; False ; True ; True ; True } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 52 (just consumed gas: 0.010) - [ { False ; False ; True ; True ; True } - { { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 53 (just consumed gas: 0.010) - [ { { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 54 (just consumed gas: 0.010) - [ { -9999999 ; -1 ; 0 ; 1 ; 9999999 } ] - - location: 56 (just consumed gas: 0.050) - [ -9999999 ] - - location: 58 (just consumed gas: 0.010) - [ False ] - - location: 56 (just consumed gas: 0.055) - [ -1 ] - - location: 58 (just consumed gas: 0.010) - [ False ] - - location: 56 (just consumed gas: 0.055) - [ 0 ] - - location: 58 (just consumed gas: 0.010) - [ False ] - - location: 56 (just consumed gas: 0.055) - [ 1 ] - - location: 58 (just consumed gas: 0.010) - [ True ] - - location: 56 (just consumed gas: 0.055) - [ 9999999 ] - - location: 58 (just consumed gas: 0.010) - [ True ] - - location: 56 (just consumed gas: 0.073) - [ { False ; False ; False ; True ; True } ] - - location: 54 (just consumed gas: 0.035) - [ { { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } - { False ; False ; False ; True ; True } ] - - location: 59 (just consumed gas: 0.010) - [ { False ; False ; False ; True ; True } - { { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } ] - - location: 60 (just consumed gas: 0.010) - [ { { False ; False ; False ; True ; True } ; - { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } ] - - location: 61 (just consumed gas: 0.010) - [ {} - { { False ; False ; False ; True ; True } ; - { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } } ] - - location: 63 (just consumed gas: 0.010) - [ (Pair {} - { { False ; False ; False ; True ; True } ; - { False ; False ; True ; True ; True } ; - { True ; True ; False ; False ; False } ; - { True ; True ; True ; False ; False } ; - { True ; True ; False ; True ; True } ; - { False ; False ; True ; False ; False } }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input392583650-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input392583650-.out deleted file mode 100644 index 8684037747e4de953172c477e0d2e373bac2f5f9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input392583650-.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_hello.tz on storage '{}' and input '{ "test1" ; "test2" }' --level 1 --trace-stack -storage - { "Hello test1" ; "Hello test2" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.631) - [ (Pair { "test1" ; "test2" } {}) ] - - location: 9 (just consumed gas: 0.010) - [ { "test1" ; "test2" } ] - - location: 10 (just consumed gas: 0.050) - [ "test1" ] - - location: 12 (just consumed gas: 0.010) - [ "Hello " - "test1" ] - - location: 15 (just consumed gas: 0.050) - [ "Hello test1" ] - - location: 10 (just consumed gas: 0.055) - [ "test2" ] - - location: 12 (just consumed gas: 0.010) - [ "Hello " - "test2" ] - - location: 15 (just consumed gas: 0.050) - [ "Hello test2" ] - - location: 10 (just consumed gas: 0.068) - [ { "Hello test1" ; "Hello test2" } ] - - location: 16 (just consumed gas: 0.010) - [ {} - { "Hello test1" ; "Hello test2" } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} { "Hello test1" ; "Hello test2" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input457300675-.out deleted file mode 100644 index 853680a7a68b41df95be9767806fe3660c2920be..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input457300675-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_hello.tz on storage '{}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.301) - [ (Pair {} {}) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.060) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input640104625-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input640104625-.out deleted file mode 100644 index bb819fb9e7ccdfb16cf6c79e4af5308eb4f9e7d7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello--storage457300675--input640104625-.out +++ /dev/null @@ -1,28 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_hello.tz on storage '{}' and input '{ "World!" }' --level 1 --trace-stack -storage - { "Hello World!" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.476) - [ (Pair { "World!" } {}) ] - - location: 9 (just consumed gas: 0.010) - [ { "World!" } ] - - location: 10 (just consumed gas: 0.050) - [ "World!" ] - - location: 12 (just consumed gas: 0.010) - [ "Hello " - "World!" ] - - location: 15 (just consumed gas: 0.051) - [ "Hello World!" ] - - location: 10 (just consumed gas: 0.066) - [ { "Hello World!" } ] - - location: 16 (just consumed gas: 0.010) - [ {} - { "Hello World!" } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} { "Hello World!" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input354091714-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input354091714-.out deleted file mode 100644 index 9e9a4a1bbeaf5d9b0593a51f0ada657e850ec23e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input354091714-.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_hello_bytes.tz on storage '{}' and input '{ 0xab ; 0xcd }' --level 1 --trace-stack -storage - { 0xffab ; 0xffcd } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.381) - [ (Pair { 0xab ; 0xcd } {}) ] - - location: 9 (just consumed gas: 0.010) - [ { 0xab ; 0xcd } ] - - location: 10 (just consumed gas: 0.050) - [ 0xab ] - - location: 12 (just consumed gas: 0.010) - [ 0xff - 0xab ] - - location: 15 (just consumed gas: 0.046) - [ 0xffab ] - - location: 10 (just consumed gas: 0.055) - [ 0xcd ] - - location: 12 (just consumed gas: 0.010) - [ 0xff - 0xcd ] - - location: 15 (just consumed gas: 0.046) - [ 0xffcd ] - - location: 10 (just consumed gas: 0.068) - [ { 0xffab ; 0xffcd } ] - - location: 16 (just consumed gas: 0.010) - [ {} - { 0xffab ; 0xffcd } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} { 0xffab ; 0xffcd }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input441061063-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input441061063-.out deleted file mode 100644 index 8884ade419c1baa4164813b027888736ba0fcb3f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input441061063-.out +++ /dev/null @@ -1,28 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_hello_bytes.tz on storage '{}' and input '{ 0xcd }' --level 1 --trace-stack -storage - { 0xffcd } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.281) - [ (Pair { 0xcd } {}) ] - - location: 9 (just consumed gas: 0.010) - [ { 0xcd } ] - - location: 10 (just consumed gas: 0.050) - [ 0xcd ] - - location: 12 (just consumed gas: 0.010) - [ 0xff - 0xcd ] - - location: 15 (just consumed gas: 0.046) - [ 0xffcd ] - - location: 10 (just consumed gas: 0.066) - [ { 0xffcd } ] - - location: 16 (just consumed gas: 0.010) - [ {} - { 0xffcd } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} { 0xffcd }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input457300675-.out deleted file mode 100644 index 3c285225bb28365d5c61c6d8fe4844beb10fd9a6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_hello_bytes--storage457300675--input457300675-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_hello_bytes.tz on storage '{}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.181) - [ (Pair {} {}) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.060) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input264787654-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input264787654-.out deleted file mode 100644 index 8a19dc593df53617f7074428469273cbf0eefb24..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input264787654-.out +++ /dev/null @@ -1,96 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_list.tz on storage '""' and input '{ "a" ; "b" ; "c" }' --level 1 --trace-stack -storage - "abc" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 10.763) - [ (Pair { "a" ; "b" ; "c" } "") ] - - location: 8 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 9 (just consumed gas: 0.010) - [ "" - { "a" ; "b" ; "c" } ] - - location: 12 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } - "" ] - - location: 13 (just consumed gas: 0.030) - [ "a" - "" ] - - location: 15 (just consumed gas: 0.010) - [ "" - "a" ] - - location: 16 (just consumed gas: 0.010) - [ "a" ] - - location: 18 (just consumed gas: 0.010) - [ {} - "a" ] - - location: 20 (just consumed gas: 0.010) - [ "a" - {} ] - - location: 21 (just consumed gas: 0.010) - [ { "a" } ] - - location: 16 (just consumed gas: 0.035) - [ "" - { "a" } ] - - location: 22 (just consumed gas: 0.010) - [ { "" ; "a" } ] - - location: 23 (just consumed gas: 0.120) - [ "a" ] - - location: 13 (just consumed gas: 0.025) - [ "b" - "a" ] - - location: 15 (just consumed gas: 0.010) - [ "a" - "b" ] - - location: 16 (just consumed gas: 0.010) - [ "b" ] - - location: 18 (just consumed gas: 0.010) - [ {} - "b" ] - - location: 20 (just consumed gas: 0.010) - [ "b" - {} ] - - location: 21 (just consumed gas: 0.010) - [ { "b" } ] - - location: 16 (just consumed gas: 0.035) - [ "a" - { "b" } ] - - location: 22 (just consumed gas: 0.010) - [ { "a" ; "b" } ] - - location: 23 (just consumed gas: 0.121) - [ "ab" ] - - location: 13 (just consumed gas: 0.025) - [ "c" - "ab" ] - - location: 15 (just consumed gas: 0.010) - [ "ab" - "c" ] - - location: 16 (just consumed gas: 0.010) - [ "c" ] - - location: 18 (just consumed gas: 0.010) - [ {} - "c" ] - - location: 20 (just consumed gas: 0.010) - [ "c" - {} ] - - location: 21 (just consumed gas: 0.010) - [ { "c" } ] - - location: 16 (just consumed gas: 0.035) - [ "ab" - { "c" } ] - - location: 22 (just consumed gas: 0.010) - [ { "ab" ; "c" } ] - - location: 23 (just consumed gas: 0.121) - [ "abc" ] - - location: 13 (just consumed gas: 0.035) - [ "abc" ] - - location: 24 (just consumed gas: 0.010) - [ {} - "abc" ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} "abc") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input316676251-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input316676251-.out deleted file mode 100644 index ddea8be67a18ca379fe4ec74e5fd61901d339496..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input316676251-.out +++ /dev/null @@ -1,119 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_list.tz on storage '""' and input '{ "Hello" ; " " ; "World" ; "!" }' --level 1 --trace-stack -storage - "Hello World!" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 10.968) - [ (Pair { "Hello" ; " " ; "World" ; "!" } "") ] - - location: 8 (just consumed gas: 0.010) - [ { "Hello" ; " " ; "World" ; "!" } ] - - location: 9 (just consumed gas: 0.010) - [ "" - { "Hello" ; " " ; "World" ; "!" } ] - - location: 12 (just consumed gas: 0.010) - [ { "Hello" ; " " ; "World" ; "!" } - "" ] - - location: 13 (just consumed gas: 0.030) - [ "Hello" - "" ] - - location: 15 (just consumed gas: 0.010) - [ "" - "Hello" ] - - location: 16 (just consumed gas: 0.010) - [ "Hello" ] - - location: 18 (just consumed gas: 0.010) - [ {} - "Hello" ] - - location: 20 (just consumed gas: 0.010) - [ "Hello" - {} ] - - location: 21 (just consumed gas: 0.010) - [ { "Hello" } ] - - location: 16 (just consumed gas: 0.035) - [ "" - { "Hello" } ] - - location: 22 (just consumed gas: 0.010) - [ { "" ; "Hello" } ] - - location: 23 (just consumed gas: 0.122) - [ "Hello" ] - - location: 13 (just consumed gas: 0.025) - [ " " - "Hello" ] - - location: 15 (just consumed gas: 0.010) - [ "Hello" - " " ] - - location: 16 (just consumed gas: 0.010) - [ " " ] - - location: 18 (just consumed gas: 0.010) - [ {} - " " ] - - location: 20 (just consumed gas: 0.010) - [ " " - {} ] - - location: 21 (just consumed gas: 0.010) - [ { " " } ] - - location: 16 (just consumed gas: 0.035) - [ "Hello" - { " " } ] - - location: 22 (just consumed gas: 0.010) - [ { "Hello" ; " " } ] - - location: 23 (just consumed gas: 0.123) - [ "Hello " ] - - location: 13 (just consumed gas: 0.025) - [ "World" - "Hello " ] - - location: 15 (just consumed gas: 0.010) - [ "Hello " - "World" ] - - location: 16 (just consumed gas: 0.010) - [ "World" ] - - location: 18 (just consumed gas: 0.010) - [ {} - "World" ] - - location: 20 (just consumed gas: 0.010) - [ "World" - {} ] - - location: 21 (just consumed gas: 0.010) - [ { "World" } ] - - location: 16 (just consumed gas: 0.035) - [ "Hello " - { "World" } ] - - location: 22 (just consumed gas: 0.010) - [ { "Hello " ; "World" } ] - - location: 23 (just consumed gas: 0.125) - [ "Hello World" ] - - location: 13 (just consumed gas: 0.025) - [ "!" - "Hello World" ] - - location: 15 (just consumed gas: 0.010) - [ "Hello World" - "!" ] - - location: 16 (just consumed gas: 0.010) - [ "!" ] - - location: 18 (just consumed gas: 0.010) - [ {} - "!" ] - - location: 20 (just consumed gas: 0.010) - [ "!" - {} ] - - location: 21 (just consumed gas: 0.010) - [ { "!" } ] - - location: 16 (just consumed gas: 0.035) - [ "Hello World" - { "!" } ] - - location: 22 (just consumed gas: 0.010) - [ { "Hello World" ; "!" } ] - - location: 23 (just consumed gas: 0.126) - [ "Hello World!" ] - - location: 13 (just consumed gas: 0.035) - [ "Hello World!" ] - - location: 24 (just consumed gas: 0.010) - [ {} - "Hello World!" ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} "Hello World!") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input457300675-.out deleted file mode 100644 index bcfa24d8ea9745a4b6b8bdbb1f533f841dd1276e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -concat_list--storage79230375--input457300675-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/concat_list.tz on storage '""' and input '{}' --level 1 --trace-stack -storage - "" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 10.388) - [ (Pair {} "") ] - - location: 8 (just consumed gas: 0.010) - [ {} ] - - location: 9 (just consumed gas: 0.010) - [ "" - {} ] - - location: 12 (just consumed gas: 0.010) - [ {} - "" ] - - location: 13 (just consumed gas: 0.040) - [ "" ] - - location: 24 (just consumed gas: 0.010) - [ {} - "" ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} "") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage457300675--input798141440-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage457300675--input798141440-.out deleted file mode 100644 index 8108c3e6fe1f296fc0fb0dfaa804be3bcdde23ce..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage457300675--input798141440-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/cons.tz on storage '{}' and input 10 --level 1 --trace-stack -storage - { 10 } -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.410) - [ (Pair 10 {}) ] - - location: 8 (just consumed gas: 0.010) - [ 10 - {} ] - - location: 9 (just consumed gas: 0.010) - [ { 10 } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { 10 } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { 10 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage581876226--input166122047-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage581876226--input166122047-.out deleted file mode 100644 index 033debebe36d321bec9bc65e5671fa5468b4702c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage581876226--input166122047-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/cons.tz on storage '{ 10 }' and input -5 --level 1 --trace-stack -storage - { -5 ; 10 } -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.510) - [ (Pair -5 { 10 }) ] - - location: 8 (just consumed gas: 0.010) - [ -5 - { 10 } ] - - location: 9 (just consumed gas: 0.010) - [ { -5 ; 10 } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { -5 ; 10 } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { -5 ; 10 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage793461282--input781487591-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage793461282--input781487591-.out deleted file mode 100644 index b02863ec06adee342e79ff48b70c2efc9b7234c5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -cons--storage793461282--input781487591-.out +++ /dev/null @@ -1,22 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/cons.tz on storage '{ -5 ; 10 }' and input 99 --level 1 --trace-stack -storage - { 99 ; -5 ; 10 } -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.610) - [ (Pair 99 { -5 ; 10 }) ] - - location: 8 (just consumed gas: 0.010) - [ 99 - { -5 ; 10 } ] - - location: 9 (just consumed gas: 0.010) - [ { 99 ; -5 ; 10 } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { 99 ; -5 ; 10 } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { 99 ; -5 ; 10 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input315650912-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input315650912-.out deleted file mode 100644 index e65fe27927a6d29506bdbea1987c5d7bc02bcfa1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input315650912-.out +++ /dev/null @@ -1,166 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contains_all.tz on storage None and input '(Pair { "B" } { "B" })' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 31.962) - [ (Pair (Pair { "B" } { "B" }) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { "B" } { "B" }) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { "B" } { "B" }) - (Pair { "B" } { "B" }) ] - - location: 14 (just consumed gas: 0.010) - [ { "B" } - (Pair { "B" } { "B" }) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair { "B" } { "B" }) ] - - location: 17 (just consumed gas: 0.010) - [ { "B" } ] - - location: 15 (just consumed gas: 0.035) - [ { "B" } - { "B" } ] - - location: 18 (just consumed gas: 0.300) - [ {} - { "B" } - { "B" } ] - - location: 20 (just consumed gas: 0.010) - [ { "B" } - {} - { "B" } ] - - location: 21 (just consumed gas: 0.030) - [ "B" - {} - { "B" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "B" {}) - { "B" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "B" {}) - (Pair "B" {}) - { "B" } ] - - location: 25 (just consumed gas: 0.010) - [ "B" - (Pair "B" {}) - { "B" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "B" {}) - { "B" } ] - - location: 28 (just consumed gas: 0.010) - [ {} - { "B" } ] - - location: 26 (just consumed gas: 0.035) - [ "B" - {} - { "B" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "B" - {} - { "B" } ] - - location: 32 (just consumed gas: 0.010) - [ "B" - True - {} - { "B" } ] - - location: 33 (just consumed gas: 0.050) - [ { "B" } - { "B" } ] - - location: 21 (just consumed gas: 0.035) - [ { "B" } - { "B" } ] - - location: 34 (just consumed gas: 0.010) - [ True - { "B" } - { "B" } ] - - location: 37 (just consumed gas: 0.010) - [ { "B" } - True - { "B" } ] - - location: 38 (just consumed gas: 0.010) - [ (Pair { "B" } True) - { "B" } ] - - location: 39 (just consumed gas: 0.010) - [ { "B" } - (Pair { "B" } True) ] - - location: 40 (just consumed gas: 0.030) - [ "B" - (Pair { "B" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "B" { "B" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "B" { "B" } True) - (Pair "B" { "B" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "B" { "B" } True) - (Pair "B" { "B" } True) - (Pair "B" { "B" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "B" } True) - (Pair "B" { "B" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "B" { "B" } True) - (Pair "B" { "B" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" } True) - (Pair "B" { "B" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" } - (Pair "B" { "B" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "B" { "B" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" } - { "B" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "B" - { "B" } - { "B" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" } True) ] - - location: 40 (just consumed gas: 0.035) - [ (Pair { "B" } True) ] - - location: 64 (just consumed gas: 0.010) - [ True ] - - location: 65 (just consumed gas: 0.010) - [ (Some True) ] - - location: 66 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 68 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input51111414-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input51111414-.out deleted file mode 100644 index 92860118e833d268b66bfb917f8fe4e5da1136df..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input51111414-.out +++ /dev/null @@ -1,410 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contains_all.tz on storage None and input '(Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" })' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 32.647) - [ (Pair (Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" }) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" }) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" }) - (Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" }) ] - - location: 14 (just consumed gas: 0.010) - [ { "B" ; "B" ; "asdf" ; "C" } - (Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" }) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" }) ] - - location: 17 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } ] - - location: 15 (just consumed gas: 0.035) - [ { "B" ; "B" ; "asdf" ; "C" } - { "B" ; "C" ; "asdf" } ] - - location: 18 (just consumed gas: 0.300) - [ {} - { "B" ; "B" ; "asdf" ; "C" } - { "B" ; "C" ; "asdf" } ] - - location: 20 (just consumed gas: 0.010) - [ { "B" ; "B" ; "asdf" ; "C" } - {} - { "B" ; "C" ; "asdf" } ] - - location: 21 (just consumed gas: 0.030) - [ "B" - {} - { "B" ; "C" ; "asdf" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "B" {}) - { "B" ; "C" ; "asdf" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "B" {}) - (Pair "B" {}) - { "B" ; "C" ; "asdf" } ] - - location: 25 (just consumed gas: 0.010) - [ "B" - (Pair "B" {}) - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "B" {}) - { "B" ; "C" ; "asdf" } ] - - location: 28 (just consumed gas: 0.010) - [ {} - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.035) - [ "B" - {} - { "B" ; "C" ; "asdf" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "B" - {} - { "B" ; "C" ; "asdf" } ] - - location: 32 (just consumed gas: 0.010) - [ "B" - True - {} - { "B" ; "C" ; "asdf" } ] - - location: 33 (just consumed gas: 0.050) - [ { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 21 (just consumed gas: 0.025) - [ "B" - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "B" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "B" { "B" }) - (Pair "B" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 25 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "B" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 28 (just consumed gas: 0.010) - [ { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.035) - [ "B" - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "B" - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 32 (just consumed gas: 0.010) - [ "B" - True - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 33 (just consumed gas: 0.050) - [ { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 21 (just consumed gas: 0.025) - [ "asdf" - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" }) - (Pair "asdf" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 25 (just consumed gas: 0.010) - [ "asdf" - (Pair "asdf" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" }) - { "B" ; "C" ; "asdf" } ] - - location: 28 (just consumed gas: 0.010) - [ { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.035) - [ "asdf" - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "asdf" - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 32 (just consumed gas: 0.010) - [ "asdf" - True - { "B" } - { "B" ; "C" ; "asdf" } ] - - location: 33 (just consumed gas: 0.051) - [ { "B" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 21 (just consumed gas: 0.025) - [ "C" - { "B" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "asdf" }) - { "B" ; "C" ; "asdf" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "asdf" }) - (Pair "C" { "B" ; "asdf" }) - { "B" ; "C" ; "asdf" } ] - - location: 25 (just consumed gas: 0.010) - [ "C" - (Pair "C" { "B" ; "asdf" }) - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "asdf" }) - { "B" ; "C" ; "asdf" } ] - - location: 28 (just consumed gas: 0.010) - [ { "B" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 26 (just consumed gas: 0.035) - [ "C" - { "B" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "C" - { "B" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 32 (just consumed gas: 0.010) - [ "C" - True - { "B" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 33 (just consumed gas: 0.050) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 21 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 34 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } ] - - location: 37 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True - { "B" ; "C" ; "asdf" } ] - - location: 38 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - { "B" ; "C" ; "asdf" } ] - - location: 39 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.030) - [ "B" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "B" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.025) - [ "C" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "C" - (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "C" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.025) - [ "asdf" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "asdf" - (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "asdf" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.035) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 64 (just consumed gas: 0.010) - [ True ] - - location: 65 (just consumed gas: 0.010) - [ (Some True) ] - - location: 66 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 68 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input545734274-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input545734274-.out deleted file mode 100644 index e2f1ea3c017ab33e4f29d9b48b7a2bc87279f69f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input545734274-.out +++ /dev/null @@ -1,166 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contains_all.tz on storage None and input '(Pair { "A" } { "B" })' --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 31.962) - [ (Pair (Pair { "A" } { "B" }) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { "A" } { "B" }) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { "A" } { "B" }) - (Pair { "A" } { "B" }) ] - - location: 14 (just consumed gas: 0.010) - [ { "A" } - (Pair { "A" } { "B" }) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair { "A" } { "B" }) ] - - location: 17 (just consumed gas: 0.010) - [ { "B" } ] - - location: 15 (just consumed gas: 0.035) - [ { "A" } - { "B" } ] - - location: 18 (just consumed gas: 0.300) - [ {} - { "A" } - { "B" } ] - - location: 20 (just consumed gas: 0.010) - [ { "A" } - {} - { "B" } ] - - location: 21 (just consumed gas: 0.030) - [ "A" - {} - { "B" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "A" {}) - { "B" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "A" {}) - (Pair "A" {}) - { "B" } ] - - location: 25 (just consumed gas: 0.010) - [ "A" - (Pair "A" {}) - { "B" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "A" {}) - { "B" } ] - - location: 28 (just consumed gas: 0.010) - [ {} - { "B" } ] - - location: 26 (just consumed gas: 0.035) - [ "A" - {} - { "B" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "A" - {} - { "B" } ] - - location: 32 (just consumed gas: 0.010) - [ "A" - True - {} - { "B" } ] - - location: 33 (just consumed gas: 0.050) - [ { "A" } - { "B" } ] - - location: 21 (just consumed gas: 0.035) - [ { "A" } - { "B" } ] - - location: 34 (just consumed gas: 0.010) - [ True - { "A" } - { "B" } ] - - location: 37 (just consumed gas: 0.010) - [ { "A" } - True - { "B" } ] - - location: 38 (just consumed gas: 0.010) - [ (Pair { "A" } True) - { "B" } ] - - location: 39 (just consumed gas: 0.010) - [ { "B" } - (Pair { "A" } True) ] - - location: 40 (just consumed gas: 0.030) - [ "B" - (Pair { "A" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "B" { "A" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "B" { "A" } True) - (Pair "B" { "A" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "B" { "A" } True) - (Pair "B" { "A" } True) - (Pair "B" { "A" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "A" } True) - (Pair "B" { "A" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "B" { "A" } True) - (Pair "B" { "A" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "A" } True) - (Pair "B" { "A" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "A" } - (Pair "B" { "A" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "B" { "A" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "A" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "A" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "A" } - { "A" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "B" - { "A" } - { "A" } - True ] - - location: 57 (just consumed gas: 0.040) - [ False - { "A" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "A" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "A" } ] - - location: 58 (just consumed gas: 0.035) - [ False - True - { "A" } ] - - location: 61 (just consumed gas: 0.010) - [ False - { "A" } ] - - location: 62 (just consumed gas: 0.010) - [ { "A" } - False ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "A" } False) ] - - location: 40 (just consumed gas: 0.035) - [ (Pair { "A" } False) ] - - location: 64 (just consumed gas: 0.010) - [ False ] - - location: 65 (just consumed gas: 0.010) - [ (Some False) ] - - location: 66 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 68 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input772794967-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input772794967-.out deleted file mode 100644 index 9f89f7fc2522de49709112ef4b3db4356bc2fd18..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input772794967-.out +++ /dev/null @@ -1,63 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contains_all.tz on storage None and input '(Pair {} {})' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 31.712) - [ (Pair (Pair {} {}) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} {}) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} {}) - (Pair {} {}) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Pair {} {}) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair {} {}) ] - - location: 17 (just consumed gas: 0.010) - [ {} ] - - location: 15 (just consumed gas: 0.035) - [ {} - {} ] - - location: 18 (just consumed gas: 0.300) - [ {} - {} - {} ] - - location: 20 (just consumed gas: 0.010) - [ {} - {} - {} ] - - location: 21 (just consumed gas: 0.040) - [ {} - {} ] - - location: 34 (just consumed gas: 0.010) - [ True - {} - {} ] - - location: 37 (just consumed gas: 0.010) - [ {} - True - {} ] - - location: 38 (just consumed gas: 0.010) - [ (Pair {} True) - {} ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Pair {} True) ] - - location: 40 (just consumed gas: 0.040) - [ (Pair {} True) ] - - location: 64 (just consumed gas: 0.010) - [ True ] - - location: 65 (just consumed gas: 0.010) - [ (Some True) ] - - location: 66 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 68 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input917967660-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input917967660-.out deleted file mode 100644 index ff714ab7bbc6a784fd62f510a27a688e91d789f4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input917967660-.out +++ /dev/null @@ -1,437 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contains_all.tz on storage None and input '(Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" })' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 32.647) - [ (Pair (Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" }) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" }) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" }) - (Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" }) ] - - location: 14 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" }) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" }) ] - - location: 17 (just consumed gas: 0.010) - [ { "B" ; "B" ; "asdf" ; "C" } ] - - location: 15 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 18 (just consumed gas: 0.300) - [ {} - { "B" ; "C" ; "asdf" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 20 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - {} - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 21 (just consumed gas: 0.030) - [ "B" - {} - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "B" {}) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "B" {}) - (Pair "B" {}) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 25 (just consumed gas: 0.010) - [ "B" - (Pair "B" {}) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "B" {}) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 28 (just consumed gas: 0.010) - [ {} - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 26 (just consumed gas: 0.035) - [ "B" - {} - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "B" - {} - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 32 (just consumed gas: 0.010) - [ "B" - True - {} - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 33 (just consumed gas: 0.050) - [ { "B" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 21 (just consumed gas: 0.025) - [ "C" - { "B" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "C" { "B" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "C" { "B" }) - (Pair "C" { "B" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 25 (just consumed gas: 0.010) - [ "C" - (Pair "C" { "B" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "C" { "B" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 28 (just consumed gas: 0.010) - [ { "B" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 26 (just consumed gas: 0.035) - [ "C" - { "B" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "C" - { "B" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 32 (just consumed gas: 0.010) - [ "C" - True - { "B" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 33 (just consumed gas: 0.050) - [ { "B" ; "C" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 21 (just consumed gas: 0.025) - [ "asdf" - { "B" ; "C" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" }) - (Pair "asdf" { "B" ; "C" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 25 (just consumed gas: 0.010) - [ "asdf" - (Pair "asdf" { "B" ; "C" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" }) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 28 (just consumed gas: 0.010) - [ { "B" ; "C" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 26 (just consumed gas: 0.035) - [ "asdf" - { "B" ; "C" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "asdf" - { "B" ; "C" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 32 (just consumed gas: 0.010) - [ "asdf" - True - { "B" ; "C" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 33 (just consumed gas: 0.051) - [ { "B" ; "C" ; "asdf" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 21 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 34 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 37 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 38 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - { "B" ; "B" ; "asdf" ; "C" } ] - - location: 39 (just consumed gas: 0.010) - [ { "B" ; "B" ; "asdf" ; "C" } - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.030) - [ "B" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "B" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.025) - [ "B" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "B" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "B" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.025) - [ "asdf" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "asdf" - (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "asdf" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "asdf" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.025) - [ "C" - (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "C" - (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "C" { "B" ; "C" ; "asdf" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "C" - { "B" ; "C" ; "asdf" } - { "B" ; "C" ; "asdf" } - True ] - - location: 57 (just consumed gas: 0.040) - [ True - { "B" ; "C" ; "asdf" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 58 (just consumed gas: 0.035) - [ True - True - { "B" ; "C" ; "asdf" } ] - - location: 61 (just consumed gas: 0.010) - [ True - { "B" ; "C" ; "asdf" } ] - - location: 62 (just consumed gas: 0.010) - [ { "B" ; "C" ; "asdf" } - True ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 40 (just consumed gas: 0.035) - [ (Pair { "B" ; "C" ; "asdf" } True) ] - - location: 64 (just consumed gas: 0.010) - [ True ] - - location: 65 (just consumed gas: 0.010) - [ (Some True) ] - - location: 66 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 68 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input964818218-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input964818218-.out deleted file mode 100644 index cb81123f6b8ddcddfe5494bee49985a9bd58d51a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contains_all--storage921624073--input964818218-.out +++ /dev/null @@ -1,166 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contains_all.tz on storage None and input '(Pair { "c" } { "B" })' --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 31.962) - [ (Pair (Pair { "c" } { "B" }) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { "c" } { "B" }) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { "c" } { "B" }) - (Pair { "c" } { "B" }) ] - - location: 14 (just consumed gas: 0.010) - [ { "c" } - (Pair { "c" } { "B" }) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair { "c" } { "B" }) ] - - location: 17 (just consumed gas: 0.010) - [ { "B" } ] - - location: 15 (just consumed gas: 0.035) - [ { "c" } - { "B" } ] - - location: 18 (just consumed gas: 0.300) - [ {} - { "c" } - { "B" } ] - - location: 20 (just consumed gas: 0.010) - [ { "c" } - {} - { "B" } ] - - location: 21 (just consumed gas: 0.030) - [ "c" - {} - { "B" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair "c" {}) - { "B" } ] - - location: 24 (just consumed gas: 0.010) - [ (Pair "c" {}) - (Pair "c" {}) - { "B" } ] - - location: 25 (just consumed gas: 0.010) - [ "c" - (Pair "c" {}) - { "B" } ] - - location: 26 (just consumed gas: 0.010) - [ (Pair "c" {}) - { "B" } ] - - location: 28 (just consumed gas: 0.010) - [ {} - { "B" } ] - - location: 26 (just consumed gas: 0.035) - [ "c" - {} - { "B" } ] - - location: 29 (just consumed gas: 0.010) - [ True - "c" - {} - { "B" } ] - - location: 32 (just consumed gas: 0.010) - [ "c" - True - {} - { "B" } ] - - location: 33 (just consumed gas: 0.050) - [ { "c" } - { "B" } ] - - location: 21 (just consumed gas: 0.035) - [ { "c" } - { "B" } ] - - location: 34 (just consumed gas: 0.010) - [ True - { "c" } - { "B" } ] - - location: 37 (just consumed gas: 0.010) - [ { "c" } - True - { "B" } ] - - location: 38 (just consumed gas: 0.010) - [ (Pair { "c" } True) - { "B" } ] - - location: 39 (just consumed gas: 0.010) - [ { "B" } - (Pair { "c" } True) ] - - location: 40 (just consumed gas: 0.030) - [ "B" - (Pair { "c" } True) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair "B" { "c" } True) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair "B" { "c" } True) - (Pair "B" { "c" } True) ] - - location: 44 (just consumed gas: 0.010) - [ (Pair "B" { "c" } True) - (Pair "B" { "c" } True) - (Pair "B" { "c" } True) ] - - location: 45 (just consumed gas: 0.010) - [ "B" - (Pair "B" { "c" } True) - (Pair "B" { "c" } True) ] - - location: 46 (just consumed gas: 0.010) - [ (Pair "B" { "c" } True) - (Pair "B" { "c" } True) ] - - location: 49 (just consumed gas: 0.010) - [ (Pair { "c" } True) - (Pair "B" { "c" } True) ] - - location: 50 (just consumed gas: 0.010) - [ { "c" } - (Pair "B" { "c" } True) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair "B" { "c" } True) ] - - location: 54 (just consumed gas: 0.010) - [ (Pair { "c" } True) ] - - location: 55 (just consumed gas: 0.010) - [ True ] - - location: 51 (just consumed gas: 0.035) - [ { "c" } - True ] - - location: 56 (just consumed gas: 0.010) - [ { "c" } - { "c" } - True ] - - location: 46 (just consumed gas: 0.035) - [ "B" - { "c" } - { "c" } - True ] - - location: 57 (just consumed gas: 0.040) - [ False - { "c" } - True ] - - location: 58 (just consumed gas: 0.010) - [ { "c" } - True ] - - location: 60 (just consumed gas: 0.010) - [ True - { "c" } ] - - location: 58 (just consumed gas: 0.035) - [ False - True - { "c" } ] - - location: 61 (just consumed gas: 0.010) - [ False - { "c" } ] - - location: 62 (just consumed gas: 0.010) - [ { "c" } - False ] - - location: 63 (just consumed gas: 0.010) - [ (Pair { "c" } False) ] - - location: 40 (just consumed gas: 0.035) - [ (Pair { "c" } False) ] - - location: 64 (just consumed gas: 0.010) - [ False ] - - location: 65 (just consumed gas: 0.010) - [ (Some False) ] - - location: 66 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 68 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contract--storage125992234--input117475800-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contract--storage125992234--input117475800-.out deleted file mode 100644 index 0ba5b79197df58626db488155a86a8241512b631..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -contract--storage125992234--input117475800-.out +++ /dev/null @@ -1,29 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/contract.tz on storage Unit and input '"tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5"' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 11.830) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" Unit) ] - - location: 7 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 8 (just consumed gas: 0.307) - [ (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 11 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 11 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 17 (just consumed gas: 0.010) - [ ] - - location: 18 (just consumed gas: 0.010) - [ Unit ] - - location: 19 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -create_contract--storage921624073--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -create_contract--storage921624073--input125992234-.out deleted file mode 100644 index 8cec5da598b8c84df662fee13ed610cf4acc5768..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -create_contract--storage921624073--input125992234-.out +++ /dev/null @@ -1,49 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/create_contract.tz on storage None and input Unit --level 1 --trace-stack -storage - (Some "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm") -emitted operations - Internal Origination: - From: KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi - Credit: ꜩ0.05 - Script: - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract -big_map diff - -trace - - location: 8 (just consumed gas: 11.525) - [ (Pair Unit None) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.010) - [ Unit ] - - location: 10 (just consumed gas: 0.010) - [ 50000 - Unit ] - - location: 11 (just consumed gas: 0.010) - [ None - 50000 - Unit ] - - location: 13 (just consumed gas: 0.716) - [ 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000002d08603000000001c02000000170500036c0501036c050202000000080317053d036d034200000002030b - "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm" ] - - location: 25 (just consumed gas: 0.010) - [ "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm" ] - - location: 27 (just consumed gas: 0.010) - [ (Some "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm") ] - - location: 28 (just consumed gas: 0.010) - [ {} - (Some "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm") ] - - location: 25 (just consumed gas: 0.035) - [ 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000002d08603000000001c02000000170500036c0501036c050202000000080317053d036d034200000002030b - {} - (Some "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm") ] - - location: 30 (just consumed gas: 0.010) - [ { 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000002d08603000000001c02000000170500036c0501036c050202000000080317053d036d034200000002030b } - (Some "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm") ] - - location: 31 (just consumed gas: 0.010) - [ (Pair { 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000002d08603000000001c02000000170500036c0501036c050202000000080317053d036d034200000002030b } - (Some "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1011138251-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1011138251-.out deleted file mode 100644 index 37bc47bf4c9b095d9c8356596b3b2c3d7eecc922..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1011138251-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/diff_timestamps.tz on storage 111 and input '(Pair 0 0)' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.334) - [ (Pair (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:00Z") 111) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:00Z") ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:00Z") - (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:00Z") ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" - (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:00Z") ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:00Z") ] - - location: 14 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" - "1970-01-01T00:00:00Z" ] - - location: 15 (just consumed gas: 0.035) - [ 0 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1018564342-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1018564342-.out deleted file mode 100644 index 7ee1c31079e7f00e64d472023a7f4fa029032b7d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1018564342-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/diff_timestamps.tz on storage 111 and input '(Pair 0 1)' --level 1 --trace-stack -storage - -1 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.334) - [ (Pair (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:01Z") 111) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:01Z") ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:01Z") - (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:01Z") ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" - (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:01Z") ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:00Z" "1970-01-01T00:00:01Z") ] - - location: 14 (just consumed gas: 0.010) - [ "1970-01-01T00:00:01Z" ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" - "1970-01-01T00:00:01Z" ] - - location: 15 (just consumed gas: 0.035) - [ -1 ] - - location: 16 (just consumed gas: 0.010) - [ {} - -1 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} -1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1031049988-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1031049988-.out deleted file mode 100644 index c60eea4139cb612a237fe0dbefd4debc892d097a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input1031049988-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/diff_timestamps.tz on storage 111 and input '(Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z")' --level 1 --trace-stack -storage - 200 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.550) - [ (Pair (Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z") 111) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z") ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z") - (Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z") ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:03:20Z" - (Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z") ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z") ] - - location: 14 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:03:20Z" - "1970-01-01T00:00:00Z" ] - - location: 15 (just consumed gas: 0.035) - [ 200 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 200 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 200) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input685590443-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input685590443-.out deleted file mode 100644 index d443ac84133b54eb14472e916f51ff5e9791afed..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -diff_timestamps--storage492856247--input685590443-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/diff_timestamps.tz on storage 111 and input '(Pair 1 0)' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.334) - [ (Pair (Pair "1970-01-01T00:00:01Z" "1970-01-01T00:00:00Z") 111) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:01Z" "1970-01-01T00:00:00Z") ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:01Z" "1970-01-01T00:00:00Z") - (Pair "1970-01-01T00:00:01Z" "1970-01-01T00:00:00Z") ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:00:01Z" - (Pair "1970-01-01T00:00:01Z" "1970-01-01T00:00:00Z") ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:00:01Z" "1970-01-01T00:00:00Z") ] - - location: 14 (just consumed gas: 0.010) - [ "1970-01-01T00:00:00Z" ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:00:01Z" - "1970-01-01T00:00:00Z" ] - - location: 15 (just consumed gas: 0.035) - [ 1 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dig_eq--storage125992234--input246866101-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dig_eq--storage125992234--input246866101-.out deleted file mode 100644 index d87309998c9d158edd1919fc3da834bfdad1a87d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dig_eq--storage125992234--input246866101-.out +++ /dev/null @@ -1,1240 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dig_eq.tz on storage Unit and input '(Pair 17 (Pair 16 (Pair 15 (Pair 14 (Pair 13 (Pair 12 (Pair 11 (Pair 10 (Pair 9 (Pair 8 (Pair 7 (Pair 6 (Pair 5 (Pair 4 (Pair 3 (Pair 2 1))))))))))))))))' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 24 (just consumed gas: 158.486) - [ (Pair (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) Unit) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 27 (just consumed gas: 0.010) - [ 17 - (Pair 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 28 (just consumed gas: 0.010) - [ (Pair 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 30 (just consumed gas: 0.010) - [ 16 - (Pair 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 28 (just consumed gas: 0.035) - [ 17 - 16 - (Pair 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 31 (just consumed gas: 0.023) - [ (Pair 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 34 (just consumed gas: 0.010) - [ 15 - (Pair 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 31 (just consumed gas: 0.045) - [ 17 - 16 - 15 - (Pair 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 35 (just consumed gas: 0.027) - [ (Pair 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 38 (just consumed gas: 0.010) - [ 14 - (Pair 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 35 (just consumed gas: 0.055) - [ 17 - 16 - 15 - 14 - (Pair 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 39 (just consumed gas: 0.031) - [ (Pair 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 42 (just consumed gas: 0.010) - [ 13 - (Pair 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 39 (just consumed gas: 0.065) - [ 17 - 16 - 15 - 14 - 13 - (Pair 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 43 (just consumed gas: 0.035) - [ (Pair 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 46 (just consumed gas: 0.010) - [ 12 - (Pair 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 43 (just consumed gas: 0.075) - [ 17 - 16 - 15 - 14 - 13 - 12 - (Pair 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 47 (just consumed gas: 0.039) - [ (Pair 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 50 (just consumed gas: 0.010) - [ 11 - (Pair 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 47 (just consumed gas: 0.085) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - (Pair 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 51 (just consumed gas: 0.043) - [ (Pair 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 54 (just consumed gas: 0.010) - [ 10 - (Pair 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 51 (just consumed gas: 0.095) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - (Pair 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 55 (just consumed gas: 0.047) - [ (Pair 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 58 (just consumed gas: 0.010) - [ 9 - (Pair 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 55 (just consumed gas: 0.105) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - (Pair 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 59 (just consumed gas: 0.051) - [ (Pair 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 62 (just consumed gas: 0.010) - [ 8 - (Pair 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 59 (just consumed gas: 0.115) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - (Pair 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 63 (just consumed gas: 0.055) - [ (Pair 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 66 (just consumed gas: 0.010) - [ 7 - (Pair 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 63 (just consumed gas: 0.125) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - (Pair 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 67 (just consumed gas: 0.059) - [ (Pair 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 70 (just consumed gas: 0.010) - [ 6 - (Pair 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 67 (just consumed gas: 0.135) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - (Pair 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 71 (just consumed gas: 0.063) - [ (Pair 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 74 (just consumed gas: 0.010) - [ 5 - (Pair 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 71 (just consumed gas: 0.145) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - (Pair 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 75 (just consumed gas: 0.067) - [ (Pair 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 78 (just consumed gas: 0.010) - [ 4 - (Pair 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 75 (just consumed gas: 0.155) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - (Pair 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 79 (just consumed gas: 0.071) - [ (Pair 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 82 (just consumed gas: 0.010) - [ 3 - (Pair 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 79 (just consumed gas: 0.165) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - (Pair 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 83 (just consumed gas: 0.075) - [ (Pair 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 86 (just consumed gas: 0.010) - [ 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 83 (just consumed gas: 0.175) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 87 (just consumed gas: 0.030) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 89 (just consumed gas: 0.036) - [ 16 - 17 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 91 (just consumed gas: 0.043) - [ 15 - 16 - 17 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 93 (just consumed gas: 0.049) - [ 14 - 15 - 16 - 17 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 95 (just consumed gas: 0.057) - [ 13 - 14 - 15 - 16 - 17 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 97 (just consumed gas: 0.063) - [ 12 - 13 - 14 - 15 - 16 - 17 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 99 (just consumed gas: 0.070) - [ 11 - 12 - 13 - 14 - 15 - 16 - 17 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 101 (just consumed gas: 0.076) - [ 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 103 (just consumed gas: 0.084) - [ 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 105 (just consumed gas: 0.090) - [ 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 107 (just consumed gas: 0.097) - [ 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 109 (just consumed gas: 0.103) - [ 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 111 (just consumed gas: 0.111) - [ 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 113 (just consumed gas: 0.117) - [ 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 115 (just consumed gas: 0.124) - [ 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 117 (just consumed gas: 0.130) - [ 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 119 (just consumed gas: 0.138) - [ 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 121 (just consumed gas: 0.030) - [ 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 123 (just consumed gas: 0.036) - [ 2 - 1 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 125 (just consumed gas: 0.043) - [ 3 - 2 - 1 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 127 (just consumed gas: 0.049) - [ 4 - 3 - 2 - 1 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 129 (just consumed gas: 0.057) - [ 5 - 4 - 3 - 2 - 1 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 131 (just consumed gas: 0.063) - [ 6 - 5 - 4 - 3 - 2 - 1 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 133 (just consumed gas: 0.070) - [ 7 - 6 - 5 - 4 - 3 - 2 - 1 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 135 (just consumed gas: 0.076) - [ 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 137 (just consumed gas: 0.084) - [ 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 139 (just consumed gas: 0.090) - [ 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 141 (just consumed gas: 0.097) - [ 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 12 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 143 (just consumed gas: 0.103) - [ 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 13 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 145 (just consumed gas: 0.111) - [ 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 14 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 147 (just consumed gas: 0.117) - [ 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 15 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 149 (just consumed gas: 0.124) - [ 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 16 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 151 (just consumed gas: 0.130) - [ 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 17 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 153 (just consumed gas: 0.138) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 156 (just consumed gas: 0.075) - [ 2 - 1 - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 159 (just consumed gas: 0.010) - [ (Pair 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 156 (just consumed gas: 0.175) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - (Pair 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 160 (just consumed gas: 0.071) - [ 3 - (Pair 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 163 (just consumed gas: 0.010) - [ (Pair 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 160 (just consumed gas: 0.165) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - (Pair 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 164 (just consumed gas: 0.067) - [ 4 - (Pair 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 167 (just consumed gas: 0.010) - [ (Pair 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 164 (just consumed gas: 0.155) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - (Pair 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 168 (just consumed gas: 0.063) - [ 5 - (Pair 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 171 (just consumed gas: 0.010) - [ (Pair 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 168 (just consumed gas: 0.145) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - (Pair 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 172 (just consumed gas: 0.059) - [ 6 - (Pair 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 175 (just consumed gas: 0.010) - [ (Pair 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 172 (just consumed gas: 0.135) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - (Pair 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 176 (just consumed gas: 0.055) - [ 7 - (Pair 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 179 (just consumed gas: 0.010) - [ (Pair 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 176 (just consumed gas: 0.125) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - (Pair 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 180 (just consumed gas: 0.051) - [ 8 - (Pair 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 183 (just consumed gas: 0.010) - [ (Pair 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 180 (just consumed gas: 0.115) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - (Pair 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 184 (just consumed gas: 0.047) - [ 9 - (Pair 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 187 (just consumed gas: 0.010) - [ (Pair 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 184 (just consumed gas: 0.105) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - (Pair 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 188 (just consumed gas: 0.043) - [ 10 - (Pair 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 191 (just consumed gas: 0.010) - [ (Pair 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 188 (just consumed gas: 0.095) - [ 17 - 16 - 15 - 14 - 13 - 12 - 11 - (Pair 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 192 (just consumed gas: 0.039) - [ 11 - (Pair 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 195 (just consumed gas: 0.010) - [ (Pair 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 192 (just consumed gas: 0.085) - [ 17 - 16 - 15 - 14 - 13 - 12 - (Pair 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 196 (just consumed gas: 0.035) - [ 12 - (Pair 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 199 (just consumed gas: 0.010) - [ (Pair 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 196 (just consumed gas: 0.075) - [ 17 - 16 - 15 - 14 - 13 - (Pair 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 200 (just consumed gas: 0.031) - [ 13 - (Pair 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 203 (just consumed gas: 0.010) - [ (Pair 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 200 (just consumed gas: 0.065) - [ 17 - 16 - 15 - 14 - (Pair 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 204 (just consumed gas: 0.027) - [ 14 - (Pair 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 207 (just consumed gas: 0.010) - [ (Pair 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 204 (just consumed gas: 0.055) - [ 17 - 16 - 15 - (Pair 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 208 (just consumed gas: 0.023) - [ 15 - (Pair 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 211 (just consumed gas: 0.010) - [ (Pair 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 208 (just consumed gas: 0.045) - [ 17 - 16 - (Pair 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 212 (just consumed gas: 0.010) - [ 16 - (Pair 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 214 (just consumed gas: 0.010) - [ (Pair 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 212 (just consumed gas: 0.035) - [ 17 - (Pair 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 215 (just consumed gas: 0.010) - [ (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) - (Pair 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) ] - - location: 218 (just consumed gas: 0.755) - [ 0 ] - - location: 219 (just consumed gas: 0.010) - [ True ] - - location: 220 (just consumed gas: 0.010) - [ ] - - location: 220 (just consumed gas: 0.025) - [ ] - - location: 226 (just consumed gas: 0.010) - [ Unit ] - - location: 227 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 229 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dig_eq--storage125992234--input26856104-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dig_eq--storage125992234--input26856104-.out deleted file mode 100644 index af58c833f986b4254e23b20577891cc84e4ed775..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dig_eq--storage125992234--input26856104-.out +++ /dev/null @@ -1,1240 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dig_eq.tz on storage Unit and input '(Pair 2 (Pair 3 (Pair 12 (Pair 16 (Pair 10 (Pair 14 (Pair 19 (Pair 9 (Pair 18 (Pair 6 (Pair 8 (Pair 11 (Pair 4 (Pair 13 (Pair 15 (Pair 5 1))))))))))))))))' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 24 (just consumed gas: 158.486) - [ (Pair (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) Unit) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 27 (just consumed gas: 0.010) - [ 2 - (Pair 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 28 (just consumed gas: 0.010) - [ (Pair 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 30 (just consumed gas: 0.010) - [ 3 - (Pair 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 28 (just consumed gas: 0.035) - [ 2 - 3 - (Pair 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 31 (just consumed gas: 0.023) - [ (Pair 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 34 (just consumed gas: 0.010) - [ 12 - (Pair 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 31 (just consumed gas: 0.045) - [ 2 - 3 - 12 - (Pair 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 35 (just consumed gas: 0.027) - [ (Pair 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 38 (just consumed gas: 0.010) - [ 16 - (Pair 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 35 (just consumed gas: 0.055) - [ 2 - 3 - 12 - 16 - (Pair 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 39 (just consumed gas: 0.031) - [ (Pair 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 42 (just consumed gas: 0.010) - [ 10 - (Pair 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 39 (just consumed gas: 0.065) - [ 2 - 3 - 12 - 16 - 10 - (Pair 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 43 (just consumed gas: 0.035) - [ (Pair 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 46 (just consumed gas: 0.010) - [ 14 - (Pair 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 43 (just consumed gas: 0.075) - [ 2 - 3 - 12 - 16 - 10 - 14 - (Pair 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 47 (just consumed gas: 0.039) - [ (Pair 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 50 (just consumed gas: 0.010) - [ 19 - (Pair 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 47 (just consumed gas: 0.085) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - (Pair 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 51 (just consumed gas: 0.043) - [ (Pair 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 54 (just consumed gas: 0.010) - [ 9 - (Pair 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 51 (just consumed gas: 0.095) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - (Pair 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 55 (just consumed gas: 0.047) - [ (Pair 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 58 (just consumed gas: 0.010) - [ 18 - (Pair 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 55 (just consumed gas: 0.105) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - (Pair 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 59 (just consumed gas: 0.051) - [ (Pair 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 62 (just consumed gas: 0.010) - [ 6 - (Pair 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 59 (just consumed gas: 0.115) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - (Pair 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 63 (just consumed gas: 0.055) - [ (Pair 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 66 (just consumed gas: 0.010) - [ 8 - (Pair 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 63 (just consumed gas: 0.125) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - (Pair 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 67 (just consumed gas: 0.059) - [ (Pair 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 70 (just consumed gas: 0.010) - [ 11 - (Pair 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 67 (just consumed gas: 0.135) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - (Pair 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 71 (just consumed gas: 0.063) - [ (Pair 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 74 (just consumed gas: 0.010) - [ 4 - (Pair 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 71 (just consumed gas: 0.145) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - (Pair 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 75 (just consumed gas: 0.067) - [ (Pair 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 78 (just consumed gas: 0.010) - [ 13 - (Pair 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 75 (just consumed gas: 0.155) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - (Pair 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 79 (just consumed gas: 0.071) - [ (Pair 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 82 (just consumed gas: 0.010) - [ 15 - (Pair 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 79 (just consumed gas: 0.165) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - (Pair 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 83 (just consumed gas: 0.075) - [ (Pair 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 86 (just consumed gas: 0.010) - [ 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 83 (just consumed gas: 0.175) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 87 (just consumed gas: 0.030) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 89 (just consumed gas: 0.036) - [ 3 - 2 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 91 (just consumed gas: 0.043) - [ 12 - 3 - 2 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 93 (just consumed gas: 0.049) - [ 16 - 12 - 3 - 2 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 95 (just consumed gas: 0.057) - [ 10 - 16 - 12 - 3 - 2 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 97 (just consumed gas: 0.063) - [ 14 - 10 - 16 - 12 - 3 - 2 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 99 (just consumed gas: 0.070) - [ 19 - 14 - 10 - 16 - 12 - 3 - 2 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 101 (just consumed gas: 0.076) - [ 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 103 (just consumed gas: 0.084) - [ 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 105 (just consumed gas: 0.090) - [ 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 107 (just consumed gas: 0.097) - [ 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 109 (just consumed gas: 0.103) - [ 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 111 (just consumed gas: 0.111) - [ 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 113 (just consumed gas: 0.117) - [ 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 115 (just consumed gas: 0.124) - [ 15 - 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 117 (just consumed gas: 0.130) - [ 5 - 15 - 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 119 (just consumed gas: 0.138) - [ 1 - 5 - 15 - 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 121 (just consumed gas: 0.030) - [ 1 - 5 - 15 - 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 123 (just consumed gas: 0.036) - [ 5 - 1 - 15 - 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 125 (just consumed gas: 0.043) - [ 15 - 5 - 1 - 13 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 127 (just consumed gas: 0.049) - [ 13 - 15 - 5 - 1 - 4 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 129 (just consumed gas: 0.057) - [ 4 - 13 - 15 - 5 - 1 - 11 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 131 (just consumed gas: 0.063) - [ 11 - 4 - 13 - 15 - 5 - 1 - 8 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 133 (just consumed gas: 0.070) - [ 8 - 11 - 4 - 13 - 15 - 5 - 1 - 6 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 135 (just consumed gas: 0.076) - [ 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 18 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 137 (just consumed gas: 0.084) - [ 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 9 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 139 (just consumed gas: 0.090) - [ 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 19 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 141 (just consumed gas: 0.097) - [ 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 14 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 143 (just consumed gas: 0.103) - [ 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 10 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 145 (just consumed gas: 0.111) - [ 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 16 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 147 (just consumed gas: 0.117) - [ 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 12 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 149 (just consumed gas: 0.124) - [ 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 3 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 151 (just consumed gas: 0.130) - [ 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - 2 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 153 (just consumed gas: 0.138) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 156 (just consumed gas: 0.075) - [ 5 - 1 - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 159 (just consumed gas: 0.010) - [ (Pair 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 156 (just consumed gas: 0.175) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - 15 - (Pair 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 160 (just consumed gas: 0.071) - [ 15 - (Pair 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 163 (just consumed gas: 0.010) - [ (Pair 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 160 (just consumed gas: 0.165) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - 13 - (Pair 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 164 (just consumed gas: 0.067) - [ 13 - (Pair 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 167 (just consumed gas: 0.010) - [ (Pair 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 164 (just consumed gas: 0.155) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - 4 - (Pair 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 168 (just consumed gas: 0.063) - [ 4 - (Pair 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 171 (just consumed gas: 0.010) - [ (Pair 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 168 (just consumed gas: 0.145) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - 11 - (Pair 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 172 (just consumed gas: 0.059) - [ 11 - (Pair 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 175 (just consumed gas: 0.010) - [ (Pair 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 172 (just consumed gas: 0.135) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - 8 - (Pair 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 176 (just consumed gas: 0.055) - [ 8 - (Pair 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 179 (just consumed gas: 0.010) - [ (Pair 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 176 (just consumed gas: 0.125) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - 6 - (Pair 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 180 (just consumed gas: 0.051) - [ 6 - (Pair 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 183 (just consumed gas: 0.010) - [ (Pair 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 180 (just consumed gas: 0.115) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - 18 - (Pair 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 184 (just consumed gas: 0.047) - [ 18 - (Pair 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 187 (just consumed gas: 0.010) - [ (Pair 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 184 (just consumed gas: 0.105) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - 9 - (Pair 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 188 (just consumed gas: 0.043) - [ 9 - (Pair 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 191 (just consumed gas: 0.010) - [ (Pair 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 188 (just consumed gas: 0.095) - [ 2 - 3 - 12 - 16 - 10 - 14 - 19 - (Pair 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 192 (just consumed gas: 0.039) - [ 19 - (Pair 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 195 (just consumed gas: 0.010) - [ (Pair 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 192 (just consumed gas: 0.085) - [ 2 - 3 - 12 - 16 - 10 - 14 - (Pair 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 196 (just consumed gas: 0.035) - [ 14 - (Pair 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 199 (just consumed gas: 0.010) - [ (Pair 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 196 (just consumed gas: 0.075) - [ 2 - 3 - 12 - 16 - 10 - (Pair 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 200 (just consumed gas: 0.031) - [ 10 - (Pair 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 203 (just consumed gas: 0.010) - [ (Pair 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 200 (just consumed gas: 0.065) - [ 2 - 3 - 12 - 16 - (Pair 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 204 (just consumed gas: 0.027) - [ 16 - (Pair 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 207 (just consumed gas: 0.010) - [ (Pair 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 204 (just consumed gas: 0.055) - [ 2 - 3 - 12 - (Pair 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 208 (just consumed gas: 0.023) - [ 12 - (Pair 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 211 (just consumed gas: 0.010) - [ (Pair 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 208 (just consumed gas: 0.045) - [ 2 - 3 - (Pair 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 212 (just consumed gas: 0.010) - [ 3 - (Pair 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 214 (just consumed gas: 0.010) - [ (Pair 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 212 (just consumed gas: 0.035) - [ 2 - (Pair 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 215 (just consumed gas: 0.010) - [ (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) - (Pair 2 3 12 16 10 14 19 9 18 6 8 11 4 13 15 5 1) ] - - location: 218 (just consumed gas: 0.755) - [ 0 ] - - location: 219 (just consumed gas: 0.010) - [ True ] - - location: 220 (just consumed gas: 0.010) - [ ] - - location: 220 (just consumed gas: 0.025) - [ ] - - location: 226 (just consumed gas: 0.010) - [ Unit ] - - location: 227 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 229 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dign--storage680650890--input529388602-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dign--storage680650890--input529388602-.out deleted file mode 100644 index fc8649964c9ed303980ea9e09ca868fb89736ccb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dign--storage680650890--input529388602-.out +++ /dev/null @@ -1,61 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dign.tz on storage 0 and input '(Pair (Pair (Pair (Pair 1 2) 3) 4) 5)' --level 1 --trace-stack -storage - 5 -emitted operations - -big_map diff - -trace - - location: 15 (just consumed gas: 12.008) - [ (Pair (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) 0) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair (Pair (Pair 1 2) 3) 4) - 5 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair (Pair 1 2) 3) - 4 - 5 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 1 2) - 3 - 4 - 5 ] - - location: 19 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 20 (just consumed gas: 0.057) - [ 5 - 1 - 2 - 3 - 4 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 ] - - location: 24 (just consumed gas: 0.010) - [ 2 - 3 - 4 ] - - location: 25 (just consumed gas: 0.010) - [ 3 - 4 ] - - location: 26 (just consumed gas: 0.010) - [ 4 ] - - location: 27 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.035) - [ 5 ] - - location: 28 (just consumed gas: 0.010) - [ {} - 5 ] - - location: 30 (just consumed gas: 0.010) - [ (Pair {} 5) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dip--storage1011138251--input590117173-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dip--storage1011138251--input590117173-.out deleted file mode 100644 index 2fd1b60b9511bdb0bc42ea1959f2624cf2651579..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dip--storage1011138251--input590117173-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dip.tz on storage '(Pair 0 0)' and input '(Pair 1 1)' --level 1 --trace-stack -storage - (Pair 1 2) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 7.735) - [ (Pair (Pair 1 1) 0 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 1 1) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 13 (just consumed gas: 0.010) - [ 1 - 1 - 1 ] - - location: 14 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 16 (just consumed gas: 0.035) - [ 2 ] - - location: 14 (just consumed gas: 0.035) - [ 1 - 2 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 1 2) ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Pair 1 2) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} 1 2) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dip--storage1011138251--input850887554-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dip--storage1011138251--input850887554-.out deleted file mode 100644 index e32196732a37333daa21017599a97d74fe98c0e3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dip--storage1011138251--input850887554-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dip.tz on storage '(Pair 0 0)' and input '(Pair 15 9)' --level 1 --trace-stack -storage - (Pair 15 24) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 7.735) - [ (Pair (Pair 15 9) 0 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 15 9) ] - - location: 12 (just consumed gas: 0.010) - [ 15 - 9 ] - - location: 13 (just consumed gas: 0.010) - [ 15 - 15 - 9 ] - - location: 14 (just consumed gas: 0.010) - [ 15 - 9 ] - - location: 16 (just consumed gas: 0.035) - [ 24 ] - - location: 14 (just consumed gas: 0.035) - [ 15 - 24 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 15 24) ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Pair 15 24) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} 15 24) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dipn--storage680650890--input529388602-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dipn--storage680650890--input529388602-.out deleted file mode 100644 index 2de12d9512bbe291c8a60382e91965982419ca66..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dipn--storage680650890--input529388602-.out +++ /dev/null @@ -1,68 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dipn.tz on storage 0 and input '(Pair (Pair (Pair (Pair 1 2) 3) 4) 5)' --level 1 --trace-stack -storage - 6 -emitted operations - -big_map diff - -trace - - location: 15 (just consumed gas: 13.118) - [ (Pair (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) 0) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair (Pair (Pair 1 2) 3) 4) - 5 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair (Pair 1 2) 3) - 4 - 5 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 1 2) - 3 - 4 - 5 ] - - location: 19 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 20 (just consumed gas: 0.035) - [ ] - - location: 23 (just consumed gas: 0.010) - [ 6 ] - - location: 20 (just consumed gas: 0.075) - [ 1 - 2 - 3 - 4 - 5 - 6 ] - - location: 26 (just consumed gas: 0.010) - [ 2 - 3 - 4 - 5 - 6 ] - - location: 27 (just consumed gas: 0.010) - [ 3 - 4 - 5 - 6 ] - - location: 28 (just consumed gas: 0.010) - [ 4 - 5 - 6 ] - - location: 29 (just consumed gas: 0.010) - [ 5 - 6 ] - - location: 30 (just consumed gas: 0.010) - [ 6 ] - - location: 31 (just consumed gas: 0.010) - [ {} - 6 ] - - location: 33 (just consumed gas: 0.010) - [ (Pair {} 6) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dropn--storage680650890--input529388602-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dropn--storage680650890--input529388602-.out deleted file mode 100644 index ff1db2833a01b442be3c08d1b2cf28b3a4b2afdb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dropn--storage680650890--input529388602-.out +++ /dev/null @@ -1,39 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dropn.tz on storage 0 and input '(Pair (Pair (Pair (Pair 1 2) 3) 4) 5)' --level 1 --trace-stack -storage - 5 -emitted operations - -big_map diff - -trace - - location: 15 (just consumed gas: 8.950) - [ (Pair (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) 0) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair (Pair (Pair 1 2) 3) 4) - 5 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair (Pair 1 2) 3) - 4 - 5 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 1 2) - 3 - 4 - 5 ] - - location: 19 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 20 (just consumed gas: 0.040) - [ 5 ] - - location: 22 (just consumed gas: 0.010) - [ {} - 5 ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} 5) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dugn--storage680650890--input529388602-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dugn--storage680650890--input529388602-.out deleted file mode 100644 index 30e7992786c606b709c8f0fcecc724e472b39764..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dugn--storage680650890--input529388602-.out +++ /dev/null @@ -1,57 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dugn.tz on storage 0 and input '(Pair (Pair (Pair (Pair 1 2) 3) 4) 5)' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 15 (just consumed gas: 11.184) - [ (Pair (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) 0) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair (Pair (Pair (Pair 1 2) 3) 4) 5) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair (Pair (Pair 1 2) 3) 4) - 5 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair (Pair 1 2) 3) - 4 - 5 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 1 2) - 3 - 4 - 5 ] - - location: 19 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 20 (just consumed gas: 0.062) - [ 2 - 3 - 4 - 5 - 1 ] - - location: 22 (just consumed gas: 0.010) - [ 3 - 4 - 5 - 1 ] - - location: 23 (just consumed gas: 0.010) - [ 4 - 5 - 1 ] - - location: 24 (just consumed gas: 0.010) - [ 5 - 1 ] - - location: 25 (just consumed gas: 0.010) - [ 1 ] - - location: 26 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 28 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dup-n--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dup-n--storage125992234--input125992234-.out deleted file mode 100644 index 9f3eb5988bf09b06937c922ddd3260a9addec479..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -dup-n--storage125992234--input125992234-.out +++ /dev/null @@ -1,248 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/dup-n.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 41.660) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 5 ] - - location: 11 (just consumed gas: 0.010) - [ 4 - 5 ] - - location: 14 (just consumed gas: 0.010) - [ 3 - 4 - 5 ] - - location: 17 (just consumed gas: 0.010) - [ 2 - 3 - 4 - 5 ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 23 (just consumed gas: 0.021) - [ 1 - 1 - 2 - 3 - 4 - 5 ] - - location: 25 (just consumed gas: 0.010) - [ 1 - 1 - 1 - 2 - 3 - 4 - 5 ] - - location: 30 (just consumed gas: 0.035) - [ 0 - 1 - 2 - 3 - 4 - 5 ] - - location: 31 (just consumed gas: 0.010) - [ True - 1 - 2 - 3 - 4 - 5 ] - - location: 32 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 32 (just consumed gas: 0.025) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 38 (just consumed gas: 0.022) - [ 2 - 1 - 2 - 3 - 4 - 5 ] - - location: 40 (just consumed gas: 0.010) - [ 2 - 2 - 1 - 2 - 3 - 4 - 5 ] - - location: 45 (just consumed gas: 0.035) - [ 0 - 1 - 2 - 3 - 4 - 5 ] - - location: 46 (just consumed gas: 0.010) - [ True - 1 - 2 - 3 - 4 - 5 ] - - location: 47 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 47 (just consumed gas: 0.025) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 53 (just consumed gas: 0.023) - [ 3 - 1 - 2 - 3 - 4 - 5 ] - - location: 55 (just consumed gas: 0.010) - [ 3 - 3 - 1 - 2 - 3 - 4 - 5 ] - - location: 60 (just consumed gas: 0.035) - [ 0 - 1 - 2 - 3 - 4 - 5 ] - - location: 61 (just consumed gas: 0.010) - [ True - 1 - 2 - 3 - 4 - 5 ] - - location: 62 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 62 (just consumed gas: 0.025) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 68 (just consumed gas: 0.025) - [ 4 - 1 - 2 - 3 - 4 - 5 ] - - location: 70 (just consumed gas: 0.010) - [ 4 - 4 - 1 - 2 - 3 - 4 - 5 ] - - location: 75 (just consumed gas: 0.035) - [ 0 - 1 - 2 - 3 - 4 - 5 ] - - location: 76 (just consumed gas: 0.010) - [ True - 1 - 2 - 3 - 4 - 5 ] - - location: 77 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 77 (just consumed gas: 0.025) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 83 (just consumed gas: 0.026) - [ 5 - 1 - 2 - 3 - 4 - 5 ] - - location: 85 (just consumed gas: 0.010) - [ 5 - 5 - 1 - 2 - 3 - 4 - 5 ] - - location: 90 (just consumed gas: 0.035) - [ 0 - 1 - 2 - 3 - 4 - 5 ] - - location: 91 (just consumed gas: 0.010) - [ True - 1 - 2 - 3 - 4 - 5 ] - - location: 92 (just consumed gas: 0.010) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 92 (just consumed gas: 0.025) - [ 1 - 2 - 3 - 4 - 5 ] - - location: 98 (just consumed gas: 0.042) - [ ] - - location: 100 (just consumed gas: 0.010) - [ Unit ] - - location: 101 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 103 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input247451205-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input247451205-.out deleted file mode 100644 index bb25f772c4265aaf8813ca99698ebf9c47e09ed2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input247451205-.out +++ /dev/null @@ -1,135 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv.tz on storage '(Pair None None None None)' and input '(Pair 10 0)' --level 1 --trace-stack -storage - (Pair None None None None) -emitted operations - -big_map diff - -trace - - location: 25 (just consumed gas: 24.814) - [ (Pair (Pair 10 0) None None None None) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair 10 0) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair 10 0) - (Pair 10 0) ] - - location: 27 (just consumed gas: 0.010) - [ 10 - 0 - (Pair 10 0) ] - - location: 28 (just consumed gas: 0.020) - [ 10 - 0 - (Pair 10 0) ] - - location: 29 (just consumed gas: 0.010) - [ 0 - (Pair 10 0) ] - - location: 31 (just consumed gas: 0.020) - [ 0 - (Pair 10 0) ] - - location: 29 (just consumed gas: 0.035) - [ 10 - 0 - (Pair 10 0) ] - - location: 32 (just consumed gas: 0.163) - [ None - (Pair 10 0) ] - - location: 33 (just consumed gas: 0.010) - [ (Pair 10 0) - None ] - - location: 34 (just consumed gas: 0.010) - [ (Pair 10 0) - (Pair 10 0) - None ] - - location: 35 (just consumed gas: 0.010) - [ 10 - 0 - (Pair 10 0) - None ] - - location: 36 (just consumed gas: 0.020) - [ 10 - 0 - (Pair 10 0) - None ] - - location: 37 (just consumed gas: 0.163) - [ None - (Pair 10 0) - None ] - - location: 38 (just consumed gas: 0.010) - [ (Pair 10 0) - None - None ] - - location: 39 (just consumed gas: 0.010) - [ (Pair 10 0) - (Pair 10 0) - None - None ] - - location: 40 (just consumed gas: 0.010) - [ 10 - 0 - (Pair 10 0) - None - None ] - - location: 41 (just consumed gas: 0.010) - [ 0 - (Pair 10 0) - None - None ] - - location: 43 (just consumed gas: 0.020) - [ 0 - (Pair 10 0) - None - None ] - - location: 41 (just consumed gas: 0.035) - [ 10 - 0 - (Pair 10 0) - None - None ] - - location: 44 (just consumed gas: 0.163) - [ None - (Pair 10 0) - None - None ] - - location: 45 (just consumed gas: 0.010) - [ (Pair 10 0) - None - None - None ] - - location: 46 (just consumed gas: 0.010) - [ 10 - 0 - None - None - None ] - - location: 47 (just consumed gas: 0.163) - [ None - None - None - None ] - - location: 49 (just consumed gas: 0.023) - [ None - None ] - - location: 52 (just consumed gas: 0.010) - [ (Pair None None) ] - - location: 49 (just consumed gas: 0.045) - [ None - None - (Pair None None) ] - - location: 53 (just consumed gas: 0.010) - [ None - (Pair None None) ] - - location: 55 (just consumed gas: 0.010) - [ (Pair None None None) ] - - location: 53 (just consumed gas: 0.035) - [ None - (Pair None None None) ] - - location: 56 (just consumed gas: 0.010) - [ (Pair None None None None) ] - - location: 57 (just consumed gas: 0.010) - [ {} - (Pair None None None None) ] - - location: 59 (just consumed gas: 0.010) - [ (Pair {} None None None None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input250545589-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input250545589-.out deleted file mode 100644 index 5a991eded5129b78a6439f09d51549bf8d0ea7cf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input250545589-.out +++ /dev/null @@ -1,135 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv.tz on storage '(Pair None None None None)' and input '(Pair -8 2)' --level 1 --trace-stack -storage - (Pair (Some (Pair -4 0)) (Some (Pair -4 0)) (Some (Pair 4 0)) (Some (Pair 4 0))) -emitted operations - -big_map diff - -trace - - location: 25 (just consumed gas: 24.814) - [ (Pair (Pair -8 2) None None None None) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair -8 2) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair -8 2) - (Pair -8 2) ] - - location: 27 (just consumed gas: 0.010) - [ -8 - 2 - (Pair -8 2) ] - - location: 28 (just consumed gas: 0.020) - [ 8 - 2 - (Pair -8 2) ] - - location: 29 (just consumed gas: 0.010) - [ 2 - (Pair -8 2) ] - - location: 31 (just consumed gas: 0.020) - [ 2 - (Pair -8 2) ] - - location: 29 (just consumed gas: 0.035) - [ 8 - 2 - (Pair -8 2) ] - - location: 32 (just consumed gas: 0.151) - [ (Some (Pair 4 0)) - (Pair -8 2) ] - - location: 33 (just consumed gas: 0.010) - [ (Pair -8 2) - (Some (Pair 4 0)) ] - - location: 34 (just consumed gas: 0.010) - [ (Pair -8 2) - (Pair -8 2) - (Some (Pair 4 0)) ] - - location: 35 (just consumed gas: 0.010) - [ -8 - 2 - (Pair -8 2) - (Some (Pair 4 0)) ] - - location: 36 (just consumed gas: 0.020) - [ 8 - 2 - (Pair -8 2) - (Some (Pair 4 0)) ] - - location: 37 (just consumed gas: 0.151) - [ (Some (Pair 4 0)) - (Pair -8 2) - (Some (Pair 4 0)) ] - - location: 38 (just consumed gas: 0.010) - [ (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 39 (just consumed gas: 0.010) - [ (Pair -8 2) - (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 40 (just consumed gas: 0.010) - [ -8 - 2 - (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 41 (just consumed gas: 0.010) - [ 2 - (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 43 (just consumed gas: 0.020) - [ 2 - (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 41 (just consumed gas: 0.035) - [ -8 - 2 - (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 44 (just consumed gas: 0.151) - [ (Some (Pair -4 0)) - (Pair -8 2) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 45 (just consumed gas: 0.010) - [ (Pair -8 2) - (Some (Pair -4 0)) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 46 (just consumed gas: 0.010) - [ -8 - 2 - (Some (Pair -4 0)) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 47 (just consumed gas: 0.151) - [ (Some (Pair -4 0)) - (Some (Pair -4 0)) - (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 49 (just consumed gas: 0.023) - [ (Some (Pair 4 0)) - (Some (Pair 4 0)) ] - - location: 52 (just consumed gas: 0.010) - [ (Pair (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 49 (just consumed gas: 0.045) - [ (Some (Pair -4 0)) - (Some (Pair -4 0)) - (Pair (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 53 (just consumed gas: 0.010) - [ (Some (Pair -4 0)) - (Pair (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 55 (just consumed gas: 0.010) - [ (Pair (Some (Pair -4 0)) (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 53 (just consumed gas: 0.035) - [ (Some (Pair -4 0)) - (Pair (Some (Pair -4 0)) (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 56 (just consumed gas: 0.010) - [ (Pair (Some (Pair -4 0)) (Some (Pair -4 0)) (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 57 (just consumed gas: 0.010) - [ {} - (Pair (Some (Pair -4 0)) (Some (Pair -4 0)) (Some (Pair 4 0)) (Some (Pair 4 0))) ] - - location: 59 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair -4 0)) (Some (Pair -4 0)) (Some (Pair 4 0)) (Some (Pair 4 0))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input79625541-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input79625541-.out deleted file mode 100644 index 6f4cf875c6ba060a83165a9ece8750fd026c5af0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv--storage994417987--input79625541-.out +++ /dev/null @@ -1,135 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv.tz on storage '(Pair None None None None)' and input '(Pair 10 -3)' --level 1 --trace-stack -storage - (Pair (Some (Pair -3 1)) (Some (Pair 3 1)) (Some (Pair -3 1)) (Some (Pair 3 1))) -emitted operations - -big_map diff - -trace - - location: 25 (just consumed gas: 24.814) - [ (Pair (Pair 10 -3) None None None None) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair 10 -3) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair 10 -3) - (Pair 10 -3) ] - - location: 27 (just consumed gas: 0.010) - [ 10 - -3 - (Pair 10 -3) ] - - location: 28 (just consumed gas: 0.020) - [ 10 - -3 - (Pair 10 -3) ] - - location: 29 (just consumed gas: 0.010) - [ -3 - (Pair 10 -3) ] - - location: 31 (just consumed gas: 0.020) - [ 3 - (Pair 10 -3) ] - - location: 29 (just consumed gas: 0.035) - [ 10 - 3 - (Pair 10 -3) ] - - location: 32 (just consumed gas: 0.151) - [ (Some (Pair 3 1)) - (Pair 10 -3) ] - - location: 33 (just consumed gas: 0.010) - [ (Pair 10 -3) - (Some (Pair 3 1)) ] - - location: 34 (just consumed gas: 0.010) - [ (Pair 10 -3) - (Pair 10 -3) - (Some (Pair 3 1)) ] - - location: 35 (just consumed gas: 0.010) - [ 10 - -3 - (Pair 10 -3) - (Some (Pair 3 1)) ] - - location: 36 (just consumed gas: 0.020) - [ 10 - -3 - (Pair 10 -3) - (Some (Pair 3 1)) ] - - location: 37 (just consumed gas: 0.151) - [ (Some (Pair -3 1)) - (Pair 10 -3) - (Some (Pair 3 1)) ] - - location: 38 (just consumed gas: 0.010) - [ (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 39 (just consumed gas: 0.010) - [ (Pair 10 -3) - (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 40 (just consumed gas: 0.010) - [ 10 - -3 - (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 41 (just consumed gas: 0.010) - [ -3 - (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 43 (just consumed gas: 0.020) - [ 3 - (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 41 (just consumed gas: 0.035) - [ 10 - 3 - (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 44 (just consumed gas: 0.151) - [ (Some (Pair 3 1)) - (Pair 10 -3) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 45 (just consumed gas: 0.010) - [ (Pair 10 -3) - (Some (Pair 3 1)) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 46 (just consumed gas: 0.010) - [ 10 - -3 - (Some (Pair 3 1)) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 47 (just consumed gas: 0.151) - [ (Some (Pair -3 1)) - (Some (Pair 3 1)) - (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 49 (just consumed gas: 0.023) - [ (Some (Pair -3 1)) - (Some (Pair 3 1)) ] - - location: 52 (just consumed gas: 0.010) - [ (Pair (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 49 (just consumed gas: 0.045) - [ (Some (Pair -3 1)) - (Some (Pair 3 1)) - (Pair (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 53 (just consumed gas: 0.010) - [ (Some (Pair 3 1)) - (Pair (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 55 (just consumed gas: 0.010) - [ (Pair (Some (Pair 3 1)) (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 53 (just consumed gas: 0.035) - [ (Some (Pair -3 1)) - (Pair (Some (Pair 3 1)) (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 56 (just consumed gas: 0.010) - [ (Pair (Some (Pair -3 1)) (Some (Pair 3 1)) (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 57 (just consumed gas: 0.010) - [ {} - (Pair (Some (Pair -3 1)) (Some (Pair 3 1)) (Some (Pair -3 1)) (Some (Pair 3 1))) ] - - location: 59 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair -3 1)) (Some (Pair 3 1)) (Some (Pair -3 1)) (Some (Pair 3 1))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input147133089-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input147133089-.out deleted file mode 100644 index 9594bcd49496f6fc09e992202bb737e1fc225942..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input147133089-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 10 (Right 0))' --level 1 --trace-stack -storage - (Right None) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 10 (Right 0)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 (Right 0)) ] - - location: 20 (just consumed gas: 0.010) - [ 10 - (Right 0) ] - - location: 21 (just consumed gas: 0.010) - [ (Right 0) - 10 ] - - location: 22 (just consumed gas: 0.010) - [ 0 - 10 ] - - location: 32 (just consumed gas: 0.010) - [ 10 - 0 ] - - location: 33 (just consumed gas: 0.070) - [ None ] - - location: 34 (just consumed gas: 0.010) - [ (Right None) ] - - location: 22 (just consumed gas: 0.025) - [ (Right None) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Right None) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Right None)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input215785357-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input215785357-.out deleted file mode 100644 index e8bc552a608e6eb329b6b03b56a3d9d3d2b7a9d3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input215785357-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 10 (Right 3))' --level 1 --trace-stack -storage - (Right (Some (Pair 3 1))) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 10 (Right 3)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 (Right 3)) ] - - location: 20 (just consumed gas: 0.010) - [ 10 - (Right 3) ] - - location: 21 (just consumed gas: 0.010) - [ (Right 3) - 10 ] - - location: 22 (just consumed gas: 0.010) - [ 3 - 10 ] - - location: 32 (just consumed gas: 0.010) - [ 10 - 3 ] - - location: 33 (just consumed gas: 0.070) - [ (Some (Pair 3 1)) ] - - location: 34 (just consumed gas: 0.010) - [ (Right (Some (Pair 3 1))) ] - - location: 22 (just consumed gas: 0.025) - [ (Right (Some (Pair 3 1))) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Right (Some (Pair 3 1))) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Right (Some (Pair 3 1)))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input389351431-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input389351431-.out deleted file mode 100644 index feccebda4655f376188a731a3a2ea2bce770a070..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input389351431-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 10 (Left 10))' --level 1 --trace-stack -storage - (Left (Some (Pair 1 0))) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 10 (Left 10)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 (Left 10)) ] - - location: 20 (just consumed gas: 0.010) - [ 10 - (Left 10) ] - - location: 21 (just consumed gas: 0.010) - [ (Left 10) - 10 ] - - location: 22 (just consumed gas: 0.010) - [ 10 - 10 ] - - location: 24 (just consumed gas: 0.010) - [ 10 - 10 ] - - location: 25 (just consumed gas: 0.080) - [ (Some (Pair 1 0)) ] - - location: 26 (just consumed gas: 0.010) - [ (Left (Some (Pair 1 0))) ] - - location: 22 (just consumed gas: 0.025) - [ (Left (Some (Pair 1 0))) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Left (Some (Pair 1 0))) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Left (Some (Pair 1 0)))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input44513000-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input44513000-.out deleted file mode 100644 index 30f0dae5143b350e8243e03e8f09bf332ae149e5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input44513000-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 10 (Left 0))' --level 1 --trace-stack -storage - (Left None) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 10 (Left 0)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 (Left 0)) ] - - location: 20 (just consumed gas: 0.010) - [ 10 - (Left 0) ] - - location: 21 (just consumed gas: 0.010) - [ (Left 0) - 10 ] - - location: 22 (just consumed gas: 0.010) - [ 0 - 10 ] - - location: 24 (just consumed gas: 0.010) - [ 10 - 0 ] - - location: 25 (just consumed gas: 0.080) - [ None ] - - location: 26 (just consumed gas: 0.010) - [ (Left None) ] - - location: 22 (just consumed gas: 0.025) - [ (Left None) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Left None) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Left None)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input635398196-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input635398196-.out deleted file mode 100644 index 564f2e392dba56e1e1173a98bc2ecffbd88c5af3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input635398196-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 10 (Left 3))' --level 1 --trace-stack -storage - (Left (Some (Pair 3 1))) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 10 (Left 3)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 (Left 3)) ] - - location: 20 (just consumed gas: 0.010) - [ 10 - (Left 3) ] - - location: 21 (just consumed gas: 0.010) - [ (Left 3) - 10 ] - - location: 22 (just consumed gas: 0.010) - [ 3 - 10 ] - - location: 24 (just consumed gas: 0.010) - [ 10 - 3 ] - - location: 25 (just consumed gas: 0.080) - [ (Some (Pair 3 1)) ] - - location: 26 (just consumed gas: 0.010) - [ (Left (Some (Pair 3 1))) ] - - location: 22 (just consumed gas: 0.025) - [ (Left (Some (Pair 3 1))) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Left (Some (Pair 3 1))) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Left (Some (Pair 3 1)))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input734264738-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input734264738-.out deleted file mode 100644 index a25f2bcbad045b5b211a7c974f6cc01b259e8e4e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input734264738-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 10 (Right 10))' --level 1 --trace-stack -storage - (Right (Some (Pair 1 0))) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 10 (Right 10)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 (Right 10)) ] - - location: 20 (just consumed gas: 0.010) - [ 10 - (Right 10) ] - - location: 21 (just consumed gas: 0.010) - [ (Right 10) - 10 ] - - location: 22 (just consumed gas: 0.010) - [ 10 - 10 ] - - location: 32 (just consumed gas: 0.010) - [ 10 - 10 ] - - location: 33 (just consumed gas: 0.070) - [ (Some (Pair 1 0)) ] - - location: 34 (just consumed gas: 0.010) - [ (Right (Some (Pair 1 0))) ] - - location: 22 (just consumed gas: 0.025) - [ (Right (Some (Pair 1 0))) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Right (Some (Pair 1 0))) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Right (Some (Pair 1 0)))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input993071382-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input993071382-.out deleted file mode 100644 index ead7e7bc007440bbaa52a9ca900fa804c8ddb44a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ediv_mutez--storage977883604--input993071382-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ediv_mutez.tz on storage '(Left None)' and input '(Pair 5 (Right 10))' --level 1 --trace-stack -storage - (Right (Some (Pair 0 5))) -emitted operations - -big_map diff - -trace - - location: 19 (just consumed gas: 13.318) - [ (Pair (Pair 5 (Right 10)) (Left None)) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 5 (Right 10)) ] - - location: 20 (just consumed gas: 0.010) - [ 5 - (Right 10) ] - - location: 21 (just consumed gas: 0.010) - [ (Right 10) - 5 ] - - location: 22 (just consumed gas: 0.010) - [ 10 - 5 ] - - location: 32 (just consumed gas: 0.010) - [ 5 - 10 ] - - location: 33 (just consumed gas: 0.070) - [ (Some (Pair 0 5)) ] - - location: 34 (just consumed gas: 0.010) - [ (Right (Some (Pair 0 5))) ] - - location: 22 (just consumed gas: 0.025) - [ (Right (Some (Pair 0 5))) ] - - location: 39 (just consumed gas: 0.010) - [ {} - (Right (Some (Pair 0 5))) ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} (Right (Some (Pair 0 5)))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -emit--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -emit--storage125992234--input125992234-.out deleted file mode 100644 index f1d1f5c060658b99b797c4b77c200e4daf6c036f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -emit--storage125992234--input125992234-.out +++ /dev/null @@ -1,72 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/emit.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - Internal Event: - From: KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi - Type: (or nat string) - Tag: event - Payload: (Left 10) - Internal Event: - From: KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi - Type: (or (nat %number) (string %words)) - Tag: event - Payload: (Right "lorem ipsum") -big_map diff - -trace - - location: 7 (just consumed gas: 13.014) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ Unit ] - - location: 9 (just consumed gas: 0.010) - [ 10 - Unit ] - - location: 12 (just consumed gas: 0.010) - [ (Left 10) - Unit ] - - location: 14 (just consumed gas: 0.487) - [ 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 15 (just consumed gas: 0.010) - [ "lorem ipsum" - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 18 (just consumed gas: 0.010) - [ (Right "lorem ipsum") - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 20 (just consumed gas: 0.572) - [ 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 24 (just consumed gas: 0.010) - [ {} - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 26 (just consumed gas: 0.010) - [ 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d - {} - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 27 (just consumed gas: 0.010) - [ { 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d } - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - Unit ] - - location: 28 (just consumed gas: 0.010) - [ 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a - { 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d } - Unit ] - - location: 29 (just consumed gas: 0.010) - [ { 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a ; - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d } - Unit ] - - location: 30 (just consumed gas: 0.010) - [ (Pair { 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000004076403620368ffff056576656e74ff0505000a ; - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000001040764046200000007256e756d62657204680000000625776f726473ffff056576656e74ff0508010000000b6c6f72656d20697073756d } - Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -empty_map--storage457300675--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -empty_map--storage457300675--input125992234-.out deleted file mode 100644 index a032ae87aee4382aaf966d4f101aef69dadae6f5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -empty_map--storage457300675--input125992234-.out +++ /dev/null @@ -1,33 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/empty_map.tz on storage '{}' and input Unit --level 1 --trace-stack -storage - { Elt "hello" "world" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 8.200) - [ (Pair Unit {}) ] - - location: 9 (just consumed gas: 0.010) - [ ] - - location: 10 (just consumed gas: 0.300) - [ {} ] - - location: 13 (just consumed gas: 0.010) - [ "world" - {} ] - - location: 16 (just consumed gas: 0.010) - [ (Some "world") - {} ] - - location: 17 (just consumed gas: 0.010) - [ "hello" - (Some "world") - {} ] - - location: 20 (just consumed gas: 0.055) - [ { Elt "hello" "world" } ] - - location: 21 (just consumed gas: 0.010) - [ {} - { Elt "hello" "world" } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "hello" "world" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -exec_concat--storage398998998--input246262487-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -exec_concat--storage398998998--input246262487-.out deleted file mode 100644 index eed90feb1cc12b9bf704cf61d246a8aff4c38528..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -exec_concat--storage398998998--input246262487-.out +++ /dev/null @@ -1,48 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/exec_concat.tz on storage '"?"' and input '"test"' --level 1 --trace-stack -storage - "test_abc" -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 10.835) - [ (Pair "test" "?") ] - - location: 7 (just consumed gas: 0.010) - [ "test" ] - - location: 8 (just consumed gas: 0.010) - [ { PUSH string "_abc" ; NIL string ; SWAP ; CONS ; SWAP ; CONS ; CONCAT } - "test" ] - - location: 22 (just consumed gas: 0.010) - [ "test" - { PUSH string "_abc" ; NIL string ; SWAP ; CONS ; SWAP ; CONS ; CONCAT } ] - - location: 12 (just consumed gas: 0.020) - [ "_abc" - "test" ] - - location: 15 (just consumed gas: 0.010) - [ {} - "_abc" - "test" ] - - location: 17 (just consumed gas: 0.010) - [ "_abc" - {} - "test" ] - - location: 18 (just consumed gas: 0.010) - [ { "_abc" } - "test" ] - - location: 19 (just consumed gas: 0.010) - [ "test" - { "_abc" } ] - - location: 20 (just consumed gas: 0.010) - [ { "test" ; "_abc" } ] - - location: 21 (just consumed gas: 0.124) - [ "test_abc" ] - - location: 23 (just consumed gas: 0.035) - [ "test_abc" ] - - location: 24 (just consumed gas: 0.010) - [ {} - "test_abc" ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} "test_abc") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -exec_concat--storage398998998--input79230375-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -exec_concat--storage398998998--input79230375-.out deleted file mode 100644 index 82414e9c4629d2e843169500008f0a1a4c9c3773..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -exec_concat--storage398998998--input79230375-.out +++ /dev/null @@ -1,48 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/exec_concat.tz on storage '"?"' and input '""' --level 1 --trace-stack -storage - "_abc" -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 10.795) - [ (Pair "" "?") ] - - location: 7 (just consumed gas: 0.010) - [ "" ] - - location: 8 (just consumed gas: 0.010) - [ { PUSH string "_abc" ; NIL string ; SWAP ; CONS ; SWAP ; CONS ; CONCAT } - "" ] - - location: 22 (just consumed gas: 0.010) - [ "" - { PUSH string "_abc" ; NIL string ; SWAP ; CONS ; SWAP ; CONS ; CONCAT } ] - - location: 12 (just consumed gas: 0.020) - [ "_abc" - "" ] - - location: 15 (just consumed gas: 0.010) - [ {} - "_abc" - "" ] - - location: 17 (just consumed gas: 0.010) - [ "_abc" - {} - "" ] - - location: 18 (just consumed gas: 0.010) - [ { "_abc" } - "" ] - - location: 19 (just consumed gas: 0.010) - [ "" - { "_abc" } ] - - location: 20 (just consumed gas: 0.010) - [ { "" ; "_abc" } ] - - location: 21 (just consumed gas: 0.122) - [ "_abc" ] - - location: 23 (just consumed gas: 0.035) - [ "_abc" ] - - location: 24 (just consumed gas: 0.010) - [ {} - "_abc" ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} "_abc") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -first--storage492856247--input478406404-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -first--storage492856247--input478406404-.out deleted file mode 100644 index 5aaf77a391a1ae6ca792209128053f5d38820229..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -first--storage492856247--input478406404-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/first.tz on storage 111 and input '{ 4 }' --level 1 --trace-stack -storage - 4 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 7.331) - [ (Pair { 4 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 4 } ] - - location: 9 (just consumed gas: 0.010) - [ 4 - {} ] - - location: 11 (just consumed gas: 0.010) - [ {} ] - - location: 13 (just consumed gas: 0.010) - [ ] - - location: 11 (just consumed gas: 0.035) - [ 4 ] - - location: 9 (just consumed gas: 0.025) - [ 4 ] - - location: 18 (just consumed gas: 0.010) - [ {} - 4 ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} 4) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -first--storage492856247--input962874972-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -first--storage492856247--input962874972-.out deleted file mode 100644 index c045053899c7bfad0d1b174af709de884486e153..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -first--storage492856247--input962874972-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/first.tz on storage 111 and input '{ 1 ; 2 ; 3 ; 4 }' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 7.631) - [ (Pair { 1 ; 2 ; 3 ; 4 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 ; 4 } ] - - location: 9 (just consumed gas: 0.010) - [ 1 - { 2 ; 3 ; 4 } ] - - location: 11 (just consumed gas: 0.010) - [ { 2 ; 3 ; 4 } ] - - location: 13 (just consumed gas: 0.010) - [ ] - - location: 11 (just consumed gas: 0.035) - [ 1 ] - - location: 9 (just consumed gas: 0.025) - [ 1 ] - - location: 18 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage1026405794--input329240220-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage1026405794--input329240220-.out deleted file mode 100644 index 846a097e502059cb11caec8f7e3ea8d8dbfd9ec9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage1026405794--input329240220-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair None { Elt "hello" 4 })' and input '"hello"' --level 1 --trace-stack -storage - (Pair (Some 4) {}) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 8.004) - [ (Pair "hello" None { Elt "hello" 4 }) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair None { Elt "hello" 4 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" 4 }) ] - - location: 16 (just consumed gas: 0.010) - [ None - { Elt "hello" 4 } ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - None - { Elt "hello" 4 } ] - - location: 17 (just consumed gas: 0.076) - [ (Some 4) - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 4) {}) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 4) {}) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 4) {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage382368661--input329240220-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage382368661--input329240220-.out deleted file mode 100644 index 89a88eca9610f844aeb851c97b011cd6f5317d3b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage382368661--input329240220-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair (Some 4) {})' and input '"hello"' --level 1 --trace-stack -storage - (Pair None { Elt "hello" 4 }) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 7.784) - [ (Pair "hello" (Some 4) {}) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair (Some 4) {}) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair (Some 4) {}) ] - - location: 16 (just consumed gas: 0.010) - [ (Some 4) - {} ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - (Some 4) - {} ] - - location: 17 (just consumed gas: 0.076) - [ None - { Elt "hello" 4 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" 4 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair None { Elt "hello" 4 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} None { Elt "hello" 4 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage496578814--input329240220-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage496578814--input329240220-.out deleted file mode 100644 index 5bc3f83f653cbcddcee2c11e1bfadbb94b224cc9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage496578814--input329240220-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair (Some 5) { Elt "hello" 4 })' and input '"hello"' --level 1 --trace-stack -storage - (Pair (Some 4) { Elt "hello" 5 }) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 8.104) - [ (Pair "hello" (Some 5) { Elt "hello" 4 }) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 16 (just consumed gas: 0.010) - [ (Some 5) - { Elt "hello" 4 } ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - (Some 5) - { Elt "hello" 4 } ] - - location: 17 (just consumed gas: 0.076) - [ (Some 4) - { Elt "hello" 5 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 4) { Elt "hello" 5 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 4) { Elt "hello" 5 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 4) { Elt "hello" 5 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage496578814--input507231566-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage496578814--input507231566-.out deleted file mode 100644 index 27c5c6c5c4d1835ed8d82019bcf3a21ead439083..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage496578814--input507231566-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair (Some 5) { Elt "hello" 4 })' and input '"hi"' --level 1 --trace-stack -storage - (Pair None { Elt "hello" 4 ; Elt "hi" 5 }) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 8.074) - [ (Pair "hi" (Some 5) { Elt "hello" 4 }) ] - - location: 13 (just consumed gas: 0.010) - [ "hi" - (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 16 (just consumed gas: 0.010) - [ (Some 5) - { Elt "hello" 4 } ] - - location: 14 (just consumed gas: 0.035) - [ "hi" - (Some 5) - { Elt "hello" 4 } ] - - location: 17 (just consumed gas: 0.075) - [ None - { Elt "hello" 4 ; Elt "hi" 5 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" 4 ; Elt "hi" 5 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair None { Elt "hello" 4 ; Elt "hi" 5 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} None { Elt "hello" 4 ; Elt "hi" 5 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage547821324--input329240220-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage547821324--input329240220-.out deleted file mode 100644 index 2daf5bceddc359cfabaf96bca7e02847274145f2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage547821324--input329240220-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair None {})' and input '"hello"' --level 1 --trace-stack -storage - (Pair None {}) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 7.684) - [ (Pair "hello" None {}) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair None {}) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None {}) ] - - location: 16 (just consumed gas: 0.010) - [ None - {} ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - None - {} ] - - location: 17 (just consumed gas: 0.076) - [ None - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair None {}) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair None {}) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} None {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage796012494--input156280093-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage796012494--input156280093-.out deleted file mode 100644 index 48a8a12bbc6cb2f3fef3a835665b2e1c9869547d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage796012494--input156280093-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair None { Elt "1" 1 ; Elt "2" 2 })' and input '"1"' --level 1 --trace-stack -storage - (Pair (Some 1) { Elt "2" 2 }) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 8.239) - [ (Pair "1" None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 13 (just consumed gas: 0.010) - [ "1" - (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 16 (just consumed gas: 0.010) - [ None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 14 (just consumed gas: 0.035) - [ "1" - None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 17 (just consumed gas: 0.075) - [ (Some 1) - { Elt "2" 2 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 1) { Elt "2" 2 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 1) { Elt "2" 2 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 1) { Elt "2" 2 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage796012494--input228164856-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage796012494--input228164856-.out deleted file mode 100644 index f2b7c9b520db4dea8c10e89af3d4dd4760925ae0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_and_update_map--storage796012494--input228164856-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_and_update_map.tz on storage '(Pair None { Elt "1" 1 ; Elt "2" 2 })' and input '"2"' --level 1 --trace-stack -storage - (Pair (Some 2) { Elt "1" 1 }) -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 8.239) - [ (Pair "2" None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 13 (just consumed gas: 0.010) - [ "2" - (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 16 (just consumed gas: 0.010) - [ None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 14 (just consumed gas: 0.035) - [ "2" - None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 17 (just consumed gas: 0.075) - [ (Some 2) - { Elt "1" 1 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 2) { Elt "1" 1 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 2) { Elt "1" 1 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 2) { Elt "1" 1 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage139236239--input329240220-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage139236239--input329240220-.out deleted file mode 100644 index 096d7a28ee0caf8cfbe2beb9ed015571c14dee24..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage139236239--input329240220-.out +++ /dev/null @@ -1,41 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_map_value.tz on storage '(Pair None { Elt "hello" "hi" })' and input '"hello"' --level 1 --trace-stack -storage - (Pair (Some "hi") { Elt "hello" "hi" }) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 10.557) - [ (Pair "hello" None { Elt "hello" "hi" }) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "hello" None { Elt "hello" "hi" }) - (Pair "hello" None { Elt "hello" "hi" }) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair "hello" None { Elt "hello" "hi" }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "hello" None { Elt "hello" "hi" }) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" "hi" }) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 20 (just consumed gas: 0.045) - [ (Some "hi") - { Elt "hello" "hi" } ] - - location: 21 (just consumed gas: 0.010) - [ (Pair (Some "hi") { Elt "hello" "hi" }) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Pair (Some "hi") { Elt "hello" "hi" }) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some "hi") { Elt "hello" "hi" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage139236239--input79230375-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage139236239--input79230375-.out deleted file mode 100644 index a94e4b0b5239d934d0d758973abbc34a449b9ccd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage139236239--input79230375-.out +++ /dev/null @@ -1,41 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_map_value.tz on storage '(Pair None { Elt "hello" "hi" })' and input '""' --level 1 --trace-stack -storage - (Pair None { Elt "hello" "hi" }) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 10.507) - [ (Pair "" None { Elt "hello" "hi" }) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "" None { Elt "hello" "hi" }) - (Pair "" None { Elt "hello" "hi" }) ] - - location: 13 (just consumed gas: 0.010) - [ "" - (Pair "" None { Elt "hello" "hi" }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "" None { Elt "hello" "hi" }) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" "hi" }) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 14 (just consumed gas: 0.035) - [ "" - { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 20 (just consumed gas: 0.045) - [ None - { Elt "hello" "hi" } ] - - location: 21 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" "hi" }) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Pair None { Elt "hello" "hi" }) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None { Elt "hello" "hi" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage329396864--input156280093-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage329396864--input156280093-.out deleted file mode 100644 index 6c94682c1b82c3ff996f0eb1e34124fe0c318cd6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -get_map_value--storage329396864--input156280093-.out +++ /dev/null @@ -1,41 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/get_map_value.tz on storage '(Pair None { Elt "1" "one" ; Elt "2" "two" })' and input '"1"' --level 1 --trace-stack -storage - (Pair (Some "one") { Elt "1" "one" ; Elt "2" "two" }) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 10.847) - [ (Pair "1" None { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1" None { Elt "1" "one" ; Elt "2" "two" }) - (Pair "1" None { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 13 (just consumed gas: 0.010) - [ "1" - (Pair "1" None { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "1" None { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair None { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - { Elt "1" "one" ; Elt "2" "two" } ] - - location: 14 (just consumed gas: 0.035) - [ "1" - { Elt "1" "one" ; Elt "2" "two" } - { Elt "1" "one" ; Elt "2" "two" } ] - - location: 20 (just consumed gas: 0.045) - [ (Some "one") - { Elt "1" "one" ; Elt "2" "two" } ] - - location: 21 (just consumed gas: 0.010) - [ (Pair (Some "one") { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Pair (Some "one") { Elt "1" "one" ; Elt "2" "two" }) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some "one") { Elt "1" "one" ; Elt "2" "two" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_key--storage921624073--input1040351577-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_key--storage921624073--input1040351577-.out deleted file mode 100644 index cc285154ec856a54a6bf4ecc05ef95661aad73d2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_key--storage921624073--input1040351577-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/hash_key.tz on storage None and input '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' --level 1 --trace-stack -storage - (Some "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 83.907) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" None) ] - - location: 8 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" ] - - location: 9 (just consumed gas: 0.605) - [ "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ] - - location: 10 (just consumed gas: 0.010) - [ (Some "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx") ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_key--storage921624073--input153350004-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_key--storage921624073--input153350004-.out deleted file mode 100644 index 4c7e8d59285c9bd73fde09c2dcb072676e2955eb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_key--storage921624073--input153350004-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/hash_key.tz on storage None and input '"edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES"' --level 1 --trace-stack -storage - (Some "tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 83.907) - [ (Pair "edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES" None) ] - - location: 8 (just consumed gas: 0.010) - [ "edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES" ] - - location: 9 (just consumed gas: 0.605) - [ "tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k" ] - - location: 10 (just consumed gas: 0.010) - [ (Some "tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k") ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some "tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some "tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_string--storage151303925--input3431716-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_string--storage151303925--input3431716-.out deleted file mode 100644 index c998dcfd720ca553cd9b6628dd3c2c93717e38b4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_string--storage151303925--input3431716-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/hash_string.tz on storage 0x00 and input '"abcdefg"' --level 1 --trace-stack -storage - 0x46fdbcb4ea4eadad5615cdaa17d67f783e01e21149ce2b27de497600b4cd8f4e -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.841) - [ (Pair "abcdefg" 0x00) ] - - location: 7 (just consumed gas: 0.010) - [ "abcdefg" ] - - location: 8 (just consumed gas: 0.286) - [ 0x05010000000761626364656667 ] - - location: 9 (just consumed gas: 0.444) - [ 0x46fdbcb4ea4eadad5615cdaa17d67f783e01e21149ce2b27de497600b4cd8f4e ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0x46fdbcb4ea4eadad5615cdaa17d67f783e01e21149ce2b27de497600b4cd8f4e ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0x46fdbcb4ea4eadad5615cdaa17d67f783e01e21149ce2b27de497600b4cd8f4e) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_string--storage151303925--input535018041-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_string--storage151303925--input535018041-.out deleted file mode 100644 index 4a4f60bb4fce483871d5e5d47eab83c2682c1542..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -hash_string--storage151303925--input535018041-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/hash_string.tz on storage 0x00 and input '"12345"' --level 1 --trace-stack -storage - 0xb4c26c20de52a4eaf0d8a340db47ad8cb1e74049570859c9a9a3952b204c772f -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.821) - [ (Pair "12345" 0x00) ] - - location: 7 (just consumed gas: 0.010) - [ "12345" ] - - location: 8 (just consumed gas: 0.266) - [ 0x0501000000053132333435 ] - - location: 9 (just consumed gas: 0.442) - [ 0xb4c26c20de52a4eaf0d8a340db47ad8cb1e74049570859c9a9a3952b204c772f ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0xb4c26c20de52a4eaf0d8a340db47ad8cb1e74049570859c9a9a3952b204c772f ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0xb4c26c20de52a4eaf0d8a340db47ad8cb1e74049570859c9a9a3952b204c772f) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if--storage921624073--input570553153-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if--storage921624073--input570553153-.out deleted file mode 100644 index 9791a4cee2e92dfdfab25e0a4d97e2fa16175b48..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if--storage921624073--input570553153-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/if.tz on storage None and input False --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 7.179) - [ (Pair False None) ] - - location: 8 (just consumed gas: 0.010) - [ False ] - - location: 9 (just consumed gas: 0.010) - [ ] - - location: 15 (just consumed gas: 0.010) - [ False ] - - location: 9 (just consumed gas: 0.025) - [ False ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if--storage921624073--input954397288-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if--storage921624073--input954397288-.out deleted file mode 100644 index aec3c49696f3936ba0b239674d7bbee5646dd321..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if--storage921624073--input954397288-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/if.tz on storage None and input True --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 7.179) - [ (Pair True None) ] - - location: 8 (just consumed gas: 0.010) - [ True ] - - location: 9 (just consumed gas: 0.010) - [ ] - - location: 11 (just consumed gas: 0.010) - [ True ] - - location: 9 (just consumed gas: 0.025) - [ True ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if_some--storage398998998--input288201633-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if_some--storage398998998--input288201633-.out deleted file mode 100644 index f1f3ff80a593953a0e74fe642b8989049f48912d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if_some--storage398998998--input288201633-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/if_some.tz on storage '"?"' and input '(Some "hello")' --level 1 --trace-stack -storage - "hello" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.316) - [ (Pair (Some "hello") "?") ] - - location: 8 (just consumed gas: 0.010) - [ (Some "hello") ] - - location: 10 (just consumed gas: 0.010) - [ "hello" ] - - location: 10 (just consumed gas: 0.025) - [ "hello" ] - - location: 16 (just consumed gas: 0.010) - [ {} - "hello" ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} "hello") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if_some--storage398998998--input921624073-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if_some--storage398998998--input921624073-.out deleted file mode 100644 index 0472e2c4b0f854b96dac88b0bbe84bd028cbb17c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -if_some--storage398998998--input921624073-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/if_some.tz on storage '"?"' and input None --level 1 --trace-stack -storage - "" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.151) - [ (Pair None "?") ] - - location: 8 (just consumed gas: 0.010) - [ None ] - - location: 10 (just consumed gas: 0.010) - [ ] - - location: 12 (just consumed gas: 0.010) - [ "" ] - - location: 10 (just consumed gas: 0.025) - [ "" ] - - location: 16 (just consumed gas: 0.010) - [ {} - "" ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} "") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input453441034-.out deleted file mode 100644 index 6d4d82bb3b8323412d590e900760c6ef441555cd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input453441034-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/int.tz on storage None and input 1 --level 1 --trace-stack -storage - (Some 1) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair 1 None) ] - - location: 8 (just consumed gas: 0.010) - [ 1 ] - - location: 9 (just consumed gas: 0.010) - [ 1 ] - - location: 10 (just consumed gas: 0.010) - [ (Some 1) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some 1) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some 1)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input535454136-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input535454136-.out deleted file mode 100644 index 8bd0adef3c419183964687d7e0d11402e35ca490..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input535454136-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/int.tz on storage None and input 9999 --level 1 --trace-stack -storage - (Some 9999) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair 9999 None) ] - - location: 8 (just consumed gas: 0.010) - [ 9999 ] - - location: 9 (just consumed gas: 0.010) - [ 9999 ] - - location: 10 (just consumed gas: 0.010) - [ (Some 9999) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some 9999) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some 9999)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input680650890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input680650890-.out deleted file mode 100644 index cbbbf092d0776bda851e7c7427ff659d92a43eaf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -int--storage921624073--input680650890-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/int.tz on storage None and input 0 --level 1 --trace-stack -storage - (Some 0) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair 0 None) ] - - location: 8 (just consumed gas: 0.010) - [ 0 ] - - location: 9 (just consumed gas: 0.010) - [ 0 ] - - location: 10 (just consumed gas: 0.010) - [ (Some 0) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some 0) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some 0)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -keccak--storage921624073--input1008262038-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -keccak--storage921624073--input1008262038-.out deleted file mode 100644 index 19d523167baa00f6b08383851d187dba5be7d43b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -keccak--storage921624073--input1008262038-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/keccak.tz on storage None and input 0x48656c6c6f2c20776f726c6421 --level 1 --trace-stack -storage - (Some 0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair 0x48656c6c6f2c20776f726c6421 None) ] - - location: 8 (just consumed gas: 0.010) - [ 0x48656c6c6f2c20776f726c6421 ] - - location: 9 (just consumed gas: 1.457) - [ 0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4 ] - - location: 10 (just consumed gas: 0.010) - [ (Some 0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some 0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} - (Some 0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -left_right--storage4177631--input202098045-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -left_right--storage4177631--input202098045-.out deleted file mode 100644 index c0ed6195e2bfd7a48914caefb0b7405919f43af8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -left_right--storage4177631--input202098045-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/left_right.tz on storage '(Left "X")' and input '(Left True)' --level 1 --trace-stack -storage - (Right True) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 6.990) - [ (Pair (Left True) (Left "X")) ] - - location: 11 (just consumed gas: 0.010) - [ (Left True) ] - - location: 12 (just consumed gas: 0.010) - [ True ] - - location: 14 (just consumed gas: 0.010) - [ (Right True) ] - - location: 12 (just consumed gas: 0.025) - [ (Right True) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Right True) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Right True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -left_right--storage4177631--input44576556-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -left_right--storage4177631--input44576556-.out deleted file mode 100644 index f8b4fbe935817710259fdf1dc408eb00fff3ed78..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -left_right--storage4177631--input44576556-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/left_right.tz on storage '(Left "X")' and input '(Right "a")' --level 1 --trace-stack -storage - (Left "a") -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 7.015) - [ (Pair (Right "a") (Left "X")) ] - - location: 11 (just consumed gas: 0.010) - [ (Right "a") ] - - location: 12 (just consumed gas: 0.010) - [ "a" ] - - location: 17 (just consumed gas: 0.010) - [ (Left "a") ] - - location: 12 (just consumed gas: 0.025) - [ (Left "a") ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Left "a") ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Left "a")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -level--storage492856247--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -level--storage492856247--input125992234-.out deleted file mode 100644 index 72797afe53ae56ef3b9b8ed54486a94bdf666940..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -level--storage492856247--input125992234-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/level.tz on storage 111 and input Unit --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 111) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 1 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat--storage717096222--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat--storage717096222--input457300675-.out deleted file mode 100644 index 5b98b198317877ed9be33cabf2731c7279bfbdd5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat--storage717096222--input457300675-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_concat.tz on storage '"abc"' and input '{}' --level 1 --trace-stack -storage - "abc" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.567) - [ (Pair {} "abc") ] - - location: 8 (just consumed gas: 0.010) - [ {} - "abc" ] - - location: 9 (just consumed gas: 0.010) - [ "abc" - {} ] - - location: 10 (just consumed gas: 0.010) - [ { "abc" } ] - - location: 11 (just consumed gas: 0.111) - [ "abc" ] - - location: 12 (just consumed gas: 0.010) - [ {} - "abc" ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} "abc") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat--storage717096222--input546523343-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat--storage717096222--input546523343-.out deleted file mode 100644 index 4405d936756bd631421e11004aeda4369c6134d9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat--storage717096222--input546523343-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_concat.tz on storage '"abc"' and input '{ "d" ; "e" ; "f" }' --level 1 --trace-stack -storage - "abcdef" -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.942) - [ (Pair { "d" ; "e" ; "f" } "abc") ] - - location: 8 (just consumed gas: 0.010) - [ { "d" ; "e" ; "f" } - "abc" ] - - location: 9 (just consumed gas: 0.010) - [ "abc" - { "d" ; "e" ; "f" } ] - - location: 10 (just consumed gas: 0.010) - [ { "abc" ; "d" ; "e" ; "f" } ] - - location: 11 (just consumed gas: 0.143) - [ "abcdef" ] - - location: 12 (just consumed gas: 0.010) - [ {} - "abcdef" ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} "abcdef") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage149262694--input220724351-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage149262694--input220724351-.out deleted file mode 100644 index 0ee85a88e151c9b753011dda53bb3cb3b9626f1f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage149262694--input220724351-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_concat_bytes.tz on storage 0x and input '{ 0x00 ; 0x11 ; 0x00 }' --level 1 --trace-stack -storage - 0x001100 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.822) - [ (Pair { 0x00 ; 0x11 ; 0x00 } 0x) ] - - location: 8 (just consumed gas: 0.010) - [ { 0x00 ; 0x11 ; 0x00 } - 0x ] - - location: 9 (just consumed gas: 0.010) - [ 0x - { 0x00 ; 0x11 ; 0x00 } ] - - location: 10 (just consumed gas: 0.010) - [ { 0x ; 0x00 ; 0x11 ; 0x00 } ] - - location: 11 (just consumed gas: 0.141) - [ 0x001100 ] - - location: 12 (just consumed gas: 0.010) - [ {} - 0x001100 ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} 0x001100) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage149262694--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage149262694--input457300675-.out deleted file mode 100644 index 3ce49072e3d0674e0892bc509682332191f19647..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage149262694--input457300675-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_concat_bytes.tz on storage 0x and input '{}' --level 1 --trace-stack -storage - 0x -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.522) - [ (Pair {} 0x) ] - - location: 8 (just consumed gas: 0.010) - [ {} - 0x ] - - location: 9 (just consumed gas: 0.010) - [ 0x - {} ] - - location: 10 (just consumed gas: 0.010) - [ { 0x } ] - - location: 11 (just consumed gas: 0.110) - [ 0x ] - - location: 12 (just consumed gas: 0.010) - [ {} - 0x ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} 0x) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage65410082--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage65410082--input457300675-.out deleted file mode 100644 index c8e8d4883b4de64453a67c7f1b606ad0af0db44e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage65410082--input457300675-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_concat_bytes.tz on storage 0xabcd and input '{}' --level 1 --trace-stack -storage - 0xabcd -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.522) - [ (Pair {} 0xabcd) ] - - location: 8 (just consumed gas: 0.010) - [ {} - 0xabcd ] - - location: 9 (just consumed gas: 0.010) - [ 0xabcd - {} ] - - location: 10 (just consumed gas: 0.010) - [ { 0xabcd } ] - - location: 11 (just consumed gas: 0.111) - [ 0xabcd ] - - location: 12 (just consumed gas: 0.010) - [ {} - 0xabcd ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} 0xabcd) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage726220441--input972761363-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage726220441--input972761363-.out deleted file mode 100644 index c644853f4e83ec7ff30ee726650ccc2f685c895c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_concat_bytes--storage726220441--input972761363-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_concat_bytes.tz on storage 0x00ab and input '{ 0xcd ; 0xef ; 0x00 }' --level 1 --trace-stack -storage - 0x00abcdef00 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.822) - [ (Pair { 0xcd ; 0xef ; 0x00 } 0x00ab) ] - - location: 8 (just consumed gas: 0.010) - [ { 0xcd ; 0xef ; 0x00 } - 0x00ab ] - - location: 9 (just consumed gas: 0.010) - [ 0x00ab - { 0xcd ; 0xef ; 0x00 } ] - - location: 10 (just consumed gas: 0.010) - [ { 0x00ab ; 0xcd ; 0xef ; 0x00 } ] - - location: 11 (just consumed gas: 0.142) - [ 0x00abcdef00 ] - - location: 12 (just consumed gas: 0.010) - [ {} - 0x00abcdef00 ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} 0x00abcdef00) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input264787654-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input264787654-.out deleted file mode 100644 index 792d7ca251acad47b6381b6339fcbb5babbbb51a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input264787654-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_id.tz on storage '{""}' and input '{ "a" ; "b" ; "c" }' --level 1 --trace-stack -storage - { "a" ; "b" ; "c" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.418) - [ (Pair { "a" ; "b" ; "c" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input457300675-.out deleted file mode 100644 index 2d2c646e232fbf7af5a824220c3a4c796e12cfe8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input457300675-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_id.tz on storage '{""}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.043) - [ (Pair {} { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ {} - {} ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input656499821-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input656499821-.out deleted file mode 100644 index 582a394510e8e77ae407ee66f0ff2d36dac8abf9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id--storage528921618--input656499821-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_id.tz on storage '{""}' and input '{ "1" ; "2" ; "3" }' --level 1 --trace-stack -storage - { "1" ; "2" ; "3" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.418) - [ (Pair { "1" ; "2" ; "3" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "1" ; "2" ; "3" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "1" ; "2" ; "3" } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { "1" ; "2" ; "3" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input264787654-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input264787654-.out deleted file mode 100644 index b5db901afdb24d16ef6eaa85d29c624fcf03c2bd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input264787654-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_id_map.tz on storage '{""}' and input '{ "a" ; "b" ; "c" }' --level 1 --trace-stack -storage - { "a" ; "b" ; "c" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.377) - [ (Pair { "a" ; "b" ; "c" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 10 (just consumed gas: 0.050) - [ "a" ] - - location: 10 (just consumed gas: 0.055) - [ "b" ] - - location: 10 (just consumed gas: 0.055) - [ "c" ] - - location: 10 (just consumed gas: 0.069) - [ { "a" ; "b" ; "c" } ] - - location: 12 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input457300675-.out deleted file mode 100644 index 626a188716a3dcb5fb61009106f1e98ae589ab9a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input457300675-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_id_map.tz on storage '{""}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.002) - [ (Pair {} { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.060) - [ {} ] - - location: 12 (just consumed gas: 0.010) - [ {} - {} ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input656499821-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input656499821-.out deleted file mode 100644 index 5730c0987dc327bc7deb9b2efac8ae23473ce819..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_id_map--storage528921618--input656499821-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_id_map.tz on storage '{""}' and input '{ "1" ; "2" ; "3" }' --level 1 --trace-stack -storage - { "1" ; "2" ; "3" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.377) - [ (Pair { "1" ; "2" ; "3" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "1" ; "2" ; "3" } ] - - location: 10 (just consumed gas: 0.050) - [ "1" ] - - location: 10 (just consumed gas: 0.055) - [ "2" ] - - location: 10 (just consumed gas: 0.055) - [ "3" ] - - location: 10 (just consumed gas: 0.069) - [ { "1" ; "2" ; "3" } ] - - location: 12 (just consumed gas: 0.010) - [ {} - { "1" ; "2" ; "3" } ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} { "1" ; "2" ; "3" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_iter--storage680650890--input568817463-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_iter--storage680650890--input568817463-.out deleted file mode 100644 index 4dc11072c00bcd706f79a686d3820d4f015e2004..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_iter--storage680650890--input568817463-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_iter.tz on storage 0 and input '{ 10 ; 2 ; 1 }' --level 1 --trace-stack -storage - 20 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.896) - [ (Pair { 10 ; 2 ; 1 } 0) ] - - location: 8 (just consumed gas: 0.010) - [ { 10 ; 2 ; 1 } ] - - location: 9 (just consumed gas: 0.010) - [ 1 - { 10 ; 2 ; 1 } ] - - location: 12 (just consumed gas: 0.010) - [ { 10 ; 2 ; 1 } - 1 ] - - location: 13 (just consumed gas: 0.030) - [ 10 - 1 ] - - location: 15 (just consumed gas: 0.059) - [ 10 ] - - location: 13 (just consumed gas: 0.025) - [ 2 - 10 ] - - location: 15 (just consumed gas: 0.059) - [ 20 ] - - location: 13 (just consumed gas: 0.025) - [ 1 - 20 ] - - location: 15 (just consumed gas: 0.059) - [ 20 ] - - location: 13 (just consumed gas: 0.035) - [ 20 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 20 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 20) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_iter--storage680650890--input737923774-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_iter--storage680650890--input737923774-.out deleted file mode 100644 index cd8cf43f7304256b86978d5a8bf6e385e09c1b3b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_iter--storage680650890--input737923774-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_iter.tz on storage 0 and input '{ 3 ; 6 ; 9 }' --level 1 --trace-stack -storage - 162 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.896) - [ (Pair { 3 ; 6 ; 9 } 0) ] - - location: 8 (just consumed gas: 0.010) - [ { 3 ; 6 ; 9 } ] - - location: 9 (just consumed gas: 0.010) - [ 1 - { 3 ; 6 ; 9 } ] - - location: 12 (just consumed gas: 0.010) - [ { 3 ; 6 ; 9 } - 1 ] - - location: 13 (just consumed gas: 0.030) - [ 3 - 1 ] - - location: 15 (just consumed gas: 0.059) - [ 3 ] - - location: 13 (just consumed gas: 0.025) - [ 6 - 3 ] - - location: 15 (just consumed gas: 0.059) - [ 18 ] - - location: 13 (just consumed gas: 0.025) - [ 9 - 18 ] - - location: 15 (just consumed gas: 0.059) - [ 162 ] - - location: 13 (just consumed gas: 0.035) - [ 162 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 162 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 162) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input457300675-.out deleted file mode 100644 index 859234be1b2a3549076ee2d5ed7c716247ec22dc..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input457300675-.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_map_block.tz on storage '{0}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 11.811) - [ (Pair {} { 0 }) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ 0 - {} ] - - location: 13 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 14 (just consumed gas: 0.060) - [ {} - 0 ] - - location: 26 (just consumed gas: 0.010) - [ {} - {} - 0 ] - - location: 28 (just consumed gas: 0.010) - [ (Pair {} {}) - 0 ] - - location: 29 (just consumed gas: 0.010) - [ 0 ] - - location: 31 (just consumed gas: 0.010) - [ ] - - location: 29 (just consumed gas: 0.035) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input648737279-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input648737279-.out deleted file mode 100644 index f7e187de57f0296324c9e8d53f98e4e731c87dbc..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input648737279-.out +++ /dev/null @@ -1,136 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_map_block.tz on storage '{0}' and input '{ 1 ; 2 ; 3 ; 0 }' --level 1 --trace-stack -storage - { 1 ; 3 ; 5 ; 3 } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 12.211) - [ (Pair { 1 ; 2 ; 3 ; 0 } { 0 }) ] - - location: 9 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 ; 0 } ] - - location: 10 (just consumed gas: 0.010) - [ 0 - { 1 ; 2 ; 3 ; 0 } ] - - location: 13 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 ; 0 } - 0 ] - - location: 14 (just consumed gas: 0.050) - [ 1 - 0 ] - - location: 16 (just consumed gas: 0.010) - [ 0 ] - - location: 18 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 16 (just consumed gas: 0.035) - [ 1 - 0 - 0 ] - - location: 19 (just consumed gas: 0.035) - [ 1 - 0 ] - - location: 20 (just consumed gas: 0.010) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 0 ] - - location: 25 (just consumed gas: 0.035) - [ 1 ] - - location: 20 (just consumed gas: 0.035) - [ 1 - 1 ] - - location: 14 (just consumed gas: 0.055) - [ 2 - 1 ] - - location: 16 (just consumed gas: 0.010) - [ 1 ] - - location: 18 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 16 (just consumed gas: 0.035) - [ 2 - 1 - 1 ] - - location: 19 (just consumed gas: 0.035) - [ 3 - 1 ] - - location: 20 (just consumed gas: 0.010) - [ 1 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 25 (just consumed gas: 0.035) - [ 2 ] - - location: 20 (just consumed gas: 0.035) - [ 3 - 2 ] - - location: 14 (just consumed gas: 0.055) - [ 3 - 2 ] - - location: 16 (just consumed gas: 0.010) - [ 2 ] - - location: 18 (just consumed gas: 0.010) - [ 2 - 2 ] - - location: 16 (just consumed gas: 0.035) - [ 3 - 2 - 2 ] - - location: 19 (just consumed gas: 0.035) - [ 5 - 2 ] - - location: 20 (just consumed gas: 0.010) - [ 2 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 2 ] - - location: 25 (just consumed gas: 0.035) - [ 3 ] - - location: 20 (just consumed gas: 0.035) - [ 5 - 3 ] - - location: 14 (just consumed gas: 0.055) - [ 0 - 3 ] - - location: 16 (just consumed gas: 0.010) - [ 3 ] - - location: 18 (just consumed gas: 0.010) - [ 3 - 3 ] - - location: 16 (just consumed gas: 0.035) - [ 0 - 3 - 3 ] - - location: 19 (just consumed gas: 0.035) - [ 3 - 3 ] - - location: 20 (just consumed gas: 0.010) - [ 3 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 3 ] - - location: 25 (just consumed gas: 0.035) - [ 4 ] - - location: 20 (just consumed gas: 0.035) - [ 3 - 4 ] - - location: 14 (just consumed gas: 0.072) - [ { 1 ; 3 ; 5 ; 3 } - 4 ] - - location: 26 (just consumed gas: 0.010) - [ {} - { 1 ; 3 ; 5 ; 3 } - 4 ] - - location: 28 (just consumed gas: 0.010) - [ (Pair {} { 1 ; 3 ; 5 ; 3 }) - 4 ] - - location: 29 (just consumed gas: 0.010) - [ 4 ] - - location: 31 (just consumed gas: 0.010) - [ ] - - location: 29 (just consumed gas: 0.035) - [ (Pair {} { 1 ; 3 ; 5 ; 3 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input908379154-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input908379154-.out deleted file mode 100644 index b6468f3adb52fd1c9728c8b7e46f67c152fb8831..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_map_block--storage907453363--input908379154-.out +++ /dev/null @@ -1,136 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_map_block.tz on storage '{0}' and input '{ 1 ; 1 ; 1 ; 1 }' --level 1 --trace-stack -storage - { 1 ; 2 ; 3 ; 4 } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 12.211) - [ (Pair { 1 ; 1 ; 1 ; 1 } { 0 }) ] - - location: 9 (just consumed gas: 0.010) - [ { 1 ; 1 ; 1 ; 1 } ] - - location: 10 (just consumed gas: 0.010) - [ 0 - { 1 ; 1 ; 1 ; 1 } ] - - location: 13 (just consumed gas: 0.010) - [ { 1 ; 1 ; 1 ; 1 } - 0 ] - - location: 14 (just consumed gas: 0.050) - [ 1 - 0 ] - - location: 16 (just consumed gas: 0.010) - [ 0 ] - - location: 18 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 16 (just consumed gas: 0.035) - [ 1 - 0 - 0 ] - - location: 19 (just consumed gas: 0.035) - [ 1 - 0 ] - - location: 20 (just consumed gas: 0.010) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 0 ] - - location: 25 (just consumed gas: 0.035) - [ 1 ] - - location: 20 (just consumed gas: 0.035) - [ 1 - 1 ] - - location: 14 (just consumed gas: 0.055) - [ 1 - 1 ] - - location: 16 (just consumed gas: 0.010) - [ 1 ] - - location: 18 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 16 (just consumed gas: 0.035) - [ 1 - 1 - 1 ] - - location: 19 (just consumed gas: 0.035) - [ 2 - 1 ] - - location: 20 (just consumed gas: 0.010) - [ 1 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 25 (just consumed gas: 0.035) - [ 2 ] - - location: 20 (just consumed gas: 0.035) - [ 2 - 2 ] - - location: 14 (just consumed gas: 0.055) - [ 1 - 2 ] - - location: 16 (just consumed gas: 0.010) - [ 2 ] - - location: 18 (just consumed gas: 0.010) - [ 2 - 2 ] - - location: 16 (just consumed gas: 0.035) - [ 1 - 2 - 2 ] - - location: 19 (just consumed gas: 0.035) - [ 3 - 2 ] - - location: 20 (just consumed gas: 0.010) - [ 2 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 2 ] - - location: 25 (just consumed gas: 0.035) - [ 3 ] - - location: 20 (just consumed gas: 0.035) - [ 3 - 3 ] - - location: 14 (just consumed gas: 0.055) - [ 1 - 3 ] - - location: 16 (just consumed gas: 0.010) - [ 3 ] - - location: 18 (just consumed gas: 0.010) - [ 3 - 3 ] - - location: 16 (just consumed gas: 0.035) - [ 1 - 3 - 3 ] - - location: 19 (just consumed gas: 0.035) - [ 4 - 3 ] - - location: 20 (just consumed gas: 0.010) - [ 3 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 3 ] - - location: 25 (just consumed gas: 0.035) - [ 4 ] - - location: 20 (just consumed gas: 0.035) - [ 4 - 4 ] - - location: 14 (just consumed gas: 0.072) - [ { 1 ; 2 ; 3 ; 4 } - 4 ] - - location: 26 (just consumed gas: 0.010) - [ {} - { 1 ; 2 ; 3 ; 4 } - 4 ] - - location: 28 (just consumed gas: 0.010) - [ (Pair {} { 1 ; 2 ; 3 ; 4 }) - 4 ] - - location: 29 (just consumed gas: 0.010) - [ 4 ] - - location: 31 (just consumed gas: 0.010) - [ ] - - location: 29 (just consumed gas: 0.035) - [ (Pair {} { 1 ; 2 ; 3 ; 4 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input403499055-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input403499055-.out deleted file mode 100644 index cce26eaf7f390ee165dba5b677f04cadfed51eaf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input403499055-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_size.tz on storage 111 and input '{ 1 ; 2 ; 3 ; 4 ; 5 ; 6 }' --level 1 --trace-stack -storage - 6 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.886) - [ (Pair { 1 ; 2 ; 3 ; 4 ; 5 ; 6 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 } ] - - location: 9 (just consumed gas: 0.010) - [ 6 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 6 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 6) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input457300675-.out deleted file mode 100644 index be722d087b84097b6dadeb0491090d31a0ace912..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input457300675-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_size.tz on storage 111 and input '{}' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.286) - [ (Pair {} 111) ] - - location: 8 (just consumed gas: 0.010) - [ {} ] - - location: 9 (just consumed gas: 0.010) - [ 0 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input469078912-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input469078912-.out deleted file mode 100644 index 31d7681a0e1b947ad15ad0eaea496e1a1766c8f7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input469078912-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_size.tz on storage 111 and input '{ 1 ; 2 ; 3 }' --level 1 --trace-stack -storage - 3 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.586) - [ (Pair { 1 ; 2 ; 3 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 } ] - - location: 9 (just consumed gas: 0.010) - [ 3 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 3 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 3) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input802622031-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input802622031-.out deleted file mode 100644 index 88854396f7deced582d42abb97456128d74ce105..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -list_size--storage492856247--input802622031-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/list_size.tz on storage 111 and input '{ 1 }' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.386) - [ (Pair { 1 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 } ] - - location: 9 (just consumed gas: 0.010) - [ 1 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -loop_left--storage528921618--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -loop_left--storage528921618--input457300675-.out deleted file mode 100644 index 21aa4ef2cde15537691e26b2cbe476e91e2161c8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -loop_left--storage528921618--input457300675-.out +++ /dev/null @@ -1,52 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/loop_left.tz on storage '{""}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 16.607) - [ (Pair {} { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ {} - {} ] - - location: 12 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} {}) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair {} {})) ] - - location: 41 (just consumed gas: 0.020) - [ (Pair {} {}) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} {}) - (Pair {} {}) ] - - location: 20 (just consumed gas: 0.010) - [ {} - (Pair {} {}) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} {}) ] - - location: 23 (just consumed gas: 0.010) - [ {} ] - - location: 21 (just consumed gas: 0.035) - [ {} - {} ] - - location: 24 (just consumed gas: 0.010) - [ {} ] - - location: 35 (just consumed gas: 0.010) - [ (Right {}) ] - - location: 24 (just consumed gas: 0.025) - [ (Right {}) ] - - location: 41 (just consumed gas: 0.035) - [ {} ] - - location: 41 (just consumed gas: 0.010) - [ {} - {} ] - - location: 43 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -loop_left--storage528921618--input851203613-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -loop_left--storage528921618--input851203613-.out deleted file mode 100644 index c8c34ed3c24e1e01d709b6585b92dfc1344fcbc4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -loop_left--storage528921618--input851203613-.out +++ /dev/null @@ -1,163 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/loop_left.tz on storage '{""}' and input '{ "c" ; "b" ; "a" }' --level 1 --trace-stack -storage - { "a" ; "b" ; "c" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 16.982) - [ (Pair { "c" ; "b" ; "a" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "c" ; "b" ; "a" } ] - - location: 12 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } - {} ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { "c" ; "b" ; "a" } {}) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair { "c" ; "b" ; "a" } {})) ] - - location: 41 (just consumed gas: 0.020) - [ (Pair { "c" ; "b" ; "a" } {}) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair { "c" ; "b" ; "a" } {}) - (Pair { "c" ; "b" ; "a" } {}) ] - - location: 20 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } - (Pair { "c" ; "b" ; "a" } {}) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair { "c" ; "b" ; "a" } {}) ] - - location: 23 (just consumed gas: 0.010) - [ {} ] - - location: 21 (just consumed gas: 0.035) - [ { "c" ; "b" ; "a" } - {} ] - - location: 24 (just consumed gas: 0.010) - [ "c" - { "b" ; "a" } - {} ] - - location: 26 (just consumed gas: 0.010) - [ { "b" ; "a" } - "c" - {} ] - - location: 27 (just consumed gas: 0.010) - [ "c" - {} ] - - location: 29 (just consumed gas: 0.010) - [ { "c" } ] - - location: 27 (just consumed gas: 0.035) - [ { "b" ; "a" } - { "c" } ] - - location: 30 (just consumed gas: 0.010) - [ (Pair { "b" ; "a" } { "c" }) ] - - location: 31 (just consumed gas: 0.010) - [ (Left (Pair { "b" ; "a" } { "c" })) ] - - location: 24 (just consumed gas: 0.025) - [ (Left (Pair { "b" ; "a" } { "c" })) ] - - location: 41 (just consumed gas: 0.025) - [ (Pair { "b" ; "a" } { "c" }) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair { "b" ; "a" } { "c" }) - (Pair { "b" ; "a" } { "c" }) ] - - location: 20 (just consumed gas: 0.010) - [ { "b" ; "a" } - (Pair { "b" ; "a" } { "c" }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair { "b" ; "a" } { "c" }) ] - - location: 23 (just consumed gas: 0.010) - [ { "c" } ] - - location: 21 (just consumed gas: 0.035) - [ { "b" ; "a" } - { "c" } ] - - location: 24 (just consumed gas: 0.010) - [ "b" - { "a" } - { "c" } ] - - location: 26 (just consumed gas: 0.010) - [ { "a" } - "b" - { "c" } ] - - location: 27 (just consumed gas: 0.010) - [ "b" - { "c" } ] - - location: 29 (just consumed gas: 0.010) - [ { "b" ; "c" } ] - - location: 27 (just consumed gas: 0.035) - [ { "a" } - { "b" ; "c" } ] - - location: 30 (just consumed gas: 0.010) - [ (Pair { "a" } { "b" ; "c" }) ] - - location: 31 (just consumed gas: 0.010) - [ (Left (Pair { "a" } { "b" ; "c" })) ] - - location: 24 (just consumed gas: 0.025) - [ (Left (Pair { "a" } { "b" ; "c" })) ] - - location: 41 (just consumed gas: 0.025) - [ (Pair { "a" } { "b" ; "c" }) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair { "a" } { "b" ; "c" }) - (Pair { "a" } { "b" ; "c" }) ] - - location: 20 (just consumed gas: 0.010) - [ { "a" } - (Pair { "a" } { "b" ; "c" }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair { "a" } { "b" ; "c" }) ] - - location: 23 (just consumed gas: 0.010) - [ { "b" ; "c" } ] - - location: 21 (just consumed gas: 0.035) - [ { "a" } - { "b" ; "c" } ] - - location: 24 (just consumed gas: 0.010) - [ "a" - {} - { "b" ; "c" } ] - - location: 26 (just consumed gas: 0.010) - [ {} - "a" - { "b" ; "c" } ] - - location: 27 (just consumed gas: 0.010) - [ "a" - { "b" ; "c" } ] - - location: 29 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 27 (just consumed gas: 0.035) - [ {} - { "a" ; "b" ; "c" } ] - - location: 30 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - - location: 31 (just consumed gas: 0.010) - [ (Left (Pair {} { "a" ; "b" ; "c" })) ] - - location: 24 (just consumed gas: 0.025) - [ (Left (Pair {} { "a" ; "b" ; "c" })) ] - - location: 41 (just consumed gas: 0.025) - [ (Pair {} { "a" ; "b" ; "c" }) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) - (Pair {} { "a" ; "b" ; "c" }) ] - - location: 20 (just consumed gas: 0.010) - [ {} - (Pair {} { "a" ; "b" ; "c" }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - - location: 23 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 21 (just consumed gas: 0.035) - [ {} - { "a" ; "b" ; "c" } ] - - location: 24 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 35 (just consumed gas: 0.010) - [ (Right { "a" ; "b" ; "c" }) ] - - location: 24 (just consumed gas: 0.025) - [ (Right { "a" ; "b" ; "c" }) ] - - location: 41 (just consumed gas: 0.035) - [ { "a" ; "b" ; "c" } ] - - location: 41 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 43 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -lsl_bytes--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -lsl_bytes--storage125992234--input125992234-.out deleted file mode 100644 index 568aa42f5d7a26dd4c23663975a9cfbf9625faee..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -lsl_bytes--storage125992234--input125992234-.out +++ /dev/null @@ -1,93 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/lsl_bytes_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 35.762) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0 ] - - location: 11 (just consumed gas: 0.010) - [ 0x06 - 0 ] - - location: 14 (just consumed gas: 0.065) - [ 0x06 ] - - location: 15 (just consumed gas: 0.010) - [ 0x06 - 0x06 ] - - location: 20 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 1 ] - - location: 31 (just consumed gas: 0.010) - [ 0x06 - 1 ] - - location: 34 (just consumed gas: 0.065) - [ 0x000c ] - - location: 35 (just consumed gas: 0.010) - [ 0x000c - 0x000c ] - - location: 40 (just consumed gas: 0.035) - [ 0 ] - - location: 41 (just consumed gas: 0.010) - [ True ] - - location: 42 (just consumed gas: 0.010) - [ ] - - location: 42 (just consumed gas: 0.025) - [ ] - - location: 48 (just consumed gas: 0.010) - [ 8 ] - - location: 51 (just consumed gas: 0.010) - [ 0x06 - 8 ] - - location: 54 (just consumed gas: 0.065) - [ 0x0600 ] - - location: 55 (just consumed gas: 0.010) - [ 0x0600 - 0x0600 ] - - location: 60 (just consumed gas: 0.035) - [ 0 ] - - location: 61 (just consumed gas: 0.010) - [ True ] - - location: 62 (just consumed gas: 0.010) - [ ] - - location: 62 (just consumed gas: 0.025) - [ ] - - location: 68 (just consumed gas: 0.010) - [ 1 ] - - location: 71 (just consumed gas: 0.010) - [ 0x0006 - 1 ] - - location: 74 (just consumed gas: 0.066) - [ 0x00000c ] - - location: 75 (just consumed gas: 0.010) - [ 0x00000c - 0x00000c ] - - location: 80 (just consumed gas: 0.035) - [ 0 ] - - location: 81 (just consumed gas: 0.010) - [ True ] - - location: 82 (just consumed gas: 0.010) - [ ] - - location: 82 (just consumed gas: 0.025) - [ ] - - location: 88 (just consumed gas: 0.010) - [ Unit ] - - location: 89 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 91 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -lsr_bytes--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -lsr_bytes--storage125992234--input125992234-.out deleted file mode 100644 index 52703baeca421b055d282987580362085ff95d6a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -lsr_bytes--storage125992234--input125992234-.out +++ /dev/null @@ -1,129 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/lsr_bytes_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 52.083) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 1 ] - - location: 11 (just consumed gas: 0.010) - [ 0x06 - 1 ] - - location: 14 (just consumed gas: 0.055) - [ 0x03 ] - - location: 15 (just consumed gas: 0.010) - [ 0x03 - 0x03 ] - - location: 20 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 8 ] - - location: 31 (just consumed gas: 0.010) - [ 0x06 - 8 ] - - location: 34 (just consumed gas: 0.055) - [ 0x ] - - location: 35 (just consumed gas: 0.010) - [ 0x - 0x ] - - location: 40 (just consumed gas: 0.035) - [ 0 ] - - location: 41 (just consumed gas: 0.010) - [ True ] - - location: 42 (just consumed gas: 0.010) - [ ] - - location: 42 (just consumed gas: 0.025) - [ ] - - location: 48 (just consumed gas: 0.010) - [ 1 ] - - location: 51 (just consumed gas: 0.010) - [ 0x0006 - 1 ] - - location: 54 (just consumed gas: 0.056) - [ 0x0003 ] - - location: 55 (just consumed gas: 0.010) - [ 0x0003 - 0x0003 ] - - location: 60 (just consumed gas: 0.035) - [ 0 ] - - location: 61 (just consumed gas: 0.010) - [ True ] - - location: 62 (just consumed gas: 0.010) - [ ] - - location: 62 (just consumed gas: 0.025) - [ ] - - location: 68 (just consumed gas: 0.010) - [ 8 ] - - location: 71 (just consumed gas: 0.010) - [ 0x0006 - 8 ] - - location: 74 (just consumed gas: 0.055) - [ 0x00 ] - - location: 75 (just consumed gas: 0.010) - [ 0x00 - 0x00 ] - - location: 80 (just consumed gas: 0.035) - [ 0 ] - - location: 81 (just consumed gas: 0.010) - [ True ] - - location: 82 (just consumed gas: 0.010) - [ ] - - location: 82 (just consumed gas: 0.025) - [ ] - - location: 88 (just consumed gas: 0.010) - [ 0 ] - - location: 91 (just consumed gas: 0.010) - [ 0x001234 - 0 ] - - location: 94 (just consumed gas: 0.056) - [ 0x001234 ] - - location: 95 (just consumed gas: 0.010) - [ 0x001234 - 0x001234 ] - - location: 100 (just consumed gas: 0.035) - [ 0 ] - - location: 101 (just consumed gas: 0.010) - [ True ] - - location: 102 (just consumed gas: 0.010) - [ ] - - location: 102 (just consumed gas: 0.025) - [ ] - - location: 108 (just consumed gas: 0.010) - [ 30 ] - - location: 111 (just consumed gas: 0.010) - [ 0x001234 - 30 ] - - location: 114 (just consumed gas: 0.055) - [ 0x ] - - location: 115 (just consumed gas: 0.010) - [ 0x - 0x ] - - location: 120 (just consumed gas: 0.035) - [ 0 ] - - location: 121 (just consumed gas: 0.010) - [ True ] - - location: 122 (just consumed gas: 0.010) - [ ] - - location: 122 (just consumed gas: 0.025) - [ ] - - location: 128 (just consumed gas: 0.010) - [ Unit ] - - location: 129 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 131 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input1027566226-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input1027566226-.out deleted file mode 100644 index cf90d59abc91b26d33c21c1805d6afcc33106929..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input1027566226-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_id.tz on storage '{}' and input '{ Elt 0 0 }' --level 1 --trace-stack -storage - { Elt 0 0 } -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 4.579) - [ (Pair { Elt 0 0 } {}) ] - - location: 11 (just consumed gas: 0.010) - [ { Elt 0 0 } ] - - location: 12 (just consumed gas: 0.010) - [ {} - { Elt 0 0 } ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} { Elt 0 0 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input276660554-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input276660554-.out deleted file mode 100644 index 9c33b223efed04154c5214aca4a9ba3fc7e61b8d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input276660554-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_id.tz on storage '{}' and input '{ Elt 0 0 ; Elt 3 4 }' --level 1 --trace-stack -storage - { Elt 0 0 ; Elt 3 4 } -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 4.869) - [ (Pair { Elt 0 0 ; Elt 3 4 } {}) ] - - location: 11 (just consumed gas: 0.010) - [ { Elt 0 0 ; Elt 3 4 } ] - - location: 12 (just consumed gas: 0.010) - [ {} - { Elt 0 0 ; Elt 3 4 } ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} { Elt 0 0 ; Elt 3 4 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input599923743-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input599923743-.out deleted file mode 100644 index a6d5ab49205b1c23cdce19050f1ef31576bcfbc8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_id--storage457300675--input599923743-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_id.tz on storage '{}' and input '{ Elt 0 1 }' --level 1 --trace-stack -storage - { Elt 0 1 } -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 4.579) - [ (Pair { Elt 0 1 } {}) ] - - location: 11 (just consumed gas: 0.010) - [ { Elt 0 1 } ] - - location: 12 (just consumed gas: 0.010) - [ {} - { Elt 0 1 } ] - - location: 14 (just consumed gas: 0.010) - [ (Pair {} { Elt 0 1 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_iter--storage1011138251--input403579222-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_iter--storage1011138251--input403579222-.out deleted file mode 100644 index 8877c3e6e7edef2f34bee194b0f1c862973ae387..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_iter--storage1011138251--input403579222-.out +++ /dev/null @@ -1,152 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_iter.tz on storage '(Pair 0 0)' and input '{ Elt 1 1 ; Elt 2 100 }' --level 1 --trace-stack -storage - (Pair 3 101) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 18.332) - [ (Pair { Elt 1 1 ; Elt 2 100 } 0 0) ] - - location: 11 (just consumed gas: 0.010) - [ { Elt 1 1 ; Elt 2 100 } ] - - location: 12 (just consumed gas: 0.010) - [ 0 - { Elt 1 1 ; Elt 2 100 } ] - - location: 15 (just consumed gas: 0.010) - [ 0 - 0 - { Elt 1 1 ; Elt 2 100 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 0 0) - { Elt 1 1 ; Elt 2 100 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 1 ; Elt 2 100 } - (Pair 0 0) ] - - location: 20 (just consumed gas: 0.075) - [ (Pair 1 1) - (Pair 0 0) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 0 0) - (Pair 0 0) ] - - location: 25 (just consumed gas: 0.010) - [ 0 - (Pair 0 0) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 28 (just consumed gas: 0.010) - [ 0 ] - - location: 26 (just consumed gas: 0.035) - [ 0 - 0 ] - - location: 22 (just consumed gas: 0.035) - [ (Pair 1 1) - 0 - 0 ] - - location: 29 (just consumed gas: 0.010) - [ (Pair 1 1) - (Pair 1 1) - 0 - 0 ] - - location: 30 (just consumed gas: 0.010) - [ (Pair 1 1) - 0 - 0 ] - - location: 32 (just consumed gas: 0.010) - [ 1 - 0 - 0 ] - - location: 33 (just consumed gas: 0.035) - [ 1 - 0 ] - - location: 30 (just consumed gas: 0.035) - [ (Pair 1 1) - 1 - 0 ] - - location: 34 (just consumed gas: 0.010) - [ 1 - (Pair 1 1) - 0 ] - - location: 35 (just consumed gas: 0.010) - [ (Pair 1 1) - 0 ] - - location: 37 (just consumed gas: 0.010) - [ 1 - 0 ] - - location: 38 (just consumed gas: 0.035) - [ 1 ] - - location: 35 (just consumed gas: 0.035) - [ 1 - 1 ] - - location: 39 (just consumed gas: 0.010) - [ (Pair 1 1) ] - - location: 20 (just consumed gas: 0.025) - [ (Pair 2 100) - (Pair 1 1) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair 1 1) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 1 1) - (Pair 1 1) ] - - location: 25 (just consumed gas: 0.010) - [ 1 - (Pair 1 1) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair 1 1) ] - - location: 28 (just consumed gas: 0.010) - [ 1 ] - - location: 26 (just consumed gas: 0.035) - [ 1 - 1 ] - - location: 22 (just consumed gas: 0.035) - [ (Pair 2 100) - 1 - 1 ] - - location: 29 (just consumed gas: 0.010) - [ (Pair 2 100) - (Pair 2 100) - 1 - 1 ] - - location: 30 (just consumed gas: 0.010) - [ (Pair 2 100) - 1 - 1 ] - - location: 32 (just consumed gas: 0.010) - [ 2 - 1 - 1 ] - - location: 33 (just consumed gas: 0.035) - [ 3 - 1 ] - - location: 30 (just consumed gas: 0.035) - [ (Pair 2 100) - 3 - 1 ] - - location: 34 (just consumed gas: 0.010) - [ 3 - (Pair 2 100) - 1 ] - - location: 35 (just consumed gas: 0.010) - [ (Pair 2 100) - 1 ] - - location: 37 (just consumed gas: 0.010) - [ 100 - 1 ] - - location: 38 (just consumed gas: 0.035) - [ 101 ] - - location: 35 (just consumed gas: 0.035) - [ 3 - 101 ] - - location: 39 (just consumed gas: 0.010) - [ (Pair 3 101) ] - - location: 20 (just consumed gas: 0.035) - [ (Pair 3 101) ] - - location: 40 (just consumed gas: 0.010) - [ {} - (Pair 3 101) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair {} 3 101) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_iter--storage1011138251--input532072758-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_iter--storage1011138251--input532072758-.out deleted file mode 100644 index 62dfef439341aff38fbe26cf1dac315ba92fabf7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_iter--storage1011138251--input532072758-.out +++ /dev/null @@ -1,152 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_iter.tz on storage '(Pair 0 0)' and input '{ Elt 0 100 ; Elt 2 100 }' --level 1 --trace-stack -storage - (Pair 2 200) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 18.332) - [ (Pair { Elt 0 100 ; Elt 2 100 } 0 0) ] - - location: 11 (just consumed gas: 0.010) - [ { Elt 0 100 ; Elt 2 100 } ] - - location: 12 (just consumed gas: 0.010) - [ 0 - { Elt 0 100 ; Elt 2 100 } ] - - location: 15 (just consumed gas: 0.010) - [ 0 - 0 - { Elt 0 100 ; Elt 2 100 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 0 0) - { Elt 0 100 ; Elt 2 100 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 0 100 ; Elt 2 100 } - (Pair 0 0) ] - - location: 20 (just consumed gas: 0.075) - [ (Pair 0 100) - (Pair 0 0) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 0 0) - (Pair 0 0) ] - - location: 25 (just consumed gas: 0.010) - [ 0 - (Pair 0 0) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 28 (just consumed gas: 0.010) - [ 0 ] - - location: 26 (just consumed gas: 0.035) - [ 0 - 0 ] - - location: 22 (just consumed gas: 0.035) - [ (Pair 0 100) - 0 - 0 ] - - location: 29 (just consumed gas: 0.010) - [ (Pair 0 100) - (Pair 0 100) - 0 - 0 ] - - location: 30 (just consumed gas: 0.010) - [ (Pair 0 100) - 0 - 0 ] - - location: 32 (just consumed gas: 0.010) - [ 0 - 0 - 0 ] - - location: 33 (just consumed gas: 0.035) - [ 0 - 0 ] - - location: 30 (just consumed gas: 0.035) - [ (Pair 0 100) - 0 - 0 ] - - location: 34 (just consumed gas: 0.010) - [ 0 - (Pair 0 100) - 0 ] - - location: 35 (just consumed gas: 0.010) - [ (Pair 0 100) - 0 ] - - location: 37 (just consumed gas: 0.010) - [ 100 - 0 ] - - location: 38 (just consumed gas: 0.035) - [ 100 ] - - location: 35 (just consumed gas: 0.035) - [ 0 - 100 ] - - location: 39 (just consumed gas: 0.010) - [ (Pair 0 100) ] - - location: 20 (just consumed gas: 0.025) - [ (Pair 2 100) - (Pair 0 100) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair 0 100) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 0 100) - (Pair 0 100) ] - - location: 25 (just consumed gas: 0.010) - [ 0 - (Pair 0 100) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair 0 100) ] - - location: 28 (just consumed gas: 0.010) - [ 100 ] - - location: 26 (just consumed gas: 0.035) - [ 0 - 100 ] - - location: 22 (just consumed gas: 0.035) - [ (Pair 2 100) - 0 - 100 ] - - location: 29 (just consumed gas: 0.010) - [ (Pair 2 100) - (Pair 2 100) - 0 - 100 ] - - location: 30 (just consumed gas: 0.010) - [ (Pair 2 100) - 0 - 100 ] - - location: 32 (just consumed gas: 0.010) - [ 2 - 0 - 100 ] - - location: 33 (just consumed gas: 0.035) - [ 2 - 100 ] - - location: 30 (just consumed gas: 0.035) - [ (Pair 2 100) - 2 - 100 ] - - location: 34 (just consumed gas: 0.010) - [ 2 - (Pair 2 100) - 100 ] - - location: 35 (just consumed gas: 0.010) - [ (Pair 2 100) - 100 ] - - location: 37 (just consumed gas: 0.010) - [ 100 - 100 ] - - location: 38 (just consumed gas: 0.035) - [ 200 ] - - location: 35 (just consumed gas: 0.035) - [ 2 - 200 ] - - location: 39 (just consumed gas: 0.010) - [ (Pair 2 200) ] - - location: 20 (just consumed gas: 0.035) - [ (Pair 2 200) ] - - location: 40 (just consumed gas: 0.010) - [ {} - (Pair 2 200) ] - - location: 42 (just consumed gas: 0.010) - [ (Pair {} 2 200) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage457300675--input798141440-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage457300675--input798141440-.out deleted file mode 100644 index 55f3fdc47df072a09fbf68eb49d80bb18152ee29..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage457300675--input798141440-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_map.tz on storage '{}' and input 10 --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 9.038) - [ (Pair 10 {}) ] - - location: 9 (just consumed gas: 0.010) - [ 10 - {} ] - - location: 10 (just consumed gas: 0.010) - [ {} - 10 ] - - location: 11 (just consumed gas: 0.060) - [ {} - 10 ] - - location: 18 (just consumed gas: 0.010) - [ 10 ] - - location: 20 (just consumed gas: 0.010) - [ ] - - location: 18 (just consumed gas: 0.035) - [ {} ] - - location: 21 (just consumed gas: 0.010) - [ {} - {} ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage794999348--input152441147-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage794999348--input152441147-.out deleted file mode 100644 index fe9060f16ad65b0a83611a7c2775abad7447096c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage794999348--input152441147-.out +++ /dev/null @@ -1,68 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_map.tz on storage '{ Elt "bar" 5 ; Elt "foo" 1 }' and input 15 --level 1 --trace-stack -storage - { Elt "bar" 20 ; Elt "foo" 16 } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 9.673) - [ (Pair 15 { Elt "bar" 5 ; Elt "foo" 1 }) ] - - location: 9 (just consumed gas: 0.010) - [ 15 - { Elt "bar" 5 ; Elt "foo" 1 } ] - - location: 10 (just consumed gas: 0.010) - [ { Elt "bar" 5 ; Elt "foo" 1 } - 15 ] - - location: 11 (just consumed gas: 0.067) - [ (Pair "bar" 5) - 15 ] - - location: 13 (just consumed gas: 0.010) - [ 5 - 15 ] - - location: 14 (just consumed gas: 0.010) - [ 15 ] - - location: 16 (just consumed gas: 0.010) - [ 15 - 15 ] - - location: 14 (just consumed gas: 0.035) - [ 5 - 15 - 15 ] - - location: 17 (just consumed gas: 0.035) - [ 20 - 15 ] - - location: 11 (just consumed gas: 0.150) - [ (Pair "foo" 1) - 15 ] - - location: 13 (just consumed gas: 0.010) - [ 1 - 15 ] - - location: 14 (just consumed gas: 0.010) - [ 15 ] - - location: 16 (just consumed gas: 0.010) - [ 15 - 15 ] - - location: 14 (just consumed gas: 0.035) - [ 1 - 15 - 15 ] - - location: 17 (just consumed gas: 0.035) - [ 16 - 15 ] - - location: 11 (just consumed gas: 0.160) - [ { Elt "bar" 20 ; Elt "foo" 16 } - 15 ] - - location: 18 (just consumed gas: 0.010) - [ 15 ] - - location: 20 (just consumed gas: 0.010) - [ ] - - location: 18 (just consumed gas: 0.035) - [ { Elt "bar" 20 ; Elt "foo" 16 } ] - - location: 21 (just consumed gas: 0.010) - [ {} - { Elt "bar" 20 ; Elt "foo" 16 } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 20 ; Elt "foo" 16 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage88008216--input798141440-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage88008216--input798141440-.out deleted file mode 100644 index b211cce6059f6069ce0c56579d3c78f9edae23f0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_map--storage88008216--input798141440-.out +++ /dev/null @@ -1,50 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_map.tz on storage '{ Elt "foo" 1 }' and input 10 --level 1 --trace-stack -storage - { Elt "foo" 11 } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 9.338) - [ (Pair 10 { Elt "foo" 1 }) ] - - location: 9 (just consumed gas: 0.010) - [ 10 - { Elt "foo" 1 } ] - - location: 10 (just consumed gas: 0.010) - [ { Elt "foo" 1 } - 10 ] - - location: 11 (just consumed gas: 0.058) - [ (Pair "foo" 1) - 10 ] - - location: 13 (just consumed gas: 0.010) - [ 1 - 10 ] - - location: 14 (just consumed gas: 0.010) - [ 10 ] - - location: 16 (just consumed gas: 0.010) - [ 10 - 10 ] - - location: 14 (just consumed gas: 0.035) - [ 1 - 10 - 10 ] - - location: 17 (just consumed gas: 0.035) - [ 11 - 10 ] - - location: 11 (just consumed gas: 0.160) - [ { Elt "foo" 11 } - 10 ] - - location: 18 (just consumed gas: 0.010) - [ 10 ] - - location: 20 (just consumed gas: 0.010) - [ ] - - location: 18 (just consumed gas: 0.035) - [ { Elt "foo" 11 } ] - - location: 21 (just consumed gas: 0.010) - [ {} - { Elt "foo" 11 } ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "foo" 11 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage495706788--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage495706788--input453441034-.out deleted file mode 100644 index e98e86cf2ec498aab76d1aceaddca2934256bae7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage495706788--input453441034-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_nat.tz on storage '(Pair {} None)' and input 1 --level 1 --trace-stack -storage - (Pair {} (Some False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.144) - [ (Pair 1 {} None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair {} None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} None) ] - - location: 15 (just consumed gas: 0.010) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.035) - [ 1 - {} - {} ] - - location: 17 (just consumed gas: 0.045) - [ False - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - {} ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair {} (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input453441034-.out deleted file mode 100644 index dce5cef2a49c22d2bcd5f537f7219a50106a15b2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input453441034-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_nat.tz on storage '(Pair { Elt 1 4 ; Elt 2 11 } None)' and input 1 --level 1 --trace-stack -storage - (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.689) - [ (Pair 1 { Elt 1 4 ; Elt 2 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 13 (just consumed gas: 0.035) - [ 1 - { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 17 (just consumed gas: 0.045) - [ True - { Elt 1 4 ; Elt 2 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt 1 4 ; Elt 2 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 4 ; Elt 2 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input564400327-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input564400327-.out deleted file mode 100644 index 95bae5806f699e15ba6146b97c30d4bd5d5f978f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input564400327-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_nat.tz on storage '(Pair { Elt 1 4 ; Elt 2 11 } None)' and input 2 --level 1 --trace-stack -storage - (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.689) - [ (Pair 2 { Elt 1 4 ; Elt 2 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 2 - (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 13 (just consumed gas: 0.035) - [ 2 - { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 17 (just consumed gas: 0.045) - [ True - { Elt 1 4 ; Elt 2 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt 1 4 ; Elt 2 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 4 ; Elt 2 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 4 ; Elt 2 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input654274102-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input654274102-.out deleted file mode 100644 index 78c3a163f93f242f529e0cec50ef564e5e047b52..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage56274299--input654274102-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_nat.tz on storage '(Pair { Elt 1 4 ; Elt 2 11 } None)' and input 3 --level 1 --trace-stack -storage - (Pair { Elt 1 4 ; Elt 2 11 } (Some False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.689) - [ (Pair 3 { Elt 1 4 ; Elt 2 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 3 - (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 13 (just consumed gas: 0.035) - [ 3 - { Elt 1 4 ; Elt 2 11 } - { Elt 1 4 ; Elt 2 11 } ] - - location: 17 (just consumed gas: 0.045) - [ False - { Elt 1 4 ; Elt 2 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt 1 4 ; Elt 2 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 4 ; Elt 2 11 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 4 ; Elt 2 11 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 4 ; Elt 2 11 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 4 ; Elt 2 11 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage690637660--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage690637660--input453441034-.out deleted file mode 100644 index bc6161daf4725d02c37334b404576448b5546e1b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage690637660--input453441034-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_nat.tz on storage '(Pair { Elt 1 0 } None)' and input 1 --level 1 --trace-stack -storage - (Pair { Elt 1 0 } (Some True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.399) - [ (Pair 1 { Elt 1 0 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair { Elt 1 0 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 1 0 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 1 0 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 1 0 } - { Elt 1 0 } ] - - location: 13 (just consumed gas: 0.035) - [ 1 - { Elt 1 0 } - { Elt 1 0 } ] - - location: 17 (just consumed gas: 0.045) - [ True - { Elt 1 0 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt 1 0 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 1 0 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 1 0 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 1 0 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 1 0 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage806237530--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage806237530--input453441034-.out deleted file mode 100644 index f4c1fe77cebd7c72b458bc2b5bb7a4783c213597..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_nat--storage806237530--input453441034-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_nat.tz on storage '(Pair { Elt 0 1 } None)' and input 1 --level 1 --trace-stack -storage - (Pair { Elt 0 1 } (Some False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.399) - [ (Pair 1 { Elt 0 1 } None) ] - - location: 12 (just consumed gas: 0.010) - [ 1 - (Pair { Elt 0 1 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt 0 1 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt 0 1 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt 0 1 } - { Elt 0 1 } ] - - location: 13 (just consumed gas: 0.035) - [ 1 - { Elt 0 1 } - { Elt 0 1 } ] - - location: 17 (just consumed gas: 0.045) - [ False - { Elt 0 1 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt 0 1 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt 0 1 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt 0 1 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt 0 1 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt 0 1 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input1071610051-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input1071610051-.out deleted file mode 100644 index 2d3ea9dd8cb70e1a14f80294c4d6c5c191ad8c3e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input1071610051-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_string.tz on storage '(Pair { Elt "bar" 4 ; Elt "foo" 11 } None)' and input '"baz"' --level 1 --trace-stack -storage - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.824) - [ (Pair "baz" { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "baz" - (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 13 (just consumed gas: 0.035) - [ "baz" - { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 17 (just consumed gas: 0.045) - [ False - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 4 ; Elt "foo" 11 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input700475845-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input700475845-.out deleted file mode 100644 index 66111b9d73c20fabc3d1a123b0595bdff01a480e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input700475845-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_string.tz on storage '(Pair { Elt "bar" 4 ; Elt "foo" 11 } None)' and input '"bar"' --level 1 --trace-stack -storage - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.824) - [ (Pair "bar" { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "bar" - (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 13 (just consumed gas: 0.035) - [ "bar" - { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 17 (just consumed gas: 0.045) - [ True - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input905318451-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input905318451-.out deleted file mode 100644 index aa4a46d5644bb739547604a83ca15461453fe3ea..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage109689253--input905318451-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_string.tz on storage '(Pair { Elt "bar" 4 ; Elt "foo" 11 } None)' and input '"foo"' --level 1 --trace-stack -storage - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.824) - [ (Pair "foo" { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "foo" - (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 13 (just consumed gas: 0.035) - [ "foo" - { Elt "bar" 4 ; Elt "foo" 11 } - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 17 (just consumed gas: 0.045) - [ True - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt "bar" 4 ; Elt "foo" 11 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "bar" 4 ; Elt "foo" 11 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 4 ; Elt "foo" 11 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage495706788--input700475845-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage495706788--input700475845-.out deleted file mode 100644 index c9a6a2dc793e072e78742b9a27f8228c99e648ca..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage495706788--input700475845-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_string.tz on storage '(Pair {} None)' and input '"bar"' --level 1 --trace-stack -storage - (Pair {} (Some False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.189) - [ (Pair "bar" {} None) ] - - location: 12 (just consumed gas: 0.010) - [ "bar" - (Pair {} None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} None) ] - - location: 15 (just consumed gas: 0.010) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.035) - [ "bar" - {} - {} ] - - location: 17 (just consumed gas: 0.045) - [ False - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - {} ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair {} (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage915708427--input700475845-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage915708427--input700475845-.out deleted file mode 100644 index 4bee056f9a6ca4bcd68f57f2bf8568dbf2fa44ba..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage915708427--input700475845-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_string.tz on storage '(Pair { Elt "foo" 1 } None)' and input '"bar"' --level 1 --trace-stack -storage - (Pair { Elt "foo" 1 } (Some False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.489) - [ (Pair "bar" { Elt "foo" 1 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "bar" - (Pair { Elt "foo" 1 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 1 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "foo" 1 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "foo" 1 } - { Elt "foo" 1 } ] - - location: 13 (just consumed gas: 0.035) - [ "bar" - { Elt "foo" 1 } - { Elt "foo" 1 } ] - - location: 17 (just consumed gas: 0.045) - [ False - { Elt "foo" 1 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some False) - { Elt "foo" 1 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "foo" 1 } - (Some False) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 1 } (Some False)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "foo" 1 } (Some False)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "foo" 1 } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage936682951--input905318451-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage936682951--input905318451-.out deleted file mode 100644 index 49f0a7c222e86adc0703257d68cd8c32529d9092..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_mem_string--storage936682951--input905318451-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_mem_string.tz on storage '(Pair { Elt "foo" 0 } None)' and input '"foo"' --level 1 --trace-stack -storage - (Pair { Elt "foo" 0 } (Some True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 9.489) - [ (Pair "foo" { Elt "foo" 0 } None) ] - - location: 12 (just consumed gas: 0.010) - [ "foo" - (Pair { Elt "foo" 0 } None) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 0 } None) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "foo" 0 } ] - - location: 16 (just consumed gas: 0.010) - [ { Elt "foo" 0 } - { Elt "foo" 0 } ] - - location: 13 (just consumed gas: 0.035) - [ "foo" - { Elt "foo" 0 } - { Elt "foo" 0 } ] - - location: 17 (just consumed gas: 0.045) - [ True - { Elt "foo" 0 } ] - - location: 18 (just consumed gas: 0.010) - [ (Some True) - { Elt "foo" 0 } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "foo" 0 } - (Some True) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 0 } (Some True)) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair { Elt "foo" 0 } (Some True)) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} { Elt "foo" 0 } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input15265129-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input15265129-.out deleted file mode 100644 index 96f071d3e823dbbea4faebcfdb81289a17bc815d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input15265129-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_size.tz on storage 111 and input '{ Elt "a" 1 }' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.695) - [ (Pair { Elt "a" 1 } 111) ] - - location: 9 (just consumed gas: 0.010) - [ { Elt "a" 1 } ] - - location: 10 (just consumed gas: 0.010) - [ 1 ] - - location: 11 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input158311065-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input158311065-.out deleted file mode 100644 index 42d995307a923b6385a4a1d26e7f3065786c548a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input158311065-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_size.tz on storage 111 and input '{ Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 }' --level 1 --trace-stack -storage - 3 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 5.325) - [ (Pair { Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 } 111) ] - - location: 9 (just consumed gas: 0.010) - [ { Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 } ] - - location: 10 (just consumed gas: 0.010) - [ 3 ] - - location: 11 (just consumed gas: 0.010) - [ {} - 3 ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} 3) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input456982702-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input456982702-.out deleted file mode 100644 index cf2a318c09bf34c0840dbd6616344232e4337c13..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input456982702-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_size.tz on storage 111 and input '{ Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 ; Elt "d" 4 ; Elt "e" 5 ; Elt "f" 6 }' --level 1 --trace-stack -storage - 6 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.270) - [ (Pair { Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 ; Elt "d" 4 ; Elt "e" 5 ; Elt "f" 6 } 111) ] - - location: 9 (just consumed gas: 0.010) - [ { Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 ; Elt "d" 4 ; Elt "e" 5 ; Elt "f" 6 } ] - - location: 10 (just consumed gas: 0.010) - [ 6 ] - - location: 11 (just consumed gas: 0.010) - [ {} - 6 ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} 6) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input457300675-.out deleted file mode 100644 index 835e933403f0af4ba888b08b07998963c470d98d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -map_size--storage492856247--input457300675-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/map_size.tz on storage 111 and input '{}' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.415) - [ (Pair {} 111) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ 0 ] - - location: 11 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mul--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mul--storage125992234--input125992234-.out deleted file mode 100644 index 05d66b9e5365d07e4fbfec30f654cbe01cf14b05..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mul--storage125992234--input125992234-.out +++ /dev/null @@ -1,131 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/mul.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 50.763) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ Unit ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.010) - [ 7987 ] - - location: 12 (just consumed gas: 0.010) - [ 10 - 7987 ] - - location: 15 (just consumed gas: 0.050) - [ 79870 ] - - location: 16 (just consumed gas: 0.010) - [ 79870 - 79870 ] - - location: 19 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 10 ] - - location: 31 (just consumed gas: 0.010) - [ 7987 - 10 ] - - location: 34 (just consumed gas: 0.050) - [ 79870 ] - - location: 35 (just consumed gas: 0.010) - [ 79870 - 79870 ] - - location: 38 (just consumed gas: 0.035) - [ 0 ] - - location: 40 (just consumed gas: 0.010) - [ True ] - - location: 41 (just consumed gas: 0.010) - [ ] - - location: 41 (just consumed gas: 0.025) - [ ] - - location: 47 (just consumed gas: 0.010) - [ 10 ] - - location: 50 (just consumed gas: 0.010) - [ -7987 - 10 ] - - location: 53 (just consumed gas: 0.064) - [ -79870 ] - - location: 54 (just consumed gas: 0.010) - [ -79870 - -79870 ] - - location: 57 (just consumed gas: 0.035) - [ 0 ] - - location: 59 (just consumed gas: 0.010) - [ True ] - - location: 60 (just consumed gas: 0.010) - [ ] - - location: 60 (just consumed gas: 0.025) - [ ] - - location: 66 (just consumed gas: 0.010) - [ 10 ] - - location: 69 (just consumed gas: 0.010) - [ -7987 - 10 ] - - location: 72 (just consumed gas: 0.064) - [ -79870 ] - - location: 73 (just consumed gas: 0.010) - [ -79870 - -79870 ] - - location: 76 (just consumed gas: 0.035) - [ 0 ] - - location: 78 (just consumed gas: 0.010) - [ True ] - - location: 79 (just consumed gas: 0.010) - [ ] - - location: 79 (just consumed gas: 0.025) - [ ] - - location: 85 (just consumed gas: 0.010) - [ -10 ] - - location: 88 (just consumed gas: 0.010) - [ 7987 - -10 ] - - location: 91 (just consumed gas: 0.064) - [ -79870 ] - - location: 92 (just consumed gas: 0.010) - [ -79870 - -79870 ] - - location: 95 (just consumed gas: 0.035) - [ 0 ] - - location: 97 (just consumed gas: 0.010) - [ True ] - - location: 98 (just consumed gas: 0.010) - [ ] - - location: 98 (just consumed gas: 0.025) - [ ] - - location: 104 (just consumed gas: 0.010) - [ 10 ] - - location: 107 (just consumed gas: 0.010) - [ 7987 - 10 ] - - location: 110 (just consumed gas: 0.064) - [ 79870 ] - - location: 111 (just consumed gas: 0.010) - [ 79870 - 79870 ] - - location: 114 (just consumed gas: 0.035) - [ 0 ] - - location: 116 (just consumed gas: 0.010) - [ True ] - - location: 117 (just consumed gas: 0.010) - [ ] - - location: 117 (just consumed gas: 0.025) - [ ] - - location: 123 (just consumed gas: 0.010) - [ Unit ] - - location: 124 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 126 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mutez_to_bls12_381_fr--storage151303925--input216277421-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mutez_to_bls12_381_fr--storage151303925--input216277421-.out deleted file mode 100644 index f14d38beb8898b698d067d4cfa75552f1c5a9874..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mutez_to_bls12_381_fr--storage151303925--input216277421-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/mutez_to_bls12_381_fr.tz on storage 0x00 and input 257 --level 1 --trace-stack -storage - 0x0101000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 10.761) - [ (Pair 257 0x0000000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 257 ] - - location: 8 (just consumed gas: 0.010) - [ 1 - 257 ] - - location: 11 (just consumed gas: 0.010) - [ 257 - 1 ] - - location: 12 (just consumed gas: 0.080) - [ (Some (Pair 257 0)) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair 257 0) ] - - location: 14 (just consumed gas: 0.025) - [ (Pair 257 0) ] - - location: 20 (just consumed gas: 0.010) - [ 257 ] - - location: 21 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 257 ] - - location: 24 (just consumed gas: 0.267) - [ 0x0101000000000000000000000000000000000000000000000000000000000000 ] - - location: 25 (just consumed gas: 0.010) - [ {} - 0x0101000000000000000000000000000000000000000000000000000000000000 ] - - location: 27 (just consumed gas: 0.010) - [ (Pair {} 0x0101000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mutez_to_bls12_381_fr--storage287799761--input485842614-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mutez_to_bls12_381_fr--storage287799761--input485842614-.out deleted file mode 100644 index 2727e845f982957f9a798d66b6fefcb6e90ef4ea..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -mutez_to_bls12_381_fr--storage287799761--input485842614-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/mutez_to_bls12_381_fr.tz on storage 0x02 and input 16 --level 1 --trace-stack -storage - 0x1000000000000000000000000000000000000000000000000000000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 10.761) - [ (Pair 16 0x0200000000000000000000000000000000000000000000000000000000000000) ] - - location: 7 (just consumed gas: 0.010) - [ 16 ] - - location: 8 (just consumed gas: 0.010) - [ 1 - 16 ] - - location: 11 (just consumed gas: 0.010) - [ 16 - 1 ] - - location: 12 (just consumed gas: 0.080) - [ (Some (Pair 16 0)) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair 16 0) ] - - location: 14 (just consumed gas: 0.025) - [ (Pair 16 0) ] - - location: 20 (just consumed gas: 0.010) - [ 16 ] - - location: 21 (just consumed gas: 0.010) - [ 0x0100000000000000000000000000000000000000000000000000000000000000 - 16 ] - - location: 24 (just consumed gas: 0.266) - [ 0x1000000000000000000000000000000000000000000000000000000000000000 ] - - location: 25 (just consumed gas: 0.010) - [ {} - 0x1000000000000000000000000000000000000000000000000000000000000000 ] - - location: 27 (just consumed gas: 0.010) - [ (Pair {} 0x1000000000000000000000000000000000000000000000000000000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input1067298059-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input1067298059-.out deleted file mode 100644 index 6be3925206c85bce9ec790f888ba4d0b2279b2a7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input1067298059-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/neg.tz on storage 0 and input '(Left -2)' --level 1 --trace-stack -storage - 2 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.063) - [ (Pair (Left -2) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Left -2) ] - - location: 10 (just consumed gas: 0.010) - [ -2 ] - - location: 12 (just consumed gas: 0.025) - [ 2 ] - - location: 10 (just consumed gas: 0.025) - [ 2 ] - - location: 15 (just consumed gas: 0.010) - [ {} - 2 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair {} 2) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input380029349-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input380029349-.out deleted file mode 100644 index f8d863759d27c8e7f926a3c48fec7c0c7bb876ee..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input380029349-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/neg.tz on storage 0 and input '(Right 2)' --level 1 --trace-stack -storage - -2 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.063) - [ (Pair (Right 2) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Right 2) ] - - location: 10 (just consumed gas: 0.010) - [ 2 ] - - location: 14 (just consumed gas: 0.025) - [ -2 ] - - location: 10 (just consumed gas: 0.025) - [ -2 ] - - location: 15 (just consumed gas: 0.010) - [ {} - -2 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair {} -2) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input563503226-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input563503226-.out deleted file mode 100644 index 972b3d2b290de112035c261a76d5decb50f6a5d5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input563503226-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/neg.tz on storage 0 and input '(Left 2)' --level 1 --trace-stack -storage - -2 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.063) - [ (Pair (Left 2) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Left 2) ] - - location: 10 (just consumed gas: 0.010) - [ 2 ] - - location: 12 (just consumed gas: 0.025) - [ -2 ] - - location: 10 (just consumed gas: 0.025) - [ -2 ] - - location: 15 (just consumed gas: 0.010) - [ {} - -2 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair {} -2) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input788662499-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input788662499-.out deleted file mode 100644 index 318d80e855c1064c4ef0673c2f87bb288c6a12e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input788662499-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/neg.tz on storage 0 and input '(Right 0)' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.063) - [ (Pair (Right 0) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Right 0) ] - - location: 10 (just consumed gas: 0.010) - [ 0 ] - - location: 14 (just consumed gas: 0.025) - [ 0 ] - - location: 10 (just consumed gas: 0.025) - [ 0 ] - - location: 15 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input972832189-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input972832189-.out deleted file mode 100644 index c0393cbe55c705da0211713b75af9d9108299f13..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -neg--storage680650890--input972832189-.out +++ /dev/null @@ -1,25 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/neg.tz on storage 0 and input '(Left 0)' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.063) - [ (Pair (Left 0) 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Left 0) ] - - location: 10 (just consumed gas: 0.010) - [ 0 ] - - location: 12 (just consumed gas: 0.025) - [ 0 ] - - location: 10 (just consumed gas: 0.025) - [ 0 ] - - location: 15 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -none--storage11179311--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -none--storage11179311--input125992234-.out deleted file mode 100644 index b4c4c3d547a45ebd782a4e41e57ad841893706cb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -none--storage11179311--input125992234-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/none.tz on storage 'Some 10' and input Unit --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.627) - [ (Pair Unit (Some 10)) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.010) - [ None ] - - location: 11 (just consumed gas: 0.010) - [ {} - None ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not--storage921624073--input570553153-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not--storage921624073--input570553153-.out deleted file mode 100644 index b35383d23ebd986c33815c31ec53a4bb2fe59e97..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not--storage921624073--input570553153-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not.tz on storage None and input False --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair False None) ] - - location: 8 (just consumed gas: 0.010) - [ False ] - - location: 9 (just consumed gas: 0.010) - [ True ] - - location: 10 (just consumed gas: 0.010) - [ (Some True) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not--storage921624073--input954397288-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not--storage921624073--input954397288-.out deleted file mode 100644 index 7766accf3c61d6c02babdcc70cf7f6e7c0b9cb14..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not--storage921624073--input954397288-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not.tz on storage None and input True --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair True None) ] - - location: 8 (just consumed gas: 0.010) - [ True ] - - location: 9 (just consumed gas: 0.010) - [ False ] - - location: 10 (just consumed gas: 0.010) - [ (Some False) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input1051197453-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input1051197453-.out deleted file mode 100644 index a4d04c46e633964d86b2f2cdcb46ea09862237c2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input1051197453-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Right 8)' --level 1 --trace-stack -storage - (Some -9) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Right 8) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Right 8) ] - - location: 11 (just consumed gas: 0.010) - [ 8 ] - - location: 15 (just consumed gas: 0.025) - [ -9 ] - - location: 11 (just consumed gas: 0.025) - [ -9 ] - - location: 16 (just consumed gas: 0.010) - [ (Some -9) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some -9) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some -9)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input123939249-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input123939249-.out deleted file mode 100644 index f5fd21fcbe493affcaaf5210ea0230772da9304b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input123939249-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Left 7)' --level 1 --trace-stack -storage - (Some -8) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Left 7) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Left 7) ] - - location: 11 (just consumed gas: 0.010) - [ 7 ] - - location: 13 (just consumed gas: 0.025) - [ -8 ] - - location: 11 (just consumed gas: 0.025) - [ -8 ] - - location: 16 (just consumed gas: 0.010) - [ (Some -8) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some -8) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some -8)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input24243730-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input24243730-.out deleted file mode 100644 index 05522cfeeafc9e6dfaad1eaca8b7c5e35d92ca41..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input24243730-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Left -8)' --level 1 --trace-stack -storage - (Some 7) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Left -8) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Left -8) ] - - location: 11 (just consumed gas: 0.010) - [ -8 ] - - location: 13 (just consumed gas: 0.025) - [ 7 ] - - location: 11 (just consumed gas: 0.025) - [ 7 ] - - location: 16 (just consumed gas: 0.010) - [ (Some 7) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some 7) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some 7)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input518945720-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input518945720-.out deleted file mode 100644 index 000ce2dcf5de1a20490563c947e6bceb01a22b82..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input518945720-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Left 8)' --level 1 --trace-stack -storage - (Some -9) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Left 8) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Left 8) ] - - location: 11 (just consumed gas: 0.010) - [ 8 ] - - location: 13 (just consumed gas: 0.025) - [ -9 ] - - location: 11 (just consumed gas: 0.025) - [ -9 ] - - location: 16 (just consumed gas: 0.010) - [ (Some -9) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some -9) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some -9)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input788662499-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input788662499-.out deleted file mode 100644 index 644502b8fddc2155e287c4eaf47256891ce9ec00..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input788662499-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Right 0)' --level 1 --trace-stack -storage - (Some -1) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Right 0) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Right 0) ] - - location: 11 (just consumed gas: 0.010) - [ 0 ] - - location: 15 (just consumed gas: 0.025) - [ -1 ] - - location: 11 (just consumed gas: 0.025) - [ -1 ] - - location: 16 (just consumed gas: 0.010) - [ (Some -1) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some -1) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some -1)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input906118781-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input906118781-.out deleted file mode 100644 index c165d467733cb21211fbd9bbcb4b010da2005857..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input906118781-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Right 7)' --level 1 --trace-stack -storage - (Some -8) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Right 7) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Right 7) ] - - location: 11 (just consumed gas: 0.010) - [ 7 ] - - location: 15 (just consumed gas: 0.025) - [ -8 ] - - location: 11 (just consumed gas: 0.025) - [ -8 ] - - location: 16 (just consumed gas: 0.010) - [ (Some -8) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some -8) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some -8)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input921874253-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input921874253-.out deleted file mode 100644 index 3e6432fee0883c129124b596c71d911a45344045..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input921874253-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Left -9)' --level 1 --trace-stack -storage - (Some 8) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Left -9) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Left -9) ] - - location: 11 (just consumed gas: 0.010) - [ -9 ] - - location: 13 (just consumed gas: 0.025) - [ 8 ] - - location: 11 (just consumed gas: 0.025) - [ 8 ] - - location: 16 (just consumed gas: 0.010) - [ (Some 8) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some 8) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some 8)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input972832189-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input972832189-.out deleted file mode 100644 index 89b731783157f65384c91d2cfcf3647cd9067401..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_binary--storage921624073--input972832189-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_binary.tz on storage None and input '(Left 0)' --level 1 --trace-stack -storage - (Some -1) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 6.822) - [ (Pair (Left 0) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Left 0) ] - - location: 11 (just consumed gas: 0.010) - [ 0 ] - - location: 13 (just consumed gas: 0.025) - [ -1 ] - - location: 11 (just consumed gas: 0.025) - [ -1 ] - - location: 16 (just consumed gas: 0.010) - [ (Some -1) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some -1) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some -1)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_bytes--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_bytes--storage125992234--input125992234-.out deleted file mode 100644 index 22c7ff2b8ef5c8b96a8a01a03059a2107f3979cd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -not_bytes--storage125992234--input125992234-.out +++ /dev/null @@ -1,66 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/not_bytes_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 24.963) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0x05 ] - - location: 11 (just consumed gas: 0.030) - [ 0xfa ] - - location: 12 (just consumed gas: 0.010) - [ 0xfa - 0xfa ] - - location: 17 (just consumed gas: 0.035) - [ 0 ] - - location: 18 (just consumed gas: 0.010) - [ True ] - - location: 19 (just consumed gas: 0.010) - [ ] - - location: 19 (just consumed gas: 0.025) - [ ] - - location: 25 (just consumed gas: 0.010) - [ 0x0005 ] - - location: 28 (just consumed gas: 0.031) - [ 0xfffa ] - - location: 29 (just consumed gas: 0.010) - [ 0xfffa - 0xfffa ] - - location: 34 (just consumed gas: 0.035) - [ 0 ] - - location: 35 (just consumed gas: 0.010) - [ True ] - - location: 36 (just consumed gas: 0.010) - [ ] - - location: 36 (just consumed gas: 0.025) - [ ] - - location: 42 (just consumed gas: 0.010) - [ 0xff05 ] - - location: 45 (just consumed gas: 0.031) - [ 0x00fa ] - - location: 46 (just consumed gas: 0.010) - [ 0x00fa - 0x00fa ] - - location: 51 (just consumed gas: 0.035) - [ 0 ] - - location: 52 (just consumed gas: 0.010) - [ True ] - - location: 53 (just consumed gas: 0.010) - [ ] - - location: 53 (just consumed gas: 0.025) - [ ] - - location: 59 (just consumed gas: 0.010) - [ Unit ] - - location: 60 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 62 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input106930123-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input106930123-.out deleted file mode 100644 index 993079c197eea38380c6c875537cc573ee7cfc0b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input106930123-.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or.tz on storage None and input '(Pair False True)' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.975) - [ (Pair (Pair False True) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair False True) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair False True) - (Pair False True) ] - - location: 12 (just consumed gas: 0.010) - [ False - (Pair False True) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair False True) - False ] - - location: 14 (just consumed gas: 0.010) - [ True - False ] - - location: 15 (just consumed gas: 0.010) - [ True ] - - location: 16 (just consumed gas: 0.010) - [ (Some True) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input181204719-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input181204719-.out deleted file mode 100644 index 79fd2472aacb38d6d5816253129896a59e6040d0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input181204719-.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or.tz on storage None and input '(Pair True False)' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.975) - [ (Pair (Pair True False) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair True False) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair True False) - (Pair True False) ] - - location: 12 (just consumed gas: 0.010) - [ True - (Pair True False) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair True False) - True ] - - location: 14 (just consumed gas: 0.010) - [ False - True ] - - location: 15 (just consumed gas: 0.010) - [ True ] - - location: 16 (just consumed gas: 0.010) - [ (Some True) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input223774825-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input223774825-.out deleted file mode 100644 index 67f2bb479b6f667adc75a823127eeff770bd7c8c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input223774825-.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or.tz on storage None and input '(Pair False False)' --level 1 --trace-stack -storage - (Some False) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.975) - [ (Pair (Pair False False) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair False False) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair False False) - (Pair False False) ] - - location: 12 (just consumed gas: 0.010) - [ False - (Pair False False) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair False False) - False ] - - location: 14 (just consumed gas: 0.010) - [ False - False ] - - location: 15 (just consumed gas: 0.010) - [ False ] - - location: 16 (just consumed gas: 0.010) - [ (Some False) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input908807505-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input908807505-.out deleted file mode 100644 index a0254dba402b41084a293d6c2ca58bd5bf453676..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or--storage921624073--input908807505-.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or.tz on storage None and input '(Pair True True)' --level 1 --trace-stack -storage - (Some True) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 7.975) - [ (Pair (Pair True True) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair True True) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair True True) - (Pair True True) ] - - location: 12 (just consumed gas: 0.010) - [ True - (Pair True True) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair True True) - True ] - - location: 14 (just consumed gas: 0.010) - [ True - True ] - - location: 15 (just consumed gas: 0.010) - [ True ] - - location: 16 (just consumed gas: 0.010) - [ (Some True) ] - - location: 17 (just consumed gas: 0.010) - [ {} - (Some True) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair {} (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input1056991424-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input1056991424-.out deleted file mode 100644 index 0343da85d36d53e09c96f9525def7a0931afae69..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input1056991424-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_binary.tz on storage None and input '(Pair 0 8)' --level 1 --trace-stack -storage - (Some 8) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 5.999) - [ (Pair (Pair 0 8) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 8) ] - - location: 11 (just consumed gas: 0.010) - [ 0 - 8 ] - - location: 12 (just consumed gas: 0.035) - [ 8 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 8) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 8) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some 8)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input375993021-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input375993021-.out deleted file mode 100644 index 0fa0a08de16afe871e4193b64722c62f5a186e09..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input375993021-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_binary.tz on storage None and input '(Pair 14 1)' --level 1 --trace-stack -storage - (Some 15) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 5.999) - [ (Pair (Pair 14 1) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 14 1) ] - - location: 11 (just consumed gas: 0.010) - [ 14 - 1 ] - - location: 12 (just consumed gas: 0.035) - [ 15 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 15) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 15) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some 15)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input673240563-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input673240563-.out deleted file mode 100644 index 046b25abf12ff036fdbf00189b536b187301b96d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input673240563-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_binary.tz on storage None and input '(Pair 8 0)' --level 1 --trace-stack -storage - (Some 8) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 5.999) - [ (Pair (Pair 8 0) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 8 0) ] - - location: 11 (just consumed gas: 0.010) - [ 8 - 0 ] - - location: 12 (just consumed gas: 0.035) - [ 8 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 8) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 8) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some 8)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input747448890-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input747448890-.out deleted file mode 100644 index d5f4097f45f2005c0b9a0ffc34f849ff6c1c86d1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input747448890-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_binary.tz on storage None and input '(Pair 7 7)' --level 1 --trace-stack -storage - (Some 7) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 5.999) - [ (Pair (Pair 7 7) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 7 7) ] - - location: 11 (just consumed gas: 0.010) - [ 7 - 7 ] - - location: 12 (just consumed gas: 0.035) - [ 7 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 7) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 7) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some 7)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input832403787-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input832403787-.out deleted file mode 100644 index 5f8610efadd24df6f235370dce5ecf6c7c04e283..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input832403787-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_binary.tz on storage None and input '(Pair 15 4)' --level 1 --trace-stack -storage - (Some 15) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 5.999) - [ (Pair (Pair 15 4) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 15 4) ] - - location: 11 (just consumed gas: 0.010) - [ 15 - 4 ] - - location: 12 (just consumed gas: 0.035) - [ 15 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 15) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 15) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some 15)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input858098961-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input858098961-.out deleted file mode 100644 index 4544cf85a38fe072df550ddb1f36d18e1ba86272..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_binary--storage921624073--input858098961-.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_binary.tz on storage None and input '(Pair 4 8)' --level 1 --trace-stack -storage - (Some 12) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 5.999) - [ (Pair (Pair 4 8) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 4 8) ] - - location: 11 (just consumed gas: 0.010) - [ 4 - 8 ] - - location: 12 (just consumed gas: 0.035) - [ 12 ] - - location: 13 (just consumed gas: 0.010) - [ (Some 12) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some 12) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some 12)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_bytes--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_bytes--storage125992234--input125992234-.out deleted file mode 100644 index 5eabadf272e89bc6458db3825053fce2ddcec240..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -or_bytes--storage125992234--input125992234-.out +++ /dev/null @@ -1,75 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/or_bytes_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 27.915) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0x05 ] - - location: 11 (just consumed gas: 0.010) - [ 0x06 - 0x05 ] - - location: 14 (just consumed gas: 0.035) - [ 0x07 ] - - location: 15 (just consumed gas: 0.010) - [ 0x07 - 0x07 ] - - location: 20 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 0x0005 ] - - location: 31 (just consumed gas: 0.010) - [ 0x0106 - 0x0005 ] - - location: 34 (just consumed gas: 0.036) - [ 0x0107 ] - - location: 35 (just consumed gas: 0.010) - [ 0x0107 - 0x0107 ] - - location: 40 (just consumed gas: 0.035) - [ 0 ] - - location: 41 (just consumed gas: 0.010) - [ True ] - - location: 42 (just consumed gas: 0.010) - [ ] - - location: 42 (just consumed gas: 0.025) - [ ] - - location: 48 (just consumed gas: 0.010) - [ 0x05 ] - - location: 51 (just consumed gas: 0.010) - [ 0x0106 - 0x05 ] - - location: 54 (just consumed gas: 0.036) - [ 0x0107 ] - - location: 55 (just consumed gas: 0.010) - [ 0x0107 - 0x0107 ] - - location: 60 (just consumed gas: 0.035) - [ 0 ] - - location: 61 (just consumed gas: 0.010) - [ True ] - - location: 62 (just consumed gas: 0.010) - [ ] - - location: 62 (just consumed gas: 0.025) - [ ] - - location: 68 (just consumed gas: 0.010) - [ Unit ] - - location: 69 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 71 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev--storage125992234--input305844558-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev--storage125992234--input305844558-.out deleted file mode 100644 index 8fdeef3129477f96de5191e33073d581390dcce5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev--storage125992234--input305844558-.out +++ /dev/null @@ -1,845 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/packunpack_rev.tz on storage Unit and input '(Pair -1 (Pair 1 (Pair "foobar" (Pair 0x00AABBCC (Pair 1000 (Pair False (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5"))))))))' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 146.861) - [ (Pair (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 17 (just consumed gas: 0.010) - [ (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 18 (just consumed gas: 0.010) - [ -1 - (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 19 (just consumed gas: 0.010) - [ (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 21 (just consumed gas: 0.010) - [ -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 19 (just consumed gas: 0.035) - [ -1 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 22 (just consumed gas: 0.241) - [ 0x050041 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 23 (just consumed gas: 0.421) - [ (Some -1) - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 26 (just consumed gas: 0.010) - [ -1 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 26 (just consumed gas: 0.025) - [ -1 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 34 (just consumed gas: 0.035) - [ 0 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 35 (just consumed gas: 0.010) - [ True - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 36 (just consumed gas: 0.010) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 36 (just consumed gas: 0.025) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 42 (just consumed gas: 0.010) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 43 (just consumed gas: 0.010) - [ 1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 44 (just consumed gas: 0.010) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 46 (just consumed gas: 0.010) - [ 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 44 (just consumed gas: 0.035) - [ 1 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 47 (just consumed gas: 0.241) - [ 0x050001 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 48 (just consumed gas: 0.421) - [ (Some 1) - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 51 (just consumed gas: 0.010) - [ 1 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 51 (just consumed gas: 0.025) - [ 1 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 59 (just consumed gas: 0.035) - [ 0 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 60 (just consumed gas: 0.010) - [ True - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 61 (just consumed gas: 0.010) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 61 (just consumed gas: 0.025) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 67 (just consumed gas: 0.010) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 68 (just consumed gas: 0.010) - [ "foobar" - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 69 (just consumed gas: 0.010) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 71 (just consumed gas: 0.010) - [ "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 69 (just consumed gas: 0.035) - [ "foobar" - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 72 (just consumed gas: 0.276) - [ 0x050100000006666f6f626172 - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 73 (just consumed gas: 0.681) - [ (Some "foobar") - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 76 (just consumed gas: 0.010) - [ "foobar" - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 76 (just consumed gas: 0.025) - [ "foobar" - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 84 (just consumed gas: 0.035) - [ 0 - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 85 (just consumed gas: 0.010) - [ True - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 86 (just consumed gas: 0.010) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 86 (just consumed gas: 0.025) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 92 (just consumed gas: 0.010) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 93 (just consumed gas: 0.010) - [ 0x00aabbcc - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 94 (just consumed gas: 0.010) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 96 (just consumed gas: 0.010) - [ 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 94 (just consumed gas: 0.035) - [ 0x00aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 97 (just consumed gas: 0.256) - [ 0x050a0000000400aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 98 (just consumed gas: 0.565) - [ (Some 0x00aabbcc) - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 101 (just consumed gas: 0.010) - [ 0x00aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 101 (just consumed gas: 0.025) - [ 0x00aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 109 (just consumed gas: 0.035) - [ 0 - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 110 (just consumed gas: 0.010) - [ True - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 111 (just consumed gas: 0.010) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 111 (just consumed gas: 0.025) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 117 (just consumed gas: 0.010) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 118 (just consumed gas: 0.010) - [ 1000 - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 119 (just consumed gas: 0.010) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 121 (just consumed gas: 0.010) - [ 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 119 (just consumed gas: 0.035) - [ 1000 - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 122 (just consumed gas: 0.266) - [ 0x0500a80f - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 123 (just consumed gas: 0.442) - [ (Some 1000) - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 126 (just consumed gas: 0.010) - [ 1000 - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 126 (just consumed gas: 0.025) - [ 1000 - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 134 (just consumed gas: 0.035) - [ 0 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 135 (just consumed gas: 0.010) - [ True - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 136 (just consumed gas: 0.010) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 136 (just consumed gas: 0.025) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 142 (just consumed gas: 0.010) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 143 (just consumed gas: 0.010) - [ False - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 144 (just consumed gas: 0.010) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 146 (just consumed gas: 0.010) - [ False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 144 (just consumed gas: 0.035) - [ False - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 147 (just consumed gas: 0.216) - [ 0x050303 - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 148 (just consumed gas: 0.421) - [ (Some False) - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 151 (just consumed gas: 0.010) - [ False - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 151 (just consumed gas: 0.025) - [ False - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 159 (just consumed gas: 0.035) - [ 0 - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 160 (just consumed gas: 0.010) - [ True - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 161 (just consumed gas: 0.010) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 161 (just consumed gas: 0.025) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 167 (just consumed gas: 0.010) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 168 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 169 (just consumed gas: 0.010) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 171 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 169 (just consumed gas: 0.035) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 172 (just consumed gas: 0.506) - [ 0x050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 173 (just consumed gas: 0.973) - [ (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 176 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 176 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 184 (just consumed gas: 0.036) - [ 0 - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 185 (just consumed gas: 0.010) - [ True - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 186 (just consumed gas: 0.010) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 186 (just consumed gas: 0.025) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 192 (just consumed gas: 0.010) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 193 (just consumed gas: 0.010) - [ "2019-09-09T08:35:33Z" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 194 (just consumed gas: 0.010) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 196 (just consumed gas: 0.010) - [ "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 194 (just consumed gas: 0.035) - [ "2019-09-09T08:35:33Z" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 197 (just consumed gas: 0.316) - [ 0x050095bbb0d70b - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 198 (just consumed gas: 0.503) - [ (Some "2019-09-09T08:35:33Z") - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 201 (just consumed gas: 0.010) - [ "2019-09-09T08:35:33Z" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 201 (just consumed gas: 0.025) - [ "2019-09-09T08:35:33Z" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 209 (just consumed gas: 0.035) - [ 0 - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 210 (just consumed gas: 0.010) - [ True - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 211 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 211 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 217 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 218 (just consumed gas: 0.516) - [ 0x050a000000160000bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 219 (just consumed gas: 0.994) - [ (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 222 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 222 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 230 (just consumed gas: 0.036) - [ 0 ] - - location: 231 (just consumed gas: 0.010) - [ True ] - - location: 232 (just consumed gas: 0.010) - [ ] - - location: 232 (just consumed gas: 0.025) - [ ] - - location: 238 (just consumed gas: 0.010) - [ 0 ] - - location: 241 (just consumed gas: 0.216) - [ 0x050000 ] - - location: 242 (just consumed gas: 0.421) - [ (Some 0) ] - - location: 245 (just consumed gas: 0.010) - [ 0 ] - - location: 245 (just consumed gas: 0.025) - [ 0 ] - - location: 251 (just consumed gas: 0.010) - [ ] - - location: 252 (just consumed gas: 0.010) - [ -1 ] - - location: 255 (just consumed gas: 0.241) - [ 0x050041 ] - - location: 256 (just consumed gas: 96.321) - [ None ] - - location: 259 (just consumed gas: 0.010) - [ ] - - location: 259 (just consumed gas: 0.025) - [ ] - - location: 265 (just consumed gas: 0.010) - [ 0x ] - - location: 268 (just consumed gas: 0.270) - [ None ] - - location: 271 (just consumed gas: 0.010) - [ ] - - location: 271 (just consumed gas: 0.025) - [ ] - - location: 277 (just consumed gas: 0.010) - [ 0x04 ] - - location: 280 (just consumed gas: 0.280) - [ None ] - - location: 283 (just consumed gas: 0.010) - [ ] - - location: 283 (just consumed gas: 0.025) - [ ] - - location: 289 (just consumed gas: 0.010) - [ 0x05 ] - - location: 292 (just consumed gas: 0.280) - [ None ] - - location: 295 (just consumed gas: 0.010) - [ ] - - location: 295 (just consumed gas: 0.025) - [ ] - - location: 301 (just consumed gas: 0.010) - [ Unit ] - - location: 302 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 304 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev--storage125992234--input646365167-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev--storage125992234--input646365167-.out deleted file mode 100644 index 4fdaec7bb50b43e046b26edb40028d547c2af67f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev--storage125992234--input646365167-.out +++ /dev/null @@ -1,845 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/packunpack_rev.tz on storage Unit and input '(Pair -1 (Pair 1 (Pair "foobar" (Pair 0x00AABBCC (Pair 1000 (Pair False (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5"))))))))' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 146.861) - [ (Pair (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 17 (just consumed gas: 0.010) - [ (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 18 (just consumed gas: 0.010) - [ -1 - (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 19 (just consumed gas: 0.010) - [ (Pair -1 - 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 21 (just consumed gas: 0.010) - [ -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 19 (just consumed gas: 0.035) - [ -1 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 22 (just consumed gas: 0.241) - [ 0x050041 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 23 (just consumed gas: 0.421) - [ (Some -1) - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 26 (just consumed gas: 0.010) - [ -1 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 26 (just consumed gas: 0.025) - [ -1 - -1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 34 (just consumed gas: 0.035) - [ 0 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 35 (just consumed gas: 0.010) - [ True - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 36 (just consumed gas: 0.010) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 36 (just consumed gas: 0.025) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 42 (just consumed gas: 0.010) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 43 (just consumed gas: 0.010) - [ 1 - (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 44 (just consumed gas: 0.010) - [ (Pair 1 - "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 46 (just consumed gas: 0.010) - [ 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 44 (just consumed gas: 0.035) - [ 1 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 47 (just consumed gas: 0.241) - [ 0x050001 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 48 (just consumed gas: 0.421) - [ (Some 1) - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 51 (just consumed gas: 0.010) - [ 1 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 51 (just consumed gas: 0.025) - [ 1 - 1 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 59 (just consumed gas: 0.035) - [ 0 - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 60 (just consumed gas: 0.010) - [ True - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 61 (just consumed gas: 0.010) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 61 (just consumed gas: 0.025) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 67 (just consumed gas: 0.010) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 68 (just consumed gas: 0.010) - [ "foobar" - (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 69 (just consumed gas: 0.010) - [ (Pair "foobar" - 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 71 (just consumed gas: 0.010) - [ "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 69 (just consumed gas: 0.035) - [ "foobar" - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 72 (just consumed gas: 0.276) - [ 0x050100000006666f6f626172 - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 73 (just consumed gas: 0.681) - [ (Some "foobar") - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 76 (just consumed gas: 0.010) - [ "foobar" - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 76 (just consumed gas: 0.025) - [ "foobar" - "foobar" - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 84 (just consumed gas: 0.035) - [ 0 - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 85 (just consumed gas: 0.010) - [ True - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 86 (just consumed gas: 0.010) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 86 (just consumed gas: 0.025) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 92 (just consumed gas: 0.010) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 93 (just consumed gas: 0.010) - [ 0x00aabbcc - (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 94 (just consumed gas: 0.010) - [ (Pair 0x00aabbcc - 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 96 (just consumed gas: 0.010) - [ 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 94 (just consumed gas: 0.035) - [ 0x00aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 97 (just consumed gas: 0.256) - [ 0x050a0000000400aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 98 (just consumed gas: 0.565) - [ (Some 0x00aabbcc) - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 101 (just consumed gas: 0.010) - [ 0x00aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 101 (just consumed gas: 0.025) - [ 0x00aabbcc - 0x00aabbcc - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 109 (just consumed gas: 0.035) - [ 0 - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 110 (just consumed gas: 0.010) - [ True - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 111 (just consumed gas: 0.010) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 111 (just consumed gas: 0.025) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 117 (just consumed gas: 0.010) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 118 (just consumed gas: 0.010) - [ 1000 - (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 119 (just consumed gas: 0.010) - [ (Pair 1000 - False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 121 (just consumed gas: 0.010) - [ 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 119 (just consumed gas: 0.035) - [ 1000 - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 122 (just consumed gas: 0.266) - [ 0x0500a80f - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 123 (just consumed gas: 0.442) - [ (Some 1000) - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 126 (just consumed gas: 0.010) - [ 1000 - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 126 (just consumed gas: 0.025) - [ 1000 - 1000 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 134 (just consumed gas: 0.035) - [ 0 - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 135 (just consumed gas: 0.010) - [ True - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 136 (just consumed gas: 0.010) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 136 (just consumed gas: 0.025) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 142 (just consumed gas: 0.010) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 143 (just consumed gas: 0.010) - [ False - (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 144 (just consumed gas: 0.010) - [ (Pair False - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 146 (just consumed gas: 0.010) - [ False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 144 (just consumed gas: 0.035) - [ False - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 147 (just consumed gas: 0.216) - [ 0x050303 - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 148 (just consumed gas: 0.421) - [ (Some False) - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 151 (just consumed gas: 0.010) - [ False - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 151 (just consumed gas: 0.025) - [ False - False - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 159 (just consumed gas: 0.035) - [ 0 - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 160 (just consumed gas: 0.010) - [ True - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 161 (just consumed gas: 0.010) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 161 (just consumed gas: 0.025) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 167 (just consumed gas: 0.010) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 168 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 169 (just consumed gas: 0.010) - [ (Pair "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 171 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 169 (just consumed gas: 0.035) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 172 (just consumed gas: 0.506) - [ 0x050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 173 (just consumed gas: 0.973) - [ (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 176 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 176 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 184 (just consumed gas: 0.036) - [ 0 - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 185 (just consumed gas: 0.010) - [ True - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 186 (just consumed gas: 0.010) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 186 (just consumed gas: 0.025) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 192 (just consumed gas: 0.010) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 193 (just consumed gas: 0.010) - [ "2019-09-09T08:35:33Z" - (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 194 (just consumed gas: 0.010) - [ (Pair "2019-09-09T08:35:33Z" "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") ] - - location: 196 (just consumed gas: 0.010) - [ "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 194 (just consumed gas: 0.035) - [ "2019-09-09T08:35:33Z" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 197 (just consumed gas: 0.316) - [ 0x050095bbb0d70b - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 198 (just consumed gas: 0.503) - [ (Some "2019-09-09T08:35:33Z") - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 201 (just consumed gas: 0.010) - [ "2019-09-09T08:35:33Z" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 201 (just consumed gas: 0.025) - [ "2019-09-09T08:35:33Z" - "2019-09-09T08:35:33Z" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 209 (just consumed gas: 0.035) - [ 0 - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 210 (just consumed gas: 0.010) - [ True - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 211 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 211 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 217 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 218 (just consumed gas: 0.516) - [ 0x050a000000160000bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 219 (just consumed gas: 0.994) - [ (Some "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 222 (just consumed gas: 0.010) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 222 (just consumed gas: 0.025) - [ "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" - "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5" ] - - location: 230 (just consumed gas: 0.036) - [ 0 ] - - location: 231 (just consumed gas: 0.010) - [ True ] - - location: 232 (just consumed gas: 0.010) - [ ] - - location: 232 (just consumed gas: 0.025) - [ ] - - location: 238 (just consumed gas: 0.010) - [ 0 ] - - location: 241 (just consumed gas: 0.216) - [ 0x050000 ] - - location: 242 (just consumed gas: 0.421) - [ (Some 0) ] - - location: 245 (just consumed gas: 0.010) - [ 0 ] - - location: 245 (just consumed gas: 0.025) - [ 0 ] - - location: 251 (just consumed gas: 0.010) - [ ] - - location: 252 (just consumed gas: 0.010) - [ -1 ] - - location: 255 (just consumed gas: 0.241) - [ 0x050041 ] - - location: 256 (just consumed gas: 96.321) - [ None ] - - location: 259 (just consumed gas: 0.010) - [ ] - - location: 259 (just consumed gas: 0.025) - [ ] - - location: 265 (just consumed gas: 0.010) - [ 0x ] - - location: 268 (just consumed gas: 0.270) - [ None ] - - location: 271 (just consumed gas: 0.010) - [ ] - - location: 271 (just consumed gas: 0.025) - [ ] - - location: 277 (just consumed gas: 0.010) - [ 0x04 ] - - location: 280 (just consumed gas: 0.280) - [ None ] - - location: 283 (just consumed gas: 0.010) - [ ] - - location: 283 (just consumed gas: 0.025) - [ ] - - location: 289 (just consumed gas: 0.010) - [ 0x05 ] - - location: 292 (just consumed gas: 0.280) - [ None ] - - location: 295 (just consumed gas: 0.010) - [ ] - - location: 295 (just consumed gas: 0.025) - [ ] - - location: 301 (just consumed gas: 0.010) - [ Unit ] - - location: 302 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 304 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev_cty--storage125992234--input1028781121-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev_cty--storage125992234--input1028781121-.out deleted file mode 100644 index ab7ede8515f52e4f8cb876f1133a855d06d3216d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev_cty--storage125992234--input1028781121-.out +++ /dev/null @@ -1,1194 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/packunpack_rev_cty.tz on storage Unit and input '(Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" (Pair Unit (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") (Pair { Unit } (Pair { True } (Pair (Pair 19 10) (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK } )))))))))' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 28 (just consumed gas: 255.382) - [ (Pair (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - Unit) ] - - location: 28 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 29 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 30 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 33 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 31 (just consumed gas: 0.035) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 34 (just consumed gas: 1.001) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 35 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 37 (just consumed gas: 1.001) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 38 (just consumed gas: 75.159) - [ (Some "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav") - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 41 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 41 (just consumed gas: 0.025) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 47 (just consumed gas: 1.001) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 35 (just consumed gas: 0.035) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 50 (just consumed gas: 0.035) - [ 0 - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 51 (just consumed gas: 0.010) - [ True - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 52 (just consumed gas: 0.010) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 52 (just consumed gas: 0.025) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 58 (just consumed gas: 0.010) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 59 (just consumed gas: 0.010) - [ Unit - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 60 (just consumed gas: 0.010) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 62 (just consumed gas: 0.010) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 60 (just consumed gas: 0.035) - [ Unit - Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 63 (just consumed gas: 0.216) - [ 0x05030b - Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 64 (just consumed gas: 0.010) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 66 (just consumed gas: 0.216) - [ 0x05030b - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 67 (just consumed gas: 0.421) - [ (Some Unit) - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 70 (just consumed gas: 0.010) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 70 (just consumed gas: 0.025) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 76 (just consumed gas: 0.216) - [ 0x05030b - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 64 (just consumed gas: 0.035) - [ 0x05030b - 0x05030b - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 79 (just consumed gas: 0.035) - [ 0 - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 80 (just consumed gas: 0.010) - [ True - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 81 (just consumed gas: 0.010) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 81 (just consumed gas: 0.025) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 87 (just consumed gas: 0.010) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 88 (just consumed gas: 0.010) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 89 (just consumed gas: 0.010) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 91 (just consumed gas: 0.010) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 89 (just consumed gas: 0.035) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 92 (just consumed gas: 0.911) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 93 (just consumed gas: 0.010) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 95 (just consumed gas: 0.911) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 96 (just consumed gas: 1.835) - [ (Some "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe") - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 99 (just consumed gas: 0.010) - [ "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe" - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 99 (just consumed gas: 0.025) - [ "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe" - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 105 (just consumed gas: 0.911) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 93 (just consumed gas: 0.035) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 108 (just consumed gas: 0.036) - [ 0 - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 109 (just consumed gas: 0.010) - [ True - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 110 (just consumed gas: 0.010) - [ (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 110 (just consumed gas: 0.025) - [ (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 116 (just consumed gas: 0.010) - [ (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 117 (just consumed gas: 0.010) - [ (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 118 (just consumed gas: 0.010) - [ (Pair (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 120 (just consumed gas: 0.010) - [ (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 118 (just consumed gas: 0.035) - [ (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 121 (just consumed gas: 1.127) - [ 0x0505090a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 122 (just consumed gas: 0.010) - [ (Some "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7") - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 124 (just consumed gas: 1.127) - [ 0x0505090a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 125 (just consumed gas: 1.976) - [ (Some (Some "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe")) - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 129 (just consumed gas: 0.010) - [ (Some "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe") - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 129 (just consumed gas: 0.025) - [ (Some "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe") - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 135 (just consumed gas: 1.127) - [ 0x0505090a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 122 (just consumed gas: 0.035) - [ 0x0505090a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - 0x0505090a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 138 (just consumed gas: 0.036) - [ 0 - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 139 (just consumed gas: 0.010) - [ True - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 140 (just consumed gas: 0.010) - [ (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 140 (just consumed gas: 0.025) - [ (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 146 (just consumed gas: 0.010) - [ (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 147 (just consumed gas: 0.010) - [ { Unit } - (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 148 (just consumed gas: 0.010) - [ (Pair { Unit } - { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 150 (just consumed gas: 0.010) - [ { Unit } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 148 (just consumed gas: 0.035) - [ { Unit } - { Unit } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 151 (just consumed gas: 0.432) - [ 0x050200000002030b - { Unit } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 152 (just consumed gas: 0.010) - [ { Unit } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 154 (just consumed gas: 0.432) - [ 0x050200000002030b - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 155 (just consumed gas: 0.624) - [ (Some { Unit }) - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 159 (just consumed gas: 0.010) - [ { Unit } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 159 (just consumed gas: 0.025) - [ { Unit } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 165 (just consumed gas: 0.432) - [ 0x050200000002030b - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 152 (just consumed gas: 0.035) - [ 0x050200000002030b - 0x050200000002030b - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 168 (just consumed gas: 0.035) - [ 0 - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 169 (just consumed gas: 0.010) - [ True - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 170 (just consumed gas: 0.010) - [ (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 170 (just consumed gas: 0.025) - [ (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 176 (just consumed gas: 0.010) - [ (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 177 (just consumed gas: 0.010) - [ { True } - (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 178 (just consumed gas: 0.010) - [ (Pair { True } - (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 180 (just consumed gas: 0.010) - [ { True } - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 178 (just consumed gas: 0.035) - [ { True } - { True } - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 181 (just consumed gas: 0.432) - [ 0x050200000002030a - { True } - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 182 (just consumed gas: 0.010) - [ { True } - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 184 (just consumed gas: 0.432) - [ 0x050200000002030a - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 185 (just consumed gas: 0.674) - [ (Some { True }) - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 189 (just consumed gas: 0.010) - [ { True } - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 189 (just consumed gas: 0.025) - [ { True } - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 195 (just consumed gas: 0.432) - [ 0x050200000002030a - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 182 (just consumed gas: 0.035) - [ 0x050200000002030a - 0x050200000002030a - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 198 (just consumed gas: 0.035) - [ 0 - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 199 (just consumed gas: 0.010) - [ True - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 200 (just consumed gas: 0.010) - [ (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 200 (just consumed gas: 0.025) - [ (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 206 (just consumed gas: 0.010) - [ (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 207 (just consumed gas: 0.010) - [ (Pair 19 10) - (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 208 (just consumed gas: 0.010) - [ (Pair (Pair 19 10) - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 210 (just consumed gas: 0.010) - [ (Pair 19 10) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 208 (just consumed gas: 0.035) - [ (Pair 19 10) - (Pair 19 10) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 211 (just consumed gas: 0.698) - [ 0x0507070013000a - (Pair 19 10) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 212 (just consumed gas: 0.010) - [ (Pair 19 10) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 214 (just consumed gas: 0.698) - [ 0x0507070013000a - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 215 (just consumed gas: 0.703) - [ (Some (Pair 19 10)) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 220 (just consumed gas: 0.010) - [ (Pair 19 10) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 220 (just consumed gas: 0.025) - [ (Pair 19 10) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 226 (just consumed gas: 0.698) - [ 0x0507070013000a - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 212 (just consumed gas: 0.035) - [ 0x0507070013000a - 0x0507070013000a - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 229 (just consumed gas: 0.035) - [ 0 - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 230 (just consumed gas: 0.010) - [ True - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 231 (just consumed gas: 0.010) - [ (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 231 (just consumed gas: 0.025) - [ (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 237 (just consumed gas: 0.010) - [ (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 238 (just consumed gas: 0.010) - [ (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 239 (just consumed gas: 0.010) - [ (Pair (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK }) ] - - location: 241 (just consumed gas: 0.010) - [ (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 239 (just consumed gas: 0.035) - [ (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 242 (just consumed gas: 0.722) - [ 0x0505050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 243 (just consumed gas: 0.010) - [ (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 245 (just consumed gas: 0.722) - [ 0x0505050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 246 (just consumed gas: 1.114) - [ (Some (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5")) - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 251 (just consumed gas: 0.010) - [ (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 251 (just consumed gas: 0.025) - [ (Left "tz1cxcwwnzENRdhe2Kb8ZdTrdNy4bFNyScx5") - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 257 (just consumed gas: 0.722) - [ 0x0505050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 243 (just consumed gas: 0.035) - [ 0x0505050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - 0x0505050a0000001500bdfe3885e846fdea23c9acbe3bb1cfcca9c03e4a - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 260 (just consumed gas: 0.035) - [ 0 - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 261 (just consumed gas: 0.010) - [ True - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 262 (just consumed gas: 0.010) - [ (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 262 (just consumed gas: 0.025) - [ (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 268 (just consumed gas: 0.010) - [ (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 269 (just consumed gas: 0.010) - [ { Elt 0 "foo" ; Elt 1 "bar" } - (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 270 (just consumed gas: 0.010) - [ (Pair { Elt 0 "foo" ; Elt 1 "bar" } { PACK }) ] - - location: 272 (just consumed gas: 0.010) - [ { Elt 0 "foo" ; Elt 1 "bar" } - { PACK } ] - - location: 270 (just consumed gas: 0.035) - [ { Elt 0 "foo" ; Elt 1 "bar" } - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK } ] - - location: 273 (just consumed gas: 1.467) - [ 0x050200000018070400000100000003666f6f070400010100000003626172 - { Elt 0 "foo" ; Elt 1 "bar" } - { PACK } ] - - location: 274 (just consumed gas: 0.010) - [ { Elt 0 "foo" ; Elt 1 "bar" } - { PACK } ] - - location: 276 (just consumed gas: 1.467) - [ 0x050200000018070400000100000003666f6f070400010100000003626172 - { PACK } ] - - location: 277 (just consumed gas: 1.610) - [ (Some { Elt 0 "foo" ; Elt 1 "bar" }) - { PACK } ] - - location: 282 (just consumed gas: 0.010) - [ { Elt 0 "foo" ; Elt 1 "bar" } - { PACK } ] - - location: 282 (just consumed gas: 0.025) - [ { Elt 0 "foo" ; Elt 1 "bar" } - { PACK } ] - - location: 288 (just consumed gas: 1.467) - [ 0x050200000018070400000100000003666f6f070400010100000003626172 - { PACK } ] - - location: 274 (just consumed gas: 0.035) - [ 0x050200000018070400000100000003666f6f070400010100000003626172 - 0x050200000018070400000100000003666f6f070400010100000003626172 - { PACK } ] - - location: 291 (just consumed gas: 0.035) - [ 0 - { PACK } ] - - location: 292 (just consumed gas: 0.010) - [ True - { PACK } ] - - location: 293 (just consumed gas: 0.010) - [ { PACK } ] - - location: 293 (just consumed gas: 0.025) - [ { PACK } ] - - location: 299 (just consumed gas: 0.010) - [ { PACK } - { PACK } ] - - location: 300 (just consumed gas: 0.597) - [ 0x050200000002030c - { PACK } ] - - location: 301 (just consumed gas: 0.010) - [ { PACK } ] - - location: 303 (just consumed gas: 0.597) - [ 0x050200000002030c ] - - location: 304 (just consumed gas: 1.553) - [ (Some { PACK }) ] - - location: 309 (just consumed gas: 0.010) - [ { PACK } ] - - location: 309 (just consumed gas: 0.025) - [ { PACK } ] - - location: 315 (just consumed gas: 0.597) - [ 0x050200000002030c ] - - location: 301 (just consumed gas: 0.035) - [ 0x050200000002030c - 0x050200000002030c ] - - location: 318 (just consumed gas: 0.035) - [ 0 ] - - location: 319 (just consumed gas: 0.010) - [ True ] - - location: 320 (just consumed gas: 0.010) - [ ] - - location: 320 (just consumed gas: 0.025) - [ ] - - location: 326 (just consumed gas: 0.010) - [ Unit ] - - location: 327 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 329 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev_cty--storage125992234--input802670583-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev_cty--storage125992234--input802670583-.out deleted file mode 100644 index d13261416682f87b995e77d3db6b83ccc9f63679..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -packunpack_rev_cty--storage125992234--input802670583-.out +++ /dev/null @@ -1,1032 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/packunpack_rev_cty.tz on storage Unit and input '(Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" (Pair Unit (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" (Pair None (Pair { } (Pair { } (Pair (Pair 40 -10) (Pair (Right "2019-09-09T08:35:33Z") (Pair { } { DUP ; DROP ; PACK } )))))))))' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 28 (just consumed gas: 246.017) - [ (Pair (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) - Unit) ] - - location: 28 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 29 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 30 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 33 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 31 (just consumed gas: 0.035) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 34 (just consumed gas: 1.001) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 35 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 37 (just consumed gas: 1.001) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 38 (just consumed gas: 75.159) - [ (Some "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav") - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 41 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 41 (just consumed gas: 0.025) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 47 (just consumed gas: 1.001) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 35 (just consumed gas: 0.035) - [ 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 50 (just consumed gas: 0.035) - [ 0 - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 51 (just consumed gas: 0.010) - [ True - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 52 (just consumed gas: 0.010) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 52 (just consumed gas: 0.025) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 58 (just consumed gas: 0.010) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 59 (just consumed gas: 0.010) - [ Unit - (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 60 (just consumed gas: 0.010) - [ (Pair Unit - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 62 (just consumed gas: 0.010) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 60 (just consumed gas: 0.035) - [ Unit - Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 63 (just consumed gas: 0.216) - [ 0x05030b - Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 64 (just consumed gas: 0.010) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 66 (just consumed gas: 0.216) - [ 0x05030b - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 67 (just consumed gas: 0.421) - [ (Some Unit) - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 70 (just consumed gas: 0.010) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 70 (just consumed gas: 0.025) - [ Unit - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 76 (just consumed gas: 0.216) - [ 0x05030b - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 64 (just consumed gas: 0.035) - [ 0x05030b - 0x05030b - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 79 (just consumed gas: 0.035) - [ 0 - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 80 (just consumed gas: 0.010) - [ True - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 81 (just consumed gas: 0.010) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 81 (just consumed gas: 0.025) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 87 (just consumed gas: 0.010) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 88 (just consumed gas: 0.010) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 89 (just consumed gas: 0.010) - [ (Pair "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 91 (just consumed gas: 0.010) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 89 (just consumed gas: 0.035) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 92 (just consumed gas: 0.911) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 93 (just consumed gas: 0.010) - [ "edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 95 (just consumed gas: 0.911) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 96 (just consumed gas: 1.835) - [ (Some "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe") - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 99 (just consumed gas: 0.010) - [ "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe" - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 99 (just consumed gas: 0.025) - [ "sigXeXB5JD5TaLb3xgTPKjgf9W45judiCmNP9UBdZBdmtHSGBxL1M8ZSUb6LpjGP2MdfUBTB4WHs5APnvyRV1LooU6QHJuDe" - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 105 (just consumed gas: 0.911) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 93 (just consumed gas: 0.035) - [ 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 108 (just consumed gas: 0.036) - [ 0 - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 109 (just consumed gas: 0.010) - [ True - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 110 (just consumed gas: 0.010) - [ (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 110 (just consumed gas: 0.025) - [ (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 116 (just consumed gas: 0.010) - [ (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 117 (just consumed gas: 0.010) - [ None - (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 118 (just consumed gas: 0.010) - [ (Pair None - {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 120 (just consumed gas: 0.010) - [ None - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 118 (just consumed gas: 0.035) - [ None - None - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 121 (just consumed gas: 0.216) - [ 0x050306 - None - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 122 (just consumed gas: 0.010) - [ None - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 124 (just consumed gas: 0.216) - [ 0x050306 - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 125 (just consumed gas: 0.421) - [ (Some None) - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 129 (just consumed gas: 0.010) - [ None - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 129 (just consumed gas: 0.025) - [ None - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 135 (just consumed gas: 0.216) - [ 0x050306 - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 122 (just consumed gas: 0.035) - [ 0x050306 - 0x050306 - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 138 (just consumed gas: 0.035) - [ 0 - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 139 (just consumed gas: 0.010) - [ True - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 140 (just consumed gas: 0.010) - [ (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 140 (just consumed gas: 0.025) - [ (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 146 (just consumed gas: 0.010) - [ (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 147 (just consumed gas: 0.010) - [ {} - (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 148 (just consumed gas: 0.010) - [ (Pair {} - {} - (Pair 40 -10) - (Right "2019-09-09T08:35:33Z") - {} - { DUP ; DROP ; PACK }) ] - - location: 150 (just consumed gas: 0.010) - [ {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 148 (just consumed gas: 0.035) - [ {} - {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 151 (just consumed gas: 0.216) - [ 0x050200000000 - {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 152 (just consumed gas: 0.010) - [ {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 154 (just consumed gas: 0.216) - [ 0x050200000000 - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 155 (just consumed gas: 0.483) - [ (Some {}) - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 159 (just consumed gas: 0.010) - [ {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 159 (just consumed gas: 0.025) - [ {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 165 (just consumed gas: 0.216) - [ 0x050200000000 - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 152 (just consumed gas: 0.035) - [ 0x050200000000 - 0x050200000000 - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 168 (just consumed gas: 0.035) - [ 0 - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 169 (just consumed gas: 0.010) - [ True - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 170 (just consumed gas: 0.010) - [ (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 170 (just consumed gas: 0.025) - [ (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 176 (just consumed gas: 0.010) - [ (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 177 (just consumed gas: 0.010) - [ {} - (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 178 (just consumed gas: 0.010) - [ (Pair {} (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 180 (just consumed gas: 0.010) - [ {} - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 178 (just consumed gas: 0.035) - [ {} - {} - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 181 (just consumed gas: 0.216) - [ 0x050200000000 - {} - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 182 (just consumed gas: 0.010) - [ {} - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 184 (just consumed gas: 0.216) - [ 0x050200000000 - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 185 (just consumed gas: 0.483) - [ (Some {}) - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 189 (just consumed gas: 0.010) - [ {} - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 189 (just consumed gas: 0.025) - [ {} - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 195 (just consumed gas: 0.216) - [ 0x050200000000 - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 182 (just consumed gas: 0.035) - [ 0x050200000000 - 0x050200000000 - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 198 (just consumed gas: 0.035) - [ 0 - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 199 (just consumed gas: 0.010) - [ True - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 200 (just consumed gas: 0.010) - [ (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 200 (just consumed gas: 0.025) - [ (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 206 (just consumed gas: 0.010) - [ (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 207 (just consumed gas: 0.010) - [ (Pair 40 -10) - (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 208 (just consumed gas: 0.010) - [ (Pair (Pair 40 -10) (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 210 (just consumed gas: 0.010) - [ (Pair 40 -10) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 208 (just consumed gas: 0.035) - [ (Pair 40 -10) - (Pair 40 -10) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 211 (just consumed gas: 0.698) - [ 0x0507070028004a - (Pair 40 -10) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 212 (just consumed gas: 0.010) - [ (Pair 40 -10) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 214 (just consumed gas: 0.698) - [ 0x0507070028004a - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 215 (just consumed gas: 0.703) - [ (Some (Pair 40 -10)) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 220 (just consumed gas: 0.010) - [ (Pair 40 -10) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 220 (just consumed gas: 0.025) - [ (Pair 40 -10) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 226 (just consumed gas: 0.698) - [ 0x0507070028004a - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 212 (just consumed gas: 0.035) - [ 0x0507070028004a - 0x0507070028004a - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 229 (just consumed gas: 0.035) - [ 0 - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 230 (just consumed gas: 0.010) - [ True - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 231 (just consumed gas: 0.010) - [ (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 231 (just consumed gas: 0.025) - [ (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 237 (just consumed gas: 0.010) - [ (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 238 (just consumed gas: 0.010) - [ (Right "2019-09-09T08:35:33Z") - (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 239 (just consumed gas: 0.010) - [ (Pair (Right "2019-09-09T08:35:33Z") {} { DUP ; DROP ; PACK }) ] - - location: 241 (just consumed gas: 0.010) - [ (Right "2019-09-09T08:35:33Z") - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 239 (just consumed gas: 0.035) - [ (Right "2019-09-09T08:35:33Z") - (Right "2019-09-09T08:35:33Z") - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 242 (just consumed gas: 0.532) - [ 0x0505080095bbb0d70b - (Right "2019-09-09T08:35:33Z") - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 243 (just consumed gas: 0.010) - [ (Right "2019-09-09T08:35:33Z") - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 245 (just consumed gas: 0.532) - [ 0x0505080095bbb0d70b - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 246 (just consumed gas: 0.644) - [ (Some (Right "2019-09-09T08:35:33Z")) - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 251 (just consumed gas: 0.010) - [ (Right "2019-09-09T08:35:33Z") - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 251 (just consumed gas: 0.025) - [ (Right "2019-09-09T08:35:33Z") - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 257 (just consumed gas: 0.532) - [ 0x0505080095bbb0d70b - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 243 (just consumed gas: 0.035) - [ 0x0505080095bbb0d70b - 0x0505080095bbb0d70b - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 260 (just consumed gas: 0.035) - [ 0 - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 261 (just consumed gas: 0.010) - [ True - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 262 (just consumed gas: 0.010) - [ (Pair {} { DUP ; DROP ; PACK }) ] - - location: 262 (just consumed gas: 0.025) - [ (Pair {} { DUP ; DROP ; PACK }) ] - - location: 268 (just consumed gas: 0.010) - [ (Pair {} { DUP ; DROP ; PACK }) - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 269 (just consumed gas: 0.010) - [ {} - (Pair {} { DUP ; DROP ; PACK }) ] - - location: 270 (just consumed gas: 0.010) - [ (Pair {} { DUP ; DROP ; PACK }) ] - - location: 272 (just consumed gas: 0.010) - [ {} - { DUP ; DROP ; PACK } ] - - location: 270 (just consumed gas: 0.035) - [ {} - {} - { DUP ; DROP ; PACK } ] - - location: 273 (just consumed gas: 0.216) - [ 0x050200000000 - {} - { DUP ; DROP ; PACK } ] - - location: 274 (just consumed gas: 0.010) - [ {} - { DUP ; DROP ; PACK } ] - - location: 276 (just consumed gas: 0.216) - [ 0x050200000000 - { DUP ; DROP ; PACK } ] - - location: 277 (just consumed gas: 0.483) - [ (Some {}) - { DUP ; DROP ; PACK } ] - - location: 282 (just consumed gas: 0.010) - [ {} - { DUP ; DROP ; PACK } ] - - location: 282 (just consumed gas: 0.025) - [ {} - { DUP ; DROP ; PACK } ] - - location: 288 (just consumed gas: 0.216) - [ 0x050200000000 - { DUP ; DROP ; PACK } ] - - location: 274 (just consumed gas: 0.035) - [ 0x050200000000 - 0x050200000000 - { DUP ; DROP ; PACK } ] - - location: 291 (just consumed gas: 0.035) - [ 0 - { DUP ; DROP ; PACK } ] - - location: 292 (just consumed gas: 0.010) - [ True - { DUP ; DROP ; PACK } ] - - location: 293 (just consumed gas: 0.010) - [ { DUP ; DROP ; PACK } ] - - location: 293 (just consumed gas: 0.025) - [ { DUP ; DROP ; PACK } ] - - location: 299 (just consumed gas: 0.010) - [ { DUP ; DROP ; PACK } - { DUP ; DROP ; PACK } ] - - location: 300 (just consumed gas: 1.129) - [ 0x05020000000603210320030c - { DUP ; DROP ; PACK } ] - - location: 301 (just consumed gas: 0.010) - [ { DUP ; DROP ; PACK } ] - - location: 303 (just consumed gas: 1.129) - [ 0x05020000000603210320030c ] - - location: 304 (just consumed gas: 3.147) - [ (Some { DUP ; DROP ; PACK }) ] - - location: 309 (just consumed gas: 0.010) - [ { DUP ; DROP ; PACK } ] - - location: 309 (just consumed gas: 0.025) - [ { DUP ; DROP ; PACK } ] - - location: 315 (just consumed gas: 1.129) - [ 0x05020000000603210320030c ] - - location: 301 (just consumed gas: 0.035) - [ 0x05020000000603210320030c - 0x05020000000603210320030c ] - - location: 318 (just consumed gas: 0.035) - [ 0 ] - - location: 319 (just consumed gas: 0.010) - [ True ] - - location: 320 (just consumed gas: 0.010) - [ ] - - location: 320 (just consumed gas: 0.025) - [ ] - - location: 326 (just consumed gas: 0.010) - [ Unit ] - - location: 327 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 329 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input106930123-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input106930123-.out deleted file mode 100644 index 9fd6363ee60018296f3e3117e8395919c61b4400..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input106930123-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/pair_id.tz on storage None and input '(Pair False True)' --level 1 --trace-stack -storage - (Some (Pair False True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 5.283) - [ (Pair (Pair False True) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair False True) ] - - location: 13 (just consumed gas: 0.010) - [ (Some (Pair False True)) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some (Pair False True)) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair False True))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input181204719-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input181204719-.out deleted file mode 100644 index 8f1d3bdcdff1efbed795935f1bfb225f45b76250..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input181204719-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/pair_id.tz on storage None and input '(Pair True False)' --level 1 --trace-stack -storage - (Some (Pair True False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 5.283) - [ (Pair (Pair True False) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair True False) ] - - location: 13 (just consumed gas: 0.010) - [ (Some (Pair True False)) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some (Pair True False)) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair True False))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input223774825-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input223774825-.out deleted file mode 100644 index cb4973f633b6fc37aaf96578d15e1dc8a865ba60..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input223774825-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/pair_id.tz on storage None and input '(Pair False False)' --level 1 --trace-stack -storage - (Some (Pair False False)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 5.283) - [ (Pair (Pair False False) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair False False) ] - - location: 13 (just consumed gas: 0.010) - [ (Some (Pair False False)) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some (Pair False False)) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair False False))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input908807505-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input908807505-.out deleted file mode 100644 index 8492d59ea2a4ce0c258ac55b5f39d554975ade07..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pair_id--storage921624073--input908807505-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/pair_id.tz on storage None and input '(Pair True True)' --level 1 --trace-stack -storage - (Some (Pair True True)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 5.283) - [ (Pair (Pair True True) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair True True) ] - - location: 13 (just consumed gas: 0.010) - [ (Some (Pair True True)) ] - - location: 14 (just consumed gas: 0.010) - [ {} - (Some (Pair True True)) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair True True))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pexec--storage256947135--input1050356042-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pexec--storage256947135--input1050356042-.out deleted file mode 100644 index 5dd54831d305c2b66009f7835d578e33f696d804..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pexec--storage256947135--input1050356042-.out +++ /dev/null @@ -1,47 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/pexec.tz on storage 14 and input 38 --level 1 --trace-stack -storage - 52 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 8.913) - [ (Pair 38 14) ] - - location: 7 (just consumed gas: 0.010) - [ { UNPAIR ; ADD } - (Pair 38 14) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 38 14) - { UNPAIR ; ADD } ] - - location: 16 (just consumed gas: 0.010) - [ 38 - 14 - { UNPAIR ; ADD } ] - - location: 17 (just consumed gas: 0.010) - [ 14 - { UNPAIR ; ADD } ] - - location: 19 (just consumed gas: 0.401) - [ { PUSH nat 14 ; PAIR ; { UNPAIR ; ADD } } ] - - location: 17 (just consumed gas: 0.035) - [ 38 - { PUSH nat 14 ; PAIR ; { UNPAIR ; ADD } } ] - - location: 12 (just consumed gas: 0.020) - [ 14 - 38 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair 14 38) ] - - location: 13 (just consumed gas: 0.010) - [ 14 - 38 ] - - location: 14 (just consumed gas: 0.035) - [ 52 ] - - location: 20 (just consumed gas: 0.035) - [ 52 ] - - location: 21 (just consumed gas: 0.010) - [ {} - 52 ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} 52) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pexec_2--storage197120858--input179371027-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pexec_2--storage197120858--input179371027-.out deleted file mode 100644 index 0382e52140ca802deed2d9929939031921bf4db3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -pexec_2--storage197120858--input179371027-.out +++ /dev/null @@ -1,282 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/pexec_2.tz on storage '{ 0 ; 1 ; 2 ; 3}' and input 4 --level 1 --trace-stack -storage - { 0 ; 7 ; 14 ; 21 } -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 16.800) - [ (Pair 4 { 0 ; 1 ; 2 ; 3 }) ] - - location: 8 (just consumed gas: 0.010) - [ 4 - { 0 ; 1 ; 2 ; 3 } ] - - location: 9 (just consumed gas: 0.010) - [ { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } - 4 - { 0 ; 1 ; 2 ; 3 } ] - - location: 23 (just consumed gas: 0.010) - [ 4 - { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } - { 0 ; 1 ; 2 ; 3 } ] - - location: 24 (just consumed gas: 0.401) - [ { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } - { 0 ; 1 ; 2 ; 3 } ] - - location: 25 (just consumed gas: 0.010) - [ 3 - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } - { 0 ; 1 ; 2 ; 3 } ] - - location: 28 (just consumed gas: 0.401) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { 0 ; 1 ; 2 ; 3 } ] - - location: 29 (just consumed gas: 0.010) - [ { 0 ; 1 ; 2 ; 3 } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 30 (just consumed gas: 0.050) - [ 0 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 34 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.035) - [ 0 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 16 (just consumed gas: 0.020) - [ 3 - 0 ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 3 0) ] - - location: 16 (just consumed gas: 0.010) - [ 4 - (Pair 3 0) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 4 3 0) ] - - location: 17 (just consumed gas: 0.010) - [ 4 - (Pair 3 0) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 3 0) ] - - location: 20 (just consumed gas: 0.010) - [ 3 - 0 ] - - location: 18 (just consumed gas: 0.035) - [ 4 - 3 - 0 ] - - location: 21 (just consumed gas: 0.035) - [ 7 - 0 ] - - location: 22 (just consumed gas: 0.056) - [ 0 ] - - location: 35 (just consumed gas: 0.035) - [ 0 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 30 (just consumed gas: 0.055) - [ 1 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 34 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.035) - [ 1 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 16 (just consumed gas: 0.020) - [ 3 - 1 ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 3 1) ] - - location: 16 (just consumed gas: 0.010) - [ 4 - (Pair 3 1) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 4 3 1) ] - - location: 17 (just consumed gas: 0.010) - [ 4 - (Pair 3 1) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 3 1) ] - - location: 20 (just consumed gas: 0.010) - [ 3 - 1 ] - - location: 18 (just consumed gas: 0.035) - [ 4 - 3 - 1 ] - - location: 21 (just consumed gas: 0.035) - [ 7 - 1 ] - - location: 22 (just consumed gas: 0.059) - [ 7 ] - - location: 35 (just consumed gas: 0.035) - [ 7 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 30 (just consumed gas: 0.055) - [ 2 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 34 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.035) - [ 2 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 16 (just consumed gas: 0.020) - [ 3 - 2 ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 3 2) ] - - location: 16 (just consumed gas: 0.010) - [ 4 - (Pair 3 2) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 4 3 2) ] - - location: 17 (just consumed gas: 0.010) - [ 4 - (Pair 3 2) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 3 2) ] - - location: 20 (just consumed gas: 0.010) - [ 3 - 2 ] - - location: 18 (just consumed gas: 0.035) - [ 4 - 3 - 2 ] - - location: 21 (just consumed gas: 0.035) - [ 7 - 2 ] - - location: 22 (just consumed gas: 0.059) - [ 14 ] - - location: 35 (just consumed gas: 0.035) - [ 14 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 30 (just consumed gas: 0.055) - [ 3 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 34 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 32 (just consumed gas: 0.035) - [ 3 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 16 (just consumed gas: 0.020) - [ 3 - 3 ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 3 3) ] - - location: 16 (just consumed gas: 0.010) - [ 4 - (Pair 3 3) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 4 3 3) ] - - location: 17 (just consumed gas: 0.010) - [ 4 - (Pair 3 3) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair 3 3) ] - - location: 20 (just consumed gas: 0.010) - [ 3 - 3 ] - - location: 18 (just consumed gas: 0.035) - [ 4 - 3 - 3 ] - - location: 21 (just consumed gas: 0.035) - [ 7 - 3 ] - - location: 22 (just consumed gas: 0.059) - [ 21 ] - - location: 35 (just consumed gas: 0.035) - [ 21 - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 30 (just consumed gas: 0.072) - [ { 0 ; 7 ; 14 ; 21 } - { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 36 (just consumed gas: 0.010) - [ { PUSH int 3 ; - PAIR ; - { PUSH int 4 ; PAIR ; { UNPAIR ; DIP { UNPAIR } ; ADD ; MUL } } } ] - - location: 38 (just consumed gas: 0.010) - [ ] - - location: 36 (just consumed gas: 0.035) - [ { 0 ; 7 ; 14 ; 21 } ] - - location: 39 (just consumed gas: 0.010) - [ {} - { 0 ; 7 ; 14 ; 21 } ] - - location: 41 (just consumed gas: 0.010) - [ (Pair {} { 0 ; 7 ; 14 ; 21 }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ret_int--storage921624073--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ret_int--storage921624073--input125992234-.out deleted file mode 100644 index 38186d8387ddf6340568ca32e0c438156180dd17..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -ret_int--storage921624073--input125992234-.out +++ /dev/null @@ -1,23 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/ret_int.tz on storage None and input Unit --level 1 --trace-stack -storage - (Some 300) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.371) - [ (Pair Unit None) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.010) - [ 300 ] - - location: 12 (just consumed gas: 0.010) - [ (Some 300) ] - - location: 13 (just consumed gas: 0.010) - [ {} - (Some 300) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair {} (Some 300)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse--storage528921618--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse--storage528921618--input457300675-.out deleted file mode 100644 index 6de65b1cc6b3a56e9475f6d70aabe1f372ead2b7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse--storage528921618--input457300675-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/reverse.tz on storage '{""}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 6.772) - [ (Pair {} { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ {} - {} ] - - location: 12 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.040) - [ {} ] - - location: 16 (just consumed gas: 0.010) - [ {} - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse--storage528921618--input851203613-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse--storage528921618--input851203613-.out deleted file mode 100644 index 841e5d2167902af40d05bdf742683fca3e242c2c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse--storage528921618--input851203613-.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/reverse.tz on storage '{""}' and input '{ "c" ; "b" ; "a" }' --level 1 --trace-stack -storage - { "a" ; "b" ; "c" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.147) - [ (Pair { "c" ; "b" ; "a" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "c" ; "b" ; "a" } ] - - location: 12 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } - {} ] - - location: 13 (just consumed gas: 0.030) - [ "c" - {} ] - - location: 15 (just consumed gas: 0.010) - [ { "c" } ] - - location: 13 (just consumed gas: 0.025) - [ "b" - { "c" } ] - - location: 15 (just consumed gas: 0.010) - [ { "b" ; "c" } ] - - location: 13 (just consumed gas: 0.025) - [ "a" - { "b" ; "c" } ] - - location: 15 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 13 (just consumed gas: 0.035) - [ { "a" ; "b" ; "c" } ] - - location: 16 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse_loop--storage528921618--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse_loop--storage528921618--input457300675-.out deleted file mode 100644 index 1eab37a5586f6fae5185b7cf76de019ef8625374..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse_loop--storage528921618--input457300675-.out +++ /dev/null @@ -1,50 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/reverse_loop.tz on storage '{""}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 13.491) - [ (Pair {} { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ {} - {} ] - - location: 12 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.010) - [ True - {} - {} ] - - location: 33 (just consumed gas: 0.020) - [ {} - {} ] - - location: 18 (just consumed gas: 0.010) - [ {} ] - - location: 28 (just consumed gas: 0.010) - [ {} - {} ] - - location: 30 (just consumed gas: 0.010) - [ False - {} - {} ] - - location: 18 (just consumed gas: 0.025) - [ False - {} - {} ] - - location: 33 (just consumed gas: 0.035) - [ {} - {} ] - - location: 33 (just consumed gas: 0.010) - [ {} ] - - location: 34 (just consumed gas: 0.010) - [ {} - {} ] - - location: 36 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse_loop--storage528921618--input851203613-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse_loop--storage528921618--input851203613-.out deleted file mode 100644 index 45362974b13ab605cee37ae9e0295f0a77115b9d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -reverse_loop--storage528921618--input851203613-.out +++ /dev/null @@ -1,131 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/reverse_loop.tz on storage '{""}' and input '{ "c" ; "b" ; "a" }' --level 1 --trace-stack -storage - { "a" ; "b" ; "c" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 13.866) - [ (Pair { "c" ; "b" ; "a" } { "" }) ] - - location: 9 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "c" ; "b" ; "a" } ] - - location: 12 (just consumed gas: 0.010) - [ { "c" ; "b" ; "a" } - {} ] - - location: 13 (just consumed gas: 0.010) - [ True - { "c" ; "b" ; "a" } - {} ] - - location: 33 (just consumed gas: 0.020) - [ { "c" ; "b" ; "a" } - {} ] - - location: 18 (just consumed gas: 0.010) - [ "c" - { "b" ; "a" } - {} ] - - location: 20 (just consumed gas: 0.010) - [ { "b" ; "a" } - "c" - {} ] - - location: 21 (just consumed gas: 0.010) - [ "c" - {} ] - - location: 23 (just consumed gas: 0.010) - [ { "c" } ] - - location: 21 (just consumed gas: 0.035) - [ { "b" ; "a" } - { "c" } ] - - location: 24 (just consumed gas: 0.010) - [ True - { "b" ; "a" } - { "c" } ] - - location: 18 (just consumed gas: 0.025) - [ True - { "b" ; "a" } - { "c" } ] - - location: 33 (just consumed gas: 0.025) - [ { "b" ; "a" } - { "c" } ] - - location: 18 (just consumed gas: 0.010) - [ "b" - { "a" } - { "c" } ] - - location: 20 (just consumed gas: 0.010) - [ { "a" } - "b" - { "c" } ] - - location: 21 (just consumed gas: 0.010) - [ "b" - { "c" } ] - - location: 23 (just consumed gas: 0.010) - [ { "b" ; "c" } ] - - location: 21 (just consumed gas: 0.035) - [ { "a" } - { "b" ; "c" } ] - - location: 24 (just consumed gas: 0.010) - [ True - { "a" } - { "b" ; "c" } ] - - location: 18 (just consumed gas: 0.025) - [ True - { "a" } - { "b" ; "c" } ] - - location: 33 (just consumed gas: 0.025) - [ { "a" } - { "b" ; "c" } ] - - location: 18 (just consumed gas: 0.010) - [ "a" - {} - { "b" ; "c" } ] - - location: 20 (just consumed gas: 0.010) - [ {} - "a" - { "b" ; "c" } ] - - location: 21 (just consumed gas: 0.010) - [ "a" - { "b" ; "c" } ] - - location: 23 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 21 (just consumed gas: 0.035) - [ {} - { "a" ; "b" ; "c" } ] - - location: 24 (just consumed gas: 0.010) - [ True - {} - { "a" ; "b" ; "c" } ] - - location: 18 (just consumed gas: 0.025) - [ True - {} - { "a" ; "b" ; "c" } ] - - location: 33 (just consumed gas: 0.025) - [ {} - { "a" ; "b" ; "c" } ] - - location: 18 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 28 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 30 (just consumed gas: 0.010) - [ False - {} - { "a" ; "b" ; "c" } ] - - location: 18 (just consumed gas: 0.025) - [ False - {} - { "a" ; "b" ; "c" } ] - - location: 33 (just consumed gas: 0.035) - [ {} - { "a" ; "b" ; "c" } ] - - location: 33 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 34 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 36 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sapling_empty_state--storage457300675--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sapling_empty_state--storage457300675--input125992234-.out deleted file mode 100644 index a75c8b7ceef8900d5a269ad387fe081866e8a36e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sapling_empty_state--storage457300675--input125992234-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/sapling_empty_state.tz on storage '{}' and input Unit --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.250) - [ (Pair Unit {}) ] - - location: 8 (just consumed gas: 0.010) - [ ] - - location: 9 (just consumed gas: 0.300) - [ {} ] - - location: 11 (just consumed gas: 0.010) - [ {} - {} ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_address--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_address--storage125992234--input125992234-.out deleted file mode 100644 index 379613dfb2962c380969cab34b57ecfe7d073fb2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_address--storage125992234--input125992234-.out +++ /dev/null @@ -1,46 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/self_address.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 13.358) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ { DROP ; SELF_ADDRESS } ] - - location: 14 (just consumed gas: 0.010) - [ Unit - { DROP ; SELF_ADDRESS } ] - - location: 12 (just consumed gas: 0.020) - [ ] - - location: 13 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 15 (just consumed gas: 0.035) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 16 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" - "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 17 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" - "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 20 (just consumed gas: 0.036) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ Unit ] - - location: 29 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_with_default_entrypoint--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_with_default_entrypoint--storage125992234--input125992234-.out deleted file mode 100644 index 085ec55862145ec24427109f2d2967765fcf8d25..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_with_default_entrypoint--storage125992234--input125992234-.out +++ /dev/null @@ -1,47 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/self_with_default_entrypoint.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 15.247) - [ (Pair (Right (Left Unit)) Unit) ] - - location: 13 (just consumed gas: 0.010) - [ ] - - location: 14 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 15 (just consumed gas: 0.010) - [ ] - - location: 16 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%A" ] - - location: 17 (just consumed gas: 0.010) - [ ] - - location: 18 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 19 (just consumed gas: 0.516) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 20 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 21 (just consumed gas: 0.516) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 24 (just consumed gas: 0.035) - [ 0 ] - - location: 25 (just consumed gas: 0.010) - [ True ] - - location: 26 (just consumed gas: 0.010) - [ ] - - location: 26 (just consumed gas: 0.025) - [ ] - - location: 32 (just consumed gas: 0.010) - [ Unit ] - - location: 33 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 35 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_with_entrypoint--storage125992234--input289072903-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_with_entrypoint--storage125992234--input289072903-.out deleted file mode 100644 index f7d00cf4ad33379cc5d7080852428a4c6417dd99..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -self_with_entrypoint--storage125992234--input289072903-.out +++ /dev/null @@ -1,93 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/self_with_entrypoint.tz on storage Unit and input 'Left (Left 0)' --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 13 (just consumed gas: 39.045) - [ (Pair (Left (Left 0)) Unit) ] - - location: 13 (just consumed gas: 0.010) - [ ] - - location: 14 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%A" ] - - location: 15 (just consumed gas: 0.526) - [ 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 ] - - location: 16 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" - 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 ] - - location: 17 (just consumed gas: 0.516) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 ] - - location: 18 (just consumed gas: 0.010) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 ] - - location: 19 (just consumed gas: 0.010) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 ] - - location: 21 (just consumed gas: 0.010) - [ 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 19 (just consumed gas: 0.035) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000017011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60041 - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 24 (just consumed gas: 0.035) - [ -1 - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 25 (just consumed gas: 0.010) - [ True - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 26 (just consumed gas: 0.010) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 26 (just consumed gas: 0.025) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 32 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 33 (just consumed gas: 0.516) - [ 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 - 0x050a00000016011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600 ] - - location: 36 (just consumed gas: 0.035) - [ 0 ] - - location: 37 (just consumed gas: 0.010) - [ True ] - - location: 38 (just consumed gas: 0.010) - [ ] - - location: 38 (just consumed gas: 0.025) - [ ] - - location: 44 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%A" ] - - location: 48 (just consumed gas: 0.010) - [ ] - - location: 49 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%B" ] - - location: 53 (just consumed gas: 0.010) - [ ] - - location: 54 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%maybe_C" ] - - location: 60 (just consumed gas: 0.010) - [ ] - - location: 61 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi%Z" ] - - location: 65 (just consumed gas: 0.010) - [ ] - - location: 66 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 76 (just consumed gas: 0.010) - [ ] - - location: 77 (just consumed gas: 0.010) - [ "KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi" ] - - location: 87 (just consumed gas: 0.010) - [ ] - - location: 88 (just consumed gas: 0.010) - [ Unit ] - - location: 89 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 91 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input620760059-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input620760059-.out deleted file mode 100644 index f873e682676167c4da6159d149c890f330de37c1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input620760059-.out +++ /dev/null @@ -1,49 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_car.tz on storage '(Pair "hello" 0)' and input '"world"' --level 1 --trace-stack -storage - (Pair "world" 0) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 10.806) - [ (Pair "world" "hello" 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "world" "hello" 0) - (Pair "world" "hello" 0) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "world" "hello" 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "world" "hello" 0) ] - - location: 13 (just consumed gas: 0.010) - [ "world" ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "hello" 0) - "world" ] - - location: 15 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "hello" 0) - "world" ] - - location: 16 (just consumed gas: 0.010) - [ "hello" - (Pair "hello" 0) - "world" ] - - location: 17 (just consumed gas: 0.010) - [ (Pair "hello" 0) - "world" ] - - location: 18 (just consumed gas: 0.010) - [ 0 - "world" ] - - location: 19 (just consumed gas: 0.010) - [ "world" - 0 ] - - location: 20 (just consumed gas: 0.010) - [ (Pair "world" 0) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair "world" 0) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} "world" 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input717096222-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input717096222-.out deleted file mode 100644 index e78492125bc395bcf721f13dbe68621caeb84964..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input717096222-.out +++ /dev/null @@ -1,49 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_car.tz on storage '(Pair "hello" 0)' and input '"abc"' --level 1 --trace-stack -storage - (Pair "abc" 0) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 10.786) - [ (Pair "abc" "hello" 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "abc" "hello" 0) - (Pair "abc" "hello" 0) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "abc" "hello" 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "abc" "hello" 0) ] - - location: 13 (just consumed gas: 0.010) - [ "abc" ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "hello" 0) - "abc" ] - - location: 15 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "hello" 0) - "abc" ] - - location: 16 (just consumed gas: 0.010) - [ "hello" - (Pair "hello" 0) - "abc" ] - - location: 17 (just consumed gas: 0.010) - [ (Pair "hello" 0) - "abc" ] - - location: 18 (just consumed gas: 0.010) - [ 0 - "abc" ] - - location: 19 (just consumed gas: 0.010) - [ "abc" - 0 ] - - location: 20 (just consumed gas: 0.010) - [ (Pair "abc" 0) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair "abc" 0) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} "abc" 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input79230375-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input79230375-.out deleted file mode 100644 index 8b188eec07d8b199d2c8e6c624ed4b43417df49f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_car--storage224747103--input79230375-.out +++ /dev/null @@ -1,49 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_car.tz on storage '(Pair "hello" 0)' and input '""' --level 1 --trace-stack -storage - (Pair "" 0) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 10.756) - [ (Pair "" "hello" 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "" "hello" 0) - (Pair "" "hello" 0) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "" "hello" 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "" "hello" 0) ] - - location: 13 (just consumed gas: 0.010) - [ "" ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "hello" 0) - "" ] - - location: 15 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "hello" 0) - "" ] - - location: 16 (just consumed gas: 0.010) - [ "hello" - (Pair "hello" 0) - "" ] - - location: 17 (just consumed gas: 0.010) - [ (Pair "hello" 0) - "" ] - - location: 18 (just consumed gas: 0.010) - [ 0 - "" ] - - location: 19 (just consumed gas: 0.010) - [ "" - 0 ] - - location: 20 (just consumed gas: 0.010) - [ (Pair "" 0) ] - - location: 21 (just consumed gas: 0.010) - [ {} - (Pair "" 0) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair {} "" 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage205576101--input654274102-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage205576101--input654274102-.out deleted file mode 100644 index 23bf49045c694b6190f16b17c82b59ea6f804c14..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage205576101--input654274102-.out +++ /dev/null @@ -1,46 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_cdr.tz on storage '(Pair "hello" 500)' and input 3 --level 1 --trace-stack -storage - (Pair "hello" 3) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 10.182) - [ (Pair 3 "hello" 500) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair 3 "hello" 500) - (Pair 3 "hello" 500) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "hello" 500) - (Pair 3 "hello" 500) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 3 "hello" 500) ] - - location: 13 (just consumed gas: 0.010) - [ 3 ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "hello" 500) - 3 ] - - location: 15 (just consumed gas: 0.010) - [ (Pair "hello" 500) - (Pair "hello" 500) - 3 ] - - location: 16 (just consumed gas: 0.010) - [ 500 - (Pair "hello" 500) - 3 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair "hello" 500) - 3 ] - - location: 18 (just consumed gas: 0.010) - [ "hello" - 3 ] - - location: 19 (just consumed gas: 0.010) - [ (Pair "hello" 3) ] - - location: 20 (just consumed gas: 0.010) - [ {} - (Pair "hello" 3) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair {} "hello" 3) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage224747103--input453441034-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage224747103--input453441034-.out deleted file mode 100644 index 524468094baf057021f42023565c824bccb80d5b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage224747103--input453441034-.out +++ /dev/null @@ -1,46 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_cdr.tz on storage '(Pair "hello" 0)' and input 1 --level 1 --trace-stack -storage - (Pair "hello" 1) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 10.182) - [ (Pair 1 "hello" 0) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair 1 "hello" 0) - (Pair 1 "hello" 0) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair 1 "hello" 0) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 1 "hello" 0) ] - - location: 13 (just consumed gas: 0.010) - [ 1 ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "hello" 0) - 1 ] - - location: 15 (just consumed gas: 0.010) - [ (Pair "hello" 0) - (Pair "hello" 0) - 1 ] - - location: 16 (just consumed gas: 0.010) - [ 0 - (Pair "hello" 0) - 1 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair "hello" 0) - 1 ] - - location: 18 (just consumed gas: 0.010) - [ "hello" - 1 ] - - location: 19 (just consumed gas: 0.010) - [ (Pair "hello" 1) ] - - location: 20 (just consumed gas: 0.010) - [ {} - (Pair "hello" 1) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair {} "hello" 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage611418174--input967284912-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage611418174--input967284912-.out deleted file mode 100644 index e677101b66633060c00f6d28e4e72cdff896951b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_cdr--storage611418174--input967284912-.out +++ /dev/null @@ -1,46 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_cdr.tz on storage '(Pair "hello" 7)' and input 100 --level 1 --trace-stack -storage - (Pair "hello" 100) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 10.182) - [ (Pair 100 "hello" 7) ] - - location: 9 (just consumed gas: 0.010) - [ (Pair 100 "hello" 7) - (Pair 100 "hello" 7) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "hello" 7) - (Pair 100 "hello" 7) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 100 "hello" 7) ] - - location: 13 (just consumed gas: 0.010) - [ 100 ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "hello" 7) - 100 ] - - location: 15 (just consumed gas: 0.010) - [ (Pair "hello" 7) - (Pair "hello" 7) - 100 ] - - location: 16 (just consumed gas: 0.010) - [ 7 - (Pair "hello" 7) - 100 ] - - location: 17 (just consumed gas: 0.010) - [ (Pair "hello" 7) - 100 ] - - location: 18 (just consumed gas: 0.010) - [ "hello" - 100 ] - - location: 19 (just consumed gas: 0.010) - [ (Pair "hello" 100) ] - - location: 20 (just consumed gas: 0.010) - [ {} - (Pair "hello" 100) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair {} "hello" 100) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input264787654-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input264787654-.out deleted file mode 100644 index c5f432153dc9c604bfb82fe5515b1eeb376dd497..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input264787654-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_id.tz on storage '{}' and input '{ "a" ; "b" ; "c" }' --level 1 --trace-stack -storage - { "a" ; "b" ; "c" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.523) - [ (Pair { "a" ; "b" ; "c" } {}) ] - - location: 9 (just consumed gas: 0.010) - [ { "a" ; "b" ; "c" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "a" ; "b" ; "c" } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { "a" ; "b" ; "c" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input457300675-.out deleted file mode 100644 index 7a23980a7bce9b31a39fa2436e2bd1f1dff5e8f6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input457300675-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_id.tz on storage '{}' and input '{}' --level 1 --trace-stack -storage - {} -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 3.928) - [ (Pair {} {}) ] - - location: 9 (just consumed gas: 0.010) - [ {} ] - - location: 10 (just consumed gas: 0.010) - [ {} - {} ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} {}) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input989507347-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input989507347-.out deleted file mode 100644 index 0f4ca2ebe635ec80ba723eca09aaf846bd00331a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_id--storage457300675--input989507347-.out +++ /dev/null @@ -1,19 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_id.tz on storage '{}' and input '{ "asdf" ; "bcde" }' --level 1 --trace-stack -storage - { "asdf" ; "bcde" } -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 4.375) - [ (Pair { "asdf" ; "bcde" } {}) ] - - location: 9 (just consumed gas: 0.010) - [ { "asdf" ; "bcde" } ] - - location: 10 (just consumed gas: 0.010) - [ {} - { "asdf" ; "bcde" } ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} { "asdf" ; "bcde" }) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input457300675-.out deleted file mode 100644 index 1eeed4575a17851770ace681d4c2daac2f97b0e3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input457300675-.out +++ /dev/null @@ -1,27 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_iter.tz on storage 111 and input '{}' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.596) - [ (Pair {} 111) ] - - location: 8 (just consumed gas: 0.010) - [ {} ] - - location: 9 (just consumed gas: 0.010) - [ 0 - {} ] - - location: 12 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 13 (just consumed gas: 0.070) - [ 0 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input701684511-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input701684511-.out deleted file mode 100644 index fbf7fa08d57ee5cb6bf06348a79bbd9a66f929a8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input701684511-.out +++ /dev/null @@ -1,47 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_iter.tz on storage 111 and input '{ -100 ; 1 ; 2 ; 3 }' --level 1 --trace-stack -storage - -94 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 7.301) - [ (Pair { -100 ; 1 ; 2 ; 3 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { -100 ; 1 ; 2 ; 3 } ] - - location: 9 (just consumed gas: 0.010) - [ 0 - { -100 ; 1 ; 2 ; 3 } ] - - location: 12 (just consumed gas: 0.010) - [ { -100 ; 1 ; 2 ; 3 } - 0 ] - - location: 13 (just consumed gas: 0.090) - [ -100 - 0 ] - - location: 15 (just consumed gas: 0.035) - [ -100 ] - - location: 13 (just consumed gas: 0.025) - [ 1 - -100 ] - - location: 15 (just consumed gas: 0.035) - [ -99 ] - - location: 13 (just consumed gas: 0.025) - [ 2 - -99 ] - - location: 15 (just consumed gas: 0.035) - [ -97 ] - - location: 13 (just consumed gas: 0.025) - [ 3 - -97 ] - - location: 15 (just consumed gas: 0.035) - [ -94 ] - - location: 13 (just consumed gas: 0.035) - [ -94 ] - - location: 16 (just consumed gas: 0.010) - [ {} - -94 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} -94) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input802622031-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input802622031-.out deleted file mode 100644 index 17de41e5c0b3b2f6172f76eba4393c0540a8503a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_iter--storage492856247--input802622031-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_iter.tz on storage 111 and input '{ 1 }' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 6.746) - [ (Pair { 1 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 } ] - - location: 9 (just consumed gas: 0.010) - [ 0 - { 1 } ] - - location: 12 (just consumed gas: 0.010) - [ { 1 } - 0 ] - - location: 13 (just consumed gas: 0.067) - [ 1 - 0 ] - - location: 15 (just consumed gas: 0.035) - [ 1 ] - - location: 13 (just consumed gas: 0.035) - [ 1 ] - - location: 16 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage495706788--input33757838-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage495706788--input33757838-.out deleted file mode 100644 index a9b0934693f1e6b57b3e9616bb714b7c53664cc7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage495706788--input33757838-.out +++ /dev/null @@ -1,61 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_member.tz on storage '(Pair {} None)' and input '"Hi"' --level 1 --trace-stack -storage - (Pair {} (Some False)) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 13.623) - [ (Pair "Hi" {} None) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "Hi" {} None) - (Pair "Hi" {} None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "Hi" {} None) - (Pair "Hi" {} None) - (Pair "Hi" {} None) ] - - location: 13 (just consumed gas: 0.010) - [ "Hi" - (Pair "Hi" {} None) - (Pair "Hi" {} None) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "Hi" {} None) - (Pair "Hi" {} None) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair {} None) - (Pair "Hi" {} None) ] - - location: 18 (just consumed gas: 0.010) - [ {} - (Pair "Hi" {} None) ] - - location: 14 (just consumed gas: 0.035) - [ "Hi" - {} - (Pair "Hi" {} None) ] - - location: 19 (just consumed gas: 0.040) - [ False - (Pair "Hi" {} None) ] - - location: 20 (just consumed gas: 0.010) - [ (Some False) - (Pair "Hi" {} None) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair "Hi" {} None) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - - location: 25 (just consumed gas: 0.010) - [ {} ] - - location: 21 (just consumed gas: 0.035) - [ (Some False) - {} ] - - location: 26 (just consumed gas: 0.010) - [ {} - (Some False) ] - - location: 27 (just consumed gas: 0.010) - [ (Pair {} (Some False)) ] - - location: 28 (just consumed gas: 0.010) - [ {} - (Pair {} (Some False)) ] - - location: 30 (just consumed gas: 0.010) - [ (Pair {} {} (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage550087893--input79230375-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage550087893--input79230375-.out deleted file mode 100644 index 2d611fc785a0e7fea240507163a723557184cee0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage550087893--input79230375-.out +++ /dev/null @@ -1,61 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_member.tz on storage '(Pair { "Hello" ; "World" } None)' and input '""' --level 1 --trace-stack -storage - (Pair { "Hello" ; "World" } (Some False)) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 14.070) - [ (Pair "" { "Hello" ; "World" } None) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "" { "Hello" ; "World" } None) - (Pair "" { "Hello" ; "World" } None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "" { "Hello" ; "World" } None) - (Pair "" { "Hello" ; "World" } None) - (Pair "" { "Hello" ; "World" } None) ] - - location: 13 (just consumed gas: 0.010) - [ "" - (Pair "" { "Hello" ; "World" } None) - (Pair "" { "Hello" ; "World" } None) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "" { "Hello" ; "World" } None) - (Pair "" { "Hello" ; "World" } None) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair { "Hello" ; "World" } None) - (Pair "" { "Hello" ; "World" } None) ] - - location: 18 (just consumed gas: 0.010) - [ { "Hello" ; "World" } - (Pair "" { "Hello" ; "World" } None) ] - - location: 14 (just consumed gas: 0.035) - [ "" - { "Hello" ; "World" } - (Pair "" { "Hello" ; "World" } None) ] - - location: 19 (just consumed gas: 0.040) - [ False - (Pair "" { "Hello" ; "World" } None) ] - - location: 20 (just consumed gas: 0.010) - [ (Some False) - (Pair "" { "Hello" ; "World" } None) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair "" { "Hello" ; "World" } None) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair { "Hello" ; "World" } None) ] - - location: 25 (just consumed gas: 0.010) - [ { "Hello" ; "World" } ] - - location: 21 (just consumed gas: 0.035) - [ (Some False) - { "Hello" ; "World" } ] - - location: 26 (just consumed gas: 0.010) - [ { "Hello" ; "World" } - (Some False) ] - - location: 27 (just consumed gas: 0.010) - [ (Pair { "Hello" ; "World" } (Some False)) ] - - location: 28 (just consumed gas: 0.010) - [ {} - (Pair { "Hello" ; "World" } (Some False)) ] - - location: 30 (just consumed gas: 0.010) - [ (Pair {} { "Hello" ; "World" } (Some False)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage605111220--input33757838-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage605111220--input33757838-.out deleted file mode 100644 index e525492fca69bee9997e3eff5469bfab5e994f8f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_member--storage605111220--input33757838-.out +++ /dev/null @@ -1,61 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_member.tz on storage '(Pair { "Hi" } None)' and input '"Hi"' --level 1 --trace-stack -storage - (Pair { "Hi" } (Some True)) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 13.808) - [ (Pair "Hi" { "Hi" } None) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "Hi" { "Hi" } None) - (Pair "Hi" { "Hi" } None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "Hi" { "Hi" } None) - (Pair "Hi" { "Hi" } None) - (Pair "Hi" { "Hi" } None) ] - - location: 13 (just consumed gas: 0.010) - [ "Hi" - (Pair "Hi" { "Hi" } None) - (Pair "Hi" { "Hi" } None) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "Hi" { "Hi" } None) - (Pair "Hi" { "Hi" } None) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair { "Hi" } None) - (Pair "Hi" { "Hi" } None) ] - - location: 18 (just consumed gas: 0.010) - [ { "Hi" } - (Pair "Hi" { "Hi" } None) ] - - location: 14 (just consumed gas: 0.035) - [ "Hi" - { "Hi" } - (Pair "Hi" { "Hi" } None) ] - - location: 19 (just consumed gas: 0.040) - [ True - (Pair "Hi" { "Hi" } None) ] - - location: 20 (just consumed gas: 0.010) - [ (Some True) - (Pair "Hi" { "Hi" } None) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair "Hi" { "Hi" } None) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair { "Hi" } None) ] - - location: 25 (just consumed gas: 0.010) - [ { "Hi" } ] - - location: 21 (just consumed gas: 0.035) - [ (Some True) - { "Hi" } ] - - location: 26 (just consumed gas: 0.010) - [ { "Hi" } - (Some True) ] - - location: 27 (just consumed gas: 0.010) - [ (Pair { "Hi" } (Some True)) ] - - location: 28 (just consumed gas: 0.010) - [ {} - (Pair { "Hi" } (Some True)) ] - - location: 30 (just consumed gas: 0.010) - [ (Pair {} { "Hi" } (Some True)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input403499055-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input403499055-.out deleted file mode 100644 index 7c8823f8e57baebacadfea2416c6579748c72d0c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input403499055-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_size.tz on storage 111 and input '{ 1 ; 2 ; 3 ; 4 ; 5 ; 6 }' --level 1 --trace-stack -storage - 6 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 5.361) - [ (Pair { 1 ; 2 ; 3 ; 4 ; 5 ; 6 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 ; 4 ; 5 ; 6 } ] - - location: 9 (just consumed gas: 0.010) - [ 6 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 6 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 6) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input457300675-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input457300675-.out deleted file mode 100644 index d0b0817ec1d0c5c7197dbfe82cebde07a7f1cc1c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input457300675-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_size.tz on storage 111 and input '{}' --level 1 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.286) - [ (Pair {} 111) ] - - location: 8 (just consumed gas: 0.010) - [ {} ] - - location: 9 (just consumed gas: 0.010) - [ 0 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input469078912-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input469078912-.out deleted file mode 100644 index dd39b75f67bc2105ce5c5d87be7eebd27edd3616..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input469078912-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_size.tz on storage 111 and input '{ 1 ; 2 ; 3 }' --level 1 --trace-stack -storage - 3 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.806) - [ (Pair { 1 ; 2 ; 3 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 ; 2 ; 3 } ] - - location: 9 (just consumed gas: 0.010) - [ 3 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 3 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 3) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input802622031-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input802622031-.out deleted file mode 100644 index 0bc444d689905b0eb0908e56d72bfc043eca96fe..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -set_size--storage492856247--input802622031-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/set_size.tz on storage 111 and input '{ 1 }' --level 1 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.436) - [ (Pair { 1 } 111) ] - - location: 8 (just consumed gas: 0.010) - [ { 1 } ] - - location: 9 (just consumed gas: 0.010) - [ 1 ] - - location: 10 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 1) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sha3--storage921624073--input1008262038-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sha3--storage921624073--input1008262038-.out deleted file mode 100644 index 8f8f4df9cdb1d2d9863af3403a26cc0f18b186c6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sha3--storage921624073--input1008262038-.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/sha3.tz on storage None and input 0x48656c6c6f2c20776f726c6421 --level 1 --trace-stack -storage - (Some 0xf345a219da005ebe9c1a1eaad97bbf38a10c8473e41d0af7fb617caa0c6aa722) -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.907) - [ (Pair 0x48656c6c6f2c20776f726c6421 None) ] - - location: 8 (just consumed gas: 0.010) - [ 0x48656c6c6f2c20776f726c6421 ] - - location: 9 (just consumed gas: 1.457) - [ 0xf345a219da005ebe9c1a1eaad97bbf38a10c8473e41d0af7fb617caa0c6aa722 ] - - location: 10 (just consumed gas: 0.010) - [ (Some 0xf345a219da005ebe9c1a1eaad97bbf38a10c8473e41d0af7fb617caa0c6aa722) ] - - location: 11 (just consumed gas: 0.010) - [ {} - (Some 0xf345a219da005ebe9c1a1eaad97bbf38a10c8473e41d0af7fb617caa0c6aa722) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair {} - (Some 0xf345a219da005ebe9c1a1eaad97bbf38a10c8473e41d0af7fb617caa0c6aa722)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input115382786-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input115382786-.out deleted file mode 100644 index 0f14cf0256615af16c0189e0993479e29efcb9da..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input115382786-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 15 2))' --level 1 --trace-stack -storage - (Some 60) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 15 2)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 15 2)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 15 2) ] - - location: 17 (just consumed gas: 0.010) - [ 15 - 2 ] - - location: 18 (just consumed gas: 0.128) - [ 60 ] - - location: 15 (just consumed gas: 0.025) - [ 60 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 60) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 60) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 60)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input271566295-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input271566295-.out deleted file mode 100644 index b652a4b88326335e814435e9c5e643bb658437ee..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input271566295-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 0 1))' --level 1 --trace-stack -storage - (Some 0) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 0 1)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 0 1)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 0 1) ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 1 ] - - location: 21 (just consumed gas: 0.045) - [ 0 ] - - location: 15 (just consumed gas: 0.025) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 0) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 0) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 0)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input340971987-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input340971987-.out deleted file mode 100644 index 235466f2bfbd52b6fcc54d19a1182e87d4ffe520..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input340971987-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 0 0))' --level 1 --trace-stack -storage - (Some 0) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 0 0)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 0 0)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 17 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 18 (just consumed gas: 0.128) - [ 0 ] - - location: 15 (just consumed gas: 0.025) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 0) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 0) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 0)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input374168553-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input374168553-.out deleted file mode 100644 index f8e854ac56f4f936394d21c2c279bb8a6fe7e050..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input374168553-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 15 2))' --level 1 --trace-stack -storage - (Some 3) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 15 2)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 15 2)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 15 2) ] - - location: 20 (just consumed gas: 0.010) - [ 15 - 2 ] - - location: 21 (just consumed gas: 0.045) - [ 3 ] - - location: 15 (just consumed gas: 0.025) - [ 3 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 3) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 3) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 3)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input413621582-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input413621582-.out deleted file mode 100644 index 78c593cc4ed78f01205671c673ef00a2cbb88e5c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input413621582-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 1 2))' --level 1 --trace-stack -storage - (Some 0) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 1 2)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 1 2)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 1 2) ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 2 ] - - location: 21 (just consumed gas: 0.045) - [ 0 ] - - location: 15 (just consumed gas: 0.025) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 0) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 0) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 0)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input424849461-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input424849461-.out deleted file mode 100644 index 42a47978f860d41278479c5793c9fc100be23db5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input424849461-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 1 2))' --level 1 --trace-stack -storage - (Some 4) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 1 2)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 1 2)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 1 2) ] - - location: 17 (just consumed gas: 0.010) - [ 1 - 2 ] - - location: 18 (just consumed gas: 0.128) - [ 4 ] - - location: 15 (just consumed gas: 0.025) - [ 4 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 4) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 4) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 4)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input485030042-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input485030042-.out deleted file mode 100644 index 796a35cfbbef8de03d12856769fc0c686b4dd3f9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input485030042-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 8 1))' --level 1 --trace-stack -storage - (Some 16) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 8 1)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 8 1)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 8 1) ] - - location: 17 (just consumed gas: 0.010) - [ 8 - 1 ] - - location: 18 (just consumed gas: 0.128) - [ 16 ] - - location: 15 (just consumed gas: 0.025) - [ 16 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 16) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 16) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 16)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input705767726-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input705767726-.out deleted file mode 100644 index 7fc72d8a3d0dfce10458c3489dd72f259cb9729f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input705767726-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 8 1))' --level 1 --trace-stack -storage - (Some 4) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 8 1)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 8 1)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 8 1) ] - - location: 20 (just consumed gas: 0.010) - [ 8 - 1 ] - - location: 21 (just consumed gas: 0.045) - [ 4 ] - - location: 15 (just consumed gas: 0.025) - [ 4 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 4) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 4) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 4)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input769385932-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input769385932-.out deleted file mode 100644 index 7f8a875d4a5d4c9266b323cf6fed6597330b1581..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input769385932-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 0 1))' --level 1 --trace-stack -storage - (Some 0) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 0 1)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 0 1)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 0 1) ] - - location: 17 (just consumed gas: 0.010) - [ 0 - 1 ] - - location: 18 (just consumed gas: 0.128) - [ 0 ] - - location: 15 (just consumed gas: 0.025) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 0) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 0) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 0)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input913715337-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input913715337-.out deleted file mode 100644 index 9153f6b1cf366692c737e50e62bb9b6d7e956a6e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -shifts--storage921624073--input913715337-.out +++ /dev/null @@ -1,30 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 0 0))' --level 1 --trace-stack -storage - (Some 0) -emitted operations - -big_map diff - -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 0 0)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 0 0)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 21 (just consumed gas: 0.045) - [ 0 ] - - location: 15 (just consumed gas: 0.025) - [ 0 ] - - location: 22 (just consumed gas: 0.010) - [ (Some 0) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Some 0) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} (Some 0)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage351480851--input65907686-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage351480851--input65907686-.out deleted file mode 100644 index 34cfde8dfaa90aa36d66595f8a45a017d11d11f9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage351480851--input65907686-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some"FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo"' and input 'Pair 1 10000' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 69.136) - [ (Pair (Pair 1 10000) - (Some "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 10000) - (Some "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo") - (Pair 1 10000) ] - - location: 13 (just consumed gas: 0.010) - [ "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo" - (Pair 1 10000) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 10000) - "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo" ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 10000 - "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo" ] - - location: 21 (just consumed gas: 3.025) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input198821575-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input198821575-.out deleted file mode 100644 index 089a855bb4bf2694360daafee5659939fe4907c8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input198821575-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some "Foo"' and input 'Pair 1 1' --level 1 --trace-stack -storage - (Some "o") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.166) - [ (Pair (Pair 1 1) (Some "Foo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 1) - (Some "Foo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "Foo") - (Pair 1 1) ] - - location: 13 (just consumed gas: 0.010) - [ "Foo" - (Pair 1 1) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 1) - "Foo" ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 1 - "Foo" ] - - location: 21 (just consumed gas: 0.026) - [ (Some "o") ] - - location: 13 (just consumed gas: 0.025) - [ (Some "o") ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some "o") ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some "o")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input359592843-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input359592843-.out deleted file mode 100644 index 5ecc2fa3fdec54bd003ad7669ce5431b73eb6ea1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input359592843-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some "Foo"' and input 'Pair 10 5' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.166) - [ (Pair (Pair 10 5) (Some "Foo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 10 5) - (Some "Foo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "Foo") - (Pair 10 5) ] - - location: 13 (just consumed gas: 0.010) - [ "Foo" - (Pair 10 5) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 10 5) - "Foo" ] - - location: 20 (just consumed gas: 0.010) - [ 10 - 5 - "Foo" ] - - location: 21 (just consumed gas: 0.026) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input551316239-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input551316239-.out deleted file mode 100644 index 7d30f5394a082449249cf0716c95a5504d6c5f06..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input551316239-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some "Foo"' and input 'Pair 0 0' --level 1 --trace-stack -storage - (Some "") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.166) - [ (Pair (Pair 0 0) (Some "Foo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 0) - (Some "Foo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "Foo") - (Pair 0 0) ] - - location: 13 (just consumed gas: 0.010) - [ "Foo" - (Pair 0 0) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 0 0) - "Foo" ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 0 - "Foo" ] - - location: 21 (just consumed gas: 0.026) - [ (Some "") ] - - location: 13 (just consumed gas: 0.025) - [ (Some "") ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some "") ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some "")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input722749044-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input722749044-.out deleted file mode 100644 index 14356042667d07097d0d3c346aa6a0b1a401dc02..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input722749044-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some "Foo"' and input 'Pair 0 10' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.166) - [ (Pair (Pair 0 10) (Some "Foo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 10) - (Some "Foo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "Foo") - (Pair 0 10) ] - - location: 13 (just consumed gas: 0.010) - [ "Foo" - (Pair 0 10) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 0 10) - "Foo" ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 10 - "Foo" ] - - location: 21 (just consumed gas: 0.026) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input839234860-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input839234860-.out deleted file mode 100644 index 2a63a4f84d2455f00f69e5c26fc199b85165b53b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input839234860-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some "Foo"' and input 'Pair 1 3' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.166) - [ (Pair (Pair 1 3) (Some "Foo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 3) - (Some "Foo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "Foo") - (Pair 1 3) ] - - location: 13 (just consumed gas: 0.010) - [ "Foo" - (Pair 1 3) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 3) - "Foo" ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 3 - "Foo" ] - - location: 21 (just consumed gas: 0.026) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input919180079-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input919180079-.out deleted file mode 100644 index f94b474d847be7e96de47f2a7e85946d8216d497..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage364922380--input919180079-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage 'Some "Foo"' and input 'Pair 0 2' --level 1 --trace-stack -storage - (Some "Fo") -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.166) - [ (Pair (Pair 0 2) (Some "Foo")) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 2) - (Some "Foo") ] - - location: 11 (just consumed gas: 0.010) - [ (Some "Foo") - (Pair 0 2) ] - - location: 13 (just consumed gas: 0.010) - [ "Foo" - (Pair 0 2) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 0 2) - "Foo" ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 2 - "Foo" ] - - location: 21 (just consumed gas: 0.026) - [ (Some "Fo") ] - - location: 13 (just consumed gas: 0.025) - [ (Some "Fo") ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some "Fo") ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some "Fo")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage921624073--input551316239-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage921624073--input551316239-.out deleted file mode 100644 index 4c920cb7f08e646899cf6e1cc15a8e1083741365..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice--storage921624073--input551316239-.out +++ /dev/null @@ -1,31 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice.tz on storage None and input 'Pair 0 0' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.021) - [ (Pair (Pair 0 0) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 0) - None ] - - location: 11 (just consumed gas: 0.010) - [ None - (Pair 0 0) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 15 (just consumed gas: 0.010) - [ ] - - location: 16 (just consumed gas: 0.010) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input198821575-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input198821575-.out deleted file mode 100644 index 35d43fe3427a1633c787089c25b3e4e299c26654..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input198821575-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 1 1' --level 1 --trace-stack -storage - (Some 0xbb) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 1 1) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 1) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 1 1) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 1 1) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 1) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 1 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ (Some 0xbb) ] - - location: 13 (just consumed gas: 0.025) - [ (Some 0xbb) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some 0xbb) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some 0xbb)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input462551352-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input462551352-.out deleted file mode 100644 index a8207e7629f55c3ba1e3d0a94ecedce3a4aeefed..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input462551352-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 0 1' --level 1 --trace-stack -storage - (Some 0xaa) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 0 1) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 1) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 0 1) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 0 1) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 0 1) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 1 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ (Some 0xaa) ] - - location: 13 (just consumed gas: 0.025) - [ (Some 0xaa) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some 0xaa) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some 0xaa)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input489157380-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input489157380-.out deleted file mode 100644 index 80cd356a793704de71178c5d2134a7e003116e0b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input489157380-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 1 2' --level 1 --trace-stack -storage - (Some 0xbbcc) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 1 2) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 2) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 1 2) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 1 2) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 2) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 2 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ (Some 0xbbcc) ] - - location: 13 (just consumed gas: 0.025) - [ (Some 0xbbcc) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some 0xbbcc) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some 0xbbcc)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input551316239-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input551316239-.out deleted file mode 100644 index bdd32bd4237d69368b1ce245d66957c86ae1a2bd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input551316239-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 0 0' --level 1 --trace-stack -storage - (Some 0x) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 0 0) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 0) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 0 0) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 0 0) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 0 0) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 0 - 0 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ (Some 0x) ] - - location: 13 (just consumed gas: 0.025) - [ (Some 0x) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some 0x) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some 0x)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input669330759-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input669330759-.out deleted file mode 100644 index 3e602fd82d6cf31b7dd672589f69ce433fcada67..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input669330759-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 2 2' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 2 2) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 2 2) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 2 2) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 2 2) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 2 2) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 2 - 2 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input743596105-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input743596105-.out deleted file mode 100644 index 82590ded65825c261663739142561aa36de1592d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input743596105-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 2 1' --level 1 --trace-stack -storage - (Some 0xcc) -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 2 1) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 2 1) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 2 1) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 2 1) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 2 1) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 2 - 1 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ (Some 0xcc) ] - - location: 13 (just consumed gas: 0.025) - [ (Some 0xcc) ] - - location: 22 (just consumed gas: 0.010) - [ {} - (Some 0xcc) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} (Some 0xcc)) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input839234860-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input839234860-.out deleted file mode 100644 index e04fcd90326de1a2b46b76a96a74729fc0024f71..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage229749865--input839234860-.out +++ /dev/null @@ -1,37 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbcc' and input 'Pair 1 3' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 1 3) (Some 0xaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 3) - (Some 0xaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbcc) - (Pair 1 3) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbcc - (Pair 1 3) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 3) - 0xaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 3 - 0xaabbcc ] - - location: 21 (just consumed gas: 0.026) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage504917929--input65907686-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage504917929--input65907686-.out deleted file mode 100644 index 7f021debda63276df2c9a45c0b51b9cdbd38d70b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage504917929--input65907686-.out +++ /dev/null @@ -1,38 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage 'Some 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc' and input 'Pair 1 10000' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.121) - [ (Pair (Pair 1 10000) - (Some 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc)) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 10000) - (Some 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc) ] - - location: 11 (just consumed gas: 0.010) - [ (Some 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc) - (Pair 1 10000) ] - - location: 13 (just consumed gas: 0.010) - [ 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc - (Pair 1 10000) ] - - location: 19 (just consumed gas: 0.010) - [ (Pair 1 10000) - 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 10000 - 0xaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbccaabbcc ] - - location: 21 (just consumed gas: 3.025) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage921624073--input462551352-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage921624073--input462551352-.out deleted file mode 100644 index 30532aae5f5144a5a9b406cef6aadafa294c0ead..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -slice_bytes--storage921624073--input462551352-.out +++ /dev/null @@ -1,31 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/slice_bytes.tz on storage None and input 'Pair 0 1' --level 1 --trace-stack -storage - None -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 9.021) - [ (Pair (Pair 0 1) None) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 0 1) - None ] - - location: 11 (just consumed gas: 0.010) - [ None - (Pair 0 1) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair 0 1) ] - - location: 15 (just consumed gas: 0.010) - [ ] - - location: 16 (just consumed gas: 0.010) - [ None ] - - location: 13 (just consumed gas: 0.025) - [ None ] - - location: 22 (just consumed gas: 0.010) - [ {} - None ] - - location: 24 (just consumed gas: 0.010) - [ (Pair {} None) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -str_id--storage921624073--input1016369050-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -str_id--storage921624073--input1016369050-.out deleted file mode 100644 index 89d19b40b39344771ff9ae588013c5198253f07e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -str_id--storage921624073--input1016369050-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/str_id.tz on storage None and input '"abcd"' --level 1 --trace-stack -storage - (Some "abcd") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.408) - [ (Pair "abcd" None) ] - - location: 8 (just consumed gas: 0.010) - [ "abcd" ] - - location: 9 (just consumed gas: 0.010) - [ (Some "abcd") ] - - location: 10 (just consumed gas: 0.010) - [ {} - (Some "abcd") ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} (Some "abcd")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -str_id--storage921624073--input93477117-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -str_id--storage921624073--input93477117-.out deleted file mode 100644 index beb3e0c1f40e53692f0d3298910b0ce5b62df4e3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -str_id--storage921624073--input93477117-.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/str_id.tz on storage None and input '"Hello"' --level 1 --trace-stack -storage - (Some "Hello") -emitted operations - -big_map diff - -trace - - location: 8 (just consumed gas: 4.418) - [ (Pair "Hello" None) ] - - location: 8 (just consumed gas: 0.010) - [ "Hello" ] - - location: 9 (just consumed gas: 0.010) - [ (Some "Hello") ] - - location: 10 (just consumed gas: 0.010) - [ {} - (Some "Hello") ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} (Some "Hello")) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input249636002-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input249636002-.out deleted file mode 100644 index eaefbbe29ed2e95a4dfe45e44b4c8502c4d49d44..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input249636002-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/sub_timestamp_delta.tz on storage 111 and input '(Pair 100 100)' --level 1 --trace-stack -storage - "1970-01-01T00:00:00Z" -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.334) - [ (Pair (Pair "1970-01-01T00:01:40Z" 100) "1970-01-01T00:01:51Z") ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 100) - (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" - (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 100) ] - - location: 14 (just consumed gas: 0.010) - [ 100 ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:01:40Z" - 100 ] - - location: 15 (just consumed gas: 0.035) - [ "1970-01-01T00:00:00Z" ] - - location: 16 (just consumed gas: 0.010) - [ {} - "1970-01-01T00:00:00Z" ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} "1970-01-01T00:00:00Z") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input307538219-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input307538219-.out deleted file mode 100644 index eeaad2d793419d8b5462713c229d76a533d4ba8b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input307538219-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/sub_timestamp_delta.tz on storage 111 and input '(Pair 100 -100)' --level 1 --trace-stack -storage - "1970-01-01T00:03:20Z" -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.334) - [ (Pair (Pair "1970-01-01T00:01:40Z" -100) "1970-01-01T00:01:51Z") ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" -100) - (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" - (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" -100) ] - - location: 14 (just consumed gas: 0.010) - [ -100 ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:01:40Z" - -100 ] - - location: 15 (just consumed gas: 0.035) - [ "1970-01-01T00:03:20Z" ] - - location: 16 (just consumed gas: 0.010) - [ {} - "1970-01-01T00:03:20Z" ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} "1970-01-01T00:03:20Z") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input831449542-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input831449542-.out deleted file mode 100644 index ecacc9b6f4970a008a812606ebb1c6f69d40bda1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -sub_timestamp_delta--storage492856247--input831449542-.out +++ /dev/null @@ -1,34 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/sub_timestamp_delta.tz on storage 111 and input '(Pair 100 2000000000000000000)' --level 1 --trace-stack -storage - -1999999999999999900 -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 7.334) - [ (Pair (Pair "1970-01-01T00:01:40Z" 2000000000000000000) "1970-01-01T00:01:51Z") ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 2000000000000000000) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 2000000000000000000) - (Pair "1970-01-01T00:01:40Z" 2000000000000000000) ] - - location: 11 (just consumed gas: 0.010) - [ "1970-01-01T00:01:40Z" - (Pair "1970-01-01T00:01:40Z" 2000000000000000000) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1970-01-01T00:01:40Z" 2000000000000000000) ] - - location: 14 (just consumed gas: 0.010) - [ 2000000000000000000 ] - - location: 12 (just consumed gas: 0.035) - [ "1970-01-01T00:01:40Z" - 2000000000000000000 ] - - location: 15 (just consumed gas: 0.039) - [ -1999999999999999900 ] - - location: 16 (just consumed gas: 0.010) - [ {} - -1999999999999999900 ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} -1999999999999999900) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -tez_add_sub--storage921624073--input706350605-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -tez_add_sub--storage921624073--input706350605-.out deleted file mode 100644 index 8642e9f28471676f1241d0c75086fb21bef9f9bf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -tez_add_sub--storage921624073--input706350605-.out +++ /dev/null @@ -1,71 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/tez_add_sub.tz on storage None and input '(Pair 2310000 1010000)' --level 1 --trace-stack -storage - (Some (Pair 3320000 1300000)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 16.709) - [ (Pair (Pair 2310000 1010000) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) - (Pair 2310000 1010000) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) - (Pair 2310000 1010000) - (Pair 2310000 1010000) ] - - location: 15 (just consumed gas: 0.010) - [ 2310000 - (Pair 2310000 1010000) - (Pair 2310000 1010000) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) - (Pair 2310000 1010000) ] - - location: 18 (just consumed gas: 0.010) - [ 1010000 - (Pair 2310000 1010000) ] - - location: 16 (just consumed gas: 0.035) - [ 2310000 - 1010000 - (Pair 2310000 1010000) ] - - location: 19 (just consumed gas: 0.020) - [ 3320000 - (Pair 2310000 1010000) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) - (Pair 2310000 1010000) ] - - location: 23 (just consumed gas: 0.010) - [ 2310000 - (Pair 2310000 1010000) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 2310000 1010000) ] - - location: 26 (just consumed gas: 0.010) - [ 1010000 ] - - location: 24 (just consumed gas: 0.035) - [ 2310000 - 1010000 ] - - location: 27 (just consumed gas: 0.015) - [ (Some 1300000) ] - - location: 29 (just consumed gas: 0.010) - [ 1300000 ] - - location: 29 (just consumed gas: 0.025) - [ 1300000 ] - - location: 20 (just consumed gas: 0.035) - [ 3320000 - 1300000 ] - - location: 35 (just consumed gas: 0.010) - [ (Pair 3320000 1300000) ] - - location: 36 (just consumed gas: 0.010) - [ (Some (Pair 3320000 1300000)) ] - - location: 37 (just consumed gas: 0.010) - [ {} - (Some (Pair 3320000 1300000)) ] - - location: 39 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair 3320000 1300000))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -tez_add_sub--storage921624073--input856198194-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -tez_add_sub--storage921624073--input856198194-.out deleted file mode 100644 index 3be75b0a063c9f047204c1706577dd0b126a890a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -tez_add_sub--storage921624073--input856198194-.out +++ /dev/null @@ -1,71 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/tez_add_sub.tz on storage None and input '(Pair 2000000 1000000)' --level 1 --trace-stack -storage - (Some (Pair 3000000 1000000)) -emitted operations - -big_map diff - -trace - - location: 12 (just consumed gas: 16.709) - [ (Pair (Pair 2000000 1000000) None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) ] - - location: 13 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) - (Pair 2000000 1000000) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) - (Pair 2000000 1000000) - (Pair 2000000 1000000) ] - - location: 15 (just consumed gas: 0.010) - [ 2000000 - (Pair 2000000 1000000) - (Pair 2000000 1000000) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) - (Pair 2000000 1000000) ] - - location: 18 (just consumed gas: 0.010) - [ 1000000 - (Pair 2000000 1000000) ] - - location: 16 (just consumed gas: 0.035) - [ 2000000 - 1000000 - (Pair 2000000 1000000) ] - - location: 19 (just consumed gas: 0.020) - [ 3000000 - (Pair 2000000 1000000) ] - - location: 20 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) ] - - location: 22 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) - (Pair 2000000 1000000) ] - - location: 23 (just consumed gas: 0.010) - [ 2000000 - (Pair 2000000 1000000) ] - - location: 24 (just consumed gas: 0.010) - [ (Pair 2000000 1000000) ] - - location: 26 (just consumed gas: 0.010) - [ 1000000 ] - - location: 24 (just consumed gas: 0.035) - [ 2000000 - 1000000 ] - - location: 27 (just consumed gas: 0.015) - [ (Some 1000000) ] - - location: 29 (just consumed gas: 0.010) - [ 1000000 ] - - location: 29 (just consumed gas: 0.025) - [ 1000000 ] - - location: 20 (just consumed gas: 0.035) - [ 3000000 - 1000000 ] - - location: 35 (just consumed gas: 0.010) - [ (Pair 3000000 1000000) ] - - location: 36 (just consumed gas: 0.010) - [ (Some (Pair 3000000 1000000)) ] - - location: 37 (just consumed gas: 0.010) - [ {} - (Some (Pair 3000000 1000000)) ] - - location: 39 (just consumed gas: 0.010) - [ (Pair {} (Some (Pair 3000000 1000000))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -uncomb--storage680650890--input394061083-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -uncomb--storage680650890--input394061083-.out deleted file mode 100644 index d22ec5ae09e5fd80a5d0ee7e219fe3cf09c08537..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -uncomb--storage680650890--input394061083-.out +++ /dev/null @@ -1,50 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/uncomb.tz on storage 0 and input '(Pair 1 4 2)' --level 1 --trace-stack -storage - 142 -emitted operations - -big_map diff - -trace - - location: 10 (just consumed gas: 10.047) - [ (Pair (Pair 1 4 2) 0) ] - - location: 10 (just consumed gas: 0.010) - [ (Pair 1 4 2) ] - - location: 11 (just consumed gas: 0.034) - [ 1 - 4 - 2 ] - - location: 13 (just consumed gas: 0.010) - [ 100 - 1 - 4 - 2 ] - - location: 16 (just consumed gas: 0.059) - [ 100 - 4 - 2 ] - - location: 17 (just consumed gas: 0.010) - [ 4 - 100 - 2 ] - - location: 18 (just consumed gas: 0.010) - [ 10 - 4 - 100 - 2 ] - - location: 21 (just consumed gas: 0.059) - [ 40 - 100 - 2 ] - - location: 22 (just consumed gas: 0.035) - [ 140 - 2 ] - - location: 23 (just consumed gas: 0.035) - [ 142 ] - - location: 24 (just consumed gas: 0.010) - [ {} - 142 ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} 142) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -unpair--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -unpair--storage125992234--input125992234-.out deleted file mode 100644 index fcc0ec0f7253fe0933de80f3e36bcdf113082923..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -unpair--storage125992234--input125992234-.out +++ /dev/null @@ -1,462 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/unpair.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 126.560) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ Unit ] - - location: 9 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 10 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 11 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 12 (just consumed gas: 0.035) - [ ] - - location: 14 (just consumed gas: 0.010) - [ Unit ] - - location: 15 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 16 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 17 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 18 (just consumed gas: 0.035) - [ ] - - location: 20 (just consumed gas: 0.010) - [ Unit ] - - location: 21 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 22 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 23 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 24 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 25 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 27 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 28 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 29 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 32 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 33 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 35 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 36 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 37 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 39 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 40 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 41 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 43 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 44 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 45 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 47 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 48 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 49 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 51 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 52 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 53 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 55 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 56 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 57 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 59 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 60 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 61 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 63 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 64 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 65 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 67 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 68 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 69 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 71 (just consumed gas: 0.010) - [ ] - - location: 72 (just consumed gas: 0.010) - [ Unit ] - - location: 73 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 74 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 75 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 76 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 77 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 79 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 80 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 81 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 83 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 84 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 85 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 87 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 88 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 89 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 91 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 92 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 93 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 95 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 96 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 97 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 99 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 100 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 101 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 103 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 104 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 105 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 107 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 108 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 109 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 111 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 112 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 113 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 115 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 116 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 117 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 119 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 120 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 121 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 123 (just consumed gas: 0.010) - [ ] - - location: 124 (just consumed gas: 0.010) - [ Unit ] - - location: 125 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 126 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 127 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 128 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 129 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 131 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 132 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 133 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 135 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 136 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 137 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 139 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 140 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 141 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 143 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 144 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 145 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 147 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 148 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 149 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 151 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 152 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 153 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 155 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 156 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 157 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 159 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 160 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 161 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 163 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 164 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 165 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 167 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 168 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 169 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 171 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 172 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 173 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 175 (just consumed gas: 0.010) - [ ] - - location: 176 (just consumed gas: 0.010) - [ Unit ] - - location: 177 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 178 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 179 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 180 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 181 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 183 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 184 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 185 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 187 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 188 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 189 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 191 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 192 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 193 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 195 (just consumed gas: 0.010) - [ (Pair Unit Unit) - (Pair Unit Unit) ] - - location: 196 (just consumed gas: 0.010) - [ Unit - Unit - (Pair Unit Unit) ] - - location: 197 (just consumed gas: 0.035) - [ (Pair Unit Unit) ] - - location: 199 (just consumed gas: 0.010) - [ ] - - location: 200 (just consumed gas: 0.010) - [ Unit ] - - location: 201 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 202 (just consumed gas: 0.010) - [ (Pair Unit Unit) ] - - location: 203 (just consumed gas: 0.010) - [ Unit - Unit ] - - location: 204 (just consumed gas: 0.035) - [ ] - - location: 206 (just consumed gas: 0.010) - [ Unit ] - - location: 207 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 209 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -voting_power--storage1011138251--input1040351577-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -voting_power--storage1011138251--input1040351577-.out deleted file mode 100644 index 931852b688cce1f627728ce38c0ccfb46dddf9aa..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -voting_power--storage1011138251--input1040351577-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/voting_power.tz on storage '(Pair 0 0)' and input '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' --level 1 --trace-stack -storage - (Pair 4000000000000 20000000000000) -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 86.168) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" 0 0) ] - - location: 9 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" ] - - location: 10 (just consumed gas: 0.605) - [ "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ] - - location: 11 (just consumed gas: 220.656) - [ 4000000000000 ] - - location: 12 (just consumed gas: 0.010) - [ ] - - location: 14 (just consumed gas: 210.466) - [ 20000000000000 ] - - location: 12 (just consumed gas: 0.035) - [ 4000000000000 - 20000000000000 ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 4000000000000 20000000000000) ] - - location: 16 (just consumed gas: 0.010) - [ {} - (Pair 4000000000000 20000000000000) ] - - location: 18 (just consumed gas: 0.010) - [ (Pair {} 4000000000000 20000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input1058477720-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input1058477720-.out deleted file mode 100644 index cc24a61f346b7ce88f43e7df9d3060251945c60c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input1058477720-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Left (Pair False False)' --level 1 --trace-stack -storage - (Some (Left False)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Left (Pair False False)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Left (Pair False False)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair False False) ] - - location: 19 (just consumed gas: 0.010) - [ False - False ] - - location: 20 (just consumed gas: 0.015) - [ False ] - - location: 21 (just consumed gas: 0.010) - [ (Left False) ] - - location: 17 (just consumed gas: 0.025) - [ (Left False) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Left False)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Left False)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Left False))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input1073176155-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input1073176155-.out deleted file mode 100644 index e627cbdd448a6adde6bb5c87de1d3cb5f6a77350..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input1073176155-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Right (Pair 0 0)' --level 1 --trace-stack -storage - (Some (Right 0)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Right (Pair 0 0)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Right (Pair 0 0)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 0 0) ] - - location: 24 (just consumed gas: 0.010) - [ 0 - 0 ] - - location: 25 (just consumed gas: 0.035) - [ 0 ] - - location: 26 (just consumed gas: 0.010) - [ (Right 0) ] - - location: 17 (just consumed gas: 0.025) - [ (Right 0) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Right 0)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Right 0)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Right 0))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input246594902-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input246594902-.out deleted file mode 100644 index 5ca2708968a3cde8f5ea76f0751438b7e391a414..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input246594902-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Left (Pair True False)' --level 1 --trace-stack -storage - (Some (Left True)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Left (Pair True False)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Left (Pair True False)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair True False) ] - - location: 19 (just consumed gas: 0.010) - [ True - False ] - - location: 20 (just consumed gas: 0.015) - [ True ] - - location: 21 (just consumed gas: 0.010) - [ (Left True) ] - - location: 17 (just consumed gas: 0.025) - [ (Left True) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Left True)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Left True)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Left True))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input506603577-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input506603577-.out deleted file mode 100644 index 84ce2940edd522e5417c0ed428f1d6b81538a9ac..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input506603577-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Right (Pair 1 1)' --level 1 --trace-stack -storage - (Some (Right 0)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Right (Pair 1 1)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Right (Pair 1 1)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 1 1) ] - - location: 24 (just consumed gas: 0.010) - [ 1 - 1 ] - - location: 25 (just consumed gas: 0.035) - [ 0 ] - - location: 26 (just consumed gas: 0.010) - [ (Right 0) ] - - location: 17 (just consumed gas: 0.025) - [ (Right 0) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Right 0)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Right 0)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Right 0))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input576248088-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input576248088-.out deleted file mode 100644 index 754e589b0a5021f43b938563b11587a0766aa2f3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input576248088-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Right (Pair 0 1)' --level 1 --trace-stack -storage - (Some (Right 1)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Right (Pair 0 1)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Right (Pair 0 1)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 0 1) ] - - location: 24 (just consumed gas: 0.010) - [ 0 - 1 ] - - location: 25 (just consumed gas: 0.035) - [ 1 ] - - location: 26 (just consumed gas: 0.010) - [ (Right 1) ] - - location: 17 (just consumed gas: 0.025) - [ (Right 1) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Right 1)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Right 1)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Right 1))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input612012282-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input612012282-.out deleted file mode 100644 index d958b5a9abe8b4a730b4f45039a93eac4fb033f4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input612012282-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Right (Pair 42 21)' --level 1 --trace-stack -storage - (Some (Right 63)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Right (Pair 42 21)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Right (Pair 42 21)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 42 21) ] - - location: 24 (just consumed gas: 0.010) - [ 42 - 21 ] - - location: 25 (just consumed gas: 0.035) - [ 63 ] - - location: 26 (just consumed gas: 0.010) - [ (Right 63) ] - - location: 17 (just consumed gas: 0.025) - [ (Right 63) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Right 63)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Right 63)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Right 63))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input617591686-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input617591686-.out deleted file mode 100644 index 0e98747ebcf7a1731c13db5bd156f2632eb30c6b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input617591686-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Left (Pair False True)' --level 1 --trace-stack -storage - (Some (Left True)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Left (Pair False True)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Left (Pair False True)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair False True) ] - - location: 19 (just consumed gas: 0.010) - [ False - True ] - - location: 20 (just consumed gas: 0.015) - [ True ] - - location: 21 (just consumed gas: 0.010) - [ (Left True) ] - - location: 17 (just consumed gas: 0.025) - [ (Left True) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Left True)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Left True)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Left True))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input639311176-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input639311176-.out deleted file mode 100644 index 0e4e30459356d85ac284a7b42f29c6101cfb4fad..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input639311176-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Left (Pair True True)' --level 1 --trace-stack -storage - (Some (Left False)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Left (Pair True True)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Left (Pair True True)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair True True) ] - - location: 19 (just consumed gas: 0.010) - [ True - True ] - - location: 20 (just consumed gas: 0.015) - [ False ] - - location: 21 (just consumed gas: 0.010) - [ (Left False) ] - - location: 17 (just consumed gas: 0.025) - [ (Left False) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Left False)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Left False)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Left False))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input688315180-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input688315180-.out deleted file mode 100644 index e34bb71ef8a5fde906f6a0042915a4b870568b9a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input688315180-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Right (Pair 42 63)' --level 1 --trace-stack -storage - (Some (Right 21)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Right (Pair 42 63)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Right (Pair 42 63)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 42 63) ] - - location: 24 (just consumed gas: 0.010) - [ 42 - 63 ] - - location: 25 (just consumed gas: 0.035) - [ 21 ] - - location: 26 (just consumed gas: 0.010) - [ (Right 21) ] - - location: 17 (just consumed gas: 0.025) - [ (Right 21) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Right 21)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Right 21)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Right 21))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input967929605-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input967929605-.out deleted file mode 100644 index d8fd543bbd959ab09dea0cf48d9e4e1bfbfc78e6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor--storage921624073--input967929605-.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor.tz on storage None and input 'Right (Pair 1 0)' --level 1 --trace-stack -storage - (Some (Right 1)) -emitted operations - -big_map diff - -trace - - location: 16 (just consumed gas: 10.744) - [ (Pair (Right (Pair 1 0)) None) ] - - location: 16 (just consumed gas: 0.010) - [ (Right (Pair 1 0)) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair 1 0) ] - - location: 24 (just consumed gas: 0.010) - [ 1 - 0 ] - - location: 25 (just consumed gas: 0.035) - [ 1 ] - - location: 26 (just consumed gas: 0.010) - [ (Right 1) ] - - location: 17 (just consumed gas: 0.025) - [ (Right 1) ] - - location: 28 (just consumed gas: 0.010) - [ (Some (Right 1)) ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Some (Right 1)) ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} (Some (Right 1))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor_bytes--storage125992234--input125992234-.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor_bytes--storage125992234--input125992234-.out deleted file mode 100644 index 145afc78f618da8e27be187a01b0b2c8f133e4f3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- opcodes -xor_bytes--storage125992234--input125992234-.out +++ /dev/null @@ -1,75 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run script michelson_test_scripts/opcodes/xor_bytes_016.tz on storage Unit and input Unit --level 1 --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 27.915) - [ (Pair Unit Unit) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0x05 ] - - location: 11 (just consumed gas: 0.010) - [ 0x06 - 0x05 ] - - location: 14 (just consumed gas: 0.040) - [ 0x03 ] - - location: 15 (just consumed gas: 0.010) - [ 0x03 - 0x03 ] - - location: 20 (just consumed gas: 0.035) - [ 0 ] - - location: 21 (just consumed gas: 0.010) - [ True ] - - location: 22 (just consumed gas: 0.010) - [ ] - - location: 22 (just consumed gas: 0.025) - [ ] - - location: 28 (just consumed gas: 0.010) - [ 0x0005 ] - - location: 31 (just consumed gas: 0.010) - [ 0x0106 - 0x0005 ] - - location: 34 (just consumed gas: 0.041) - [ 0x0103 ] - - location: 35 (just consumed gas: 0.010) - [ 0x0103 - 0x0103 ] - - location: 40 (just consumed gas: 0.035) - [ 0 ] - - location: 41 (just consumed gas: 0.010) - [ True ] - - location: 42 (just consumed gas: 0.010) - [ ] - - location: 42 (just consumed gas: 0.025) - [ ] - - location: 48 (just consumed gas: 0.010) - [ 0x05 ] - - location: 51 (just consumed gas: 0.010) - [ 0x0106 - 0x05 ] - - location: 54 (just consumed gas: 0.041) - [ 0x0103 ] - - location: 55 (just consumed gas: 0.010) - [ 0x0103 - 0x0103 ] - - location: 60 (just consumed gas: 0.035) - [ 0 ] - - location: 61 (just consumed gas: 0.010) - [ True ] - - location: 62 (just consumed gas: 0.010) - [ ] - - location: 62 (just consumed gas: 0.025) - [ ] - - location: 68 (just consumed gas: 0.010) - [ Unit ] - - location: 69 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 71 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- BALANCE.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- BALANCE.out deleted file mode 100644 index 52c4f8fc293b5b5bc231d132862e141e05987cdf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- BALANCE.out +++ /dev/null @@ -1,147 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 0 --trace-stack -storage - 0 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 0 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 0 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 0) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 0.000001 --trace-stack -storage - 1 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 1 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 1 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 1) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 0.5 --trace-stack -storage - 500000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 500000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 500000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 500000) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 1 --trace-stack -storage - 1000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 1000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 1000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 1000000) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 5 --trace-stack -storage - 5000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 5000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 5000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 5000000) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 1000 --trace-stack -storage - 1000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 1000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 1000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 1000000000) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/balance.tz on storage 0 and input Unit --balance 8000000 --trace-stack -storage - 8000000000000 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 0) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 8000000000000 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 8000000000000 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 8000000000000) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- LEVEL.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- LEVEL.out deleted file mode 100644 index 8432ef16787a0c9e1e0b27d7a79e0e95c969c4ce..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- LEVEL.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/level.tz on storage 9999999 and input Unit --level 10 --trace-stack -storage - 10 -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.158) - [ (Pair Unit 9999999) ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ 10 ] - - location: 9 (just consumed gas: 0.010) - [ {} - 10 ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} 10) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- NOW.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- NOW.out deleted file mode 100644 index 70595089099534bc11a962966fb085c5c2846037..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- NOW.out +++ /dev/null @@ -1,21 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_now.tz on storage '"2017-07-13T09:19:01Z"' and input Unit --trace-stack --now 2021-10-13T10:16:52Z -storage - "2021-10-13T10:16:52Z" -emitted operations - -big_map diff - -trace - - location: 7 (just consumed gas: 4.266) - [ (Pair Unit "2017-07-13T09:19:01Z") ] - - location: 7 (just consumed gas: 0.010) - [ ] - - location: 8 (just consumed gas: 0.010) - [ "2021-10-13T10:16:52Z" ] - - location: 9 (just consumed gas: 0.010) - [ {} - "2021-10-13T10:16:52Z" ] - - location: 11 (just consumed gas: 0.010) - [ (Pair {} "2021-10-13T10:16:52Z") ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- arithmetic_overflow.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- arithmetic_overflow.out deleted file mode 100644 index e801cebfa1e1fa0b531a3261200e6728372455e0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- arithmetic_overflow.out +++ /dev/null @@ -1,224 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 1 257))' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter (or (pair nat nat) (pair nat nat)); - 02: storage (option nat); - 03: # this contract takes either (Left a b) and stores (a << b) - 04: # or (Right a b) and stores (a >> b). - 05: # i.e., in the first case, the first component shifted to the left by - 06: # the second, and the second case, component shifted to the right by - 07: # the second. - 08: code { CAR; - 09: IF_LEFT { - 10: UNPAIR; LSL; - 11: } - 12: { - 13: UNPAIR; LSR; - 14: }; - 15: SOME; - 16: NIL operation; - 17: PAIR; - 18: }; - 19: -At line 10 characters 25 to 28, -unexpected arithmetic overflow -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 1 257)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 1 257)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 1 257) ] - - location: 17 (just consumed gas: 0.010) - [ 1 - 257 ] -Fatal error: - error running script - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Left (Pair 123 257))' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter (or (pair nat nat) (pair nat nat)); - 02: storage (option nat); - 03: # this contract takes either (Left a b) and stores (a << b) - 04: # or (Right a b) and stores (a >> b). - 05: # i.e., in the first case, the first component shifted to the left by - 06: # the second, and the second case, component shifted to the right by - 07: # the second. - 08: code { CAR; - 09: IF_LEFT { - 10: UNPAIR; LSL; - 11: } - 12: { - 13: UNPAIR; LSR; - 14: }; - 15: SOME; - 16: NIL operation; - 17: PAIR; - 18: }; - 19: -At line 10 characters 25 to 28, -unexpected arithmetic overflow -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Left (Pair 123 257)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Left (Pair 123 257)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 123 257) ] - - location: 17 (just consumed gas: 0.010) - [ 123 - 257 ] -Fatal error: - error running script - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 1 257))' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter (or (pair nat nat) (pair nat nat)); - 02: storage (option nat); - 03: # this contract takes either (Left a b) and stores (a << b) - 04: # or (Right a b) and stores (a >> b). - 05: # i.e., in the first case, the first component shifted to the left by - 06: # the second, and the second case, component shifted to the right by - 07: # the second. - 08: code { CAR; - 09: IF_LEFT { - 10: UNPAIR; LSL; - 11: } - 12: { - 13: UNPAIR; LSR; - 14: }; - 15: SOME; - 16: NIL operation; - 17: PAIR; - 18: }; - 19: -At line 13 characters 25 to 28, -unexpected arithmetic overflow -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 1 257)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 1 257)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 1 257) ] - - location: 20 (just consumed gas: 0.010) - [ 1 - 257 ] -Fatal error: - error running script - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/shifts.tz on storage None and input '(Right (Pair 123 257))' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter (or (pair nat nat) (pair nat nat)); - 02: storage (option nat); - 03: # this contract takes either (Left a b) and stores (a << b) - 04: # or (Right a b) and stores (a >> b). - 05: # i.e., in the first case, the first component shifted to the left by - 06: # the second, and the second case, component shifted to the right by - 07: # the second. - 08: code { CAR; - 09: IF_LEFT { - 10: UNPAIR; LSL; - 11: } - 12: { - 13: UNPAIR; LSR; - 14: }; - 15: SOME; - 16: NIL operation; - 17: PAIR; - 18: }; - 19: -At line 13 characters 25 to 28, -unexpected arithmetic overflow -trace - - location: 14 (just consumed gas: 8.673) - [ (Pair (Right (Pair 123 257)) None) ] - - location: 14 (just consumed gas: 0.010) - [ (Right (Pair 123 257)) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair 123 257) ] - - location: 20 (just consumed gas: 0.010) - [ 123 - 257 ] -Fatal error: - error running script - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_overflow.tz on storage Unit and input 'Left Unit' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter (or unit unit) ; - 02: storage unit ; - 03: code { CAR ; - 04: IF_LEFT - 05: { - 06: PUSH nat 922337203685477580700 ; - 07: PUSH mutez 10 ; - 08: MUL ; # FAILURE - 09: DROP - 10: } - 11: { - 12: PUSH mutez 10 ; - 13: PUSH nat 922337203685477580700 ; - 14: MUL ; # FAILURE - 15: DROP - 16: } ; - 17: - 18: NIL operation ; PAIR } - 19: -At line 8 characters 11 to 14, -unexpected arithmetic overflow -trace - - location: 9 (just consumed gas: 11.154) - [ (Pair (Left Unit) Unit) ] - - location: 9 (just consumed gas: 0.010) - [ (Left Unit) ] - - location: 10 (just consumed gas: 0.010) - [ Unit ] - - location: 12 (just consumed gas: 0.010) - [ 922337203685477580700 - Unit ] - - location: 15 (just consumed gas: 0.010) - [ 10 - 922337203685477580700 - Unit ] -Fatal error: - error running script - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_overflow.tz on storage Unit and input 'Right Unit' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter (or unit unit) ; - 02: storage unit ; - 03: code { CAR ; - 04: IF_LEFT - 05: { - 06: PUSH nat 922337203685477580700 ; - 07: PUSH mutez 10 ; - 08: MUL ; # FAILURE - 09: DROP - 10: } - 11: { - 12: PUSH mutez 10 ; - 13: PUSH nat 922337203685477580700 ; - 14: MUL ; # FAILURE - 15: DROP - 16: } ; - 17: - 18: NIL operation ; PAIR } - 19: -At line 14 characters 11 to 14, -unexpected arithmetic overflow -trace - - location: 9 (just consumed gas: 11.154) - [ (Pair (Right Unit) Unit) ] - - location: 9 (just consumed gas: 0.010) - [ (Right Unit) ] - - location: 10 (just consumed gas: 0.010) - [ Unit ] - - location: 21 (just consumed gas: 0.010) - [ 10 - Unit ] - - location: 24 (just consumed gas: 0.010) - [ 922337203685477580700 - 10 - Unit ] -Fatal error: - error running script diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- big_map_contract_io.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- big_map_contract_io.out deleted file mode 100644 index e60d4a49ff741ba18e069128c171f34052724102..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- big_map_contract_io.out +++ /dev/null @@ -1,1088 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_big_map_value.tz on storage '(Pair { Elt "hello" "hi" } None)' and input '"hello"' --trace-stack -storage - (Pair 4 (Some "hi")) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["hello"] to "hi" -trace - - location: 12 (just consumed gas: 12.330) - [ (Pair "hello" { Elt "hello" "hi" } None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "hello" { Elt "hello" "hi" } None) - (Pair "hello" { Elt "hello" "hi" } None) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair "hello" { Elt "hello" "hi" } None) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "hello" { Elt "hello" "hi" } None) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair { Elt "hello" "hi" } None) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 20 (just consumed gas: 0.757) - [ (Some "hi") - { Elt "hello" "hi" } ] - - location: 21 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } - (Some "hi") ] - - location: 22 (just consumed gas: 0.010) - [ (Pair { Elt "hello" "hi" } (Some "hi")) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Pair { Elt "hello" "hi" } (Some "hi")) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} { Elt "hello" "hi" } (Some "hi")) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_big_map_value.tz on storage '(Pair { Elt "hello" "hi" } None)' and input '""' --trace-stack -storage - (Pair 4 None) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["hello"] to "hi" -trace - - location: 12 (just consumed gas: 12.280) - [ (Pair "" { Elt "hello" "hi" } None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "" { Elt "hello" "hi" } None) - (Pair "" { Elt "hello" "hi" } None) ] - - location: 13 (just consumed gas: 0.010) - [ "" - (Pair "" { Elt "hello" "hi" } None) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "" { Elt "hello" "hi" } None) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair { Elt "hello" "hi" } None) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 14 (just consumed gas: 0.035) - [ "" - { Elt "hello" "hi" } - { Elt "hello" "hi" } ] - - location: 20 (just consumed gas: 0.701) - [ None - { Elt "hello" "hi" } ] - - location: 21 (just consumed gas: 0.010) - [ { Elt "hello" "hi" } - None ] - - location: 22 (just consumed gas: 0.010) - [ (Pair { Elt "hello" "hi" } None) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Pair { Elt "hello" "hi" } None) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} { Elt "hello" "hi" } None) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_big_map_value.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } None)' and input '"1"' --trace-stack -storage - (Pair 4 (Some "one")) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" - Set map(4)["1"] to "one" -trace - - location: 12 (just consumed gas: 13.247) - [ (Pair "1" { Elt "1" "one" ; Elt "2" "two" } None) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair "1" { Elt "1" "one" ; Elt "2" "two" } None) - (Pair "1" { Elt "1" "one" ; Elt "2" "two" } None) ] - - location: 13 (just consumed gas: 0.010) - [ "1" - (Pair "1" { Elt "1" "one" ; Elt "2" "two" } None) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "1" { Elt "1" "one" ; Elt "2" "two" } None) ] - - location: 17 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } None) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } ] - - location: 19 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - { Elt "1" "one" ; Elt "2" "two" } ] - - location: 14 (just consumed gas: 0.035) - [ "1" - { Elt "1" "one" ; Elt "2" "two" } - { Elt "1" "one" ; Elt "2" "two" } ] - - location: 20 (just consumed gas: 0.712) - [ (Some "one") - { Elt "1" "one" ; Elt "2" "two" } ] - - location: 21 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - (Some "one") ] - - location: 22 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } (Some "one")) ] - - location: 23 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "one" ; Elt "2" "two" } (Some "one")) ] - - location: 25 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "one" ; Elt "2" "two" } (Some "one")) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/update_big_map.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } Unit)' and input '{}' --trace-stack -storage - (Pair 4 Unit) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" - Set map(4)["1"] to "one" -trace - - location: 15 (just consumed gas: 11.738) - [ (Pair {} { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 15 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 16 (just consumed gas: 0.035) - [ {} - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.070) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 24 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/update_big_map.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } Unit)' and input '{ Elt "1" (Some "two") }' --trace-stack -storage - (Pair 4 Unit) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" - Set map(4)["1"] to "two" -trace - - location: 15 (just consumed gas: 12.163) - [ (Pair { Elt "1" (Some "two") } { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "1" (Some "two") } - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 16 (just consumed gas: 0.035) - [ { Elt "1" (Some "two") } - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.067) - [ (Pair "1" (Some "two")) - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 21 (just consumed gas: 0.010) - [ "1" - (Some "two") - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 22 (just consumed gas: 0.727) - [ { Elt "1" "two" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.035) - [ { Elt "1" "two" ; Elt "2" "two" } - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair { Elt "1" "two" ; Elt "2" "two" } Unit) ] - - location: 24 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "two" ; Elt "2" "two" } Unit) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "two" ; Elt "2" "two" } Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/update_big_map.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } Unit)' and input '{ Elt "3" (Some "three") }' --trace-stack -storage - (Pair 4 Unit) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" - Set map(4)["3"] to "three" - Set map(4)["1"] to "one" -trace - - location: 15 (just consumed gas: 12.183) - [ (Pair { Elt "3" (Some "three") } { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "3" (Some "three") } - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 16 (just consumed gas: 0.035) - [ { Elt "3" (Some "three") } - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.067) - [ (Pair "3" (Some "three")) - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 21 (just consumed gas: 0.010) - [ "3" - (Some "three") - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 22 (just consumed gas: 0.727) - [ { Elt "1" "one" ; Elt "2" "two" ; Elt "3" "three" } - Unit ] - - location: 19 (just consumed gas: 0.035) - [ { Elt "1" "one" ; Elt "2" "two" ; Elt "3" "three" } - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" ; Elt "3" "three" } Unit) ] - - location: 24 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "one" ; Elt "2" "two" ; Elt "3" "three" } Unit) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "one" ; Elt "2" "two" ; Elt "3" "three" } Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/update_big_map.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } Unit)' and input '{ Elt "3" None }' --trace-stack -storage - (Pair 4 Unit) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" - Unset map(4)["3"] - Set map(4)["1"] to "one" -trace - - location: 15 (just consumed gas: 12.018) - [ (Pair { Elt "3" None } { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "3" None } - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 16 (just consumed gas: 0.035) - [ { Elt "3" None } - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.067) - [ (Pair "3" None) - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 21 (just consumed gas: 0.010) - [ "3" - None - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 22 (just consumed gas: 0.727) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.035) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 24 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/update_big_map.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } Unit)' and input '{ Elt "2" None }' --trace-stack -storage - (Pair 4 Unit) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Unset map(4)["2"] - Set map(4)["1"] to "one" -trace - - location: 15 (just consumed gas: 12.018) - [ (Pair { Elt "2" None } { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "2" None } - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 16 (just consumed gas: 0.035) - [ { Elt "2" None } - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.067) - [ (Pair "2" None) - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 21 (just consumed gas: 0.010) - [ "2" - None - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 22 (just consumed gas: 0.727) - [ { Elt "1" "one" } - Unit ] - - location: 19 (just consumed gas: 0.035) - [ { Elt "1" "one" } - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" } Unit) ] - - location: 24 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "one" } Unit) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "one" } Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/update_big_map.tz on storage '(Pair { Elt "1" "one" ; Elt "2" "two" } Unit)' and input '{ Elt "1" (Some "two") }' --trace-stack -storage - (Pair 4 Unit) -emitted operations - -big_map diff - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" - Set map(4)["1"] to "two" -trace - - location: 15 (just consumed gas: 12.163) - [ (Pair { Elt "1" (Some "two") } { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 15 (just consumed gas: 0.010) - [ { Elt "1" (Some "two") } - (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "2" "two" } Unit) ] - - location: 18 (just consumed gas: 0.010) - [ { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 16 (just consumed gas: 0.035) - [ { Elt "1" (Some "two") } - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.067) - [ (Pair "1" (Some "two")) - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 21 (just consumed gas: 0.010) - [ "1" - (Some "two") - { Elt "1" "one" ; Elt "2" "two" } - Unit ] - - location: 22 (just consumed gas: 0.727) - [ { Elt "1" "two" ; Elt "2" "two" } - Unit ] - - location: 19 (just consumed gas: 0.035) - [ { Elt "1" "two" ; Elt "2" "two" } - Unit ] - - location: 23 (just consumed gas: 0.010) - [ (Pair { Elt "1" "two" ; Elt "2" "two" } Unit) ] - - location: 24 (just consumed gas: 0.010) - [ {} - (Pair { Elt "1" "two" ; Elt "2" "two" } Unit) ] - - location: 26 (just consumed gas: 0.010) - [ (Pair {} { Elt "1" "two" ; Elt "2" "two" } Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair None {})' and input '"hello"' --trace-stack -storage - (Pair None 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Unset map(4)["hello"] -trace - - location: 13 (just consumed gas: 8.184) - [ (Pair "hello" None {}) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair None {}) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None {}) ] - - location: 16 (just consumed gas: 0.010) - [ None - {} ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - None - {} ] - - location: 17 (just consumed gas: 0.792) - [ None - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair None {}) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair None {}) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} None {}) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair (Some 4) {})' and input '"hello"' --trace-stack -storage - (Pair None 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["hello"] to 4 -trace - - location: 13 (just consumed gas: 8.284) - [ (Pair "hello" (Some 4) {}) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair (Some 4) {}) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair (Some 4) {}) ] - - location: 16 (just consumed gas: 0.010) - [ (Some 4) - {} ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - (Some 4) - {} ] - - location: 17 (just consumed gas: 0.792) - [ None - { Elt "hello" 4 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" 4 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair None { Elt "hello" 4 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} None { Elt "hello" 4 }) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair None { Elt "hello" 4 })' and input '"hello"' --trace-stack -storage - (Pair (Some 4) 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Unset map(4)["hello"] -trace - - location: 13 (just consumed gas: 9.218) - [ (Pair "hello" None { Elt "hello" 4 }) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair None { Elt "hello" 4 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" 4 }) ] - - location: 16 (just consumed gas: 0.010) - [ None - { Elt "hello" 4 } ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - None - { Elt "hello" 4 } ] - - location: 17 (just consumed gas: 0.796) - [ (Some 4) - {} ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 4) {}) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 4) {}) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 4) {}) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair (Some 5) { Elt "hello" 4 })' and input '"hello"' --trace-stack -storage - (Pair (Some 4) 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["hello"] to 5 -trace - - location: 13 (just consumed gas: 9.318) - [ (Pair "hello" (Some 5) { Elt "hello" 4 }) ] - - location: 13 (just consumed gas: 0.010) - [ "hello" - (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 16 (just consumed gas: 0.010) - [ (Some 5) - { Elt "hello" 4 } ] - - location: 14 (just consumed gas: 0.035) - [ "hello" - (Some 5) - { Elt "hello" 4 } ] - - location: 17 (just consumed gas: 0.796) - [ (Some 4) - { Elt "hello" 5 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 4) { Elt "hello" 5 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 4) { Elt "hello" 5 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 4) { Elt "hello" 5 }) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair (Some 5) { Elt "hello" 4 })' and input '"hi"' --trace-stack -storage - (Pair None 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["hello"] to 4 - Set map(4)["hi"] to 5 -trace - - location: 13 (just consumed gas: 9.288) - [ (Pair "hi" (Some 5) { Elt "hello" 4 }) ] - - location: 13 (just consumed gas: 0.010) - [ "hi" - (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair (Some 5) { Elt "hello" 4 }) ] - - location: 16 (just consumed gas: 0.010) - [ (Some 5) - { Elt "hello" 4 } ] - - location: 14 (just consumed gas: 0.035) - [ "hi" - (Some 5) - { Elt "hello" 4 } ] - - location: 17 (just consumed gas: 0.763) - [ None - { Elt "hello" 4 ; Elt "hi" 5 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair None { Elt "hello" 4 ; Elt "hi" 5 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair None { Elt "hello" 4 ; Elt "hi" 5 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} None { Elt "hello" 4 ; Elt "hi" 5 }) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair None { Elt "1" 1 ; Elt "2" 2 })' and input '"1"' --trace-stack -storage - (Pair (Some 1) 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["2"] to 2 - Unset map(4)["1"] -trace - - location: 13 (just consumed gas: 10.080) - [ (Pair "1" None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 13 (just consumed gas: 0.010) - [ "1" - (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 16 (just consumed gas: 0.010) - [ None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 14 (just consumed gas: 0.035) - [ "1" - None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 17 (just consumed gas: 0.751) - [ (Some 1) - { Elt "2" 2 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 1) { Elt "2" 2 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 1) { Elt "2" 2 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 1) { Elt "2" 2 }) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/get_and_update_big_map.tz on storage '(Pair None { Elt "1" 1 ; Elt "2" 2 })' and input '"1"' --trace-stack -storage - (Pair (Some 1) 4) -emitted operations - -big_map diff - New map(4) of type (big_map string nat) - Set map(4)["2"] to 2 - Unset map(4)["1"] -trace - - location: 13 (just consumed gas: 10.080) - [ (Pair "1" None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 13 (just consumed gas: 0.010) - [ "1" - (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 14 (just consumed gas: 0.010) - [ (Pair None { Elt "1" 1 ; Elt "2" 2 }) ] - - location: 16 (just consumed gas: 0.010) - [ None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 14 (just consumed gas: 0.035) - [ "1" - None - { Elt "1" 1 ; Elt "2" 2 } ] - - location: 17 (just consumed gas: 0.751) - [ (Some 1) - { Elt "2" 2 } ] - - location: 18 (just consumed gas: 0.010) - [ (Pair (Some 1) { Elt "2" 2 }) ] - - location: 19 (just consumed gas: 0.010) - [ {} - (Pair (Some 1) { Elt "2" 2 }) ] - - location: 21 (just consumed gas: 0.010) - [ (Pair {} (Some 1) { Elt "2" 2 }) ] - - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/big_map_magic.tz on storage '(Left (Pair { Elt "1" "one" } { Elt "2" "two" }))' and input '(Left Unit)' --trace-stack -storage - (Left (Pair 4 5)) -emitted operations - -big_map diff - New map(5) of type (big_map string string) - Set map(5)["1"] to "one" - New map(4) of type (big_map string string) - Set map(4)["2"] to "two" -trace - - location: 43 (just consumed gas: 59.608) - [ (Pair (Left Unit) (Left (Pair { Elt "1" "one" } { Elt "2" "two" }))) ] - - location: 43 (just consumed gas: 0.010) - [ (Left Unit) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.010) - [ Unit - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 46 (just consumed gas: 0.010) - [ (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 48 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" } { Elt "2" "two" }) ] - - location: 48 (just consumed gas: 0.025) - [ (Pair { Elt "1" "one" } { Elt "2" "two" }) ] - - location: 54 (just consumed gas: 0.010) - [ { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 55 (just consumed gas: 0.010) - [ { Elt "2" "two" } - { Elt "1" "one" } ] - - location: 56 (just consumed gas: 0.010) - [ (Pair { Elt "2" "two" } { Elt "1" "one" }) ] - - location: 57 (just consumed gas: 0.010) - [ (Left (Pair { Elt "2" "two" } { Elt "1" "one" })) ] - - location: 44 (just consumed gas: 0.025) - [ (Left (Pair { Elt "2" "two" } { Elt "1" "one" })) ] - - location: 151 (just consumed gas: 0.010) - [ {} - (Left (Pair { Elt "2" "two" } { Elt "1" "one" })) ] - - location: 153 (just consumed gas: 0.010) - [ (Pair {} (Left (Pair { Elt "2" "two" } { Elt "1" "one" }))) ] - - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/big_map_magic.tz on storage '(Left (Pair { Elt "1" "one" } { Elt "2" "two" }))' and input '(Right (Left (Left (Pair { Elt "3" "three" } { Elt "4" "four" }))))' --trace-stack -storage - (Left (Pair 4 5)) -emitted operations - -big_map diff - New map(5) of type (big_map string string) - Set map(5)["4"] to "four" - New map(4) of type (big_map string string) - Set map(4)["3"] to "three" -trace - - location: 43 (just consumed gas: 62.906) - [ (Pair (Right (Left (Left (Pair { Elt "3" "three" } { Elt "4" "four" })))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" }))) ] - - location: 43 (just consumed gas: 0.010) - [ (Right (Left (Left (Pair { Elt "3" "three" } { Elt "4" "four" })))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.010) - [ (Left (Left (Pair { Elt "3" "three" } { Elt "4" "four" }))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 60 (just consumed gas: 0.010) - [ (Left (Pair { Elt "3" "three" } { Elt "4" "four" })) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 62 (just consumed gas: 0.010) - [ (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) - (Left (Pair { Elt "3" "three" } { Elt "4" "four" })) ] - - location: 63 (just consumed gas: 0.010) - [ (Left (Pair { Elt "3" "three" } { Elt "4" "four" })) ] - - location: 60 (just consumed gas: 0.025) - [ (Left (Pair { Elt "3" "three" } { Elt "4" "four" })) ] - - location: 44 (just consumed gas: 0.025) - [ (Left (Pair { Elt "3" "three" } { Elt "4" "four" })) ] - - location: 151 (just consumed gas: 0.010) - [ {} - (Left (Pair { Elt "3" "three" } { Elt "4" "four" })) ] - - location: 153 (just consumed gas: 0.010) - [ (Pair {} (Left (Pair { Elt "3" "three" } { Elt "4" "four" }))) ] - - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/big_map_magic.tz on storage '(Left (Pair { Elt "1" "one" } { Elt "2" "two" }))' and input '(Right (Left (Right Unit)))' --trace-stack -storage - (Right Unit) -emitted operations - -big_map diff - -trace - - location: 43 (just consumed gas: 60.248) - [ (Pair (Right (Left (Right Unit))) (Left (Pair { Elt "1" "one" } { Elt "2" "two" }))) ] - - location: 43 (just consumed gas: 0.010) - [ (Right (Left (Right Unit))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.010) - [ (Left (Right Unit)) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 60 (just consumed gas: 0.010) - [ (Right Unit) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 62 (just consumed gas: 0.010) - [ (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) - (Right Unit) ] - - location: 63 (just consumed gas: 0.010) - [ (Right Unit) ] - - location: 60 (just consumed gas: 0.025) - [ (Right Unit) ] - - location: 44 (just consumed gas: 0.025) - [ (Right Unit) ] - - location: 151 (just consumed gas: 0.010) - [ {} - (Right Unit) ] - - location: 153 (just consumed gas: 0.010) - [ (Pair {} (Right Unit)) ] - - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/big_map_magic.tz on storage '(Right Unit)' and input '(Right (Right (Left (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" }) )))' --trace-stack -storage - (Left (Pair 4 5)) -emitted operations - -big_map diff - New map(5) of type (big_map string string) - Set map(5)["gaz"] to "baz" - New map(4) of type (big_map string string) - Set map(4)["foo"] to "bar" -trace - - location: 43 (just consumed gas: 58.380) - [ (Pair (Right (Right (Left (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" })))) (Right Unit)) ] - - location: 43 (just consumed gas: 0.010) - [ (Right (Right (Left (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" })))) - (Right Unit) ] - - location: 44 (just consumed gas: 0.010) - [ (Right (Left (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" }))) - (Right Unit) ] - - location: 60 (just consumed gas: 0.010) - [ (Left (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" })) - (Right Unit) ] - - location: 65 (just consumed gas: 0.010) - [ (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" }) - (Right Unit) ] - - location: 67 (just consumed gas: 0.010) - [ (Right Unit) ] - - location: 70 (just consumed gas: 0.010) - [ Unit ] - - location: 70 (just consumed gas: 0.025) - [ Unit ] - - location: 76 (just consumed gas: 0.010) - [ ] - - location: 67 (just consumed gas: 0.035) - [ (Pair { Pair "foo" "bar" } { Pair "gaz" "baz" }) ] - - location: 77 (just consumed gas: 0.010) - [ { Pair "foo" "bar" } - { Pair "gaz" "baz" } ] - - location: 78 (just consumed gas: 0.010) - [ { Pair "gaz" "baz" } ] - - location: 80 (just consumed gas: 0.300) - [ {} - { Pair "gaz" "baz" } ] - - location: 78 (just consumed gas: 0.035) - [ { Pair "foo" "bar" } - {} - { Pair "gaz" "baz" } ] - - location: 83 (just consumed gas: 0.030) - [ (Pair "foo" "bar") - {} - { Pair "gaz" "baz" } ] - - location: 85 (just consumed gas: 0.010) - [ "foo" - "bar" - {} - { Pair "gaz" "baz" } ] - - location: 86 (just consumed gas: 0.010) - [ "bar" - {} - { Pair "gaz" "baz" } ] - - location: 88 (just consumed gas: 0.010) - [ (Some "bar") - {} - { Pair "gaz" "baz" } ] - - location: 86 (just consumed gas: 0.035) - [ "foo" - (Some "bar") - {} - { Pair "gaz" "baz" } ] - - location: 89 (just consumed gas: 0.747) - [ { Elt "foo" "bar" } - { Pair "gaz" "baz" } ] - - location: 83 (just consumed gas: 0.035) - [ { Elt "foo" "bar" } - { Pair "gaz" "baz" } ] - - location: 90 (just consumed gas: 0.010) - [ { Pair "gaz" "baz" } - { Elt "foo" "bar" } ] - - location: 91 (just consumed gas: 0.010) - [ { Elt "foo" "bar" } ] - - location: 93 (just consumed gas: 0.300) - [ {} - { Elt "foo" "bar" } ] - - location: 91 (just consumed gas: 0.035) - [ { Pair "gaz" "baz" } - {} - { Elt "foo" "bar" } ] - - location: 96 (just consumed gas: 0.030) - [ (Pair "gaz" "baz") - {} - { Elt "foo" "bar" } ] - - location: 98 (just consumed gas: 0.010) - [ "gaz" - "baz" - {} - { Elt "foo" "bar" } ] - - location: 99 (just consumed gas: 0.010) - [ "baz" - {} - { Elt "foo" "bar" } ] - - location: 101 (just consumed gas: 0.010) - [ (Some "baz") - {} - { Elt "foo" "bar" } ] - - location: 99 (just consumed gas: 0.035) - [ "gaz" - (Some "baz") - {} - { Elt "foo" "bar" } ] - - location: 102 (just consumed gas: 0.747) - [ { Elt "gaz" "baz" } - { Elt "foo" "bar" } ] - - location: 96 (just consumed gas: 0.035) - [ { Elt "gaz" "baz" } - { Elt "foo" "bar" } ] - - location: 103 (just consumed gas: 0.010) - [ { Elt "foo" "bar" } - { Elt "gaz" "baz" } ] - - location: 104 (just consumed gas: 0.010) - [ (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" }) ] - - location: 105 (just consumed gas: 0.010) - [ (Left (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" })) ] - - location: 65 (just consumed gas: 0.025) - [ (Left (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" })) ] - - location: 60 (just consumed gas: 0.025) - [ (Left (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" })) ] - - location: 44 (just consumed gas: 0.025) - [ (Left (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" })) ] - - location: 151 (just consumed gas: 0.010) - [ {} - (Left (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" })) ] - - location: 153 (just consumed gas: 0.010) - [ (Pair {} (Left (Pair { Elt "foo" "bar" } { Elt "gaz" "baz" }))) ] - - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/big_map_magic.tz on storage '(Left (Pair { Elt "1" "one" } { Elt "2" "two" }) )' and input '(Right (Right (Right (Left { Pair "3" "three" }))))' --trace-stack -storage - (Left (Pair 4 5)) -emitted operations - -big_map diff - New map(5) of type (big_map string string) - Set map(5)["2"] to "two" - New map(4) of type (big_map string string) - Set map(4)["3"] to "three" - Set map(4)["1"] to "one" -trace - - location: 43 (just consumed gas: 60.518) - [ (Pair (Right (Right (Right (Left { Pair "3" "three" })))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" }))) ] - - location: 43 (just consumed gas: 0.010) - [ (Right (Right (Right (Left { Pair "3" "three" })))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.010) - [ (Right (Right (Left { Pair "3" "three" }))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 60 (just consumed gas: 0.010) - [ (Right (Left { Pair "3" "three" })) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 65 (just consumed gas: 0.010) - [ (Left { Pair "3" "three" }) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 108 (just consumed gas: 0.010) - [ { Pair "3" "three" } - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 110 (just consumed gas: 0.010) - [ (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 113 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" } { Elt "2" "two" }) ] - - location: 113 (just consumed gas: 0.025) - [ (Pair { Elt "1" "one" } { Elt "2" "two" }) ] - - location: 119 (just consumed gas: 0.010) - [ { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 110 (just consumed gas: 0.035) - [ { Pair "3" "three" } - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 120 (just consumed gas: 0.030) - [ (Pair "3" "three") - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 122 (just consumed gas: 0.010) - [ "3" - "three" - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 123 (just consumed gas: 0.010) - [ "three" - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 125 (just consumed gas: 0.010) - [ (Some "three") - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 123 (just consumed gas: 0.035) - [ "3" - (Some "three") - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 126 (just consumed gas: 0.727) - [ { Elt "1" "one" ; Elt "3" "three" } - { Elt "2" "two" } ] - - location: 120 (just consumed gas: 0.035) - [ { Elt "1" "one" ; Elt "3" "three" } - { Elt "2" "two" } ] - - location: 127 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" }) ] - - location: 128 (just consumed gas: 0.010) - [ (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" })) ] - - location: 108 (just consumed gas: 0.025) - [ (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" })) ] - - location: 65 (just consumed gas: 0.025) - [ (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" })) ] - - location: 60 (just consumed gas: 0.025) - [ (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.025) - [ (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" })) ] - - location: 151 (just consumed gas: 0.010) - [ {} - (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" })) ] - - location: 153 (just consumed gas: 0.010) - [ (Pair {} (Left (Pair { Elt "1" "one" ; Elt "3" "three" } { Elt "2" "two" }))) ] - - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/big_map_magic.tz on storage '(Left (Pair { Elt "1" "one" } { Elt "2" "two" }))' and input '(Right (Right (Right (Right { "1" }))))' --trace-stack -storage - (Left (Pair 4 5)) -emitted operations - -big_map diff - New map(5) of type (big_map string string) - Set map(5)["2"] to "two" - New map(4) of type (big_map string string) - Unset map(4)["1"] -trace - - location: 43 (just consumed gas: 60.253) - [ (Pair (Right (Right (Right (Right { "1" })))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" }))) ] - - location: 43 (just consumed gas: 0.010) - [ (Right (Right (Right (Right { "1" })))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.010) - [ (Right (Right (Right { "1" }))) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 60 (just consumed gas: 0.010) - [ (Right (Right { "1" })) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 65 (just consumed gas: 0.010) - [ (Right { "1" }) - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 108 (just consumed gas: 0.010) - [ { "1" } - (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 131 (just consumed gas: 0.010) - [ (Left (Pair { Elt "1" "one" } { Elt "2" "two" })) ] - - location: 134 (just consumed gas: 0.010) - [ (Pair { Elt "1" "one" } { Elt "2" "two" }) ] - - location: 134 (just consumed gas: 0.025) - [ (Pair { Elt "1" "one" } { Elt "2" "two" }) ] - - location: 140 (just consumed gas: 0.010) - [ { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 131 (just consumed gas: 0.035) - [ { "1" } - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 141 (just consumed gas: 0.030) - [ "1" - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 143 (just consumed gas: 0.010) - [ { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 145 (just consumed gas: 0.010) - [ None - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 143 (just consumed gas: 0.035) - [ "1" - None - { Elt "1" "one" } - { Elt "2" "two" } ] - - location: 147 (just consumed gas: 0.727) - [ {} - { Elt "2" "two" } ] - - location: 141 (just consumed gas: 0.035) - [ {} - { Elt "2" "two" } ] - - location: 148 (just consumed gas: 0.010) - [ (Pair {} { Elt "2" "two" }) ] - - location: 149 (just consumed gas: 0.010) - [ (Left (Pair {} { Elt "2" "two" })) ] - - location: 108 (just consumed gas: 0.025) - [ (Left (Pair {} { Elt "2" "two" })) ] - - location: 65 (just consumed gas: 0.025) - [ (Left (Pair {} { Elt "2" "two" })) ] - - location: 60 (just consumed gas: 0.025) - [ (Left (Pair {} { Elt "2" "two" })) ] - - location: 44 (just consumed gas: 0.025) - [ (Left (Pair {} { Elt "2" "two" })) ] - - location: 151 (just consumed gas: 0.010) - [ {} - (Left (Pair {} { Elt "2" "two" })) ] - - location: 153 (just consumed gas: 0.010) - [ (Pair {} (Left (Pair {} { Elt "2" "two" }))) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- check_signature.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- check_signature.out deleted file mode 100644 index d3b6384253013cdd3a0263a4da7e16e6c222b2c4..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- check_signature.out +++ /dev/null @@ -1,243 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/check_signature.tz on storage '(Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" "hello")' and input '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' --trace-stack -storage - (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") -emitted operations - -big_map diff - -trace - - location: 9 (just consumed gas: 100.026) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 15 (just consumed gas: 0.010) - [ "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 16 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 18 (just consumed gas: 0.010) - [ "hello" - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 19 (just consumed gas: 0.266) - [ 0x05010000000568656c6c6f - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 16 (just consumed gas: 0.035) - [ "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - 0x05010000000568656c6c6f - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - 0x05010000000568656c6c6f - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 20 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - 0x05010000000568656c6c6f - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 21 (just consumed gas: 65.812) - [ True - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 22 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 22 (just consumed gas: 0.025) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 28 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 29 (just consumed gas: 0.010) - [ {} - (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - location: 31 (just consumed gas: 0.010) - [ (Pair {} - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "hello") ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/check_signature.tz on storage '(Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" "abcd")' and input '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 01: parameter key; - 02: storage (pair signature string); - 03: code { - 04: DUP; DUP; - 05: DIP{ CDR; DUP; CAR; - 06: DIP{CDR; PACK}}; - 07: CAR; CHECK_SIGNATURE; - 08: IF {} {FAIL} ; - 09: CDR; NIL operation ; PAIR}; - 10: - 11: -At line 8 characters 14 to 18, -script reached FAILWITH instruction -with Unit -trace - - location: 9 (just consumed gas: 100.016) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 9 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 10 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 11 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 13 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 14 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 15 (just consumed gas: 0.010) - [ "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 16 (just consumed gas: 0.010) - [ (Pair "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 18 (just consumed gas: 0.010) - [ "abcd" - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 19 (just consumed gas: 0.256) - [ 0x05010000000461626364 - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 16 (just consumed gas: 0.035) - [ "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - 0x05010000000461626364 - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 11 (just consumed gas: 0.035) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - 0x05010000000461626364 - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 20 (just consumed gas: 0.010) - [ "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - 0x05010000000461626364 - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 21 (just consumed gas: 65.811) - [ False - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 22 (just consumed gas: 0.010) - [ (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] - - location: 26 (just consumed gas: 0.010) - [ Unit - (Pair "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - "edsigu3QszDjUpeqYqbvhyRxMpVFamEnvm9FYnt7YiiNt9nmjYfh8ZTbsybZ5WnBkhA7zfHsRVyuTnRsGLR6fNHt1Up1FxgyRtF" - "abcd") ] -Fatal error: - error running script diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- hash_consistency.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- hash_consistency.out deleted file mode 100644 index ea3c513a3845c3fbbe5ac38f3ea199662725504e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- hash_consistency.out +++ /dev/null @@ -1,32 +0,0 @@ - -./octez-client --mode mockup hash data '(Pair 22220000000 (Pair "2017-12-13T04:49:00Z" 034))' of type '(pair mutez (pair timestamp int))' -Raw packed data: 0x0507070080acd2c6a501070700bcc485a30b0022 -Script-expression-ID-Hash: expruenXhGp5JQoHJTGv4DzBR8Zm3HGvea8Q8BaMPywsY2bxrHAEgC -Raw Script-expression-ID-Hash: 0x95a69fcbbf773989333dc9b31e246575812dbea19d25089f83a2aeeea16ab4bc -Ledger Blake2b hash: B5B7PuGGVUrdHUW9Df8wPNJQRuUmx56aH1XVpvbUZvW7 -Raw Sha256 hash: 0x538634a0f81b55f1c946c1207a25c262479566d20bd3d5cd2cdbb2940fc45774 -Raw Sha512 hash: 0x49d5c19c2da4ee74f85225c95625a4b77b94724f4285b436b9d4be27d40491354bdc8e9d8a3d9b2857e5fb59b172605edd02fc4b61ce3cd3f84aa11ed1731ff6 -Gas remaining: 1039997.762 units remaining - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/hash_consistency_checker.tz on storage 0x00 and input '(Pair 22220000000 (Pair "2017-12-13T04:49:00Z" 034))' --trace-stack -storage - 0x95a69fcbbf773989333dc9b31e246575812dbea19d25089f83a2aeeea16ab4bc -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 6.040) - [ (Pair (Pair 22220000000 "2017-12-13T04:49:00Z" 34) 0x00) ] - - location: 11 (just consumed gas: 0.010) - [ (Pair 22220000000 "2017-12-13T04:49:00Z" 34) ] - - location: 12 (just consumed gas: 1.330) - [ 0x0507070080acd2c6a501070700bcc485a30b0022 ] - - location: 13 (just consumed gas: 0.452) - [ 0x95a69fcbbf773989333dc9b31e246575812dbea19d25089f83a2aeeea16ab4bc ] - - location: 14 (just consumed gas: 0.010) - [ {} - 0x95a69fcbbf773989333dc9b31e246575812dbea19d25089f83a2aeeea16ab4bc ] - - location: 16 (just consumed gas: 0.010) - [ (Pair {} 0x95a69fcbbf773989333dc9b31e246575812dbea19d25089f83a2aeeea16ab4bc) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- map_map_side_effect.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- map_map_side_effect.out deleted file mode 100644 index c0ccce9a10578fe9f69477ca090a9f4698b8d8c6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- map_map_side_effect.out +++ /dev/null @@ -1,273 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/map_map_sideeffect.tz on storage '(Pair {} 0)' and input 10 --trace-stack -storage - (Pair {} 0) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 16.332) - [ (Pair 10 {} 0) ] - - location: 11 (just consumed gas: 0.010) - [ 10 - (Pair {} 0) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair {} 0) - 10 ] - - location: 13 (just consumed gas: 0.010) - [ {} - 10 ] - - location: 14 (just consumed gas: 0.023) - [ ] - - location: 17 (just consumed gas: 0.010) - [ 0 ] - - location: 14 (just consumed gas: 0.045) - [ {} - 10 - 0 ] - - location: 20 (just consumed gas: 0.060) - [ {} - 10 - 0 ] - - location: 34 (just consumed gas: 0.010) - [ 10 - 0 ] - - location: 36 (just consumed gas: 0.010) - [ 0 ] - - location: 34 (just consumed gas: 0.035) - [ {} - 0 ] - - location: 37 (just consumed gas: 0.010) - [ (Pair {} 0) ] - - location: 38 (just consumed gas: 0.010) - [ {} - (Pair {} 0) ] - - location: 40 (just consumed gas: 0.010) - [ (Pair {} {} 0) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/map_map_sideeffect.tz on storage '(Pair { Elt "foo" 1 } 1)' and input 10 --trace-stack -storage - (Pair { Elt "foo" 11 } 11) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 16.632) - [ (Pair 10 { Elt "foo" 1 } 1) ] - - location: 11 (just consumed gas: 0.010) - [ 10 - (Pair { Elt "foo" 1 } 1) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 1 } 1) - 10 ] - - location: 13 (just consumed gas: 0.010) - [ { Elt "foo" 1 } - 10 ] - - location: 14 (just consumed gas: 0.023) - [ ] - - location: 17 (just consumed gas: 0.010) - [ 0 ] - - location: 14 (just consumed gas: 0.045) - [ { Elt "foo" 1 } - 10 - 0 ] - - location: 20 (just consumed gas: 0.058) - [ (Pair "foo" 1) - 10 - 0 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 10 - 0 ] - - location: 23 (just consumed gas: 0.010) - [ 10 - 0 ] - - location: 25 (just consumed gas: 0.010) - [ 10 - 10 - 0 ] - - location: 23 (just consumed gas: 0.035) - [ 1 - 10 - 10 - 0 ] - - location: 26 (just consumed gas: 0.035) - [ 11 - 10 - 0 ] - - location: 27 (just consumed gas: 0.010) - [ 11 - 11 - 10 - 0 ] - - location: 28 (just consumed gas: 0.048) - [ 11 - 10 - 11 - 0 ] - - location: 30 (just consumed gas: 0.023) - [ 11 - 0 ] - - location: 33 (just consumed gas: 0.035) - [ 11 ] - - location: 30 (just consumed gas: 0.045) - [ 11 - 10 - 11 ] - - location: 20 (just consumed gas: 0.160) - [ { Elt "foo" 11 } - 10 - 11 ] - - location: 34 (just consumed gas: 0.010) - [ 10 - 11 ] - - location: 36 (just consumed gas: 0.010) - [ 11 ] - - location: 34 (just consumed gas: 0.035) - [ { Elt "foo" 11 } - 11 ] - - location: 37 (just consumed gas: 0.010) - [ (Pair { Elt "foo" 11 } 11) ] - - location: 38 (just consumed gas: 0.010) - [ {} - (Pair { Elt "foo" 11 } 11) ] - - location: 40 (just consumed gas: 0.010) - [ (Pair {} { Elt "foo" 11 } 11) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/map_map_sideeffect.tz on storage '(Pair { Elt "bar" 5 ; Elt "foo" 1 } 6)' and input 15 --trace-stack -storage - (Pair { Elt "bar" 20 ; Elt "foo" 16 } 36) -emitted operations - -big_map diff - -trace - - location: 11 (just consumed gas: 16.967) - [ (Pair 15 { Elt "bar" 5 ; Elt "foo" 1 } 6) ] - - location: 11 (just consumed gas: 0.010) - [ 15 - (Pair { Elt "bar" 5 ; Elt "foo" 1 } 6) ] - - location: 12 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 5 ; Elt "foo" 1 } 6) - 15 ] - - location: 13 (just consumed gas: 0.010) - [ { Elt "bar" 5 ; Elt "foo" 1 } - 15 ] - - location: 14 (just consumed gas: 0.023) - [ ] - - location: 17 (just consumed gas: 0.010) - [ 0 ] - - location: 14 (just consumed gas: 0.045) - [ { Elt "bar" 5 ; Elt "foo" 1 } - 15 - 0 ] - - location: 20 (just consumed gas: 0.067) - [ (Pair "bar" 5) - 15 - 0 ] - - location: 22 (just consumed gas: 0.010) - [ 5 - 15 - 0 ] - - location: 23 (just consumed gas: 0.010) - [ 15 - 0 ] - - location: 25 (just consumed gas: 0.010) - [ 15 - 15 - 0 ] - - location: 23 (just consumed gas: 0.035) - [ 5 - 15 - 15 - 0 ] - - location: 26 (just consumed gas: 0.035) - [ 20 - 15 - 0 ] - - location: 27 (just consumed gas: 0.010) - [ 20 - 20 - 15 - 0 ] - - location: 28 (just consumed gas: 0.048) - [ 20 - 15 - 20 - 0 ] - - location: 30 (just consumed gas: 0.023) - [ 20 - 0 ] - - location: 33 (just consumed gas: 0.035) - [ 20 ] - - location: 30 (just consumed gas: 0.045) - [ 20 - 15 - 20 ] - - location: 20 (just consumed gas: 0.150) - [ (Pair "foo" 1) - 15 - 20 ] - - location: 22 (just consumed gas: 0.010) - [ 1 - 15 - 20 ] - - location: 23 (just consumed gas: 0.010) - [ 15 - 20 ] - - location: 25 (just consumed gas: 0.010) - [ 15 - 15 - 20 ] - - location: 23 (just consumed gas: 0.035) - [ 1 - 15 - 15 - 20 ] - - location: 26 (just consumed gas: 0.035) - [ 16 - 15 - 20 ] - - location: 27 (just consumed gas: 0.010) - [ 16 - 16 - 15 - 20 ] - - location: 28 (just consumed gas: 0.048) - [ 16 - 15 - 16 - 20 ] - - location: 30 (just consumed gas: 0.023) - [ 16 - 20 ] - - location: 33 (just consumed gas: 0.035) - [ 36 ] - - location: 30 (just consumed gas: 0.045) - [ 16 - 15 - 36 ] - - location: 20 (just consumed gas: 0.160) - [ { Elt "bar" 20 ; Elt "foo" 16 } - 15 - 36 ] - - location: 34 (just consumed gas: 0.010) - [ 15 - 36 ] - - location: 36 (just consumed gas: 0.010) - [ 36 ] - - location: 34 (just consumed gas: 0.035) - [ { Elt "bar" 20 ; Elt "foo" 16 } - 36 ] - - location: 37 (just consumed gas: 0.010) - [ (Pair { Elt "bar" 20 ; Elt "foo" 16 } 36) ] - - location: 38 (just consumed gas: 0.010) - [ {} - (Pair { Elt "bar" 20 ; Elt "foo" 16 } 36) ] - - location: 40 (just consumed gas: 0.010) - [ (Pair {} { Elt "bar" 20 ; Elt "foo" 16 } 36) ] - diff --git a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- pack_unpack.out b/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- pack_unpack.out deleted file mode 100644 index 89623efd66d4fe6e9e31714224bcf74866fd6a1e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_opcodes.ml/Parisb- test Michelson opcodes- pack_unpack.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/packunpack.tz on storage Unit and input '(Pair (Pair (Pair "toto" {3;7;9;1}) {1;2;3}) 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003)' --trace-stack -storage - Unit -emitted operations - -big_map diff - -trace - - location: 15 (just consumed gas: 19.185) - [ (Pair (Pair (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003) - Unit) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 17 (just consumed gas: 0.010) - [ 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 19 (just consumed gas: 0.010) - [ 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 17 (just consumed gas: 0.035) - [ (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 20 (just consumed gas: 2.807) - [ 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 23 (just consumed gas: 0.035) - [ 0 - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 24 (just consumed gas: 0.010) - [ True - 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 25 (just consumed gas: 0.010) - [ 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 25 (just consumed gas: 0.025) - [ 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 ] - - location: 31 (just consumed gas: 2.514) - [ (Some (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 })) ] - - location: 40 (just consumed gas: 0.010) - [ (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) ] - - location: 40 (just consumed gas: 0.025) - [ (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) ] - - location: 46 (just consumed gas: 0.010) - [ ] - - location: 47 (just consumed gas: 0.010) - [ Unit ] - - location: 48 (just consumed gas: 0.010) - [ {} - Unit ] - - location: 50 (just consumed gas: 0.010) - [ (Pair {} Unit) ] - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/packunpack.tz on storage Unit and input '(Pair (Pair (Pair "toto" {3;7;9;1}) {1;2;3}) 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004)' --trace-stack -Runtime error in contract KT1BEqzn5Wx8uJrZNvuS9DVHmLvG9td3fDLi: - 1: parameter (pair (pair (pair string (list int)) (set nat)) bytes) ; - 2: storage unit ; - 3: code { CAR ; UNPAIR ; DIP { DUP } ; - 4: PACK ; ASSERT_CMPEQ ; - 5: UNPACK (pair (pair string (list int)) (set nat)) ; ASSERT_SOME ; DROP ; - 6: UNIT ; NIL operation ; PAIR } - 7: -At line 4 characters 14 to 26, -script reached FAILWITH instruction -with Unit -trace - - location: 15 (just consumed gas: 19.185) - [ (Pair (Pair (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004) - Unit) ] - - location: 15 (just consumed gas: 0.010) - [ (Pair (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004) ] - - location: 16 (just consumed gas: 0.010) - [ (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 17 (just consumed gas: 0.010) - [ 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 19 (just consumed gas: 0.010) - [ 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 17 (just consumed gas: 0.035) - [ (Pair (Pair "toto" { 3 ; 7 ; 9 ; 1 }) { 1 ; 2 ; 3 }) - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 20 (just consumed gas: 2.807) - [ 0x05070707070100000004746f746f020000000800030007000900010200000006000100020003 - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 23 (just consumed gas: 0.035) - [ -1 - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 24 (just consumed gas: 0.010) - [ False - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 25 (just consumed gas: 0.010) - [ 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] - - location: 29 (just consumed gas: 0.010) - [ Unit - 0x05070707070100000004746f746f0200000008000300070009000102000000060001000200030004 ] -Fatal error: - error running script diff --git a/tezt/tests/expected/contract_typecheck_regression.ml/Parisb- Tc scripts.out b/tezt/tests/expected/contract_typecheck_regression.ml/Parisb- Tc scripts.out deleted file mode 100644 index 53f41207cbe988a811124b4236dd6e25d31508bd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/contract_typecheck_regression.ml/Parisb- Tc scripts.out +++ /dev/null @@ -1,50658 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings typecheck script michelson_test_scripts/attic/accounts.tz michelson_test_scripts/attic/add1.tz michelson_test_scripts/attic/add1_list.tz michelson_test_scripts/attic/after_strategy.tz michelson_test_scripts/attic/always.tz michelson_test_scripts/attic/append.tz michelson_test_scripts/attic/at_least.tz michelson_test_scripts/attic/auction.tz michelson_test_scripts/attic/bad_lockup.tz michelson_test_scripts/attic/big_map_union.tz michelson_test_scripts/attic/cadr_annotation.tz michelson_test_scripts/attic/concat.tz michelson_test_scripts/attic/conditionals.tz michelson_test_scripts/attic/cons_twice.tz michelson_test_scripts/attic/cps_fact.tz michelson_test_scripts/attic/create_add1_lists.tz michelson_test_scripts/attic/data_publisher.tz michelson_test_scripts/attic/dispatch.tz michelson_test_scripts/attic/empty.tz michelson_test_scripts/attic/fail_amount.tz michelson_test_scripts/attic/faucet.tz michelson_test_scripts/attic/forward.tz michelson_test_scripts/attic/id.tz michelson_test_scripts/attic/infinite_loop.tz michelson_test_scripts/attic/insertion_sort.tz michelson_test_scripts/attic/int_publisher.tz michelson_test_scripts/attic/king_of_tez.tz michelson_test_scripts/attic/list_of_transactions.tz michelson_test_scripts/attic/queue.tz michelson_test_scripts/attic/reduce_map.tz michelson_test_scripts/attic/reentrancy.tz michelson_test_scripts/attic/reservoir.tz michelson_test_scripts/attic/scrutable_reservoir.tz michelson_test_scripts/attic/spawn_identities.tz michelson_test_scripts/entrypoints/big_map_entrypoints.tz michelson_test_scripts/entrypoints/delegatable_target.tz michelson_test_scripts/entrypoints/manager.tz michelson_test_scripts/entrypoints/no_default_target.tz michelson_test_scripts/entrypoints/no_entrypoint_target.tz michelson_test_scripts/entrypoints/rooted_target.tz michelson_test_scripts/entrypoints/simple_entrypoints.tz michelson_test_scripts/macros/assert.tz michelson_test_scripts/macros/assert_cmpeq.tz michelson_test_scripts/macros/assert_cmpge.tz michelson_test_scripts/macros/assert_cmpgt.tz michelson_test_scripts/macros/assert_cmple.tz michelson_test_scripts/macros/assert_cmplt.tz michelson_test_scripts/macros/assert_cmpneq.tz michelson_test_scripts/macros/assert_eq.tz michelson_test_scripts/macros/assert_ge.tz michelson_test_scripts/macros/assert_gt.tz michelson_test_scripts/macros/assert_le.tz michelson_test_scripts/macros/assert_lt.tz michelson_test_scripts/macros/assert_neq.tz michelson_test_scripts/macros/big_map_get_add.tz michelson_test_scripts/macros/big_map_mem.tz michelson_test_scripts/macros/build_list.tz michelson_test_scripts/macros/carn_and_cdrn.tz michelson_test_scripts/macros/compare.tz michelson_test_scripts/macros/compare_bytes.tz michelson_test_scripts/macros/fail.tz michelson_test_scripts/macros/guestbook.tz michelson_test_scripts/macros/macro_annotations.tz michelson_test_scripts/macros/map_caddaadr.tz michelson_test_scripts/macros/max_in_list.tz michelson_test_scripts/macros/min.tz michelson_test_scripts/macros/pair_macro.tz michelson_test_scripts/macros/set_caddaadr.tz michelson_test_scripts/macros/take_my_money.tz michelson_test_scripts/macros/unpair_macro.tz michelson_test_scripts/mini_scenarios/999_constant.tz michelson_test_scripts/mini_scenarios/add_clear_tickets_015.tz michelson_test_scripts/mini_scenarios/always_fails.tz michelson_test_scripts/mini_scenarios/authentication.tz michelson_test_scripts/mini_scenarios/big_map_all.tz michelson_test_scripts/mini_scenarios/big_map_entrypoints.tz michelson_test_scripts/mini_scenarios/big_map_magic.tz michelson_test_scripts/mini_scenarios/big_map_read.tz michelson_test_scripts/mini_scenarios/big_map_store.tz michelson_test_scripts/mini_scenarios/big_map_write.tz michelson_test_scripts/mini_scenarios/cache_consistency.tz michelson_test_scripts/mini_scenarios/check_signature.tz michelson_test_scripts/mini_scenarios/constant_entrypoints.tz michelson_test_scripts/mini_scenarios/constant_unit.tz michelson_test_scripts/mini_scenarios/create_contract.tz michelson_test_scripts/mini_scenarios/create_contract_simple.tz michelson_test_scripts/mini_scenarios/default_account.tz michelson_test_scripts/mini_scenarios/emit_events.tz michelson_test_scripts/mini_scenarios/execution_order_appender.tz michelson_test_scripts/mini_scenarios/execution_order_caller.tz michelson_test_scripts/mini_scenarios/execution_order_storer.tz michelson_test_scripts/mini_scenarios/fa12_reference.tz michelson_test_scripts/mini_scenarios/fail_on_false.tz michelson_test_scripts/mini_scenarios/generic_multisig.tz michelson_test_scripts/mini_scenarios/groth16.tz michelson_test_scripts/mini_scenarios/hardlimit.tz michelson_test_scripts/mini_scenarios/large_error.tz michelson_test_scripts/mini_scenarios/large_flat_contract.tz michelson_test_scripts/mini_scenarios/large_str_id.tz michelson_test_scripts/mini_scenarios/legacy_multisig.tz michelson_test_scripts/mini_scenarios/lockup.tz michelson_test_scripts/mini_scenarios/loop.tz michelson_test_scripts/mini_scenarios/lqt_fa12.mligo.tz michelson_test_scripts/mini_scenarios/multiple_en2.tz michelson_test_scripts/mini_scenarios/multiple_entrypoints_counter.tz michelson_test_scripts/mini_scenarios/multisig_dest_entrypoint.tz michelson_test_scripts/mini_scenarios/multisig_dest_entrypoint_arg.tz michelson_test_scripts/mini_scenarios/nat_id.tz michelson_test_scripts/mini_scenarios/noop_bytes.tz michelson_test_scripts/mini_scenarios/originate_contract.tz michelson_test_scripts/mini_scenarios/parameterized_multisig.tz michelson_test_scripts/mini_scenarios/parsable_contract.tz michelson_test_scripts/mini_scenarios/receive_tickets_in_big_map.tz michelson_test_scripts/mini_scenarios/replay.tz michelson_test_scripts/mini_scenarios/reveal_signed_preimage.tz michelson_test_scripts/mini_scenarios/sc_rollup_forward.tz michelson_test_scripts/mini_scenarios/sc_rollup_mint_and_forward.tz michelson_test_scripts/mini_scenarios/self_address_receiver.tz michelson_test_scripts/mini_scenarios/self_address_sender.tz michelson_test_scripts/mini_scenarios/send_ticket_list_016.tz michelson_test_scripts/mini_scenarios/send_ticket_list_multiple_016.tz michelson_test_scripts/mini_scenarios/send_tickets_from_storage_016.tz michelson_test_scripts/mini_scenarios/send_tickets_in_big_map_015.tz michelson_test_scripts/mini_scenarios/smart_rollup_mint_and_deposit_ticket_016.tz michelson_test_scripts/mini_scenarios/smart_rollup_receive_tickets_016.tz michelson_test_scripts/mini_scenarios/str_id.tz michelson_test_scripts/mini_scenarios/ticket_builder_fungible.tz michelson_test_scripts/mini_scenarios/ticket_builder_non_fungible.tz michelson_test_scripts/mini_scenarios/ticket_wallet_fungible.tz michelson_test_scripts/mini_scenarios/ticket_wallet_non_fungible.tz michelson_test_scripts/mini_scenarios/tickets_015.tz michelson_test_scripts/mini_scenarios/tickets_bag_016.tz michelson_test_scripts/mini_scenarios/tickets_bag_implicit_016.tz michelson_test_scripts/mini_scenarios/tickets_blackhole_016.tz michelson_test_scripts/mini_scenarios/tickets_create_and_send_015.tz michelson_test_scripts/mini_scenarios/tickets_list_blackhole_016.tz michelson_test_scripts/mini_scenarios/tickets_mint_and_store_complex_param.tz michelson_test_scripts/mini_scenarios/tickets_receive_and_store.tz michelson_test_scripts/mini_scenarios/tickets_send_016.tz michelson_test_scripts/mini_scenarios/tickets_send_with_tez_016.tz michelson_test_scripts/mini_scenarios/tickets_store_fst_and_rely_snd.tz michelson_test_scripts/mini_scenarios/tzip4_view.tz michelson_test_scripts/mini_scenarios/very_small.tz michelson_test_scripts/mini_scenarios/view_check_caller.tz michelson_test_scripts/mini_scenarios/view_registers_callers.tz michelson_test_scripts/mini_scenarios/viewable.tz michelson_test_scripts/mini_scenarios/vote_for_delegate.tz michelson_test_scripts/mini_scenarios/weather_insurance.tz michelson_test_scripts/mini_scenarios/xcat.tz michelson_test_scripts/mini_scenarios/xcat_dapp.tz michelson_test_scripts/non_regression/262_bug.tz michelson_test_scripts/non_regression/843_bug.tz michelson_test_scripts/non_regression/bad_annot_contract.tz michelson_test_scripts/non_regression/pairk_annot.tz michelson_test_scripts/opcodes/abs.tz michelson_test_scripts/opcodes/add.tz michelson_test_scripts/opcodes/add_bls12_381_fr.tz michelson_test_scripts/opcodes/add_bls12_381_g1.tz michelson_test_scripts/opcodes/add_bls12_381_g2.tz michelson_test_scripts/opcodes/add_delta_timestamp.tz michelson_test_scripts/opcodes/add_timestamp_delta.tz michelson_test_scripts/opcodes/address.tz michelson_test_scripts/opcodes/amount_after_fib_view.tz michelson_test_scripts/opcodes/amount_after_nonexistent_view.tz michelson_test_scripts/opcodes/amount_after_view.tz michelson_test_scripts/opcodes/and.tz michelson_test_scripts/opcodes/and_binary.tz michelson_test_scripts/opcodes/and_bytes_016.tz michelson_test_scripts/opcodes/and_logical_1.tz michelson_test_scripts/opcodes/balance.tz michelson_test_scripts/opcodes/balance_after_fib_view.tz michelson_test_scripts/opcodes/balance_after_nonexistent_view.tz michelson_test_scripts/opcodes/balance_after_view.tz michelson_test_scripts/opcodes/big_map_mem_nat.tz michelson_test_scripts/opcodes/big_map_mem_string.tz michelson_test_scripts/opcodes/big_map_to_self.tz michelson_test_scripts/opcodes/bls12_381_fr_push_bytes_not_padded.tz michelson_test_scripts/opcodes/bls12_381_fr_push_nat.tz michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz michelson_test_scripts/opcodes/bls12_381_fr_to_mutez.tz michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz michelson_test_scripts/opcodes/bytes.tz michelson_test_scripts/opcodes/bytes_of_int_016.tz michelson_test_scripts/opcodes/bytes_of_nat_016.tz michelson_test_scripts/opcodes/car.tz michelson_test_scripts/opcodes/cdr.tz michelson_test_scripts/opcodes/chain_id.tz michelson_test_scripts/opcodes/chain_id_store.tz michelson_test_scripts/opcodes/check_signature.tz michelson_test_scripts/opcodes/comb.tz michelson_test_scripts/opcodes/comb-get.tz michelson_test_scripts/opcodes/comb-literals.tz michelson_test_scripts/opcodes/comb-set.tz michelson_test_scripts/opcodes/comb-set-2.tz michelson_test_scripts/opcodes/compare.tz michelson_test_scripts/opcodes/compare_big_type.tz michelson_test_scripts/opcodes/compare_big_type2.tz michelson_test_scripts/opcodes/comparisons.tz michelson_test_scripts/opcodes/concat_hello.tz michelson_test_scripts/opcodes/concat_hello_bytes.tz michelson_test_scripts/opcodes/concat_list.tz michelson_test_scripts/opcodes/cons.tz michelson_test_scripts/opcodes/contains_all.tz michelson_test_scripts/opcodes/contract.tz michelson_test_scripts/opcodes/create_contract.tz michelson_test_scripts/opcodes/create_contract_rootname.tz michelson_test_scripts/opcodes/create_contract_rootname_alt.tz michelson_test_scripts/opcodes/create_contract_with_view.tz michelson_test_scripts/opcodes/diff_timestamps.tz michelson_test_scripts/opcodes/dig_eq.tz michelson_test_scripts/opcodes/dign.tz michelson_test_scripts/opcodes/dip.tz michelson_test_scripts/opcodes/dipn.tz michelson_test_scripts/opcodes/dropn.tz michelson_test_scripts/opcodes/dugn.tz michelson_test_scripts/opcodes/dup-n.tz michelson_test_scripts/opcodes/ediv.tz michelson_test_scripts/opcodes/ediv_mutez.tz michelson_test_scripts/opcodes/emit.tz michelson_test_scripts/opcodes/empty_map.tz michelson_test_scripts/opcodes/exec_concat.tz michelson_test_scripts/opcodes/fact.tz michelson_test_scripts/opcodes/first.tz michelson_test_scripts/opcodes/get_and_update_big_map.tz michelson_test_scripts/opcodes/get_and_update_map.tz michelson_test_scripts/opcodes/get_big_map_value.tz michelson_test_scripts/opcodes/get_map_value.tz michelson_test_scripts/opcodes/hash_consistency_checker.tz michelson_test_scripts/opcodes/hash_key.tz michelson_test_scripts/opcodes/hash_string.tz michelson_test_scripts/opcodes/if.tz michelson_test_scripts/opcodes/if_some.tz michelson_test_scripts/opcodes/int.tz michelson_test_scripts/opcodes/iter_fail.tz michelson_test_scripts/opcodes/keccak.tz michelson_test_scripts/opcodes/left_right.tz michelson_test_scripts/opcodes/level.tz michelson_test_scripts/opcodes/list_concat.tz michelson_test_scripts/opcodes/list_concat_bytes.tz michelson_test_scripts/opcodes/list_id.tz michelson_test_scripts/opcodes/list_id_map.tz michelson_test_scripts/opcodes/list_iter.tz michelson_test_scripts/opcodes/list_map_block.tz michelson_test_scripts/opcodes/list_size.tz michelson_test_scripts/opcodes/loop_failwith.tz michelson_test_scripts/opcodes/loop_left.tz michelson_test_scripts/opcodes/loop_left_failwith.tz michelson_test_scripts/opcodes/lsl_bytes_016.tz michelson_test_scripts/opcodes/lsr_bytes_016.tz michelson_test_scripts/opcodes/map_car.tz michelson_test_scripts/opcodes/map_id.tz michelson_test_scripts/opcodes/map_iter.tz michelson_test_scripts/opcodes/map_map.tz michelson_test_scripts/opcodes/map_map_sideeffect.tz michelson_test_scripts/opcodes/map_mem_nat.tz michelson_test_scripts/opcodes/map_mem_string.tz michelson_test_scripts/opcodes/map_size.tz michelson_test_scripts/opcodes/merge_comparable_pairs.tz michelson_test_scripts/opcodes/mul.tz michelson_test_scripts/opcodes/mul_bls12_381_fr.tz michelson_test_scripts/opcodes/mul_bls12_381_g1.tz michelson_test_scripts/opcodes/mul_bls12_381_g2.tz michelson_test_scripts/opcodes/mul_overflow.tz michelson_test_scripts/opcodes/munch.tz michelson_test_scripts/opcodes/mutez_to_bls12_381_fr.tz michelson_test_scripts/opcodes/neg.tz michelson_test_scripts/opcodes/neg_bls12_381_fr.tz michelson_test_scripts/opcodes/neg_bls12_381_g1.tz michelson_test_scripts/opcodes/neg_bls12_381_g2.tz michelson_test_scripts/opcodes/none.tz michelson_test_scripts/opcodes/noop.tz michelson_test_scripts/opcodes/not.tz michelson_test_scripts/opcodes/not_binary.tz michelson_test_scripts/opcodes/not_bytes_016.tz michelson_test_scripts/opcodes/or.tz michelson_test_scripts/opcodes/or_binary.tz michelson_test_scripts/opcodes/or_bytes_016.tz michelson_test_scripts/opcodes/originate_big_map.tz michelson_test_scripts/opcodes/packunpack.tz michelson_test_scripts/opcodes/packunpack_rev.tz michelson_test_scripts/opcodes/packunpack_rev_cty.tz michelson_test_scripts/opcodes/pair_id.tz michelson_test_scripts/opcodes/pairing_check.tz michelson_test_scripts/opcodes/pexec.tz michelson_test_scripts/opcodes/pexec_2.tz michelson_test_scripts/opcodes/proxy.tz michelson_test_scripts/opcodes/ret_int.tz michelson_test_scripts/opcodes/reverse.tz michelson_test_scripts/opcodes/reverse_loop.tz michelson_test_scripts/opcodes/sapling_empty_state.tz michelson_test_scripts/opcodes/self.tz michelson_test_scripts/opcodes/self_address.tz michelson_test_scripts/opcodes/self_address_after_fib_view.tz michelson_test_scripts/opcodes/self_address_after_nonexistent_view.tz michelson_test_scripts/opcodes/self_address_after_view.tz michelson_test_scripts/opcodes/self_after_fib_view.tz michelson_test_scripts/opcodes/self_after_nonexistent_view.tz michelson_test_scripts/opcodes/self_after_view.tz michelson_test_scripts/opcodes/self_with_default_entrypoint.tz michelson_test_scripts/opcodes/self_with_entrypoint.tz michelson_test_scripts/opcodes/sender.tz michelson_test_scripts/opcodes/sender_after_fib_view.tz michelson_test_scripts/opcodes/sender_after_nonexistent_view.tz michelson_test_scripts/opcodes/sender_after_view.tz michelson_test_scripts/opcodes/set_car.tz michelson_test_scripts/opcodes/set_cdr.tz michelson_test_scripts/opcodes/set_delegate.tz michelson_test_scripts/opcodes/set_id.tz michelson_test_scripts/opcodes/set_iter.tz michelson_test_scripts/opcodes/set_member.tz michelson_test_scripts/opcodes/set_size.tz michelson_test_scripts/opcodes/sets.tz michelson_test_scripts/opcodes/sha3.tz michelson_test_scripts/opcodes/shifts.tz michelson_test_scripts/opcodes/slice.tz michelson_test_scripts/opcodes/slice_bytes.tz michelson_test_scripts/opcodes/slices.tz michelson_test_scripts/opcodes/source.tz michelson_test_scripts/opcodes/split_bytes.tz michelson_test_scripts/opcodes/split_string.tz michelson_test_scripts/opcodes/store_bls12_381_fr.tz michelson_test_scripts/opcodes/store_bls12_381_g1.tz michelson_test_scripts/opcodes/store_bls12_381_g2.tz michelson_test_scripts/opcodes/store_input.tz michelson_test_scripts/opcodes/store_now.tz michelson_test_scripts/opcodes/str_id.tz michelson_test_scripts/opcodes/sub_timestamp_delta.tz michelson_test_scripts/opcodes/subset.tz michelson_test_scripts/opcodes/tez_add_sub.tz michelson_test_scripts/opcodes/ticket_bad.tz michelson_test_scripts/opcodes/ticket_big_store.tz michelson_test_scripts/opcodes/ticket_join.tz michelson_test_scripts/opcodes/ticket_read.tz michelson_test_scripts/opcodes/ticket_split.tz michelson_test_scripts/opcodes/ticket_store.tz michelson_test_scripts/opcodes/ticket_store-2.tz michelson_test_scripts/opcodes/ticketer.tz michelson_test_scripts/opcodes/ticketer-2.tz michelson_test_scripts/opcodes/transfer_amount.tz michelson_test_scripts/opcodes/transfer_tokens.tz michelson_test_scripts/opcodes/uncomb.tz michelson_test_scripts/opcodes/unpair.tz michelson_test_scripts/opcodes/unpair_field_annotation_mismatch.tz michelson_test_scripts/opcodes/update_big_map.tz michelson_test_scripts/opcodes/utxo_read.tz michelson_test_scripts/opcodes/utxor.tz michelson_test_scripts/opcodes/view_fib.tz michelson_test_scripts/opcodes/view_mutual_recursion.tz michelson_test_scripts/opcodes/view_op_add.tz michelson_test_scripts/opcodes/view_op_constant.tz michelson_test_scripts/opcodes/view_op_id.tz michelson_test_scripts/opcodes/view_op_nonexistent_addr.tz michelson_test_scripts/opcodes/view_op_nonexistent_func.tz michelson_test_scripts/opcodes/view_op_test_step_contants.tz michelson_test_scripts/opcodes/view_op_toplevel_inconsistent_input_type.tz michelson_test_scripts/opcodes/view_op_toplevel_inconsistent_output_type.tz michelson_test_scripts/opcodes/view_rec.tz michelson_test_scripts/opcodes/view_toplevel_lib.tz michelson_test_scripts/opcodes/voting_power.tz michelson_test_scripts/opcodes/xor.tz michelson_test_scripts/opcodes/xor_bytes_016.tz --details --display-names -Well typed (Gas remaining: 1039933.430 units remaining) michelson_test_scripts/attic/accounts.tz -{ parameter - (or (key_hash %Initialize) - (pair %Withdraw (key %from) (pair (mutez %withdraw_amount) (signature %sig)))) ; - storage (map :stored_balance key_hash mutez) ; - code { DUP - /* [ pair (or key_hash (pair key mutez signature)) (map key_hash mutez) - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - CAR - /* [ or key_hash (pair key mutez signature) - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - IF_LEFT - { DUP - /* [ key_hash : key_hash - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - DIP 2 - { CDR %stored_balance - /* [ map key_hash mutez ] */ ; - DUP - /* [ map key_hash mutez : map key_hash mutez ] */ } - /* [ key_hash : key_hash : map key_hash mutez : map key_hash mutez ] */ ; - DIP { SWAP /* [ map key_hash mutez : key_hash : map key_hash mutez ] */ } - /* [ key_hash : map key_hash mutez : key_hash : map key_hash mutez ] */ ; - GET @opt_prev_balance - /* [ option mutez : key_hash : map key_hash mutez ] */ ; - IF_SOME - { RENAME @previous_balance - /* [ mutez : key_hash : map key_hash mutez ] */ ; - AMOUNT - /* [ mutez : mutez : key_hash : map key_hash mutez ] */ ; - ADD - /* [ mutez : key_hash : map key_hash mutez ] */ ; - SOME - /* [ option mutez : key_hash : map key_hash mutez ] */ ; - SWAP - /* [ key_hash : option mutez : map key_hash mutez ] */ ; - UPDATE - /* [ map key_hash mutez ] */ ; - NIL operation - /* [ list operation : map key_hash mutez ] */ ; - PAIR - /* [ pair (list operation) (map key_hash mutez) ] */ } - { DIP { AMOUNT - /* [ mutez : map key_hash mutez ] */ ; - SOME - /* [ option mutez : map key_hash mutez ] */ } - /* [ key_hash : option mutez : map key_hash mutez ] */ ; - UPDATE - /* [ map key_hash mutez ] */ ; - NIL operation - /* [ list operation : map key_hash mutez ] */ ; - PAIR - /* [ pair (list operation) (map key_hash mutez) ] */ } } - { DUP - /* [ pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - DUP - /* [ pair key mutez signature : pair key mutez signature - : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - DUP - /* [ pair key mutez signature : pair key mutez signature - : pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - DUP - /* [ pair key mutez signature : pair key mutez signature - : pair key mutez signature : pair key mutez signature - : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - CAR %from - /* [ key : pair key mutez signature : pair key mutez signature - : pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - DIP 2 - { CDAR %withdraw_amount ; - PACK - /* [ bytes : pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - BLAKE2B @signed_amount - /* [ bytes : pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ } - /* [ key : pair key mutez signature : bytes : pair key mutez signature - : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - DIP { CDDR %sig } - /* [ key : signature : bytes : pair key mutez signature - : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - CHECK_SIGNATURE - /* [ bool : pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - IF { /* [ pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ } - { PUSH string - "Bad signature" - /* [ string : pair key mutez signature : pair key mutez signature - : pair (or key_hash (pair key mutez signature)) (map key_hash mutez) ] */ ; - FAILWITH - /* [] */ } ; - DIP 2 - { CDR %stored_balance - /* [ map key_hash mutez ] */ ; - DUP - /* [ map key_hash mutez : map key_hash mutez ] */ } - /* [ pair key mutez signature : pair key mutez signature : map key_hash mutez - : map key_hash mutez ] */ ; - CAR %from - /* [ key : pair key mutez signature : map key_hash mutez : map key_hash mutez ] */ ; - HASH_KEY @from_hash - /* [ key_hash : pair key mutez signature : map key_hash mutez - : map key_hash mutez ] */ ; - DUP - /* [ key_hash : key_hash : pair key mutez signature : map key_hash mutez - : map key_hash mutez ] */ ; - DIP { DIP { SWAP - /* [ map key_hash mutez : pair key mutez signature : map key_hash mutez ] */ } - /* [ key_hash : map key_hash mutez : pair key mutez signature - : map key_hash mutez ] */ ; - SWAP - /* [ map key_hash mutez : key_hash : pair key mutez signature - : map key_hash mutez ] */ } - /* [ key_hash : map key_hash mutez : key_hash : pair key mutez signature - : map key_hash mutez ] */ ; - GET - /* [ option mutez : key_hash : pair key mutez signature : map key_hash mutez ] */ ; - IF_NONE - { PUSH string - "Account does not exist" - /* [ string : key_hash : pair key mutez signature : map key_hash mutez ] */ ; - PAIR - /* [ pair string key_hash : pair key mutez signature : map key_hash mutez ] */ ; - FAILWITH - /* [] */ } - { RENAME @previous_balance - /* [ mutez : key_hash : pair key mutez signature : map key_hash mutez ] */ ; - DIP { DROP /* [ pair key mutez signature : map key_hash mutez ] */ } - /* [ mutez : pair key mutez signature : map key_hash mutez ] */ ; - DUP - /* [ mutez : mutez : pair key mutez signature : map key_hash mutez ] */ ; - DIP 2 - { DUP - /* [ pair key mutez signature : pair key mutez signature : map key_hash mutez ] */ ; - CDAR %withdraw_amount ; - DUP - /* [ mutez : mutez : pair key mutez signature : map key_hash mutez ] */ } - /* [ mutez : mutez : mutez : mutez : pair key mutez signature - : map key_hash mutez ] */ ; - DIP { CMPLT @not_enough } - /* [ mutez : bool : mutez : pair key mutez signature : map key_hash mutez ] */ ; - SWAP - /* [ bool : mutez : mutez : pair key mutez signature : map key_hash mutez ] */ ; - IF { PUSH string - "Not enough funds" - /* [ string : mutez : mutez : pair key mutez signature : map key_hash mutez ] */ ; - FAILWITH - /* [] */ } - { SUB_MUTEZ @new_balance - /* [ option mutez : pair key mutez signature : map key_hash mutez ] */ ; - ASSERT_SOME ; - DIP { DUP - /* [ pair key mutez signature : pair key mutez signature : map key_hash mutez ] */ ; - DIP { SWAP /* [ map key_hash mutez : pair key mutez signature ] */ } - /* [ pair key mutez signature : map key_hash mutez : pair key mutez signature ] */ } - /* [ mutez : pair key mutez signature : map key_hash mutez - : pair key mutez signature ] */ ; - DUP - /* [ mutez : mutez : pair key mutez signature : map key_hash mutez - : pair key mutez signature ] */ ; - PUSH @zero - mutez - 0 - /* [ mutez : mutez : mutez : pair key mutez signature : map key_hash mutez - : pair key mutez signature ] */ ; - CMPEQ @null_balance ; - IF { DROP - /* [ pair key mutez signature : map key_hash mutez : pair key mutez signature ] */ ; - NONE @new_balance - mutez - /* [ option mutez : pair key mutez signature : map key_hash mutez - : pair key mutez signature ] */ } - { SOME @new_balance - /* [ option mutez : pair key mutez signature : map key_hash mutez - : pair key mutez signature ] */ } ; - SWAP - /* [ pair key mutez signature : option mutez : map key_hash mutez - : pair key mutez signature ] */ ; - CAR %from - /* [ key : option mutez : map key_hash mutez : pair key mutez signature ] */ ; - HASH_KEY @from_hash - /* [ key_hash : option mutez : map key_hash mutez : pair key mutez signature ] */ ; - UPDATE - /* [ map key_hash mutez : pair key mutez signature ] */ ; - SWAP - /* [ pair key mutez signature : map key_hash mutez ] */ ; - DUP - /* [ pair key mutez signature : pair key mutez signature : map key_hash mutez ] */ ; - CDAR %withdraw_amount ; - DIP { CAR %from - /* [ key : map key_hash mutez ] */ ; - HASH_KEY @from_hash - /* [ key_hash : map key_hash mutez ] */ ; - IMPLICIT_ACCOUNT @from_account - /* [ contract unit : map key_hash mutez ] */ } - /* [ mutez : contract unit : map key_hash mutez ] */ ; - UNIT - /* [ unit : mutez : contract unit : map key_hash mutez ] */ ; - TRANSFER_TOKENS @withdraw_transfer_op - /* [ operation : map key_hash mutez ] */ ; - NIL operation - /* [ list operation : operation : map key_hash mutez ] */ ; - SWAP - /* [ operation : list operation : map key_hash mutez ] */ ; - CONS - /* [ list operation : map key_hash mutez ] */ ; - PAIR - /* [ pair (list operation) (map key_hash mutez) ] */ } } } } } -Well typed (Gas remaining: 1039996.810 units remaining) michelson_test_scripts/attic/add1.tz -{ parameter int ; - storage int ; - code { CAR - /* [ int ] */ ; - PUSH int 1 - /* [ int : int ] */ ; - ADD - /* [ int ] */ ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039996.114 units remaining) michelson_test_scripts/attic/add1_list.tz -{ parameter (list int) ; - storage (list int) ; - code { CAR - /* [ list int ] */ ; - MAP { PUSH int 1 /* [ int : int ] */ ; ADD /* [ int ] */ } - /* [ list int ] */ ; - NIL operation - /* [ list operation : list int ] */ ; - PAIR - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039991.454 units remaining) michelson_test_scripts/attic/after_strategy.tz -{ parameter nat ; - storage (pair (pair nat bool) timestamp) ; - code { DUP - /* [ pair nat (pair nat bool) timestamp : pair nat (pair nat bool) timestamp ] */ ; - CAR - /* [ nat : pair nat (pair nat bool) timestamp ] */ ; - DIP { CDDR ; - DUP - /* [ timestamp : timestamp ] */ ; - NOW - /* [ timestamp : timestamp : timestamp ] */ ; - CMPGT } - /* [ nat : bool : timestamp ] */ ; - PAIR - /* [ pair nat bool : timestamp ] */ ; - PAIR - /* [ pair (pair nat bool) timestamp ] */ ; - NIL operation - /* [ list operation : pair (pair nat bool) timestamp ] */ ; - PAIR - /* [ pair (list operation) (pair nat bool) timestamp ] */ } } -Well typed (Gas remaining: 1039996.120 units remaining) michelson_test_scripts/attic/always.tz -{ parameter nat ; - storage (pair nat bool) ; - code { CAR - /* [ nat ] */ ; - PUSH bool True - /* [ bool : nat ] */ ; - SWAP - /* [ nat : bool ] */ ; - PAIR - /* [ pair nat bool ] */ ; - NIL operation - /* [ list operation : pair nat bool ] */ ; - PAIR - /* [ pair (list operation) nat bool ] */ } } -Well typed (Gas remaining: 1039993.723 units remaining) michelson_test_scripts/attic/append.tz -{ parameter (pair (list int) (list int)) ; - storage (list int) ; - code { CAR - /* [ pair (list int) (list int) ] */ ; - UNPAIR - /* [ list int : list int ] */ ; - NIL int - /* [ list int : list int : list int ] */ ; - SWAP - /* [ list int : list int : list int ] */ ; - ITER { CONS /* [ list int : list int ] */ } - /* [ list int : list int ] */ ; - ITER { CONS /* [ list int ] */ } - /* [ list int ] */ ; - NIL operation - /* [ list operation : list int ] */ ; - PAIR - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039993.973 units remaining) michelson_test_scripts/attic/at_least.tz -{ parameter unit ; - storage mutez ; - code { CDR - /* [ mutez ] */ ; - DUP - /* [ mutez : mutez ] */ ; - AMOUNT - /* [ mutez : mutez : mutez ] */ ; - CMPLT ; - IF { FAIL } - { NIL operation - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } } -Well typed (Gas remaining: 1039974.633 units remaining) michelson_test_scripts/attic/auction.tz -{ parameter key_hash ; - storage (pair timestamp (pair mutez key_hash)) ; - code { DUP - /* [ pair key_hash timestamp mutez key_hash - : pair key_hash timestamp mutez key_hash ] */ ; - CDAR ; - DUP - /* [ timestamp : timestamp : pair key_hash timestamp mutez key_hash ] */ ; - NOW - /* [ timestamp : timestamp : timestamp - : pair key_hash timestamp mutez key_hash ] */ ; - CMPGT ; - IF { FAIL } { /* [ timestamp : pair key_hash timestamp mutez key_hash ] */ } ; - SWAP - /* [ pair key_hash timestamp mutez key_hash : timestamp ] */ ; - DUP - /* [ pair key_hash timestamp mutez key_hash - : pair key_hash timestamp mutez key_hash : timestamp ] */ ; - CAR - /* [ key_hash : pair key_hash timestamp mutez key_hash : timestamp ] */ ; - DIP { CDDR } - /* [ key_hash : pair mutez key_hash : timestamp ] */ ; - AMOUNT - /* [ mutez : key_hash : pair mutez key_hash : timestamp ] */ ; - PAIR - /* [ pair mutez key_hash : pair mutez key_hash : timestamp ] */ ; - SWAP - /* [ pair mutez key_hash : pair mutez key_hash : timestamp ] */ ; - DIP { SWAP - /* [ timestamp : pair mutez key_hash ] */ ; - PAIR - /* [ pair timestamp mutez key_hash ] */ } - /* [ pair mutez key_hash : pair timestamp mutez key_hash ] */ ; - DUP - /* [ pair mutez key_hash : pair mutez key_hash : pair timestamp mutez key_hash ] */ ; - CAR - /* [ mutez : pair mutez key_hash : pair timestamp mutez key_hash ] */ ; - AMOUNT - /* [ mutez : mutez : pair mutez key_hash : pair timestamp mutez key_hash ] */ ; - CMPLE ; - IF { FAIL } { /* [ pair mutez key_hash : pair timestamp mutez key_hash ] */ } ; - DUP - /* [ pair mutez key_hash : pair mutez key_hash : pair timestamp mutez key_hash ] */ ; - CAR - /* [ mutez : pair mutez key_hash : pair timestamp mutez key_hash ] */ ; - DIP { CDR - /* [ key_hash : pair timestamp mutez key_hash ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : pair timestamp mutez key_hash ] */ } - /* [ mutez : contract unit : pair timestamp mutez key_hash ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair timestamp mutez key_hash ] */ ; - TRANSFER_TOKENS - /* [ operation : pair timestamp mutez key_hash ] */ ; - NIL operation - /* [ list operation : operation : pair timestamp mutez key_hash ] */ ; - SWAP - /* [ operation : list operation : pair timestamp mutez key_hash ] */ ; - CONS - /* [ list operation : pair timestamp mutez key_hash ] */ ; - PAIR - /* [ pair (list operation) timestamp mutez key_hash ] */ } } -Well typed (Gas remaining: 1039975.206 units remaining) michelson_test_scripts/attic/bad_lockup.tz -{ parameter unit ; - storage (pair timestamp (pair address address)) ; - code { CDR - /* [ pair timestamp address address ] */ ; - DUP - /* [ pair timestamp address address : pair timestamp address address ] */ ; - CAR - /* [ timestamp : pair timestamp address address ] */ ; - NOW - /* [ timestamp : timestamp : pair timestamp address address ] */ ; - CMPLT ; - IF { FAIL } { /* [ pair timestamp address address ] */ } ; - DUP - /* [ pair timestamp address address : pair timestamp address address ] */ ; - CDAR ; - CONTRACT unit - /* [ option (contract unit) : pair timestamp address address ] */ ; - ASSERT_SOME ; - PUSH mutez 100000000 - /* [ mutez : contract unit : pair timestamp address address ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair timestamp address address ] */ ; - TRANSFER_TOKENS - /* [ operation : pair timestamp address address ] */ ; - SWAP - /* [ pair timestamp address address : operation ] */ ; - DUP - /* [ pair timestamp address address : pair timestamp address address - : operation ] */ ; - CDDR ; - CONTRACT - unit - /* [ option (contract unit) : pair timestamp address address : operation ] */ ; - ASSERT_SOME ; - PUSH mutez - 100000000 - /* [ mutez : contract unit : pair timestamp address address : operation ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair timestamp address address : operation ] */ ; - TRANSFER_TOKENS - /* [ operation : pair timestamp address address : operation ] */ ; - DIP { SWAP /* [ operation : pair timestamp address address ] */ } - /* [ operation : operation : pair timestamp address address ] */ ; - NIL operation - /* [ list operation : operation : operation : pair timestamp address address ] */ ; - SWAP - /* [ operation : list operation : operation : pair timestamp address address ] */ ; - CONS - /* [ list operation : operation : pair timestamp address address ] */ ; - SWAP - /* [ operation : list operation : pair timestamp address address ] */ ; - CONS - /* [ list operation : pair timestamp address address ] */ ; - PAIR - /* [ pair (list operation) timestamp address address ] */ } } -Well typed (Gas remaining: 1039987.872 units remaining) michelson_test_scripts/attic/big_map_union.tz -{ parameter (list (pair string int)) ; - storage (pair (big_map string int) unit) ; - code { UNPAPAIR ; - ITER { UNPAIR - /* [ string : int : big_map string int : unit ] */ ; - DUP 3 - /* [ big_map string int : string : int : big_map string int : unit ] */ ; - DUP 2 - /* [ string : big_map string int : string : int : big_map string int : unit ] */ ; - GET - /* [ option int : string : int : big_map string int : unit ] */ ; - IF_NONE - { PUSH int 0 /* [ int : string : int : big_map string int : unit ] */ } - { /* [ int : string : int : big_map string int : unit ] */ } ; - SWAP - /* [ string : int : int : big_map string int : unit ] */ ; - DIP { ADD - /* [ int : big_map string int : unit ] */ ; - SOME - /* [ option int : big_map string int : unit ] */ } - /* [ string : option int : big_map string int : unit ] */ ; - UPDATE - /* [ big_map string int : unit ] */ } - /* [ big_map string int : unit ] */ ; - PAIR - /* [ pair (big_map string int) unit ] */ ; - NIL operation - /* [ list operation : pair (big_map string int) unit ] */ ; - PAIR - /* [ pair (list operation) (big_map string int) unit ] */ } } -Well typed (Gas remaining: 1039995.487 units remaining) michelson_test_scripts/attic/cadr_annotation.tz -{ parameter (pair (pair %p1 unit (string %no_name)) bool) ; - storage unit ; - code { CAR @param - /* [ pair (pair unit string) bool ] */ ; - CADR @name %no_name ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.685 units remaining) michelson_test_scripts/attic/concat.tz -{ parameter string ; - storage string ; - code { DUP - /* [ pair string string : pair string string ] */ ; - DIP { CDR - /* [ string ] */ ; - NIL string - /* [ list string : string ] */ ; - SWAP - /* [ string : list string ] */ ; - CONS - /* [ list string ] */ } - /* [ pair string string : list string ] */ ; - CAR - /* [ string : list string ] */ ; - CONS - /* [ list string ] */ ; - CONCAT - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039990.665 units remaining) michelson_test_scripts/attic/conditionals.tz -{ parameter (or string (option int)) ; - storage string ; - code { CAR - /* [ or string (option int) ] */ ; - IF_LEFT - { /* [ string ] */ } - { IF_NONE - { FAIL } - { PUSH int 0 - /* [ int : int ] */ ; - CMPGT ; - IF { FAIL } { PUSH string "" /* [ string ] */ } } } ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039993.903 units remaining) michelson_test_scripts/attic/cons_twice.tz -{ parameter nat ; - storage (list nat) ; - code { DUP - /* [ pair nat (list nat) : pair nat (list nat) ] */ ; - CAR - /* [ nat : pair nat (list nat) ] */ ; - DIP { CDR /* [ list nat ] */ } - /* [ nat : list nat ] */ ; - DUP - /* [ nat : nat : list nat ] */ ; - DIP { CONS /* [ list nat ] */ } - /* [ nat : list nat ] */ ; - CONS - /* [ list nat ] */ ; - NIL operation - /* [ list operation : list nat ] */ ; - PAIR - /* [ pair (list operation) (list nat) ] */ } } -Well typed (Gas remaining: 1039976.402 units remaining) michelson_test_scripts/attic/cps_fact.tz -{ storage nat ; - parameter nat ; - code { UNPAIR - /* [ nat : nat ] */ ; - DIP { SELF - /* [ contract nat : nat ] */ ; - ADDRESS - /* [ address : nat ] */ ; - SENDER - /* [ address : address : nat ] */ ; - IFCMPEQ { /* [ nat ] */ } { DROP /* [] */ ; PUSH @storage nat 1 /* [ nat ] */ } } - /* [ nat : nat ] */ ; - DUP - /* [ nat : nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat : nat ] */ ; - IFCMPGE - { DROP - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } - { PUSH nat 1 - /* [ nat : nat : nat ] */ ; - SWAP - /* [ nat : nat : nat ] */ ; - SUB @parameter - /* [ int : nat ] */ ; - ISNAT - /* [ option nat : nat ] */ ; - IF_NONE - { NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } - { DUP - /* [ nat : nat : nat ] */ ; - DIP { PUSH nat 1 - /* [ nat : nat : nat ] */ ; - ADD - /* [ nat : nat ] */ ; - MUL @storage - /* [ nat ] */ } - /* [ nat : nat ] */ ; - SWAP - /* [ nat : nat ] */ ; - DIP { DIP { SELF /* [ contract nat ] */ ; PUSH mutez 0 /* [ mutez : contract nat ] */ } - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ } - /* [ nat : list operation ] */ ; - SWAP - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } } } -Well typed (Gas remaining: 1039990.583 units remaining) michelson_test_scripts/attic/create_add1_lists.tz -{ parameter unit ; - storage address ; - code { DROP - /* [] */ ; - NIL int /* [ list int ] */ - /* [ list int ] */ ; - AMOUNT - /* [ list int ] */ ; - NONE key_hash /* [ int : int ] */ - /* [ option key_hash : mutez : list int ] */ ; - CREATE_CONTRACT - { parameter (list int /* [ list operation : list int ] */) - /* [ int ] */ ; - storage (list int) - /* [ pair (list operation) (list int) ] */ ; - code { CAR ; MAP { PUSH int 1 ; ADD } ; NIL operation ; PAIR } } - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039976.005 units remaining) michelson_test_scripts/attic/data_publisher.tz -{ parameter (pair signature (pair string nat)) ; - storage (pair (pair key nat) string) ; - code { DUP - /* [ pair (pair signature string nat) (pair key nat) string - : pair (pair signature string nat) (pair key nat) string ] */ ; - CAR - /* [ pair signature string nat - : pair (pair signature string nat) (pair key nat) string ] */ ; - DIP { CDR - /* [ pair (pair key nat) string ] */ ; - DUP - /* [ pair (pair key nat) string : pair (pair key nat) string ] */ } - /* [ pair signature string nat : pair (pair key nat) string - : pair (pair key nat) string ] */ ; - SWAP - /* [ pair (pair key nat) string : pair signature string nat - : pair (pair key nat) string ] */ ; - DIP { DUP - /* [ pair signature string nat : pair signature string nat - : pair (pair key nat) string ] */ } - /* [ pair (pair key nat) string : pair signature string nat - : pair signature string nat : pair (pair key nat) string ] */ ; - CAAR ; - DIP { DUP - /* [ pair signature string nat : pair signature string nat - : pair signature string nat : pair (pair key nat) string ] */ ; - CAR - /* [ signature : pair signature string nat : pair signature string nat - : pair (pair key nat) string ] */ ; - DIP { CDR - /* [ pair string nat : pair signature string nat : pair (pair key nat) string ] */ ; - PACK - /* [ bytes : pair signature string nat : pair (pair key nat) string ] */ ; - BLAKE2B - /* [ bytes : pair signature string nat : pair (pair key nat) string ] */ } - /* [ signature : bytes : pair signature string nat - : pair (pair key nat) string ] */ } - /* [ key : signature : bytes : pair signature string nat - : pair (pair key nat) string ] */ ; - CHECK_SIGNATURE - /* [ bool : pair signature string nat : pair (pair key nat) string ] */ ; - IF { CDR - /* [ pair string nat : pair (pair key nat) string ] */ ; - DUP - /* [ pair string nat : pair string nat : pair (pair key nat) string ] */ ; - DIP { CAR - /* [ string : pair (pair key nat) string ] */ ; - DIP { CAAR } - /* [ string : key ] */ } - /* [ pair string nat : string : key ] */ ; - CDR - /* [ nat : string : key ] */ ; - PUSH nat 1 - /* [ nat : nat : string : key ] */ ; - ADD - /* [ nat : string : key ] */ ; - DIP { SWAP /* [ key : string ] */ } - /* [ nat : key : string ] */ ; - SWAP - /* [ key : nat : string ] */ ; - PAIR - /* [ pair key nat : string ] */ ; - PAIR - /* [ pair (pair key nat) string ] */ ; - NIL operation - /* [ list operation : pair (pair key nat) string ] */ ; - PAIR - /* [ pair (list operation) (pair key nat) string ] */ } - { FAIL } } } -Well typed (Gas remaining: 1039983.548 units remaining) michelson_test_scripts/attic/dispatch.tz -{ parameter (or string (pair string (lambda unit string))) ; - storage (pair string (map string (lambda unit string))) ; - code { DUP - /* [ pair (or string (pair string (lambda unit string))) - string - (map string (lambda unit string)) - : pair (or string (pair string (lambda unit string))) - string - (map string (lambda unit string)) ] */ ; - DIP { CDDR } - /* [ pair (or string (pair string (lambda unit string))) - string - (map string (lambda unit string)) : map string (lambda unit string) ] */ ; - CAR - /* [ or string (pair string (lambda unit string)) - : map string (lambda unit string) ] */ ; - IF_LEFT - { DIP { DUP - /* [ map string (lambda unit string) : map string (lambda unit string) ] */ } - /* [ string : map string (lambda unit string) - : map string (lambda unit string) ] */ ; - GET - /* [ option (lambda unit string) : map string (lambda unit string) ] */ ; - IF_NONE - { FAIL } - { /* [ lambda unit string : map string (lambda unit string) ] */ } ; - UNIT - /* [ unit : lambda unit string : map string (lambda unit string) ] */ ; - EXEC - /* [ string : map string (lambda unit string) ] */ } - { DUP - /* [ pair string (lambda unit string) : pair string (lambda unit string) - : map string (lambda unit string) ] */ ; - CAR - /* [ string : pair string (lambda unit string) - : map string (lambda unit string) ] */ ; - DIP { CDR - /* [ lambda unit string : map string (lambda unit string) ] */ ; - SOME - /* [ option (lambda unit string) : map string (lambda unit string) ] */ } - /* [ string : option (lambda unit string) : map string (lambda unit string) ] */ ; - UPDATE - /* [ map string (lambda unit string) ] */ ; - PUSH string "" - /* [ string : map string (lambda unit string) ] */ } ; - PAIR - /* [ pair string (map string (lambda unit string)) ] */ ; - NIL operation - /* [ list operation : pair string (map string (lambda unit string)) ] */ ; - PAIR - /* [ pair (list operation) string (map string (lambda unit string)) ] */ } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/attic/empty.tz -{ parameter unit ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.168 units remaining) michelson_test_scripts/attic/fail_amount.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - AMOUNT - /* [ mutez ] */ ; - PUSH mutez 10000000 - /* [ mutez : mutez ] */ ; - CMPGT ; - IF { FAIL } { /* [] */ } ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039988.163 units remaining) michelson_test_scripts/attic/faucet.tz -{ parameter key_hash ; - storage timestamp ; - code { UNPAIR - /* [ key_hash : timestamp ] */ ; - SWAP - /* [ timestamp : key_hash ] */ ; - PUSH int 300 - /* [ int : timestamp : key_hash ] */ ; - ADD @FIVE_MINUTES_LATER - /* [ timestamp : key_hash ] */ ; - NOW - /* [ timestamp : timestamp : key_hash ] */ ; - ASSERT_CMPGE ; - IMPLICIT_ACCOUNT - /* [ contract unit ] */ ; - PUSH mutez 1000000 - /* [ mutez : contract unit ] */ ; - UNIT - /* [ unit : mutez : contract unit ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - DIP { NOW /* [ timestamp ] */ } - /* [ list operation : timestamp ] */ ; - PAIR - /* [ pair (list operation) timestamp ] */ } } -Well typed (Gas remaining: 1039676.449 units remaining) michelson_test_scripts/attic/forward.tz -{ parameter (or string nat) ; - storage - (pair (pair nat (pair mutez mutez)) - (pair (pair nat (pair timestamp timestamp)) - (pair (pair mutez mutez) (pair (pair address address) address)))) ; - code { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDADDR ; - PUSH int - 86400 - /* [ int : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ timestamp : int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NOW - /* [ timestamp : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - LT - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CAR - /* [ or string nat - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF_LEFT - { DUP - /* [ string : string - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH string - "buyer" - /* [ string : string : string - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int : string - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - EQ - /* [ bool : string - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { DROP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADAR ; - DIP { AMOUNT - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADDR } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH nat - 0 - /* [ nat : pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair nat mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CDDR } - /* [ pair nat mutez mutez - : pair (pair nat timestamp timestamp) (pair mutez mutez) (pair address address) address ] */ ; - PAIR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { PUSH string - "seller" - /* [ string : string - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - EQ - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADDR ; - DIP { AMOUNT - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADAR } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH nat - 0 - /* [ nat : pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair nat mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CDDR } - /* [ pair nat mutez mutez - : pair (pair nat timestamp timestamp) (pair mutez mutez) (pair address address) address ] */ ; - PAIR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { FAIL } } } - { FAIL } } - { BALANCE - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH mutez - 0 - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IFCMPEQ - { FAIL } - { /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } ; - DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDAAR ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDADR } - /* [ nat : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - MUL - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH nat - 2 - /* [ nat : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - MUL - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - BALANCE - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - LT - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { CDR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CADAR ; - DIP { DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDAAR } - /* [ mutez : address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation : operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ operation : list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CONS - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - CADDR ; - DIP { DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - CDDDADR } - /* [ mutez : address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - SWAP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - CADAR ; - DIP { DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - CADDR } - /* [ mutez : mutez - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - ADD - /* [ mutez - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - BALANCE - /* [ mutez : mutez - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - SUB_MUTEZ - /* [ option mutez - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - ASSERT_SOME ; - DIP { DUP - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - CDDDDR } - /* [ mutez : address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address : list operation ] */ ; - DIP { SWAP - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ operation : list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CONS - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDADAR ; - NOW - /* [ timestamp : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - LT - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { FAIL } - { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDADAR ; - PUSH int - 86400 - /* [ int : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NOW - /* [ timestamp : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - LT - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CAR - /* [ or string nat - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF_LEFT - { PUSH string - "buyer" - /* [ string : string - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - EQ - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADAR ; - DIP { AMOUNT - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DUP - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP 2 - { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDAAR ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDAAR } - /* [ nat : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - MUL - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - GT - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { FAIL } - { /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } } - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADDR } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH nat - 0 - /* [ nat : pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair nat mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CDDR } - /* [ pair nat mutez mutez - : pair (pair nat timestamp timestamp) (pair mutez mutez) (pair address address) address ] */ ; - PAIR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { FAIL } } - { FAIL } } - { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDAAR ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDAAR } - /* [ nat : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - MUL - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADAR } - /* [ mutez : mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NEQ - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { BALANCE - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDDADR } - /* [ mutez : address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP 2 - { CDR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation : operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ operation : list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CONS - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDADAR ; - PUSH int - 86400 - /* [ int : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PUSH int - 86400 - /* [ int : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NOW - /* [ timestamp : timestamp - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - LT - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDDDR ; - SENDER - /* [ address : address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NEQ - /* [ bool - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { FAIL } - { /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } ; - DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CAR - /* [ or string nat - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF_LEFT - { FAIL } - { DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDAAR } - /* [ nat : nat - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ADD - /* [ nat - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDADR } - /* [ nat : pair mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair nat mutez mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CDDR } - /* [ pair nat mutez mutez - : pair (pair nat timestamp timestamp) (pair mutez mutez) (pair address address) address ] */ ; - PAIR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - UNIT - /* [ unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DUP - /* [ pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDAAR ; - DIP { DUP - /* [ pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDAAR } - /* [ nat : nat - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - COMPARE - /* [ int - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - LT - /* [ bool - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - IF { CDR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { BALANCE - /* [ mutez - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDDADR } - /* [ mutez : address - : pair unit - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP 2 - { CDR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation : operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ operation : list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CONS - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } } ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - { BALANCE - /* [ mutez - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { DUP - /* [ pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CDDDDAAR } - /* [ mutez : address - : pair (or string nat) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP 2 - { CDR - /* [ pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } - /* [ mutez : address - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - NIL operation - /* [ list operation : operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - SWAP - /* [ operation : list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - CONS - /* [ list operation - : pair (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ ; - PAIR - /* [ pair (list operation) - (pair nat mutez mutez) - (pair nat timestamp timestamp) - (pair mutez mutez) - (pair address address) - address ] */ } } } } } } } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/attic/id.tz -{ parameter string ; - storage string ; - code { CAR - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039995.570 units remaining) michelson_test_scripts/attic/infinite_loop.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH bool True - /* [ bool ] */ ; - LOOP { PUSH bool True /* [ bool ] */ } - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039977.186 units remaining) michelson_test_scripts/attic/insertion_sort.tz -{ parameter (list int) ; - storage (list int) ; - code { CAR - /* [ list int ] */ ; - NIL int - /* [ list int : list int ] */ ; - SWAP - /* [ list int : list int ] */ ; - ITER { SWAP - /* [ list int : int ] */ ; - DIP 2 { NIL int /* [ list int ] */ } - /* [ list int : int : list int ] */ ; - PUSH bool True - /* [ bool : list int : int : list int ] */ ; - LOOP { IF_CONS - { SWAP - /* [ list int : int : int : list int ] */ ; - DIP { DUP - /* [ int : int : int : list int ] */ ; - DIP 2 { DUP /* [ int : int : list int ] */ } - /* [ int : int : int : int : list int ] */ ; - DIP { CMPLT } - /* [ int : bool : int : list int ] */ ; - SWAP - /* [ bool : int : int : list int ] */ } - /* [ list int : bool : int : int : list int ] */ ; - SWAP - /* [ bool : list int : int : int : list int ] */ ; - IF { DIP { SWAP - /* [ int : int : list int ] */ ; - DIP { CONS /* [ list int ] */ } - /* [ int : list int ] */ } - /* [ list int : int : list int ] */ ; - PUSH bool True - /* [ bool : list int : int : list int ] */ } - { SWAP - /* [ int : list int : int : list int ] */ ; - CONS - /* [ list int : int : list int ] */ ; - PUSH bool False - /* [ bool : list int : int : list int ] */ } } - { NIL int - /* [ list int : int : list int ] */ ; - PUSH bool False - /* [ bool : list int : int : list int ] */ } } - /* [ list int : int : list int ] */ ; - SWAP - /* [ int : list int : list int ] */ ; - CONS - /* [ list int : list int ] */ ; - SWAP - /* [ list int : list int ] */ ; - ITER { CONS /* [ list int ] */ } - /* [ list int ] */ } - /* [ list int ] */ ; - NIL operation - /* [ list operation : list int ] */ ; - PAIR - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039970.322 units remaining) michelson_test_scripts/attic/int_publisher.tz -{ parameter (option (pair signature int)) ; - storage (pair key int) ; - code { DUP - /* [ pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - DUP - /* [ pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - CAR - /* [ option (pair signature int) : pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - IF_NONE - { PUSH mutez - 1000000 - /* [ mutez : pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - AMOUNT - /* [ mutez : mutez : pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - CMPLE ; - IF { FAIL } - { /* [ pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ } ; - CDR - /* [ pair key int : pair (option (pair signature int)) key int ] */ ; - DIP { CDDR } - /* [ pair key int : int ] */ } - { DUP - /* [ pair signature int : pair signature int - : pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - DIP { SWAP - /* [ pair (option (pair signature int)) key int : pair signature int - : pair (option (pair signature int)) key int ] */ } - /* [ pair signature int : pair (option (pair signature int)) key int - : pair signature int : pair (option (pair signature int)) key int ] */ ; - SWAP - /* [ pair (option (pair signature int)) key int : pair signature int - : pair signature int : pair (option (pair signature int)) key int ] */ ; - CDAR ; - DIP { DUP - /* [ pair signature int : pair signature int : pair signature int - : pair (option (pair signature int)) key int ] */ ; - CAR - /* [ signature : pair signature int : pair signature int - : pair (option (pair signature int)) key int ] */ ; - DIP { CDR - /* [ int : pair signature int : pair (option (pair signature int)) key int ] */ ; - PACK - /* [ bytes : pair signature int : pair (option (pair signature int)) key int ] */ ; - BLAKE2B - /* [ bytes : pair signature int : pair (option (pair signature int)) key int ] */ } - /* [ signature : bytes : pair signature int - : pair (option (pair signature int)) key int ] */ } - /* [ key : signature : bytes : pair signature int - : pair (option (pair signature int)) key int ] */ ; - CHECK_SIGNATURE - /* [ bool : pair signature int : pair (option (pair signature int)) key int ] */ ; - IF { CDR - /* [ int : pair (option (pair signature int)) key int ] */ ; - SWAP - /* [ pair (option (pair signature int)) key int : int ] */ ; - DIP { DUP /* [ int : int ] */ } - /* [ pair (option (pair signature int)) key int : int : int ] */ ; - CDAR ; - PAIR - /* [ pair key int : int ] */ } - { DROP - /* [ pair (option (pair signature int)) key int ] */ ; - DUP - /* [ pair (option (pair signature int)) key int - : pair (option (pair signature int)) key int ] */ ; - CDR - /* [ pair key int : pair (option (pair signature int)) key int ] */ ; - DIP { CDDR } - /* [ pair key int : int ] */ } } ; - DIP { DROP /* [] */ } - /* [ pair key int ] */ ; - NIL operation - /* [ list operation : pair key int ] */ ; - PAIR - /* [ pair (list operation) key int ] */ } } -Well typed (Gas remaining: 1039974.735 units remaining) michelson_test_scripts/attic/king_of_tez.tz -{ parameter key_hash ; - storage (pair timestamp (pair mutez key_hash)) ; - code { DUP - /* [ pair key_hash timestamp mutez key_hash - : pair key_hash timestamp mutez key_hash ] */ ; - CDAR ; - NOW - /* [ timestamp : timestamp : pair key_hash timestamp mutez key_hash ] */ ; - CMPGT ; - IF { CAR - /* [ key_hash ] */ ; - AMOUNT - /* [ mutez : key_hash ] */ ; - PAIR - /* [ pair mutez key_hash ] */ ; - NOW - /* [ timestamp : pair mutez key_hash ] */ ; - PUSH int 604800 - /* [ int : timestamp : pair mutez key_hash ] */ ; - ADD - /* [ timestamp : pair mutez key_hash ] */ ; - PAIR - /* [ pair timestamp mutez key_hash ] */ ; - NIL operation - /* [ list operation : pair timestamp mutez key_hash ] */ } - { DUP - /* [ pair key_hash timestamp mutez key_hash - : pair key_hash timestamp mutez key_hash ] */ ; - CDDAR ; - AMOUNT - /* [ mutez : mutez : pair key_hash timestamp mutez key_hash ] */ ; - CMPLT ; - IF { FAIL } - { CAR - /* [ key_hash ] */ ; - DUP - /* [ key_hash : key_hash ] */ ; - DIP { AMOUNT - /* [ mutez : key_hash ] */ ; - PAIR - /* [ pair mutez key_hash ] */ ; - NOW - /* [ timestamp : pair mutez key_hash ] */ ; - PUSH int 604800 - /* [ int : timestamp : pair mutez key_hash ] */ ; - ADD - /* [ timestamp : pair mutez key_hash ] */ ; - PAIR - /* [ pair timestamp mutez key_hash ] */ } - /* [ key_hash : pair timestamp mutez key_hash ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : pair timestamp mutez key_hash ] */ ; - AMOUNT - /* [ mutez : contract unit : pair timestamp mutez key_hash ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair timestamp mutez key_hash ] */ ; - TRANSFER_TOKENS - /* [ operation : pair timestamp mutez key_hash ] */ ; - NIL operation - /* [ list operation : operation : pair timestamp mutez key_hash ] */ ; - SWAP - /* [ operation : list operation : pair timestamp mutez key_hash ] */ ; - CONS - /* [ list operation : pair timestamp mutez key_hash ] */ } } ; - PAIR - /* [ pair (list operation) timestamp mutez key_hash ] */ } } -Well typed (Gas remaining: 1039985.851 units remaining) michelson_test_scripts/attic/list_of_transactions.tz -{ parameter unit ; - storage (list address) ; - code { CDR - /* [ list address ] */ ; - DUP - /* [ list address : list address ] */ ; - DIP { NIL operation /* [ list operation : list address ] */ } - /* [ list address : list operation : list address ] */ ; - PUSH bool True - /* [ bool : list address : list operation : list address ] */ ; - LOOP { IF_CONS - { CONTRACT - unit - /* [ option (contract unit) : list address : list operation : list address ] */ ; - ASSERT_SOME ; - PUSH mutez - 1000000 - /* [ mutez : contract unit : list address : list operation : list address ] */ ; - UNIT - /* [ unit : mutez : contract unit : list address : list operation - : list address ] */ ; - TRANSFER_TOKENS - /* [ operation : list address : list operation : list address ] */ ; - SWAP - /* [ list address : operation : list operation : list address ] */ ; - DIP { CONS /* [ list operation : list address ] */ } - /* [ list address : list operation : list address ] */ ; - PUSH bool True - /* [ bool : list address : list operation : list address ] */ } - { NIL address - /* [ list address : list operation : list address ] */ ; - PUSH bool False - /* [ bool : list address : list operation : list address ] */ } } - /* [ list address : list operation : list address ] */ ; - DROP - /* [ list operation : list address ] */ ; - PAIR - /* [ pair (list operation) (list address) ] */ } } -Well typed (Gas remaining: 1039959.640 units remaining) michelson_test_scripts/attic/queue.tz -{ parameter (option string) ; - storage (pair (option string) (pair (pair nat nat) (map nat string))) ; - code { DUP - /* [ pair (option string) (option string) (pair nat nat) (map nat string) - : pair (option string) (option string) (pair nat nat) (map nat string) ] */ ; - CAR - /* [ option string - : pair (option string) (option string) (pair nat nat) (map nat string) ] */ ; - IF_NONE - { CDDR ; - DUP - /* [ pair (pair nat nat) (map nat string) - : pair (pair nat nat) (map nat string) ] */ ; - CAR - /* [ pair nat nat : pair (pair nat nat) (map nat string) ] */ ; - DIP { CDR /* [ map nat string ] */ ; DUP /* [ map nat string : map nat string ] */ } - /* [ pair nat nat : map nat string : map nat string ] */ ; - DUP - /* [ pair nat nat : pair nat nat : map nat string : map nat string ] */ ; - CAR - /* [ nat : pair nat nat : map nat string : map nat string ] */ ; - SWAP - /* [ pair nat nat : nat : map nat string : map nat string ] */ ; - DIP { GET /* [ option string : map nat string ] */ } - /* [ pair nat nat : option string : map nat string ] */ ; - SWAP - /* [ option string : pair nat nat : map nat string ] */ ; - IF_NONE - { NONE string - /* [ option string : pair nat nat : map nat string ] */ ; - DIP { PAIR /* [ pair (pair nat nat) (map nat string) ] */ } - /* [ option string : pair (pair nat nat) (map nat string) ] */ ; - PAIR - /* [ pair (option string) (pair nat nat) (map nat string) ] */ } - { SOME - /* [ option string : pair nat nat : map nat string ] */ ; - DIP { DUP - /* [ pair nat nat : pair nat nat : map nat string ] */ ; - DIP { CAR - /* [ nat : map nat string ] */ ; - DIP { NONE string /* [ option string : map nat string ] */ } - /* [ nat : option string : map nat string ] */ ; - UPDATE - /* [ map nat string ] */ } - /* [ pair nat nat : map nat string ] */ ; - DUP - /* [ pair nat nat : pair nat nat : map nat string ] */ ; - CAR - /* [ nat : pair nat nat : map nat string ] */ ; - PUSH nat 1 - /* [ nat : nat : pair nat nat : map nat string ] */ ; - ADD - /* [ nat : pair nat nat : map nat string ] */ ; - DIP { CDR /* [ nat : map nat string ] */ } - /* [ nat : nat : map nat string ] */ ; - PAIR - /* [ pair nat nat : map nat string ] */ ; - PAIR - /* [ pair (pair nat nat) (map nat string) ] */ } - /* [ option string : pair (pair nat nat) (map nat string) ] */ ; - PAIR - /* [ pair (option string) (pair nat nat) (map nat string) ] */ } } - { DIP { DUP - /* [ pair (option string) (option string) (pair nat nat) (map nat string) - : pair (option string) (option string) (pair nat nat) (map nat string) ] */ ; - CDDAR ; - DIP { CDDDR } - /* [ pair nat nat : map nat string ] */ ; - DUP - /* [ pair nat nat : pair nat nat : map nat string ] */ } - /* [ string : pair nat nat : pair nat nat : map nat string ] */ ; - SWAP - /* [ pair nat nat : string : pair nat nat : map nat string ] */ ; - CAR - /* [ nat : string : pair nat nat : map nat string ] */ ; - DIP { SOME - /* [ option string : pair nat nat : map nat string ] */ ; - SWAP - /* [ pair nat nat : option string : map nat string ] */ ; - CDR - /* [ nat : option string : map nat string ] */ ; - DUP - /* [ nat : nat : option string : map nat string ] */ ; - DIP { UPDATE /* [ map nat string ] */ } - /* [ nat : map nat string ] */ ; - PUSH nat 1 - /* [ nat : nat : map nat string ] */ ; - ADD - /* [ nat : map nat string ] */ } - /* [ nat : nat : map nat string ] */ ; - PAIR - /* [ pair nat nat : map nat string ] */ ; - PAIR - /* [ pair (pair nat nat) (map nat string) ] */ ; - NONE string - /* [ option string : pair (pair nat nat) (map nat string) ] */ ; - PAIR - /* [ pair (option string) (pair nat nat) (map nat string) ] */ } ; - NIL operation - /* [ list operation : pair (option string) (pair nat nat) (map nat string) ] */ ; - PAIR - /* [ pair (list operation) (option string) (pair nat nat) (map nat string) ] */ } } -Well typed (Gas remaining: 1039978.831 units remaining) michelson_test_scripts/attic/reduce_map.tz -{ parameter (pair (lambda int int) (list int)) ; - storage (list int) ; - code { DIP { NIL int /* [ list int ] */ } - /* [ pair (pair (lambda int int) (list int)) (list int) : list int ] */ ; - CAR - /* [ pair (lambda int int) (list int) : list int ] */ ; - DUP - /* [ pair (lambda int int) (list int) : pair (lambda int int) (list int) - : list int ] */ ; - DIP { CAR - /* [ lambda int int : list int ] */ ; - PAIR - /* [ pair (lambda int int) (list int) ] */ } - /* [ pair (lambda int int) (list int) : pair (lambda int int) (list int) ] */ ; - CDR - /* [ list int : pair (lambda int int) (list int) ] */ ; - ITER { PAIR - /* [ pair int (lambda int int) (list int) ] */ ; - DUP - /* [ pair int (lambda int int) (list int) - : pair int (lambda int int) (list int) ] */ ; - CDAR ; - DIP { DUP - /* [ pair int (lambda int int) (list int) - : pair int (lambda int int) (list int) ] */ ; - DIP { CDAR } - /* [ pair int (lambda int int) (list int) : lambda int int ] */ ; - DUP - /* [ pair int (lambda int int) (list int) : pair int (lambda int int) (list int) - : lambda int int ] */ ; - CAR - /* [ int : pair int (lambda int int) (list int) : lambda int int ] */ ; - DIP { CDDR ; SWAP /* [ lambda int int : list int ] */ } - /* [ int : lambda int int : list int ] */ ; - EXEC - /* [ int : list int ] */ ; - CONS - /* [ list int ] */ } - /* [ lambda int int : list int ] */ ; - PAIR - /* [ pair (lambda int int) (list int) ] */ } - /* [ pair (lambda int int) (list int) ] */ ; - CDR - /* [ list int ] */ ; - DIP { NIL int /* [ list int ] */ } - /* [ list int : list int ] */ ; - ITER { CONS /* [ list int ] */ } - /* [ list int ] */ ; - NIL operation - /* [ list operation : list int ] */ ; - PAIR - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039983.510 units remaining) michelson_test_scripts/attic/reentrancy.tz -{ parameter unit ; - storage (pair address address) ; - code { CDR - /* [ pair address address ] */ ; - DUP - /* [ pair address address : pair address address ] */ ; - CAR - /* [ address : pair address address ] */ ; - CONTRACT unit - /* [ option (contract unit) : pair address address ] */ ; - ASSERT_SOME ; - PUSH mutez 5000000 - /* [ mutez : contract unit : pair address address ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair address address ] */ ; - TRANSFER_TOKENS - /* [ operation : pair address address ] */ ; - DIP { DUP - /* [ pair address address : pair address address ] */ ; - CDR - /* [ address : pair address address ] */ ; - CONTRACT unit - /* [ option (contract unit) : pair address address ] */ ; - ASSERT_SOME ; - PUSH mutez 5000000 - /* [ mutez : contract unit : pair address address ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair address address ] */ ; - TRANSFER_TOKENS - /* [ operation : pair address address ] */ } - /* [ operation : operation : pair address address ] */ ; - DIP 2 - { NIL operation /* [ list operation : pair address address ] */ } - /* [ operation : operation : list operation : pair address address ] */ ; - DIP { CONS /* [ list operation : pair address address ] */ } - /* [ operation : list operation : pair address address ] */ ; - CONS - /* [ list operation : pair address address ] */ ; - PAIR - /* [ pair (list operation) address address ] */ } } -Well typed (Gas remaining: 1039970.211 units remaining) michelson_test_scripts/attic/reservoir.tz -{ parameter unit ; - storage (pair (pair (timestamp %T) (mutez %N)) (pair (address %A) (address %B))) ; - code { CDR - /* [ pair (pair timestamp mutez) address address ] */ ; - DUP - /* [ pair (pair timestamp mutez) address address - : pair (pair timestamp mutez) address address ] */ ; - CAAR %T ; - NOW - /* [ timestamp : timestamp : pair (pair timestamp mutez) address address ] */ ; - COMPARE - /* [ int : pair (pair timestamp mutez) address address ] */ ; - LE - /* [ bool : pair (pair timestamp mutez) address address ] */ ; - IF { DUP - /* [ pair (pair timestamp mutez) address address - : pair (pair timestamp mutez) address address ] */ ; - CADR %N ; - BALANCE - /* [ mutez : mutez : pair (pair timestamp mutez) address address ] */ ; - COMPARE - /* [ int : pair (pair timestamp mutez) address address ] */ ; - LE - /* [ bool : pair (pair timestamp mutez) address address ] */ ; - IF { NIL operation - /* [ list operation : pair (pair timestamp mutez) address address ] */ ; - PAIR - /* [ pair (list operation) (pair timestamp mutez) address address ] */ } - { DUP - /* [ pair (pair timestamp mutez) address address - : pair (pair timestamp mutez) address address ] */ ; - CDDR %B ; - CONTRACT - unit - /* [ option (contract unit) : pair (pair timestamp mutez) address address ] */ ; - ASSERT_SOME ; - BALANCE - /* [ mutez : contract unit : pair (pair timestamp mutez) address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair timestamp mutez) address address ] */ ; - TRANSFER_TOKENS - /* [ operation : pair (pair timestamp mutez) address address ] */ ; - NIL operation - /* [ list operation : operation : pair (pair timestamp mutez) address address ] */ ; - SWAP - /* [ operation : list operation : pair (pair timestamp mutez) address address ] */ ; - CONS - /* [ list operation : pair (pair timestamp mutez) address address ] */ ; - PAIR - /* [ pair (list operation) (pair timestamp mutez) address address ] */ } } - { DUP - /* [ pair (pair timestamp mutez) address address - : pair (pair timestamp mutez) address address ] */ ; - CDAR %A ; - CONTRACT - unit - /* [ option (contract unit) : pair (pair timestamp mutez) address address ] */ ; - ASSERT_SOME ; - BALANCE - /* [ mutez : contract unit : pair (pair timestamp mutez) address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair (pair timestamp mutez) address address ] */ ; - TRANSFER_TOKENS - /* [ operation : pair (pair timestamp mutez) address address ] */ ; - NIL operation - /* [ list operation : operation : pair (pair timestamp mutez) address address ] */ ; - SWAP - /* [ operation : list operation : pair (pair timestamp mutez) address address ] */ ; - CONS - /* [ list operation : pair (pair timestamp mutez) address address ] */ ; - PAIR - /* [ pair (list operation) (pair timestamp mutez) address address ] */ } } } -Well typed (Gas remaining: 1039891.106 units remaining) michelson_test_scripts/attic/scrutable_reservoir.tz -{ parameter unit ; - storage - (pair string - (pair timestamp (pair (pair mutez mutez) (pair address (pair address address))))) ; - code { DUP - /* [ pair unit string timestamp (pair mutez mutez) address address address - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - CDAR ; - PUSH string - "open" - /* [ string : string - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - COMPARE - /* [ int - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - NEQ - /* [ bool - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - IF { FAIL } - { DUP - /* [ pair unit string timestamp (pair mutez mutez) address address address - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - CDDAR ; - NOW - /* [ timestamp : timestamp - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - COMPARE - /* [ int - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - LT - /* [ bool - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - IF { PUSH mutez - 0 - /* [ mutez - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - DIP { DUP - /* [ pair unit string timestamp (pair mutez mutez) address address address - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - CDDDAAR } - /* [ mutez : mutez - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - ADD - /* [ mutez - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - DIP { DUP - /* [ pair unit string timestamp (pair mutez mutez) address address address - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - CDDDADR } - /* [ mutez : mutez - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - ADD - /* [ mutez - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - BALANCE - /* [ mutez : mutez - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - COMPARE - /* [ int - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - LT - /* [ bool - : pair unit string timestamp (pair mutez mutez) address address address ] */ ; - IF { CDR - /* [ pair string timestamp (pair mutez mutez) address address address ] */ ; - NIL operation - /* [ list operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - PAIR - /* [ pair (list operation) string timestamp (pair mutez mutez) address address address ] */ } - { CDDR ; - PUSH string - "success" - /* [ string : pair timestamp (pair mutez mutez) address address address ] */ ; - PAIR - /* [ pair string timestamp (pair mutez mutez) address address address ] */ ; - DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDAAR ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDDAR } - /* [ mutez : address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair string timestamp (pair mutez mutez) address address address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDADR ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDDDAR } - /* [ mutez : address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair string timestamp (pair mutez mutez) address address address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair string timestamp (pair mutez mutez) address address address ] */ } - /* [ operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - NIL operation - /* [ list operation : operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - SWAP - /* [ operation : list operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CONS - /* [ list operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - SWAP - /* [ operation : list operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CONS - /* [ list operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - PAIR - /* [ pair (list operation) string timestamp (pair mutez mutez) address address address ] */ } } - { CDDR ; - PUSH string - "timeout" - /* [ string : pair timestamp (pair mutez mutez) address address address ] */ ; - PAIR - /* [ pair string timestamp (pair mutez mutez) address address address ] */ ; - BALANCE - /* [ mutez : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDAAR } - /* [ mutez : mutez - : pair string timestamp (pair mutez mutez) address address address ] */ ; - COMPARE - /* [ int : pair string timestamp (pair mutez mutez) address address address ] */ ; - LT - /* [ bool : pair string timestamp (pair mutez mutez) address address address ] */ ; - IF { BALANCE - /* [ mutez : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDDAR } - /* [ mutez : address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair string timestamp (pair mutez mutez) address address address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair string timestamp (pair mutez mutez) address address address ] */ } - { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDAAR ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDDAR } - /* [ mutez : address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair string timestamp (pair mutez mutez) address address address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair string timestamp (pair mutez mutez) address address address ] */ } ; - DIP { BALANCE - /* [ mutez : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { DUP - /* [ pair string timestamp (pair mutez mutez) address address address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CDDDDDR } - /* [ mutez : address - : pair string timestamp (pair mutez mutez) address address address ] */ ; - DIP { CONTRACT - unit - /* [ option (contract unit) - : pair string timestamp (pair mutez mutez) address address address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - UNIT - /* [ unit : mutez : contract unit - : pair string timestamp (pair mutez mutez) address address address ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair string timestamp (pair mutez mutez) address address address ] */ } - /* [ operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - NIL operation - /* [ list operation : operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - SWAP - /* [ operation : list operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CONS - /* [ list operation : operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - SWAP - /* [ operation : list operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - CONS - /* [ list operation - : pair string timestamp (pair mutez mutez) address address address ] */ ; - PAIR - /* [ pair (list operation) string timestamp (pair mutez mutez) address address address ] */ } } } } -Well typed (Gas remaining: 1039977.017 units remaining) michelson_test_scripts/attic/spawn_identities.tz -{ parameter nat ; - storage (list address) ; - code { /* [ pair string string ] */ - DUP - /* [ list operation : string ] */ ; - CAR - /* [ nat : pair nat (list address) ] */ ; - DIP { CDR /* [ list address ] */ ; NIL operation /* [ list operation : list address ] */ } - /* [ pair (list operation) string ] */ ; - PUSH bool True - /* [ bool : nat : list operation : list address ] */ ; - LOOP { DUP - /* [ nat : nat : list operation : list address ] */ ; - PUSH nat 0 - /* [ nat : nat : nat : list operation : list address ] */ ; - CMPEQ ; - IF { PUSH bool False /* [ bool : nat : list operation : list address ] */ } - { PUSH nat 1 - /* [ nat : nat : list operation : list address ] */ ; - SWAP - /* [ nat : nat : list operation : list address ] */ ; - SUB - /* [ int : list operation : list address ] */ ; - ABS - /* [ nat : list operation : list address ] */ ; - PUSH string "init" - /* [ string : nat : list operation : list address ] */ ; - PUSH mutez 5000000 - /* [ mutez : string : nat : list operation : list address ] */ ; - NONE key_hash - /* [ option key_hash : mutez : string : nat : list operation : list address ] */ ; - CREATE_CONTRACT - { parameter string ; - storage string ; - code { CAR ; NIL operation ; PAIR } } - /* [ operation : address : nat : list operation : list address ] */ ; - SWAP - /* [ address : operation : nat : list operation : list address ] */ ; - DIP { SWAP - /* [ nat : operation : list operation : list address ] */ ; - DIP { CONS /* [ list operation : list address ] */ } - /* [ nat : list operation : list address ] */ } - /* [ address : nat : list operation : list address ] */ ; - SWAP - /* [ nat : address : list operation : list address ] */ ; - DIP { SWAP - /* [ list operation : address : list address ] */ ; - DIP { CONS /* [ list address ] */ } - /* [ list operation : list address ] */ } - /* [ nat : list operation : list address ] */ ; - PUSH bool True - /* [ bool : nat : list operation : list address ] */ } } - /* [ nat : list operation : list address ] */ ; - DROP - /* [ list operation : list address ] */ ; - PAIR - /* [ pair (list operation) (list address) ] */ } } -Well typed (Gas remaining: 1039955.119 units remaining) michelson_test_scripts/entrypoints/big_map_entrypoints.tz -{ storage (pair (big_map string nat) (big_map string nat)) ; - parameter - (or (unit %default - /* [ list operation : big_map string nat ] */) - (or (or %mem - (string %mem_left) - (string %mem_right) - /* [ pair (list operation) (big_map string nat) ] */) - (or (or %add (pair %add_left string nat) (pair %add_right string nat)) - (or %rem (string %rem_left) (string %rem_right)))) - /* [ big_map string nat ] */) - /* [ string : big_map string nat ] */ ; - code { UNPAIR - /* [ or unit - (or (or string string) (or (or (pair string nat) (pair string nat)) (or string string))) - : pair (big_map string nat) (big_map string nat) ] */ ; - IF_LEFT - { DROP - /* [ pair (big_map string nat) (big_map string nat) ] */ ; - DUP - /* [ pair (big_map string nat) (big_map string nat) - : pair (big_map string nat) (big_map string nat) ] */ ; - CAR - /* [ big_map string nat : pair (big_map string nat) (big_map string nat) ] */ ; - PUSH mutez - 0 - /* [ mutez : big_map string nat - : pair (big_map string nat) (big_map string nat) ] */ ; - NONE key_hash - /* [ option key_hash : mutez : big_map string nat - : pair (big_map string nat) (big_map string nat) ] */ ; - CREATE_CONTRACT - { parameter string ; - storage (big_map string nat) ; - code { UNPAIR ; DROP ; NIL operation ; PAIR } } - /* [ operation : address : pair (big_map string nat) (big_map string nat) ] */ ; - DIP { DROP /* [ pair (big_map string nat) (big_map string nat) ] */ } - /* [ operation : pair (big_map string nat) (big_map string nat) ] */ ; - NIL operation - /* [ list operation : operation - : pair (big_map string nat) (big_map string nat) ] */ ; - SWAP - /* [ operation : list operation - : pair (big_map string nat) (big_map string nat) ] */ ; - CONS - /* [ list operation : pair (big_map string nat) (big_map string nat) ] */ ; - PAIR - /* [ pair (list operation) (big_map string nat) (big_map string nat) ] */ } - { IF_LEFT - { IF_LEFT - { DIP { UNPAIR /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { DUP /* [ big_map string nat : big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat : big_map string nat ] */ ; - MEM - /* [ bool : big_map string nat : big_map string nat ] */ ; - ASSERT } - { DIP { UNPAIR - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { DUP /* [ big_map string nat : big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat : big_map string nat ] */ ; - MEM - /* [ bool : big_map string nat : big_map string nat ] */ ; - ASSERT ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } } - { IF_LEFT - { IF_LEFT - { UNPAIR - /* [ string : nat : pair (big_map string nat) (big_map string nat) ] */ ; - DIP 2 - { UNPAIR /* [ big_map string nat : big_map string nat ] */ } - /* [ string : nat : big_map string nat : big_map string nat ] */ ; - DIP { SOME /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ } - { UNPAIR - /* [ string : nat : pair (big_map string nat) (big_map string nat) ] */ ; - DIP 2 - { UNPAIR - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : nat : big_map string nat : big_map string nat ] */ ; - DIP { SOME /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } } - { IF_LEFT - { DIP { UNPAIR /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { NONE nat /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ } - { DIP { UNPAIR - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { NONE nat /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } } } ; - PAIR - /* [ pair (big_map string nat) (big_map string nat) ] */ ; - NIL operation - /* [ list operation : pair (big_map string nat) (big_map string nat) ] */ ; - PAIR - /* [ pair (list operation) (big_map string nat) (big_map string nat) ] */ } } } -Well typed (Gas remaining: 1039961.799 units remaining) michelson_test_scripts/entrypoints/delegatable_target.tz -{ parameter - (or (or (key_hash %set_delegate) (unit %remove_delegate)) (or %default string nat)) ; - storage (pair key_hash (pair string nat)) ; - code { DUP - /* [ pair (or (or key_hash unit) (or string nat)) key_hash string nat - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - CAR - /* [ or (or key_hash unit) (or string nat) - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - IF_LEFT - { PUSH mutez - 0 - /* [ mutez : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - AMOUNT - /* [ mutez : mutez : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - ASSERT_CMPEQ ; - DUP 2 - /* [ pair (or (or key_hash unit) (or string nat)) key_hash string nat - : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - CDR - /* [ pair key_hash string nat : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - CAR - /* [ key_hash : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - ADDRESS - /* [ address : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - SENDER - /* [ address : address : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - IFCMPNEQ - { SENDER - /* [ address : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - PUSH string - "Only the owner can operate." - /* [ string : address : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - PAIR - /* [ pair string address : or key_hash unit - : pair (or (or key_hash unit) (or string nat)) key_hash string nat ] */ ; - FAILWITH - /* [] */ } - { DIP { CDR - /* [ pair key_hash string nat ] */ ; - NIL operation - /* [ list operation : pair key_hash string nat ] */ } - /* [ or key_hash unit : list operation : pair key_hash string nat ] */ ; - IF_LEFT - { SOME - /* [ option key_hash : list operation : pair key_hash string nat ] */ ; - SET_DELEGATE - /* [ operation : list operation : pair key_hash string nat ] */ ; - CONS - /* [ list operation : pair key_hash string nat ] */ ; - PAIR - /* [ pair (list operation) key_hash string nat ] */ } - { DROP - /* [ list operation : pair key_hash string nat ] */ ; - NONE key_hash - /* [ option key_hash : list operation : pair key_hash string nat ] */ ; - SET_DELEGATE - /* [ operation : list operation : pair key_hash string nat ] */ ; - CONS - /* [ list operation : pair key_hash string nat ] */ ; - PAIR - /* [ pair (list operation) key_hash string nat ] */ } } } - { DIP { CDR - /* [ pair key_hash string nat ] */ ; - DUP - /* [ pair key_hash string nat : pair key_hash string nat ] */ ; - CDR - /* [ pair string nat : pair key_hash string nat ] */ } - /* [ or string nat : pair string nat : pair key_hash string nat ] */ ; - PAIR - /* [ pair (or string nat) string nat : pair key_hash string nat ] */ ; - { UNPAIR - /* [ or string nat : pair string nat : pair key_hash string nat ] */ ; - IF_LEFT - { DIP { UNPAIR - /* [ string : nat : pair key_hash string nat ] */ ; - DROP - /* [ nat : pair key_hash string nat ] */ } - /* [ string : nat : pair key_hash string nat ] */ } - { DUG 1 - /* [ pair string nat : nat : pair key_hash string nat ] */ ; - UNPAIR - /* [ string : nat : nat : pair key_hash string nat ] */ ; - DIP { DROP /* [ nat : pair key_hash string nat ] */ } - /* [ string : nat : pair key_hash string nat ] */ } ; - PAIR - /* [ pair string nat : pair key_hash string nat ] */ ; - NIL operation - /* [ list operation : pair string nat : pair key_hash string nat ] */ ; - PAIR - /* [ pair (list operation) string nat : pair key_hash string nat ] */ } ; - SWAP - /* [ pair key_hash string nat : pair (list operation) string nat ] */ ; - CAR - /* [ key_hash : pair (list operation) string nat ] */ ; - SWAP - /* [ pair (list operation) string nat : key_hash ] */ ; - UNPAIR - /* [ list operation : pair string nat : key_hash ] */ ; - DIP { SWAP /* [ key_hash : pair string nat ] */ ; PAIR /* [ pair key_hash string nat ] */ } - /* [ list operation : pair key_hash string nat ] */ ; - PAIR - /* [ pair (list operation) key_hash string nat ] */ } } } -Well typed (Gas remaining: 1039984.594 units remaining) michelson_test_scripts/entrypoints/manager.tz -{ parameter (or (lambda %do unit (list operation)) (unit %default)) ; - storage key_hash ; - code { UNPAIR - /* [ or (lambda unit (list operation)) unit : key_hash ] */ ; - IF_LEFT - { PUSH mutez 0 - /* [ mutez : lambda unit (list operation) : key_hash ] */ ; - AMOUNT - /* [ mutez : mutez : lambda unit (list operation) : key_hash ] */ ; - ASSERT_CMPEQ ; - DUP 2 - /* [ key_hash : lambda unit (list operation) : key_hash ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : lambda unit (list operation) : key_hash ] */ ; - ADDRESS - /* [ address : lambda unit (list operation) : key_hash ] */ ; - SENDER - /* [ address : address : lambda unit (list operation) : key_hash ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit : lambda unit (list operation) : key_hash ] */ ; - EXEC - /* [ list operation : key_hash ] */ ; - PAIR - /* [ pair (list operation) key_hash ] */ } - { DROP - /* [ key_hash ] */ ; - NIL operation - /* [ list operation : key_hash ] */ ; - PAIR - /* [ pair (list operation) key_hash ] */ } } } -Well typed (Gas remaining: 1039990.499 units remaining) michelson_test_scripts/entrypoints/no_default_target.tz -{ storage (pair string nat) ; - parameter (or unit (or %data string nat)) ; - code { UNPAIR - /* [ or unit (or string nat) : pair string nat ] */ ; - IF_LEFT - { DROP - /* [ pair string nat ] */ ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } - { IF_LEFT - { DIP { UNPAIR /* [ string : nat ] */ ; DROP /* [ nat ] */ } /* [ string : nat ] */ } - { DUG 1 - /* [ pair string nat : nat ] */ ; - UNPAIR - /* [ string : nat : nat ] */ ; - DIP { DROP /* [ nat ] */ } - /* [ string : nat ] */ } ; - PAIR - /* [ pair string nat ] */ ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } } } -Well typed (Gas remaining: 1039990.499 units remaining) michelson_test_scripts/entrypoints/no_entrypoint_target.tz -{ storage (pair string nat) ; - parameter (or unit (or string nat)) ; - code { UNPAIR - /* [ or unit (or string nat) : pair string nat ] */ ; - IF_LEFT - { DROP - /* [ pair string nat ] */ ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } - { IF_LEFT - { DIP { UNPAIR /* [ string : nat ] */ ; DROP /* [ nat ] */ } /* [ string : nat ] */ } - { DUG 1 - /* [ pair string nat : nat ] */ ; - UNPAIR - /* [ string : nat : nat ] */ ; - DIP { DROP /* [ nat ] */ } - /* [ string : nat ] */ } ; - PAIR - /* [ pair string nat ] */ ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } } } -Well typed (Gas remaining: 1039990.499 units remaining) michelson_test_scripts/entrypoints/rooted_target.tz -{ storage (pair string nat) ; - parameter (or %root unit (or %default string nat)) ; - code { UNPAIR - /* [ or unit (or string nat) : pair string nat ] */ ; - IF_LEFT - { DROP - /* [ pair string nat ] */ ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } - { IF_LEFT - { DIP { UNPAIR /* [ string : nat ] */ ; DROP /* [ nat ] */ } /* [ string : nat ] */ } - { DUG 1 - /* [ pair string nat : nat ] */ ; - UNPAIR - /* [ string : nat : nat ] */ ; - DIP { DROP /* [ nat ] */ } - /* [ string : nat ] */ } ; - PAIR - /* [ pair string nat ] */ ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } } } -Well typed (Gas remaining: 1039997.610 units remaining) michelson_test_scripts/entrypoints/simple_entrypoints.tz -{ parameter (or (unit %A) (or (string %B) (nat %C))) ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039995.316 units remaining) michelson_test_scripts/macros/assert.tz -{ parameter bool ; - storage unit ; - code { CAR - /* [ bool ] */ ; - ASSERT ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.694 units remaining) michelson_test_scripts/macros/assert_cmpeq.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.694 units remaining) michelson_test_scripts/macros/assert_cmpge.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - ASSERT_CMPGE ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.694 units remaining) michelson_test_scripts/macros/assert_cmpgt.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - ASSERT_CMPGT ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.694 units remaining) michelson_test_scripts/macros/assert_cmple.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - ASSERT_CMPLE ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.694 units remaining) michelson_test_scripts/macros/assert_cmplt.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - ASSERT_CMPLT ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.694 units remaining) michelson_test_scripts/macros/assert_cmpneq.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - ASSERT_CMPNEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.942 units remaining) michelson_test_scripts/macros/assert_eq.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.942 units remaining) michelson_test_scripts/macros/assert_ge.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GE ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.942 units remaining) michelson_test_scripts/macros/assert_gt.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.942 units remaining) michelson_test_scripts/macros/assert_le.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LE ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.942 units remaining) michelson_test_scripts/macros/assert_lt.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.942 units remaining) michelson_test_scripts/macros/assert_neq.tz -{ parameter (pair int int) ; - storage unit ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_NEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039971.464 units remaining) michelson_test_scripts/macros/big_map_get_add.tz -{ parameter (pair (pair %set_pair int (option int)) (pair %check_pair int (option int))) ; - storage (pair (big_map int int) unit) ; - code { DUP - /* [ pair (pair (pair int (option int)) int (option int)) (big_map int int) unit - : pair (pair (pair int (option int)) int (option int)) (big_map int int) unit ] */ ; - DIP { CDAR } - /* [ pair (pair (pair int (option int)) int (option int)) (big_map int int) unit - : big_map int int ] */ ; - DUP - /* [ pair (pair (pair int (option int)) int (option int)) (big_map int int) unit - : pair (pair (pair int (option int)) int (option int)) (big_map int int) unit - : big_map int int ] */ ; - DIP { CADR ; - DUP - /* [ pair int (option int) : pair int (option int) : big_map int int ] */ ; - CAR - /* [ int : pair int (option int) : big_map int int ] */ ; - DIP { CDR /* [ option int : big_map int int ] */ } - /* [ int : option int : big_map int int ] */ ; - UPDATE - /* [ big_map int int ] */ ; - DUP - /* [ big_map int int : big_map int int ] */ } - /* [ pair (pair (pair int (option int)) int (option int)) (big_map int int) unit - : big_map int int : big_map int int ] */ ; - CADR ; - DUP - /* [ pair int (option int) : pair int (option int) : big_map int int - : big_map int int ] */ ; - CDR - /* [ option int : pair int (option int) : big_map int int : big_map int int ] */ ; - DIP { CAR - /* [ int : big_map int int : big_map int int ] */ ; - GET - /* [ option int : big_map int int ] */ } - /* [ option int : option int : big_map int int ] */ ; - IF_SOME - { SWAP - /* [ option int : int : big_map int int ] */ ; - IF_SOME { ASSERT_CMPEQ } { FAIL } } - { ASSERT_NONE } ; - UNIT - /* [ unit : big_map int int ] */ ; - SWAP - /* [ big_map int int : unit ] */ ; - PAIR - /* [ pair (big_map int int) unit ] */ ; - NIL operation - /* [ list operation : pair (big_map int int) unit ] */ ; - PAIR - /* [ pair (list operation) (big_map int int) unit ] */ } } -Well typed (Gas remaining: 1039984.426 units remaining) michelson_test_scripts/macros/big_map_mem.tz -{ parameter (pair int bool) ; - storage (pair (big_map int unit) unit) ; - code { DUP - /* [ pair (pair int bool) (big_map int unit) unit - : pair (pair int bool) (big_map int unit) unit ] */ ; - DUP - /* [ pair (pair int bool) (big_map int unit) unit - : pair (pair int bool) (big_map int unit) unit - : pair (pair int bool) (big_map int unit) unit ] */ ; - CADR ; - DIP { CAAR ; - DIP { CDAR ; DUP /* [ big_map int unit : big_map int unit ] */ } - /* [ int : big_map int unit : big_map int unit ] */ ; - MEM - /* [ bool : big_map int unit ] */ } - /* [ bool : bool : big_map int unit ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit : big_map int unit ] */ ; - SWAP - /* [ big_map int unit : unit ] */ ; - PAIR - /* [ pair (big_map int unit) unit ] */ ; - NIL operation - /* [ list operation : pair (big_map int unit) unit ] */ ; - PAIR - /* [ pair (list operation) (big_map int unit) unit ] */ } } -Well typed (Gas remaining: 1039985.285 units remaining) michelson_test_scripts/macros/build_list.tz -{ parameter nat ; - storage (list nat) ; - code { CAR @counter - /* [ nat ] */ ; - NIL @acc nat - /* [ list nat : nat ] */ ; - SWAP - /* [ nat : list nat ] */ ; - DUP @cmp_num - /* [ nat : nat : list nat ] */ ; - PUSH nat 0 - /* [ nat : nat : nat : list nat ] */ ; - CMPNEQ ; - LOOP { DUP - /* [ nat : nat : list nat ] */ ; - DIP { SWAP /* [ list nat : nat ] */ } - /* [ nat : list nat : nat ] */ ; - CONS @acc - /* [ list nat : nat ] */ ; - SWAP - /* [ nat : list nat ] */ ; - PUSH nat 1 - /* [ nat : nat : list nat ] */ ; - SWAP - /* [ nat : nat : list nat ] */ ; - SUB @counter - /* [ int : list nat ] */ ; - DUP - /* [ int : int : list nat ] */ ; - DIP { ABS /* [ nat : list nat ] */ } - /* [ int : nat : list nat ] */ ; - PUSH int 0 - /* [ int : int : nat : list nat ] */ ; - CMPNEQ } - /* [ nat : list nat ] */ ; - CONS - /* [ list nat ] */ ; - NIL operation - /* [ list operation : list nat ] */ ; - PAIR - /* [ pair (list operation) (list nat) ] */ } } -Well typed (Gas remaining: 1039965.258 units remaining) michelson_test_scripts/macros/carn_and_cdrn.tz -{ parameter (pair nat nat nat unit) ; - storage unit ; - code { CAR - /* [ pair nat nat nat unit ] */ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - CAR - /* [ nat : pair nat nat nat unit ] */ ; - PUSH nat 1 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - CAR 0 ; - PUSH nat 1 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - CAR 1 ; - PUSH nat 4 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - CAR 2 ; - PUSH nat 2 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - CDR 3 ; - UNIT - /* [ unit : unit : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039971.433 units remaining) michelson_test_scripts/macros/compare.tz -{ parameter (pair mutez mutez) ; - storage (list bool) ; - code { CAR - /* [ pair mutez mutez ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez : pair mutez mutez ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez : pair mutez mutez - : pair mutez mutez ] */ ; - DIP 5 - { NIL bool /* [ list bool ] */ } - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez : pair mutez mutez - : pair mutez mutez : list bool ] */ ; - DIP 4 - { DUP - /* [ pair mutez mutez : pair mutez mutez : list bool ] */ ; - CAR - /* [ mutez : pair mutez mutez : list bool ] */ ; - DIP { CDR /* [ mutez : list bool ] */ } - /* [ mutez : mutez : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - LE - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez : pair mutez mutez - : list bool ] */ ; - DIP 3 - { DUP - /* [ pair mutez mutez : pair mutez mutez : list bool ] */ ; - CAR - /* [ mutez : pair mutez mutez : list bool ] */ ; - DIP { CDR /* [ mutez : list bool ] */ } - /* [ mutez : mutez : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - GE - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez : list bool ] */ ; - DIP 2 - { DUP - /* [ pair mutez mutez : pair mutez mutez : list bool ] */ ; - CAR - /* [ mutez : pair mutez mutez : list bool ] */ ; - DIP { CDR /* [ mutez : list bool ] */ } - /* [ mutez : mutez : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - LT - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair mutez mutez : pair mutez mutez : list bool ] */ ; - DIP { DUP - /* [ pair mutez mutez : pair mutez mutez : list bool ] */ ; - CAR - /* [ mutez : pair mutez mutez : list bool ] */ ; - DIP { CDR /* [ mutez : list bool ] */ } - /* [ mutez : mutez : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - GT - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair mutez mutez : list bool ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez : list bool ] */ ; - CAR - /* [ mutez : pair mutez mutez : list bool ] */ ; - DIP { CDR /* [ mutez : list bool ] */ } - /* [ mutez : mutez : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - EQ - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ ; - NIL operation - /* [ list operation : list bool ] */ ; - PAIR - /* [ pair (list operation) (list bool) ] */ } } -Well typed (Gas remaining: 1039971.433 units remaining) michelson_test_scripts/macros/compare_bytes.tz -{ parameter (pair bytes bytes) ; - storage (list bool) ; - code { CAR - /* [ pair bytes bytes ] */ ; - DUP - /* [ pair bytes bytes : pair bytes bytes ] */ ; - DUP - /* [ pair bytes bytes : pair bytes bytes : pair bytes bytes ] */ ; - DUP - /* [ pair bytes bytes : pair bytes bytes : pair bytes bytes : pair bytes bytes ] */ ; - DUP - /* [ pair bytes bytes : pair bytes bytes : pair bytes bytes : pair bytes bytes - : pair bytes bytes ] */ ; - DIP 5 - { NIL bool /* [ list bool ] */ } - /* [ pair bytes bytes : pair bytes bytes : pair bytes bytes : pair bytes bytes - : pair bytes bytes : list bool ] */ ; - DIP 4 - { DUP - /* [ pair bytes bytes : pair bytes bytes : list bool ] */ ; - CAR - /* [ bytes : pair bytes bytes : list bool ] */ ; - DIP { CDR /* [ bytes : list bool ] */ } - /* [ bytes : bytes : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - LE - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair bytes bytes : pair bytes bytes : pair bytes bytes : pair bytes bytes - : list bool ] */ ; - DIP 3 - { DUP - /* [ pair bytes bytes : pair bytes bytes : list bool ] */ ; - CAR - /* [ bytes : pair bytes bytes : list bool ] */ ; - DIP { CDR /* [ bytes : list bool ] */ } - /* [ bytes : bytes : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - GE - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair bytes bytes : pair bytes bytes : pair bytes bytes : list bool ] */ ; - DIP 2 - { DUP - /* [ pair bytes bytes : pair bytes bytes : list bool ] */ ; - CAR - /* [ bytes : pair bytes bytes : list bool ] */ ; - DIP { CDR /* [ bytes : list bool ] */ } - /* [ bytes : bytes : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - LT - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair bytes bytes : pair bytes bytes : list bool ] */ ; - DIP { DUP - /* [ pair bytes bytes : pair bytes bytes : list bool ] */ ; - CAR - /* [ bytes : pair bytes bytes : list bool ] */ ; - DIP { CDR /* [ bytes : list bool ] */ } - /* [ bytes : bytes : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - GT - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ } - /* [ pair bytes bytes : list bool ] */ ; - DUP - /* [ pair bytes bytes : pair bytes bytes : list bool ] */ ; - CAR - /* [ bytes : pair bytes bytes : list bool ] */ ; - DIP { CDR /* [ bytes : list bool ] */ } - /* [ bytes : bytes : list bool ] */ ; - COMPARE - /* [ int : list bool ] */ ; - EQ - /* [ bool : list bool ] */ ; - CONS - /* [ list bool ] */ ; - NIL operation - /* [ list operation : list bool ] */ ; - PAIR - /* [ pair (list operation) (list bool) ] */ } } -Well typed (Gas remaining: 1039998.443 units remaining) michelson_test_scripts/macros/fail.tz -{ parameter unit ; storage unit ; code { FAIL } } -Well typed (Gas remaining: 1039988.389 units remaining) michelson_test_scripts/macros/guestbook.tz -{ parameter string ; - storage (map address (option string)) ; - code { UNPAIR @message @guestbook - /* [ string : map address (option string) ] */ ; - SWAP - /* [ map address (option string) : string ] */ ; - DUP - /* [ map address (option string) : map address (option string) : string ] */ ; - SENDER - /* [ address : map address (option string) : map address (option string) - : string ] */ ; - GET @previous_message - /* [ option (option string) : map address (option string) : string ] */ ; - ASSERT_SOME ; - ASSERT_NONE ; - SWAP - /* [ string : map address (option string) ] */ ; - SOME - /* [ option string : map address (option string) ] */ ; - SOME - /* [ option (option string) : map address (option string) ] */ ; - SENDER - /* [ address : option (option string) : map address (option string) ] */ ; - UPDATE - /* [ map address (option string) ] */ ; - NIL operation - /* [ list operation : map address (option string) ] */ ; - PAIR - /* [ pair (list operation) (map address (option string)) ] */ } } -Well typed (Gas remaining: 1039993.538 units remaining) michelson_test_scripts/macros/macro_annotations.tz -{ parameter unit ; - storage (pair (unit %truc) unit) ; - code { DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - UNIT - /* [ unit : unit ] */ ; - PAIR %truc - /* [ pair unit unit ] */ ; - UNIT - /* [ unit : pair unit unit ] */ ; - DUP @new_storage 2 - /* [ pair unit unit : unit : pair unit unit ] */ ; - DIP { DROP /* [ pair unit unit ] */ ; DROP /* [] */ } - /* [ pair unit unit ] */ ; - NIL operation - /* [ list operation : pair unit unit ] */ ; - PAIR - /* [ pair (list operation) unit unit ] */ } } -Well typed (Gas remaining: 1039967.257 units remaining) michelson_test_scripts/macros/map_caddaadr.tz -{ parameter unit ; - storage (pair (pair nat (pair nat (pair (pair (pair (nat %p) (mutez %value)) nat) nat))) nat) ; - code { MAP_CDADDAADR @new_storage %value - { PUSH mutez 1000000 - /* [ mutez : mutez : pair nat mutez ] */ ; - ADD - /* [ mutez : pair nat mutez ] */ } ; - NIL operation - /* [ list operation - : pair unit (pair nat nat (pair (pair nat mutez) nat) nat) nat ] */ ; - SWAP - /* [ pair unit (pair nat nat (pair (pair nat mutez) nat) nat) nat - : list operation ] */ ; - SET_CAR } } -Well typed (Gas remaining: 1039988.067 units remaining) michelson_test_scripts/macros/max_in_list.tz -{ parameter (list int) ; - storage (option int) ; - code { CAR - /* [ list int ] */ ; - DIP { NONE int /* [ option int ] */ } - /* [ list int : option int ] */ ; - ITER { SWAP - /* [ option int : int ] */ ; - IF_NONE - { SOME /* [ option int ] */ } - { DIP { DUP /* [ int : int ] */ } - /* [ int : int : int ] */ ; - DUP - /* [ int : int : int : int ] */ ; - DIP { SWAP /* [ int : int : int ] */ } - /* [ int : int : int : int ] */ ; - CMPLE ; - IF { DROP /* [ int ] */ } { DIP { DROP /* [] */ } /* [ int ] */ } ; - SOME - /* [ option int ] */ } } - /* [ option int ] */ ; - NIL operation - /* [ list operation : option int ] */ ; - PAIR - /* [ pair (list operation) (option int) ] */ } } -Well typed (Gas remaining: 1039992.054 units remaining) michelson_test_scripts/macros/min.tz -{ parameter (pair int int) ; - storage int ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - DUP - /* [ pair int int : pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int : pair int int ] */ ; - DIP { CDR /* [ int : pair int int ] */ } - /* [ int : int : pair int int ] */ ; - CMPLT ; - IF { CAR /* [ int ] */ } { CDR /* [ int ] */ } ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039988.944 units remaining) michelson_test_scripts/macros/pair_macro.tz -{ parameter unit ; - storage unit ; - code { UNIT - /* [ unit : pair unit unit ] */ ; - UNIT - /* [ unit : unit : pair unit unit ] */ ; - UNIT - /* [ unit : unit : unit : pair unit unit ] */ ; - UNIT - /* [ unit : unit : unit : unit : pair unit unit ] */ ; - UNIT - /* [ unit : unit : unit : unit : unit : pair unit unit ] */ ; - PAPAPAPAIR @name %x1 %x2 %x3 %x4 %x5 ; - CDDDAR %x4 @fourth ; - DROP - /* [ pair unit unit ] */ ; - CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039971.173 units remaining) michelson_test_scripts/macros/set_caddaadr.tz -{ parameter mutez ; - storage (pair (pair nat (pair nat (pair (pair (pair (nat %p) (mutez %value)) nat) nat))) nat) ; - code { DUP - /* [ pair mutez (pair nat nat (pair (pair nat mutez) nat) nat) nat - : pair mutez (pair nat nat (pair (pair nat mutez) nat) nat) nat ] */ ; - CAR - /* [ mutez : pair mutez (pair nat nat (pair (pair nat mutez) nat) nat) nat ] */ ; - SWAP - /* [ pair mutez (pair nat nat (pair (pair nat mutez) nat) nat) nat : mutez ] */ ; - CDR - /* [ pair (pair nat nat (pair (pair nat mutez) nat) nat) nat : mutez ] */ ; - SET_CADDAADR @toplevel_pair_name %value ; - NIL operation - /* [ list operation : pair (pair nat nat (pair (pair nat mutez) nat) nat) nat ] */ ; - PAIR - /* [ pair (list operation) (pair nat nat (pair (pair nat mutez) nat) nat) nat ] */ } } -Well typed (Gas remaining: 1039993.856 units remaining) michelson_test_scripts/macros/take_my_money.tz -{ parameter key_hash ; - storage unit ; - code { CAR - /* [ key_hash ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit ] */ ; - DIP { UNIT /* [ unit ] */ } - /* [ contract unit : unit ] */ ; - PUSH mutez 1000000 - /* [ mutez : contract unit : unit ] */ ; - UNIT - /* [ unit : mutez : contract unit : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : unit ] */ ; - NIL operation - /* [ list operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039977.177 units remaining) michelson_test_scripts/macros/unpair_macro.tz -{ parameter (unit :param_unit) ; - storage (unit :u1) ; - code { DROP - /* [] */ ; - UNIT :u4 @a4 - /* [ unit ] */ ; - UNIT :u3 @a3 - /* [ unit : unit ] */ ; - UNIT :u2 @a2 - /* [ unit : unit : unit ] */ ; - UNIT :u1 @a1 - /* [ unit : unit : unit : unit ] */ ; - PAIR - /* [ pair unit unit : unit : unit ] */ ; - UNPAIR @x1 @x2 - /* [ unit : unit : unit : unit ] */ ; - PPAIPAIR @p1 %x1 %x2 %x3 %x4 ; - UNPPAIPAIR %x1 % %x3 %x4 @uno @due @tre @quattro ; - PAPAPAIR @p2 %x1 %x2 %x3 %x4 ; - UNPAPAPAIR @un @deux @trois @quatre ; - PAPPAIIR @p3 %x1 %x2 %x3 %x4 ; - UNPAPPAIIR @one @two @three @four ; - DIP { DROP /* [ unit : unit ] */ ; DROP /* [ unit ] */ ; DROP /* [] */ } - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039563.035 units remaining) michelson_test_scripts/mini_scenarios/999_constant.tz -{ parameter unit ; - storage int ; - code { DROP - /* [] */ ; - PUSH int - (constant - "expruQN5r2umbZVHy6WynYM8f71F8zS4AERz9bugF8UkPBEqrHLuU8" - /* [ list operation : int ] */) - /* [ int ] */ ; - NIL operation /* [ pair (list operation) int ] */ ; - PAIR } } -Well typed (Gas remaining: 1039988.898 units remaining) michelson_test_scripts/mini_scenarios/add_clear_tickets_015.tz -{ parameter (or (pair %add nat string) (unit %clear)) ; - storage (list (ticket string)) ; - code { UNPAIR - /* [ or (pair nat string) unit : list (ticket string) ] */ ; - IF_LEFT - { UNPAIR - /* [ nat : string : list (ticket string) ] */ ; - DIG 2 - /* [ list (ticket string) : nat : string ] */ ; - SWAP - /* [ nat : list (ticket string) : string ] */ ; - DIG 2 - /* [ string : nat : list (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { DROP 2 - /* [] */ ; - NIL (ticket string) - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } } } -Well typed (Gas remaining: 1039999.395 units remaining) michelson_test_scripts/mini_scenarios/always_fails.tz -{ parameter string ; storage unit ; code FAILWITH /* [] */ } -Well typed (Gas remaining: 1039979.965 units remaining) michelson_test_scripts/mini_scenarios/authentication.tz -{ parameter (pair (lambda unit (list operation)) signature) ; - storage (pair (nat %counter) key) ; - code { UNPPAIPAIR ; - DUP 3 - /* [ nat : lambda unit (list operation) : signature : nat : key ] */ ; - DUP 2 - /* [ lambda unit (list operation) : nat : lambda unit (list operation) - : signature : nat : key ] */ ; - SELF - /* [ contract (pair (lambda unit (list operation)) signature) - : lambda unit (list operation) : nat : lambda unit (list operation) - : signature : nat : key ] */ ; - CHAIN_ID - /* [ chain_id : contract (pair (lambda unit (list operation)) signature) - : lambda unit (list operation) : nat : lambda unit (list operation) - : signature : nat : key ] */ ; - PPAIPAIR ; - PACK - /* [ bytes : lambda unit (list operation) : signature : nat : key ] */ ; - DIP { SWAP /* [ signature : lambda unit (list operation) : nat : key ] */ } - /* [ bytes : signature : lambda unit (list operation) : nat : key ] */ ; - DUP 5 - /* [ key : bytes : signature : lambda unit (list operation) : nat : key ] */ ; - DIP { SWAP /* [ signature : bytes : lambda unit (list operation) : nat : key ] */ } - /* [ key : signature : bytes : lambda unit (list operation) : nat : key ] */ ; - DUP 3 - /* [ bytes : key : signature : bytes : lambda unit (list operation) : nat - : key ] */ ; - DIP { CHECK_SIGNATURE /* [ bool : lambda unit (list operation) : nat : key ] */ } - /* [ bytes : bool : lambda unit (list operation) : nat : key ] */ ; - SWAP - /* [ bool : bytes : lambda unit (list operation) : nat : key ] */ ; - IF { DROP /* [ lambda unit (list operation) : nat : key ] */ } { FAILWITH /* [] */ } ; - UNIT - /* [ unit : lambda unit (list operation) : nat : key ] */ ; - EXEC - /* [ list operation : nat : key ] */ ; - DIP { PUSH nat 1 /* [ nat : nat : key ] */ ; ADD /* [ nat : key ] */ } - /* [ list operation : nat : key ] */ ; - PAPAIR } } -Well typed (Gas remaining: 1039996.366 units remaining) michelson_test_scripts/mini_scenarios/big_map_all.tz -{ parameter (pair string (option nat)) ; - storage (big_map string nat) ; - code { UNPAIR - /* [ pair string (option nat) : big_map string nat ] */ ; - UNPAIR - /* [ string : option nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat ] */ ; - NIL operation - /* [ list operation : big_map string nat ] */ ; - PAIR - /* [ pair (list operation) (big_map string nat) ] */ } } -Well typed (Gas remaining: 1039955.119 units remaining) michelson_test_scripts/mini_scenarios/big_map_entrypoints.tz -{ storage (pair (big_map string nat) (big_map string nat)) ; - parameter - (or (unit %default - /* [ list operation : big_map string nat ] */) - (or (or %mem - (string %mem_left) - (string %mem_right) - /* [ pair (list operation) (big_map string nat) ] */) - (or (or %add (pair %add_left string nat) (pair %add_right string nat)) - (or %rem (string %rem_left) (string %rem_right)))) - /* [ big_map string nat ] */) - /* [ string : big_map string nat ] */ ; - code { UNPAIR - /* [ or unit - (or (or string string) (or (or (pair string nat) (pair string nat)) (or string string))) - : pair (big_map string nat) (big_map string nat) ] */ ; - IF_LEFT - { DROP - /* [ pair (big_map string nat) (big_map string nat) ] */ ; - DUP - /* [ pair (big_map string nat) (big_map string nat) - : pair (big_map string nat) (big_map string nat) ] */ ; - CAR - /* [ big_map string nat : pair (big_map string nat) (big_map string nat) ] */ ; - PUSH mutez - 0 - /* [ mutez : big_map string nat - : pair (big_map string nat) (big_map string nat) ] */ ; - NONE key_hash - /* [ option key_hash : mutez : big_map string nat - : pair (big_map string nat) (big_map string nat) ] */ ; - CREATE_CONTRACT - { parameter string ; - storage (big_map string nat) ; - code { UNPAIR ; DROP ; NIL operation ; PAIR } } - /* [ operation : address : pair (big_map string nat) (big_map string nat) ] */ ; - DIP { DROP /* [ pair (big_map string nat) (big_map string nat) ] */ } - /* [ operation : pair (big_map string nat) (big_map string nat) ] */ ; - NIL operation - /* [ list operation : operation - : pair (big_map string nat) (big_map string nat) ] */ ; - SWAP - /* [ operation : list operation - : pair (big_map string nat) (big_map string nat) ] */ ; - CONS - /* [ list operation : pair (big_map string nat) (big_map string nat) ] */ ; - PAIR - /* [ pair (list operation) (big_map string nat) (big_map string nat) ] */ } - { IF_LEFT - { IF_LEFT - { DIP { UNPAIR /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { DUP /* [ big_map string nat : big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat : big_map string nat ] */ ; - MEM - /* [ bool : big_map string nat : big_map string nat ] */ ; - ASSERT } - { DIP { UNPAIR - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { DUP /* [ big_map string nat : big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat : big_map string nat ] */ ; - MEM - /* [ bool : big_map string nat : big_map string nat ] */ ; - ASSERT ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } } - { IF_LEFT - { IF_LEFT - { UNPAIR - /* [ string : nat : pair (big_map string nat) (big_map string nat) ] */ ; - DIP 2 - { UNPAIR /* [ big_map string nat : big_map string nat ] */ } - /* [ string : nat : big_map string nat : big_map string nat ] */ ; - DIP { SOME /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ } - { UNPAIR - /* [ string : nat : pair (big_map string nat) (big_map string nat) ] */ ; - DIP 2 - { UNPAIR - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : nat : big_map string nat : big_map string nat ] */ ; - DIP { SOME /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } } - { IF_LEFT - { DIP { UNPAIR /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { NONE nat /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ } - { DIP { UNPAIR - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - DIP { NONE nat /* [ option nat : big_map string nat : big_map string nat ] */ } - /* [ string : option nat : big_map string nat : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : big_map string nat ] */ } } } ; - PAIR - /* [ pair (big_map string nat) (big_map string nat) ] */ ; - NIL operation - /* [ list operation : pair (big_map string nat) (big_map string nat) ] */ ; - PAIR - /* [ pair (list operation) (big_map string nat) (big_map string nat) ] */ } } } -Well typed (Gas remaining: 1039956.880 units remaining) michelson_test_scripts/mini_scenarios/big_map_magic.tz -{ storage (or (pair (big_map string string) (big_map string string)) unit) ; - parameter - (or (unit %swap) - (or (or %reset (pair (big_map string string) (big_map string string)) unit) - (or (pair %import (list (pair string string)) (list (pair string string))) - (or (list %add (pair string string)) (list %rem string))))) ; - code { UNPAIR - /* [ or unit - (or (or (pair (big_map string string) (big_map string string)) unit) - (or (pair (list (pair string string)) (list (pair string string))) - (or (list (pair string string)) (list string)))) - : or (pair (big_map string string) (big_map string string)) unit ] */ ; - IF_LEFT - { DROP - /* [ or (pair (big_map string string) (big_map string string)) unit ] */ ; - ASSERT_LEFT ; - UNPAIR - /* [ big_map string string : big_map string string ] */ ; - SWAP - /* [ big_map string string : big_map string string ] */ ; - PAIR - /* [ pair (big_map string string) (big_map string string) ] */ ; - LEFT unit - /* [ or (pair (big_map string string) (big_map string string)) unit ] */ } - { IF_LEFT - { SWAP - /* [ or (pair (big_map string string) (big_map string string)) unit - : or (pair (big_map string string) (big_map string string)) unit ] */ ; - DROP - /* [ or (pair (big_map string string) (big_map string string)) unit ] */ } - { IF_LEFT - { DIP { ASSERT_RIGHT ; DROP /* [] */ } - /* [ pair (list (pair string string)) (list (pair string string)) ] */ ; - UNPAIR - /* [ list (pair string string) : list (pair string string) ] */ ; - DIP { EMPTY_BIG_MAP - string - string - /* [ big_map string string : list (pair string string) ] */ } - /* [ list (pair string string) : big_map string string - : list (pair string string) ] */ ; - ITER { UNPAIR - /* [ string : string : big_map string string : list (pair string string) ] */ ; - DIP { SOME - /* [ option string : big_map string string : list (pair string string) ] */ } - /* [ string : option string : big_map string string - : list (pair string string) ] */ ; - UPDATE - /* [ big_map string string : list (pair string string) ] */ } - /* [ big_map string string : list (pair string string) ] */ ; - SWAP - /* [ list (pair string string) : big_map string string ] */ ; - DIP { EMPTY_BIG_MAP string string - /* [ big_map string string : big_map string string ] */ } - /* [ list (pair string string) : big_map string string : big_map string string ] */ ; - ITER { UNPAIR - /* [ string : string : big_map string string : big_map string string ] */ ; - DIP { SOME /* [ option string : big_map string string : big_map string string ] */ } - /* [ string : option string : big_map string string : big_map string string ] */ ; - UPDATE - /* [ big_map string string : big_map string string ] */ } - /* [ big_map string string : big_map string string ] */ ; - SWAP - /* [ big_map string string : big_map string string ] */ ; - PAIR - /* [ pair (big_map string string) (big_map string string) ] */ ; - LEFT unit - /* [ or (pair (big_map string string) (big_map string string)) unit ] */ } - { IF_LEFT - { DIP { ASSERT_LEFT ; UNPAIR /* [ big_map string string : big_map string string ] */ } - /* [ list (pair string string) : big_map string string : big_map string string ] */ ; - ITER { UNPAIR - /* [ string : string : big_map string string : big_map string string ] */ ; - DIP { SOME /* [ option string : big_map string string : big_map string string ] */ } - /* [ string : option string : big_map string string : big_map string string ] */ ; - UPDATE - /* [ big_map string string : big_map string string ] */ } - /* [ big_map string string : big_map string string ] */ ; - PAIR - /* [ pair (big_map string string) (big_map string string) ] */ ; - LEFT unit - /* [ or (pair (big_map string string) (big_map string string)) unit ] */ } - { DIP { ASSERT_LEFT ; UNPAIR /* [ big_map string string : big_map string string ] */ } - /* [ list string : big_map string string : big_map string string ] */ ; - ITER { DIP { NONE string - /* [ option string : big_map string string : big_map string string ] */ } - /* [ string : option string : big_map string string : big_map string string ] */ ; - UPDATE - /* [ big_map string string : big_map string string ] */ } - /* [ big_map string string : big_map string string ] */ ; - PAIR - /* [ pair (big_map string string) (big_map string string) ] */ ; - LEFT unit - /* [ or (pair (big_map string string) (big_map string string)) unit ] */ } } } } ; - NIL operation - /* [ list operation - : or (pair (big_map string string) (big_map string string)) unit ] */ ; - PAIR - /* [ pair (list operation) (or (pair (big_map string string) (big_map string string)) unit) ] */ } } -Well typed (Gas remaining: 1039994.336 units remaining) michelson_test_scripts/mini_scenarios/big_map_read.tz -{ storage nat ; - parameter (big_map nat nat) ; - code { CAR - /* [ big_map nat nat ] */ ; - PUSH nat 1 - /* [ nat : big_map nat nat ] */ ; - GET - /* [ option nat ] */ ; - ASSERT_SOME ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039997.037 units remaining) michelson_test_scripts/mini_scenarios/big_map_store.tz -{ storage (big_map nat nat) ; - parameter unit ; - code { DROP - /* [] */ ; - EMPTY_BIG_MAP nat nat - /* [ big_map nat nat ] */ ; - NIL operation - /* [ list operation : big_map nat nat ] */ ; - PAIR - /* [ pair (list operation) (big_map nat nat) ] */ } } -Well typed (Gas remaining: 1039995.088 units remaining) michelson_test_scripts/mini_scenarios/big_map_write.tz -{ storage unit ; - parameter (big_map nat nat) ; - code { UNPAIR - /* [ big_map nat nat : unit ] */ ; - PUSH (option nat) (Some 1) - /* [ option nat : big_map nat nat : unit ] */ ; - PUSH nat 1 - /* [ nat : option nat : big_map nat nat : unit ] */ ; - UPDATE - /* [ big_map nat nat : unit ] */ ; - DROP - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039995.168 units remaining) michelson_test_scripts/mini_scenarios/cache_consistency.tz -{ parameter (or (unit %renew) (unit %keep)) ; - storage (big_map (nat :a) string) ; - code { UNPAIR - /* [ or unit unit : big_map nat string ] */ ; - IF_LEFT - { DROP 2 /* [] */ ; EMPTY_BIG_MAP nat string /* [ big_map nat string ] */ } - { DROP /* [ big_map nat string ] */ } ; - NIL operation - /* [ list operation : big_map nat string ] */ ; - PAIR - /* [ pair (list operation) (big_map nat string) ] */ } } -Well typed (Gas remaining: 1039986.487 units remaining) michelson_test_scripts/mini_scenarios/check_signature.tz -{ parameter (pair key signature bytes) ; - storage unit ; - code { CAR - /* [ pair key signature bytes ] */ ; - UNPAIR - /* [ key : pair signature bytes ] */ ; - SWAP - /* [ pair signature bytes : key ] */ ; - UNPAIR - /* [ signature : bytes : key ] */ ; - DUP 3 - /* [ key : signature : bytes : key ] */ ; - HASH_KEY - /* [ key_hash : signature : bytes : key ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : signature : bytes : key ] */ ; - SENDER - /* [ address : contract unit : signature : bytes : key ] */ ; - SWAP - /* [ contract unit : address : signature : bytes : key ] */ ; - ADDRESS - /* [ address : address : signature : bytes : key ] */ ; - COMPARE - /* [ int : signature : bytes : key ] */ ; - EQ - /* [ bool : signature : bytes : key ] */ ; - IF { /* [ signature : bytes : key ] */ } - { PUSH string "invalid signer" - /* [ string : signature : bytes : key ] */ ; - FAILWITH - /* [] */ } ; - DIG 2 - /* [ key : signature : bytes ] */ ; - CHECK_SIGNATURE - /* [ bool ] */ ; - IF { UNIT /* [ unit ] */ } - { PUSH string "invalid signature" /* [ string ] */ ; FAILWITH /* [] */ } ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039546.789 units remaining) michelson_test_scripts/mini_scenarios/constant_entrypoints.tz -{ parameter - (or (lambda %do - (constant "exprvKFFbc7SnPjkPZgyhaHewQhmrouNjNae3DpsQ8KuADn9i2WuJ8") - (list operation)) - (unit %default)) ; - storage key_hash ; - code { { { /* [ pair (or (lambda unit (list operation)) unit) key_hash ] */ - DUP - /* [ or (lambda unit (list operation)) unit - : pair (or (lambda unit (list operation)) unit) key_hash ] */ ; - CAR - /* [ or (lambda unit (list operation)) unit : key_hash ] */ ; - DIP { /* [ pair (or (lambda unit (list operation)) unit) key_hash ] */ CDR } } } ; - IF_LEFT - { /* [ lambda unit (list operation) : key_hash ] */ - PUSH mutez 0 /* [ mutez : mutez : lambda unit (list operation) : key_hash ] */ ; - AMOUNT ; - { { /* [ mutez : mutez : lambda unit (list operation) : key_hash ] */ - COMPARE - /* [ bool : lambda unit (list operation) : key_hash ] */ ; - EQ } ; - IF {} - { { /* [ lambda unit (list operation) : key_hash ] */ UNIT /* [] */ ; FAILWITH } } - /* [ lambda unit (list operation) : key_hash ] */ } ; - { /* [ lambda unit (list operation) : key_hash ] */ - DIP { /* [ key_hash ] */ DUP /* [ key_hash : lambda unit (list operation) : key_hash ] */ } ; - SWAP - /* [ contract unit : lambda unit (list operation) : key_hash ] */ } ; - IMPLICIT_ACCOUNT - /* [ address : lambda unit (list operation) : key_hash ] */ ; - ADDRESS - /* [ address : address : lambda unit (list operation) : key_hash ] */ ; - SENDER ; - { { /* [ address : address : lambda unit (list operation) : key_hash ] */ - COMPARE - /* [ bool : lambda unit (list operation) : key_hash ] */ ; - EQ } ; - IF {} - { { /* [ lambda unit (list operation) : key_hash ] */ - UNIT - /* [] */ ; - FAILWITH - /* [ unit : lambda unit (list operation) : key_hash ] */ } } - /* [ lambda unit (list operation) : key_hash ] */ } ; - UNIT - /* [ list operation : key_hash ] */ ; - EXEC - /* [ pair (list operation) key_hash ] */ ; - PAIR } - { /* [ unit : key_hash ] */ - DROP - /* [ list operation : key_hash ] */ ; - NIL operation /* [ pair (list operation) key_hash ] */ ; - PAIR } } } -Well typed (Gas remaining: 1039124.558 units remaining) michelson_test_scripts/mini_scenarios/constant_unit.tz -{ parameter (constant "exprvKFFbc7SnPjkPZgyhaHewQhmrouNjNae3DpsQ8KuADn9i2WuJ8") ; - storage (constant "exprvKFFbc7SnPjkPZgyhaHewQhmrouNjNae3DpsQ8KuADn9i2WuJ8") ; - code { /* [] */ - DROP ; - PUSH unit - /* [ list operation : unit ] */ - (constant - "expruJpGVgueH6vjZDZQRjgXUuHBi4Y6UQ3cbz6swP2FMVybvnDjm5" - /* [ pair (list operation) unit ] */) ; - NIL operation ; - PAIR } - /* [] */ } -Well typed (Gas remaining: 1039973.796 units remaining) michelson_test_scripts/mini_scenarios/create_contract.tz -{ parameter (option address) ; - storage unit ; - code { /* [ pair string string ] */ - CAR - /* [ list operation : string ] */ ; - IF_NONE - { /* [ list operation : string ] */ - PUSH string "dummy" - /* [ string ] */ ; - PUSH mutez 100000000 - /* [ mutez : string ] */ ; - NONE key_hash - /* [ option key_hash : mutez : string ] */ ; - CREATE_CONTRACT - { parameter string ; - storage string ; - code { CAR ; NIL operation ; PAIR } } - /* [ operation : address ] */ ; - DIP { SOME - /* [ option address ] */ ; - DIP { SELF - /* [ contract (option address) ] */ ; - PUSH mutez 0 - /* [ mutez : contract (option address) ] */ } - /* [ option address : mutez : contract (option address) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ } - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } - { SELF - /* [ contract (option address) : address ] */ ; - ADDRESS - /* [ address : address ] */ ; - SENDER - /* [ address : address : address ] */ ; - IFCMPNEQ { FAIL } { /* [ address ] */ } ; - CONTRACT string - /* [ option (contract string) ] */ ; - IF_SOME { /* [ contract string ] */ } { FAIL } ; - PUSH mutez 0 - /* [ mutez : contract string ] */ ; - PUSH string "abcdefg" - /* [ string : mutez : contract string ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } } -Well typed (Gas remaining: 1039992.212 units remaining) michelson_test_scripts/mini_scenarios/create_contract_simple.tz -{ parameter unit ; - storage unit ; - code { CAR - /* [ string ] */ ; - PUSH string "foo" /* [ pair (list operation) string ] */ - /* [ list operation : string ] */ ; - PUSH mutez 0 - /* [ mutez : string : unit ] */ ; - NONE key_hash - /* [ option key_hash : mutez : string : unit ] */ ; - CREATE_CONTRACT - { parameter string ; - storage string ; - code { CAR ; NIL operation ; PAIR } } - /* [ operation : address : unit ] */ ; - DROP - /* [ address : unit ] */ ; - DROP - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.856 units remaining) michelson_test_scripts/mini_scenarios/default_account.tz -{ parameter key_hash ; - storage unit ; - code { DIP { UNIT /* [ unit ] */ } - /* [ pair key_hash unit : unit ] */ ; - CAR - /* [ key_hash : unit ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : unit ] */ ; - PUSH mutez 100000000 - /* [ mutez : contract unit : unit ] */ ; - UNIT - /* [ unit : mutez : contract unit : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : unit ] */ ; - NIL operation - /* [ list operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.141 units remaining) michelson_test_scripts/mini_scenarios/emit_events.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - PUSH string "right" - /* [ string : unit ] */ ; - RIGHT nat - /* [ or nat string : unit ] */ ; - EMIT %tag1 - /* [ operation : unit ] */ ; - PUSH nat 2 - /* [ nat : operation : unit ] */ ; - LEFT string - /* [ or nat string : operation : unit ] */ ; - EMIT %tag2 (or (nat %int) (string %str)) - /* [ operation : operation : unit ] */ ; - NIL operation - /* [ list operation : operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : operation : unit ] */ ; - CONS - /* [ list operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039990.815 units remaining) michelson_test_scripts/mini_scenarios/execution_order_appender.tz -{ parameter unit ; - storage (pair address string) ; - code { CDR - /* [ pair address string ] */ ; - DUP - /* [ pair address string : pair address string ] */ ; - UNPAIR - /* [ address : string : pair address string ] */ ; - CONTRACT string - /* [ option (contract string) : string : pair address string ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract string : string : pair address string ] */ ; - DIG 2 - /* [ string : mutez : contract string : pair address string ] */ ; - TRANSFER_TOKENS - /* [ operation : pair address string ] */ ; - NIL operation - /* [ list operation : operation : pair address string ] */ ; - SWAP - /* [ operation : list operation : pair address string ] */ ; - CONS - /* [ list operation : pair address string ] */ ; - PAIR - /* [ pair (list operation) address string ] */ } } -Well typed (Gas remaining: 1039992.750 units remaining) michelson_test_scripts/mini_scenarios/execution_order_caller.tz -{ parameter unit ; - storage (list address) ; - code { CDR - /* [ list address ] */ ; - DUP - /* [ list address : list address ] */ ; - MAP { CONTRACT unit - /* [ option (contract unit) : list address ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract unit : list address ] */ ; - UNIT - /* [ unit : mutez : contract unit : list address ] */ ; - TRANSFER_TOKENS - /* [ operation : list address ] */ } - /* [ list operation : list address ] */ ; - PAIR - /* [ pair (list operation) (list address) ] */ } } -Well typed (Gas remaining: 1039997.089 units remaining) michelson_test_scripts/mini_scenarios/execution_order_storer.tz -{ parameter string ; - storage string ; - code { UNPAIR - /* [ string : string ] */ ; - SWAP - /* [ string : string ] */ ; - CONCAT - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039371.088 units remaining) michelson_test_scripts/mini_scenarios/fa12_reference.tz -{ parameter - (or (or (or (pair %transfer (address :from) (pair (address :to) (nat :value))) - (pair %approve (address :spender) (nat :value))) - (or (pair %getAllowance (pair (address :owner) (address :spender)) (contract nat)) - (or (pair %getBalance (address :owner) (contract nat)) - (pair %getTotalSupply unit (contract nat))))) - (or (or (bool %setPause) (address %setAdministrator)) - (or (pair %getAdministrator unit (contract address)) - (or (pair %mint (address :to) (nat :value)) (pair %burn (address :from) (nat :value)))))) ; - storage - (pair (big_map %ledger - (address :user) - (pair (nat :balance) (map :approvals (address :spender) (nat :value)))) - (pair (address %admin) (pair (bool %paused) (nat %totalSupply)))) ; - code { CAST (pair (or (or (or (pair address (pair address nat)) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat))))) - (pair (big_map address (pair nat (map address nat))) (pair address (pair bool nat)))) - /* [ pair (or (or (or (pair address address nat) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat))))) - (big_map address (pair nat (map address nat))) - address - bool - nat ] */ ; - DUP - /* [ pair (or (or (or (pair address address nat) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat))))) - (big_map address (pair nat (map address nat))) - address - bool - nat - : pair (or (or (or (pair address address nat) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat))))) - (big_map address (pair nat (map address nat))) - address - bool - nat ] */ ; - CAR - /* [ or (or (or (pair address address nat) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat)))) - : pair (or (or (or (pair address address nat) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat))))) - (big_map address (pair nat (map address nat))) - address - bool - nat ] */ ; - DIP { CDR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ or (or (or (pair address address nat) (pair address nat)) - (or (pair (pair address address) (contract nat)) - (or (pair address (contract nat)) (pair unit (contract nat))))) - (or (or bool address) - (or (pair unit (contract address)) (or (pair address nat) (pair address nat)))) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_LEFT - { IF_LEFT - { IF_LEFT - { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { UNIT - /* [ unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "TokenOperationsArePaused" - /* [ string : unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - COMPARE - /* [ int : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SENDER - /* [ address : address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - COMPARE - /* [ int : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SENDER - /* [ address : address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address : pair address address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { EMPTY_MAP - address - nat - /* [ map address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { CDR - /* [ map address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ pair address address : map address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : map address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { SENDER - /* [ address : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat : nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SUB - /* [ int : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { DIP { DUP - /* [ nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat : nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "NotEnoughAllowance" - /* [ string : pair nat nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string nat nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ address : nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : pair address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address address nat : pair address address nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DROP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { EMPTY_MAP - address - nat - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EMPTY_MAP - address - nat - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ nat : nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NONE nat - /* [ option nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { SOME - /* [ option nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DIP { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option nat : pair address address nat : map address nat - : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : option nat : map address nat - : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : option nat : map address nat - : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : option nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ map address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : map address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair nat (map address nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { SOME - /* [ option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR /* [ pair address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - DIP { DROP /* [ pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { NONE (pair nat (map address nat)) - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { EMPTY_MAP - address - nat - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SOME - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ADD - /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SOME - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - SWAP - /* [ pair address address nat : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ pair address nat : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR /* [ pair address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - DIP { DROP /* [ pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ int : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ADD - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH string - "Internal: Negative total supply" - /* [ string - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address bool nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair bool nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair bool nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - CDR - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : pair address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - DIP { DROP /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ ; - SWAP - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { CDR - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH nat - 0 - /* [ nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "NotEnoughBalance" - /* [ string : pair nat nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string nat nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SUB - /* [ int : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { CAR - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "NotEnoughBalance" - /* [ string : pair nat nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string nat nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SIZE - /* [ nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NONE (pair nat (map address nat)) - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { SOME - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - { SOME - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - SWAP - /* [ pair address address nat : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR /* [ pair address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - DIP { DROP /* [ pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NEG - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ int : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ADD - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH string - "Internal: Negative total supply" - /* [ string - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address bool nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair bool nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair bool nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - CDR - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : pair address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - DIP { DROP /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ ; - SWAP - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DROP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - NIL operation - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } - { SENDER - /* [ address : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { UNIT - /* [ unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "TokenOperationsArePaused" - /* [ string : unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { EMPTY_MAP - address - nat - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { CDR - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ pair address address nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DUP - /* [ nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { PUSH string - "UnsafeAllowanceChange" - /* [ string : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } } ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : address : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { EMPTY_MAP - address - nat - /* [ map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EMPTY_MAP - address - nat - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ nat : nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NONE nat - /* [ option nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { SOME - /* [ option nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DIP { DIP { DUP - /* [ pair address address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address address nat - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : pair address address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option nat : pair address address nat : map address nat - : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : option nat : map address nat - : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address nat : option nat : map address nat - : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : option nat : map address nat : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ map address nat : pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) - : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ map address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : map address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ map address nat : nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : map address nat : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address address nat : pair nat (map address nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair nat (map address nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { SOME - /* [ option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR /* [ pair address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - DIP { DROP /* [ pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } } - { IF_LEFT - { DUP - /* [ pair (pair address address) (contract nat) - : pair (pair address address) (contract nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ pair address address : pair (pair address address) (contract nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address - : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (pair address address) - (big_map address (pair nat (map address nat))) - address - bool - nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair (pair address address) - (big_map address (pair nat (map address nat))) - address - bool - nat - : pair (pair address address) - (big_map address (pair nat (map address nat))) - address - bool - nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ pair address address - : pair (pair address address) - (big_map address (pair nat (map address nat))) - address - bool - nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address address - : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address address : pair address address - : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { EMPTY_MAP - address - nat - /* [ map address nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { CDR - /* [ map address nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - /* [ pair address address : map address nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ address : map address nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { /* [ nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { AMOUNT - /* [ mutez : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : mutez : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation : operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ operation : list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CONS - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } - { IF_LEFT - { DUP - /* [ pair address (contract nat) : pair address (contract nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair address (contract nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address (big_map address (pair nat (map address nat))) address bool nat - : pair address (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair address (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { CAR - /* [ nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { AMOUNT - /* [ mutez : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : mutez : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation : operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ operation : list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CONS - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair unit (contract nat) : pair unit (contract nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ unit : pair unit (contract nat) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ unit : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ unit : pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair unit (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { AMOUNT - /* [ mutez : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : mutez : contract nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation : operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ operation : list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CONS - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } } } } - { IF_LEFT - { IF_LEFT - { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SENDER - /* [ address : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - COMPARE - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { UNIT - /* [ unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "SenderIsNotAdmin" - /* [ string : unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } } - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ bool : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address bool nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ bool : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair bool nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair bool nat : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ bool : bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - CDR - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : pair address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - DIP { DROP /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ ; - SWAP - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SENDER - /* [ address : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - COMPARE - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { UNIT - /* [ unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "SenderIsNotAdmin" - /* [ string : unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } } - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address bool nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address bool nat : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - CDR - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : pair address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - DIP { DROP /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ ; - SWAP - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } } - { IF_LEFT - { DUP - /* [ pair unit (contract address) : pair unit (contract address) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ unit : pair unit (contract address) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ unit : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ contract address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ unit : pair (big_map address (pair nat (map address nat))) address bool nat - : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair unit (big_map address (pair nat (map address nat))) address bool nat - : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { AMOUNT - /* [ mutez : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : mutez : contract address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - TRANSFER_TOKENS - /* [ operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation : operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ operation : list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CONS - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } - { IF_LEFT - { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SENDER - /* [ address : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - COMPARE - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { UNIT - /* [ unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "SenderIsNotAdmin" - /* [ string : unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { NONE (pair nat (map address nat)) - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { EMPTY_MAP - address - nat - /* [ map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SOME - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - { DIP { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ADD - /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SOME - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - SWAP - /* [ pair address nat : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address nat : pair address nat : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR /* [ pair address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - DIP { DROP /* [ pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ int : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ADD - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH string - "Internal: Negative total supply" - /* [ string - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address bool nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair bool nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair bool nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - CDR - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : pair address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - DIP { DROP /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ ; - SWAP - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DROP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } - { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SENDER - /* [ address : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - COMPARE - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { UNIT - /* [ unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "SenderIsNotAdmin" - /* [ string : unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string unit - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat - : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ big_map address (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : big_map address (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - GET - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH nat - 0 - /* [ nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "NotEnoughBalance" - /* [ string : pair nat nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string nat nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DUP - /* [ pair nat (map address nat) : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat : nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ nat : nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SUB - /* [ int : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { CAR - /* [ nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat : nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PUSH string - "NotEnoughBalance" - /* [ string : pair nat nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair string nat nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : map address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair nat (map address nat) : pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ pair address nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DUP - /* [ pair nat (map address nat) : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ map address nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SIZE - /* [ nat : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - INT - /* [ int : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - EQ - /* [ bool : pair nat (map address nat) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF { DROP - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NONE (pair nat (map address nat)) - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - { SOME - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } } - { SOME - /* [ option (pair nat (map address nat)) : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - SWAP - /* [ pair address nat : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ address : option (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ address : option (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - UPDATE - /* [ big_map address (pair nat (map address nat)) - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR /* [ pair address bool nat ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair address bool nat ] */ ; - CAR - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) - : big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - DIP { DROP /* [ pair address bool nat ] */ } - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DUP - /* [ pair address nat : pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NEG - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ int : nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ADD - /* [ int - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - ISNAT - /* [ option nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - IF_NONE - { PUSH string - "Internal: Negative total supply" - /* [ string - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair address bool nat : pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair bool nat : pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair bool nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - CDR - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DROP - /* [ bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ nat : bool : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ bool : nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair bool nat : address - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - SWAP - /* [ address : pair bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { DUP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DIP { CAR /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair (big_map address (pair nat (map address nat))) address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - CDR - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : pair address bool nat - : big_map address (pair nat (map address nat)) ] */ ; - DIP { DROP /* [ big_map address (pair nat (map address nat)) ] */ } - /* [ pair address bool nat : big_map address (pair nat (map address nat)) ] */ ; - SWAP - /* [ big_map address (pair nat (map address nat)) : pair address bool nat ] */ ; - PAIR - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ } - /* [ pair address nat - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - DROP - /* [ pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address (pair nat (map address nat))) address bool nat ] */ ; - PAIR - /* [ pair (list operation) (big_map address (pair nat (map address nat))) address bool nat ] */ } } } } } } -Well typed (Gas remaining: 1039995.761 units remaining) michelson_test_scripts/mini_scenarios/fail_on_false.tz -{ parameter bool ; - storage unit ; - code { UNPAIR - /* [ bool : unit ] */ ; - IF { NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } - { DROP /* [] */ ; PUSH string "bang" /* [ string ] */ ; FAILWITH /* [] */ } } } -Well typed (Gas remaining: 1039941.741 units remaining) michelson_test_scripts/mini_scenarios/generic_multisig.tz -{ parameter - (or (unit %default) - (pair %main - (pair :payload - (nat %counter) - (or :action - (lambda %operation unit (list operation)) - (pair %change_keys (nat %threshold) (list %keys key)))) - (list %sigs (option signature)))) ; - storage (pair (nat %stored_counter) (pair (nat %threshold) (list %keys key))) ; - code { UNPAIR - /* [ or unit - (pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature))) : pair nat nat (list key) ] */ ; - IF_LEFT - { DROP - /* [ pair nat nat (list key) ] */ ; - NIL operation - /* [ list operation : pair nat nat (list key) ] */ ; - PAIR - /* [ pair (list operation) nat nat (list key) ] */ } - { PUSH mutez - 0 - /* [ mutez - : pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature)) : pair nat nat (list key) ] */ ; - AMOUNT - /* [ mutez : mutez - : pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature)) : pair nat nat (list key) ] */ ; - ASSERT_CMPEQ ; - SWAP - /* [ pair nat nat (list key) - : pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature)) ] */ ; - DUP - /* [ pair nat nat (list key) : pair nat nat (list key) - : pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature)) ] */ ; - DIP { SWAP - /* [ pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature)) : pair nat nat (list key) ] */ } - /* [ pair nat nat (list key) - : pair (pair nat (or (lambda unit (list operation)) (pair nat (list key)))) - (list (option signature)) : pair nat nat (list key) ] */ ; - DIP { UNPAIR - /* [ pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - DUP - /* [ pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - SELF - /* [ contract unit - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - ADDRESS - /* [ address - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - CHAIN_ID - /* [ chain_id : address - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - PAIR - /* [ pair chain_id address - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - PAIR - /* [ pair (pair chain_id address) nat (or (lambda unit (list operation)) (pair nat (list key))) - : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - PACK - /* [ bytes : pair nat (or (lambda unit (list operation)) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - DIP { UNPAIR @counter - /* [ nat : or (lambda unit (list operation)) (pair nat (list key)) - : list (option signature) : pair nat nat (list key) ] */ ; - DIP { SWAP - /* [ list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ nat : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ bytes : nat : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - SWAP - /* [ nat : bytes : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ pair nat nat (list key) : nat : bytes : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - UNPAIR @stored_counter - /* [ nat : pair nat (list key) : nat : bytes : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DIP { SWAP - /* [ nat : pair nat (list key) : bytes : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ nat : nat : pair nat (list key) : bytes : list (option signature) - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - ASSERT_CMPEQ ; - DIP { SWAP - /* [ list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ pair nat (list key) : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - UNPAIR @threshold @keys - /* [ nat : list key : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DIP { PUSH @valid - nat - 0 - /* [ nat : list key : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - SWAP - /* [ list key : nat : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - ITER { DIP { SWAP - /* [ list (option signature) : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ key : list (option signature) : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - SWAP - /* [ list (option signature) : key : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - IF_CONS - { IF_SOME - { SWAP - /* [ list (option signature) : signature : key : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DIP { SWAP - /* [ key : signature : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DIP 2 - { DUP 2 - /* [ bytes : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ key : signature : bytes : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - { DUP 3 - /* [ bytes : key : signature : bytes : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DIP { CHECK_SIGNATURE - /* [ bool : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ bytes : bool : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - SWAP - /* [ bool : bytes : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - IF { DROP - /* [ nat : bytes : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - { FAILWITH /* [] */ } } ; - PUSH nat - 1 - /* [ nat : nat : bytes : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - ADD @valid - /* [ nat : bytes : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ list (option signature) : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - { SWAP - /* [ key : list (option signature) : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DROP - /* [ list (option signature) : nat : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } } - { FAIL } ; - SWAP - /* [ nat : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ nat : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } - /* [ nat : nat : list (option signature) : bytes - : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - ASSERT_CMPLE ; - IF_CONS - { FAIL } - { /* [ bytes : or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ } ; - DROP - /* [ or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - DIP { UNPAIR - /* [ nat : pair nat (list key) ] */ ; - PUSH nat 1 - /* [ nat : nat : pair nat (list key) ] */ ; - ADD @new_counter - /* [ nat : pair nat (list key) ] */ ; - PAIR - /* [ pair nat nat (list key) ] */ } - /* [ or (lambda unit (list operation)) (pair nat (list key)) - : pair nat nat (list key) ] */ ; - IF_LEFT - { UNIT - /* [ unit : lambda unit (list operation) : pair nat nat (list key) ] */ ; - EXEC - /* [ list operation : pair nat nat (list key) ] */ } - { DIP { CAR /* [ nat ] */ } - /* [ pair nat (list key) : nat ] */ ; - SWAP - /* [ nat : pair nat (list key) ] */ ; - PAIR - /* [ pair nat nat (list key) ] */ ; - NIL operation - /* [ list operation : pair nat nat (list key) ] */ } ; - PAIR - /* [ pair (list operation) nat nat (list key) ] */ } } } -Well typed (Gas remaining: 1039536.611 units remaining) michelson_test_scripts/mini_scenarios/groth16.tz -{ storage unit ; - parameter - (pair (pair (bls12_381_fr %input_x) (bls12_381_fr %input_y)) - (pair (pair (bls12_381_g1 %proof_a) (bls12_381_g2 %proof_b)) (bls12_381_g1 %proof_c))) ; - code { CAR - /* [ pair (pair bls12_381_fr bls12_381_fr) (pair bls12_381_g1 bls12_381_g2) bls12_381_g1 ] */ ; - UNPPAIPPAIIR ; - DIP 5 - { PUSH @vk_gamma_c - bls12_381_g1 - 0x063bd6e11e2fcaac1dd8cf68c6b1925a73c3c583e298ed37c41c3715115cf96358a42dbe85a0228cbfd8a6c8a8c54cd015b5ae2860d1cc47f84698d951f14d9448d03f04df2ca0ffe609a2067d6f1a892163a5e05e541279134cae52b1f23c6b - /* [ bls12_381_g1 ] */ ; - PUSH @vk_gamma_b - bls12_381_g1 - 0x11f5b5db1da7f1f26217edcce2219d016003af6e5b4d1ca3ad0ff477e354717e658bf16beddc4f4fb76ce39d3327811e0601709dc7ed98c70463cfa1ba33f99851b52b51d1a042d7425bec6277287441c399973632445ce61e7fdd63a70f0f60 - /* [ bls12_381_g1 : bls12_381_g1 ] */ ; - PUSH @vk_gamma_a - bls12_381_g1 - 0x03535a322edd23c55b0ca025e54d450d95df49cc9ee873dcd500e8219f4771264bf159b3b105954d85c7bea8ffe1ea0400c767fe58989366c2837fba76f1b4f46644f19be8ad01e22d894b649e427e0d7e04677ee3919d982f0f96bb0a2f0c34 - /* [ bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PUSH @vk_delta - bls12_381_g2 - 0x10c6d5cdca84fc3c7f33061add256f48e0ab03a697832b338901898b650419eb6f334b28153fb73ad2ecd1cd2ac67053161e9f46cfbdaf7b1132a4654a55162850249650f9b873ac3113fa8c02ef1cd1df481480a4457f351d28f4da89d19fa405c3d77f686dc9a24d2681c9184bf2b091f62e6b24df651a3da8bd7067e14e7908fb02f8955b84af5081614cb5bc49b416d9edf914fc608c441b3f2eb8b6043736ddb9d4e4d62334a23b5625c14ef3e1a7e99258386310221b22d83a5eac035c - /* [ bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PUSH @vk_gamma - bls12_381_g2 - 0x16dcbd28bff336c2649c7dd1d8391ac7ce6f7ef0124a9db7a4a485a124199eded7ce963c1c18aee1eca9994fe06f192c00e0fb653e1fc737d8d0e2f2f91424ca01f6e6e7c5c04f1c43db03a2900cf6b942aaed6ae77daea6200e094b78c38d770028d531a9d1a118ec23d5a39be7aa6dc28f778da1988856d2235c4a35e81fa48380f050d4baf7ebd7b5e058bf294da916afc34562f097c02a8fcbcf62a00de44f8ae6cfa7acb8ad254e3aeea8b2af12f65b7ee0f54855cb9bd432f3436f238f - /* [ bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PUSH @vk_b - bls12_381_g2 - 0x0e9383f98df2c6e8b5b45f3876c3384596a0cdbc41349f83c4380bf463a050cdbd1d5057aa483a642e66486d1ed7362a1869e423c3877095e215c17282b11108601166f928043254bbce603bf86f4cec9f2e97e9660e98e4f5bce9b2b3bbacb40946b702ccfcc9a31e0bfc1543a2128edcc95807740a2310ae25eb47b935648e392c58dfae5b5e899d3b970d64e4e9e209741ea8bfedcfcc16b3fd890ff02c788ec0943feaaf01bbb354317acb85fcfd611133e4e563d53ca4e0f50e21cf2e7e - /* [ bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g1 ] */ ; - PUSH @vk_a - bls12_381_g1 - 0x1040577c7d349e332735fc947c868c24a665f812f5dc1e7f60e65e2df80be2267a4b7341ed2287285fccd517acd96d910abba947235c364553aa6445f2f2b3a1a728225a330286ba5197ab87f0edc560d89fc7b623812f7d0d633341726e597a - /* [ bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g1 ] */ } - /* [ bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP - /* [ bls12_381_fr : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 12 - /* [ bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_fr : bls12_381_g1 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - MUL - /* [ bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 3 - /* [ bls12_381_fr : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 14 - /* [ bls12_381_g1 : bls12_381_fr : bls12_381_g1 : bls12_381_fr : bls12_381_fr - : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 - : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - MUL - /* [ bls12_381_g1 : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - ADD - /* [ bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 11 - /* [ bls12_381_g1 : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - ADD @vk_x - /* [ bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - NIL (pair bls12_381_g1 bls12_381_g2) - /* [ list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 : bls12_381_fr - : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g1 ] */ ; - DUP 9 - /* [ bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 - : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 9 - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - NEG - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PAIR - /* [ pair bls12_381_g1 bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - CONS - /* [ list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 : bls12_381_fr - : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g1 ] */ ; - DUP 11 - /* [ bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 - : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 8 - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - NEG - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PAIR - /* [ pair bls12_381_g1 bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - CONS - /* [ list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 : bls12_381_fr - : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g1 ] */ ; - DUP 10 - /* [ bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 - : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 3 - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - NEG - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PAIR - /* [ pair bls12_381_g1 bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - CONS - /* [ list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 : bls12_381_fr - : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g1 ] */ ; - DUP 6 - /* [ bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 - : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 - : bls12_381_g1 : bls12_381_g1 ] */ ; - DUP 6 - /* [ bls12_381_g1 : bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - PAIR - /* [ pair bls12_381_g1 bls12_381_g2 : list (pair bls12_381_g1 bls12_381_g2) - : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - CONS - /* [ list (pair bls12_381_g1 bls12_381_g2) : bls12_381_g1 : bls12_381_fr - : bls12_381_fr : bls12_381_g1 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g2 : bls12_381_g2 : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 - : bls12_381_g1 ] */ ; - PAIRING_CHECK - /* [ bool : bls12_381_g1 : bls12_381_fr : bls12_381_fr : bls12_381_g1 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g2 : bls12_381_g2 - : bls12_381_g2 : bls12_381_g1 : bls12_381_g1 : bls12_381_g1 ] */ ; - ASSERT ; - DROP 13 - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039992.602 units remaining) michelson_test_scripts/mini_scenarios/hardlimit.tz -{ parameter unit ; - storage int ; - code { CDR - /* [ int ] */ ; - DUP - /* [ int : int ] */ ; - PUSH int 0 - /* [ int : int : int ] */ ; - CMPLT ; - IF { PUSH int -1 /* [ int : int ] */ ; ADD /* [ int ] */ } { FAIL } ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039991.478 units remaining) michelson_test_scripts/mini_scenarios/large_error.tz -{ parameter int ; - storage unit ; - code { CAR - /* [ int ] */ ; - PUSH string "a" - /* [ string : int ] */ ; - SWAP - /* [ int : string ] */ ; - PUSH bool True - /* [ bool : int : string ] */ ; - LOOP { SWAP - /* [ string : int ] */ ; - DUP - /* [ string : string : int ] */ ; - CONCAT - /* [ string : int ] */ ; - SWAP - /* [ int : string ] */ ; - PUSH int -1 - /* [ int : int : string ] */ ; - ADD - /* [ int : string ] */ ; - DUP - /* [ int : int : string ] */ ; - GT - /* [ bool : int : string ] */ } - /* [ int : string ] */ ; - DROP - /* [ string ] */ ; - FAILWITH - /* [] */ } } -Well typed (Gas remaining: 1035239.092 units remaining) michelson_test_scripts/mini_scenarios/large_flat_contract.tz -{ parameter unit ; - storage unit ; - code { { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - { UNIT /* [ unit : pair unit unit ] */ ; DROP /* [ pair unit unit ] */ } ; - CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1032048.446 units remaining) michelson_test_scripts/mini_scenarios/large_str_id.tz -{ parameter (or int unit) ; - storage (pair string string) ; - code { UNPAIR - /* [ or int unit : pair string string ] */ ; - IF_LEFT - { DIP 1 { UNPAIR /* [ string : string ] */ ; DROP /* [ string ] */ } - /* [ int : string ] */ ; - DUP - /* [ int : int : string ] */ ; - NEQ - /* [ bool : int : string ] */ ; - LOOP { SWAP - /* [ string : int ] */ ; - DUP - /* [ string : string : int ] */ ; - CONCAT - /* [ string : int ] */ ; - SWAP - /* [ int : string ] */ ; - PUSH int 1 - /* [ int : int : string ] */ ; - SWAP - /* [ int : int : string ] */ ; - SUB - /* [ int : string ] */ ; - DUP - /* [ int : int : string ] */ ; - NEQ - /* [ bool : int : string ] */ } - /* [ int : string ] */ ; - DROP - /* [ string ] */ ; - DUP - /* [ string : string ] */ ; - PAIR - /* [ pair string string ] */ } - { DROP - /* [ pair string string ] */ ; - UNPAIR - /* [ string : string ] */ ; - DUP - /* [ string : string : string ] */ ; - DIP 1 { CONCAT /* [ string ] */ } - /* [ string : string ] */ ; - PAIR - /* [ pair string string ] */ } ; - NIL operation - /* [ list operation : pair string string ] */ ; - PAIR - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ ; - DUP - /* [ pair (list operation) string string : pair (list operation) string string ] */ ; - DROP - /* [ pair (list operation) string string ] */ } } -Well typed (Gas remaining: 1039945.396 units remaining) michelson_test_scripts/mini_scenarios/legacy_multisig.tz -{ parameter - (pair (pair :payload - (nat %counter) - (or :action - (pair :transfer (mutez %amount) (contract %dest unit)) - (or (option %delegate key_hash) - (pair %change_keys (nat %threshold) (list %keys key))))) - (list %sigs (option signature))) ; - storage (pair (nat %stored_counter) (pair (nat %threshold) (list %keys key))) ; - code { UNPAIR - /* [ pair (pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))))) - (list (option signature)) : pair nat nat (list key) ] */ ; - SWAP - /* [ pair nat nat (list key) - : pair (pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))))) - (list (option signature)) ] */ ; - DUP - /* [ pair nat nat (list key) : pair nat nat (list key) - : pair (pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))))) - (list (option signature)) ] */ ; - DIP { SWAP - /* [ pair (pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))))) - (list (option signature)) : pair nat nat (list key) ] */ } - /* [ pair nat nat (list key) - : pair (pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))))) - (list (option signature)) : pair nat nat (list key) ] */ ; - DIP { UNPAIR - /* [ pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - DUP - /* [ pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - SELF - /* [ contract - (pair (pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))))) - (list (option signature))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - ADDRESS - /* [ address - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - CHAIN_ID - /* [ chain_id : address - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - PAIR - /* [ pair chain_id address - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - PAIR - /* [ pair (pair chain_id address) - nat - (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - PACK - /* [ bytes - : pair nat (or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key)))) - : list (option signature) : pair nat nat (list key) ] */ ; - DIP { UNPAIR @counter - /* [ nat - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : list (option signature) : pair nat nat (list key) ] */ ; - DIP { SWAP - /* [ list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ nat : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ bytes : nat : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - SWAP - /* [ nat : bytes : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ pair nat nat (list key) : nat : bytes : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - UNPAIR @stored_counter - /* [ nat : pair nat (list key) : nat : bytes : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DIP { SWAP - /* [ nat : pair nat (list key) : bytes : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ nat : nat : pair nat (list key) : bytes : list (option signature) - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - ASSERT_CMPEQ ; - DIP { SWAP - /* [ list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ pair nat (list key) : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - UNPAIR @threshold @keys - /* [ nat : list key : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DIP { PUSH @valid - nat - 0 - /* [ nat : list key : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - SWAP - /* [ list key : nat : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - ITER { DIP { SWAP - /* [ list (option signature) : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ key : list (option signature) : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - SWAP - /* [ list (option signature) : key : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - IF_CONS - { IF_SOME - { SWAP - /* [ list (option signature) : signature : key : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DIP { SWAP - /* [ key : signature : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DIP 2 - { DUP 2 - /* [ bytes : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ key : signature : bytes : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - { DUP 3 - /* [ bytes : key : signature : bytes : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DIP { CHECK_SIGNATURE - /* [ bool : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ bytes : bool : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - SWAP - /* [ bool : bytes : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - IF { DROP - /* [ nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - { FAILWITH /* [] */ } } ; - PUSH nat - 1 - /* [ nat : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - ADD @valid - /* [ nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ list (option signature) : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - { SWAP - /* [ key : list (option signature) : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DROP - /* [ list (option signature) : nat : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } } - { FAIL } ; - SWAP - /* [ nat : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ nat : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ } - /* [ nat : nat : list (option signature) : bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - ASSERT_CMPLE ; - DROP - /* [ bytes - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DROP - /* [ or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - DIP { UNPAIR - /* [ nat : pair nat (list key) ] */ ; - PUSH nat 1 - /* [ nat : nat : pair nat (list key) ] */ ; - ADD @new_counter - /* [ nat : pair nat (list key) ] */ ; - PAIR - /* [ pair nat nat (list key) ] */ } - /* [ or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - NIL operation - /* [ list operation - : or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : pair nat nat (list key) ] */ ; - SWAP - /* [ or (pair mutez (contract unit)) (or (option key_hash) (pair nat (list key))) - : list operation : pair nat nat (list key) ] */ ; - IF_LEFT - { UNPAIR - /* [ mutez : contract unit : list operation : pair nat nat (list key) ] */ ; - UNIT - /* [ unit : mutez : contract unit : list operation : pair nat nat (list key) ] */ ; - TRANSFER_TOKENS - /* [ operation : list operation : pair nat nat (list key) ] */ ; - CONS - /* [ list operation : pair nat nat (list key) ] */ } - { IF_LEFT - { SET_DELEGATE - /* [ operation : list operation : pair nat nat (list key) ] */ ; - CONS - /* [ list operation : pair nat nat (list key) ] */ } - { DIP { SWAP - /* [ pair nat nat (list key) : list operation ] */ ; - CAR - /* [ nat : list operation ] */ } - /* [ pair nat (list key) : nat : list operation ] */ ; - SWAP - /* [ nat : pair nat (list key) : list operation ] */ ; - PAIR - /* [ pair nat nat (list key) : list operation ] */ ; - SWAP - /* [ list operation : pair nat nat (list key) ] */ } } ; - PAIR - /* [ pair (list operation) nat nat (list key) ] */ } } -Well typed (Gas remaining: 1039983.350 units remaining) michelson_test_scripts/mini_scenarios/lockup.tz -{ parameter unit ; - storage (pair timestamp (pair mutez address)) ; - code { CDR - /* [ pair timestamp mutez address ] */ ; - DUP - /* [ pair timestamp mutez address : pair timestamp mutez address ] */ ; - CAR - /* [ timestamp : pair timestamp mutez address ] */ ; - NOW - /* [ timestamp : timestamp : pair timestamp mutez address ] */ ; - CMPLT ; - IF { FAIL } { /* [ pair timestamp mutez address ] */ } ; - DUP - /* [ pair timestamp mutez address : pair timestamp mutez address ] */ ; - CDR - /* [ pair mutez address : pair timestamp mutez address ] */ ; - DUP - /* [ pair mutez address : pair mutez address : pair timestamp mutez address ] */ ; - CAR - /* [ mutez : pair mutez address : pair timestamp mutez address ] */ ; - DIP { CDR /* [ address : pair timestamp mutez address ] */ } - /* [ mutez : address : pair timestamp mutez address ] */ ; - DIP { CONTRACT unit - /* [ option (contract unit) : pair timestamp mutez address ] */ ; - ASSERT_SOME } - /* [ mutez : contract unit : pair timestamp mutez address ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair timestamp mutez address ] */ ; - TRANSFER_TOKENS - /* [ operation : pair timestamp mutez address ] */ ; - NIL operation - /* [ list operation : operation : pair timestamp mutez address ] */ ; - SWAP - /* [ operation : list operation : pair timestamp mutez address ] */ ; - CONS - /* [ list operation : pair timestamp mutez address ] */ ; - PAIR - /* [ pair (list operation) timestamp mutez address ] */ } } -Well typed (Gas remaining: 1039992.719 units remaining) michelson_test_scripts/mini_scenarios/loop.tz -{ parameter int ; - storage unit ; - code { CAR - /* [ int ] */ ; - DUP - /* [ int : int ] */ ; - GT - /* [ bool : int ] */ ; - LOOP { PUSH int 1 - /* [ int : int ] */ ; - SWAP - /* [ int : int ] */ ; - SUB - /* [ int ] */ ; - DUP - /* [ int : int ] */ ; - GT - /* [ bool : int ] */ } - /* [ int ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039751.719 units remaining) michelson_test_scripts/mini_scenarios/lqt_fa12.mligo.tz -{ parameter - (or (or (or (pair %approve (address %spender) (nat %value)) - (pair %getAllowance - (pair %request (address %owner) (address %spender)) - (contract %callback nat))) - (or (pair %getBalance (address %owner) (contract %callback nat)) - (pair %getTotalSupply (unit %request) (contract %callback nat)))) - (or (pair %mintOrBurn (int %quantity) (address %target)) - (pair %transfer (address %from) (pair (address %to) (nat %value))))) ; - storage - (pair (big_map %tokens address nat) - (pair (big_map %allowances (pair (address %owner) (address %spender)) nat) - (pair (address %admin) (nat %total_supply)))) ; - code { DUP - /* [ pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - CDR - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - PUSH mutez - 0 - /* [ mutez - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - AMOUNT - /* [ mutez : mutez - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - COMPARE - /* [ int - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - NEQ - /* [ bool - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - IF { PUSH string - "DontSendTez" - /* [ string - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } ; - SWAP - /* [ pair (or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat))) - (big_map address nat) - (big_map (pair address address) nat) - address - nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ or (or (or (pair address nat) (pair (pair address address) (contract nat))) - (or (pair address (contract nat)) (pair unit (contract nat)))) - (or (pair int address) (pair address address nat)) - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_LEFT - { IF_LEFT - { IF_LEFT - { SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address nat ] */ ; - DUG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address nat : pair address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 2 - /* [ pair address nat : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SENDER - /* [ address : address : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH nat - 0 - /* [ nat : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair address nat : nat : pair address address - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address nat : pair address nat : nat : pair address address - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ pair address nat : nat : pair address address - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : nat : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GT - /* [ bool : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH nat - 0 - /* [ nat : bool : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ big_map (pair address address) nat : nat : bool : pair address address - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ big_map (pair address address) nat : big_map (pair address address) nat - : nat : bool : pair address address : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ big_map (pair address address) nat : nat : bool : pair address address - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair address address : big_map (pair address address) nat : nat : bool - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address : pair address address - : big_map (pair address address) nat : nat : bool - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ pair address address : big_map (pair address address) nat : nat : bool - : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : nat : bool : pair address address - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : nat : bool : pair address address - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : nat : bool : pair address address - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - COMPARE - /* [ int : bool : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GT - /* [ bool : bool : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - AND - /* [ bool : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { PUSH string - "UnsafeAllowanceChange" - /* [ string : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 3 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address address : big_map (pair address address) nat - : pair address nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address address : big_map (pair address address) nat - : pair address nat ] */ ; - DUG 4 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat - : pair address address : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : pair address address - : big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ big_map (pair address address) nat : pair address nat - : pair address address : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair address nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH nat - 0 - /* [ nat : nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ nat : nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ nat : nat : nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 2 - /* [ nat : nat : nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - EQ - /* [ bool : nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { DROP - /* [ big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NONE nat - /* [ option nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { SOME - /* [ option nat : big_map (pair address address) nat : pair address nat - : pair address address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 3 - /* [ pair address address : option nat : big_map (pair address address) nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - UPDATE - /* [ big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map address nat - : pair (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (list operation) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } - { SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (pair address address) (contract nat) ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (pair address address) (contract nat) ] */ ; - DIG 2 - /* [ pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NIL operation - /* [ list operation : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair (pair address address) (contract nat) : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair (pair address address) (contract nat) - : pair (pair address address) (contract nat) : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 2 - /* [ pair (pair address address) (contract nat) : list operation - : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ contract nat : list operation : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH mutez - 0 - /* [ mutez : contract nat : list operation - : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : mutez : contract nat : list operation - : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : mutez - : contract nat : list operation : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map (pair address address) nat : mutez : contract nat : list operation - : pair (pair address address) (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair (pair address address) (contract nat) - : big_map (pair address address) nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ pair address address : big_map (pair address address) nat : mutez - : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - TRANSFER_TOKENS - /* [ operation : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CONS - /* [ list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (list operation) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } } - { IF_LEFT - { SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address (contract nat) ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address (contract nat) ] */ ; - DIG 2 - /* [ pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NIL operation - /* [ list operation : pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair address (contract nat) : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address (contract nat) : pair address (contract nat) : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 2 - /* [ pair address (contract nat) : list operation : pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ contract nat : list operation : pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH mutez - 0 - /* [ mutez : contract nat : list operation : pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : mutez : contract nat : list operation : pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map address nat : mutez : contract nat : list operation - : pair address (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair address (contract nat) : big_map address nat : mutez : contract nat - : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : big_map address nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - TRANSFER_TOKENS - /* [ operation : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CONS - /* [ list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (list operation) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } - { SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair unit (contract nat) ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair unit (contract nat) ] */ ; - DIG 2 - /* [ pair unit (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NIL operation - /* [ list operation : pair unit (contract nat) - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair unit (contract nat) : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH mutez - 0 - /* [ mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : mutez - : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : mutez : contract nat : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - TRANSFER_TOKENS - /* [ operation : list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CONS - /* [ list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (list operation) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } } } - { IF_LEFT - { SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair int address ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair int address ] */ ; - DUG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SENDER - /* [ address : address : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NEQ - /* [ bool : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { PUSH string - "OnlyAdmin" - /* [ string : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - FAILWITH - /* [] */ } - { /* [ pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DUP - /* [ pair int address : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : int : pair int address ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : int : pair int address ] */ ; - DUG 3 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map address nat : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair int address : big_map address nat : int - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair int address : pair int address : big_map address nat : int - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ pair int address : big_map address nat : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ address : big_map address nat : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - ADD - /* [ int : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - ISNAT - /* [ option nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH string - "Cannot burn more than the target's balance." - /* [ string : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - SWAP - /* [ pair int address : nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair int address : pair int address : nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 2 - /* [ pair int address : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ int : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : int : nat : pair int address ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : int : nat : pair int address ] */ ; - DUG 4 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : int : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : int : nat - : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : int : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : int : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - ADD - /* [ int : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - ABS - /* [ nat : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : nat : nat : pair int address ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : nat : nat : pair int address ] */ ; - DUG 4 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : nat : nat : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : nat : nat - : pair int address - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map (pair address address) nat) address nat : nat : nat - : pair int address ] */ ; - CAR - /* [ big_map address nat : pair (big_map (pair address address) nat) address nat - : nat : nat : pair int address ] */ ; - PUSH nat - 0 - /* [ nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat : nat - : pair int address ] */ ; - DIG 4 - /* [ nat : nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat - : pair int address ] */ ; - DUP - /* [ nat : nat : nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat - : pair int address ] */ ; - DUG 5 - /* [ nat : nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat : nat - : pair int address ] */ ; - COMPARE - /* [ int : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat : nat - : pair int address ] */ ; - EQ - /* [ bool : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat : nat - : pair int address ] */ ; - IF { DIG 3 - /* [ nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat - : pair int address ] */ ; - DROP - /* [ big_map address nat : pair (big_map (pair address address) nat) address nat - : nat : pair int address ] */ ; - NONE nat - /* [ option nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat - : pair int address ] */ } - { DIG 3 - /* [ nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat - : pair int address ] */ ; - SOME - /* [ option nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat - : pair int address ] */ } ; - DIG 4 - /* [ pair int address : option nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat ] */ ; - CDR - /* [ address : option nat : big_map address nat - : pair (big_map (pair address address) nat) address nat : nat ] */ ; - UPDATE - /* [ big_map address nat : pair (big_map (pair address address) nat) address nat - : nat ] */ ; - PAIR - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : nat ] */ ; - DUG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address nat ] */ ; - DUG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map address nat - : pair (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (list operation) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } - { SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address address nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address address nat ] */ ; - DUG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat : pair address address nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat : pair address address nat ] */ ; - DUG 3 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair address address nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ pair address address nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SENDER - /* [ address : address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - EQ - /* [ bool : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { SWAP - /* [ big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { SENDER - /* [ address : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair address address nat : address : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : address - : big_map address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ pair address address nat : address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ pair address address nat : pair address address : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : pair address address - : big_map address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ pair address address nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 3 - /* [ big_map (pair address address) nat : nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ big_map (pair address address) nat : big_map (pair address address) nat - : nat : pair address address : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ big_map (pair address address) nat : nat : pair address address - : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair address address : big_map (pair address address) nat : nat - : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address : pair address address - : big_map (pair address address) nat : nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ pair address address : big_map (pair address address) nat : nat - : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - SUB - /* [ int : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - ISNAT - /* [ option nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH string - "NotEnoughAllowance" - /* [ string : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat : pair address address : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 3 - /* [ big_map (pair address address) nat : nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH nat - 0 - /* [ nat : big_map (pair address address) nat : nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ nat : nat : big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ nat : nat : nat : big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ nat : nat : big_map (pair address address) nat : nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : big_map (pair address address) nat : nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - EQ - /* [ bool : big_map (pair address address) nat : nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { SWAP - /* [ nat : big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DROP - /* [ big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NONE nat - /* [ option nat : big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { SWAP - /* [ nat : big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SOME - /* [ option nat : big_map (pair address address) nat : pair address address - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 2 - /* [ pair address address : option nat : big_map (pair address address) nat - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - UPDATE - /* [ big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 2 - /* [ pair address address nat : big_map (pair address address) nat - : big_map address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat - : big_map (pair address address) nat : big_map address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ pair address address nat : big_map (pair address address) nat - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ big_map address nat : big_map address nat : nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ big_map address nat : nat : big_map (pair address address) nat - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair address address nat : big_map address nat : nat - : big_map (pair address address) nat : big_map address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : big_map address nat - : nat : big_map (pair address address) nat : big_map address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 5 - /* [ pair address address nat : big_map address nat : nat - : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : big_map address nat : nat : big_map (pair address address) nat - : big_map address nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - SUB - /* [ int : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - ISNAT - /* [ option nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH string - "NotEnoughBalance" - /* [ string : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - FAILWITH - /* [] */ } - { /* [ nat : big_map (pair address address) nat : big_map address nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 2 - /* [ big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH nat - 0 - /* [ nat : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ nat : nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ nat : nat : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - EQ - /* [ bool : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { SWAP - /* [ nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DROP - /* [ big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NONE nat - /* [ option nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { SWAP - /* [ nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SOME - /* [ option nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 3 - /* [ pair address address nat : option nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : option nat - : big_map address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 4 - /* [ pair address address nat : option nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : option nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - UPDATE - /* [ big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair address address nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ pair address address nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ big_map address nat : big_map address nat : nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 2 - /* [ big_map address nat : nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 4 - /* [ pair address address nat : big_map address nat : nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ pair address address nat : pair address address nat : big_map address nat - : nat : big_map address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 5 - /* [ pair address address nat : big_map address nat : nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : big_map address nat : nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : big_map address nat : nat : big_map address nat - : big_map (pair address address) nat : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - GET - /* [ option nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF_NONE - { PUSH nat - 0 - /* [ nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { /* [ nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - ADD - /* [ nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PUSH nat - 0 - /* [ nat : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUP - /* [ nat : nat : nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DUG 3 - /* [ nat : nat : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - COMPARE - /* [ int : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - EQ - /* [ bool : big_map address nat : nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - IF { SWAP - /* [ nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DROP - /* [ big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NONE nat - /* [ option nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } - { SWAP - /* [ nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SOME - /* [ option nat : big_map address nat : big_map (pair address address) nat - : pair address address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ } ; - DIG 3 - /* [ pair address address nat : option nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CDR - /* [ pair address nat : option nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ address : option nat : big_map address nat - : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - UPDATE - /* [ big_map address nat : big_map (pair address address) nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - DIG 2 - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map address nat : big_map (pair address address) nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat : big_map address nat - : big_map (pair address address) nat ] */ ; - SWAP - /* [ big_map address nat : pair (big_map (pair address address) nat) address nat - : big_map (pair address address) nat ] */ ; - PAIR - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat ] */ ; - DUP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat ] */ ; - CDR - /* [ pair (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat ] */ ; - CDR - /* [ pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat - : big_map (pair address address) nat ] */ ; - DIG 2 - /* [ big_map (pair address address) nat : pair address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (big_map (pair address address) nat) address nat - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - SWAP - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat - : pair (big_map (pair address address) nat) address nat ] */ ; - CAR - /* [ big_map address nat - : pair (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - NIL operation - /* [ list operation - : pair (big_map address nat) (big_map (pair address address) nat) address nat ] */ ; - PAIR - /* [ pair (list operation) - (big_map address nat) - (big_map (pair address address) nat) - address - nat ] */ } } } } -Well typed (Gas remaining: 1039928.626 units remaining) michelson_test_scripts/mini_scenarios/multiple_en2.tz -{ parameter unit ; - storage (option address) ; - code { SENDER - /* [ address : pair unit (option address) ] */ ; - SELF - /* [ contract unit : address : pair unit (option address) ] */ ; - ADDRESS - /* [ address : address : pair unit (option address) ] */ ; - { /* [ pair (or (or nat nat) unit) int ] */ - COMPARE - /* [ mutez : mutez : pair (or (or nat nat) unit) int ] */ ; - EQ - /* [ bool : pair unit (option address) ] */ ; - IF { CDR - /* [ option address ] */ ; - { /* [ mutez : mutez : pair (or (or nat nat) unit) int ] */ - IF_NONE - { { /* [ pair (or (or nat nat) unit) int ] */ UNIT /* [ unit ] */ ; FAILWITH /* [] */ } } - { /* [ pair (or (or nat nat) unit) int ] */ } - /* [ bool : pair (or (or nat nat) unit) int ] */ } ; - DIP { NIL operation - /* [ pair (or (or nat nat) unit) int : pair (or (or nat nat) unit) int ] */ - /* [ list operation ] */ } - /* [] */ ; - DUP - /* [ or (or nat nat) unit : pair (or (or nat nat) unit) int ] */ ; - CONTRACT %add unit - /* [ or (or nat nat) unit : int ] */ ; - { /* [ pair (or (or nat nat) unit) int ] */ - IF_NONE - { /* [ address : list operation ] */ } - { { UNIT /* [ int ] */ ; FAILWITH /* [] */ } } } ; - DUP - /* [ int : nat ] */ ; - CONTRACT %fact nat - /* [ int ] */ ; - { /* [ unit : int ] */ - IF_NONE { /* [] */ } { { UNIT /* [ list operation : int ] */ ; FAILWITH /* [] */ } } - /* [] */ } ; - DUP - /* [ pair (list operation) int ] */ ; - CONTRACT %add nat - /* [ option (contract nat) : address : list operation ] */ ; - { IF_NONE - { { UNIT /* [ unit : address : list operation ] */ ; FAILWITH /* [] */ } } - { /* [ contract nat : address : list operation ] */ } } ; - PUSH mutez 0 - /* [ mutez : contract nat : address : list operation ] */ ; - PUSH nat 12 - /* [ nat : mutez : contract nat : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT unit - /* [ option (contract unit) : address : list operation ] */ ; - { IF_NONE - { { UNIT /* [ unit : address : list operation ] */ ; FAILWITH /* [] */ } } - { /* [ contract unit : address : list operation ] */ } } ; - PUSH mutez 0 - /* [ mutez : contract unit : address : list operation ] */ ; - PUSH unit Unit - /* [ unit : mutez : contract unit : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %sub nat - /* [ option (contract nat) : address : list operation ] */ ; - { IF_NONE - { { UNIT /* [ unit : address : list operation ] */ ; FAILWITH /* [] */ } } - { /* [ contract nat : address : list operation ] */ } } ; - PUSH mutez 0 - /* [ mutez : contract nat : address : list operation ] */ ; - PUSH nat 3 - /* [ nat : mutez : contract nat : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %add nat - /* [ option (contract nat) : address : list operation ] */ ; - { IF_NONE - { { UNIT /* [ unit : address : list operation ] */ ; FAILWITH /* [] */ } } - { /* [ contract nat : address : list operation ] */ } } ; - PUSH mutez 0 - /* [ mutez : contract nat : address : list operation ] */ ; - PUSH nat 5 - /* [ nat : mutez : contract nat : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DROP - /* [ list operation ] */ ; - DIP { NONE address /* [ option address ] */ } - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } - { CAR - /* [ unit ] */ ; - DUP - /* [ unit : unit ] */ ; - DIP { DIP { PUSH int 0 - /* [ int ] */ ; - PUSH mutez 0 - /* [ mutez : int ] */ ; - NONE key_hash - /* [ option key_hash : mutez : int ] */ } - /* [ unit : option key_hash : mutez : int ] */ ; - DROP - /* [ option key_hash : mutez : int ] */ ; - CREATE_CONTRACT - { parameter (or (or (nat %add) (nat %sub)) (unit %default)) ; - storage int ; - code { AMOUNT ; - PUSH mutez 0 ; - { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; - { { DUP ; CAR ; DIP { CDR } } } ; - IF_LEFT - { IF_LEFT { ADD } { SWAP ; SUB } } - { DROP ; DROP ; PUSH int 0 } ; - NIL operation ; - PAIR } } - /* [ operation : address ] */ } - /* [ unit : operation : address ] */ ; - DIP { SELF - /* [ contract unit : operation : address ] */ ; - PUSH mutez 0 - /* [ mutez : contract unit : operation : address ] */ } - /* [ unit : mutez : contract unit : operation : address ] */ ; - TRANSFER_TOKENS - /* [ operation : operation : address ] */ ; - NIL operation - /* [ list operation : operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : operation : address ] */ ; - CONS - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - DIP { SOME /* [ option address ] */ } - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } } } -Well typed (Gas remaining: 1039931.343 units remaining) michelson_test_scripts/mini_scenarios/multiple_entrypoints_counter.tz -{ parameter unit ; - storage (option address) ; - code { SENDER - /* [ address : pair unit (option address) ] */ ; - SELF - /* [ contract unit : address : pair unit (option address) ] */ ; - ADDRESS - /* [ address : address : pair unit (option address) ] */ ; - IFCMPEQ - { CDR - /* [ option address ] */ ; - ASSERT_SOME - /* [ int : pair (or (or nat nat) unit) int ] */ ; - DIP { /* [ pair (or (or nat nat) unit) int ] */ NIL operation /* [ list operation ] */ } - /* [] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %add - unit - /* [ int ] */ - /* [ option (contract unit) : address : list operation ] */ ; - ASSERT_NONE ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %fact - nat - /* [ list operation : int ] */ - /* [ option (contract nat) : address : list operation ] */ ; - ASSERT_NONE ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %add nat - /* [ option (contract nat) : address : list operation ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract nat : address : list operation ] */ ; - PUSH nat 12 - /* [ nat : mutez : contract nat : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT unit - /* [ option (contract unit) : address : list operation ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract unit : address : list operation ] */ ; - PUSH unit Unit - /* [ unit : mutez : contract unit : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %sub nat - /* [ option (contract nat) : address : list operation ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract nat : address : list operation ] */ ; - PUSH nat 3 - /* [ nat : mutez : contract nat : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DUP - /* [ address : address : list operation ] */ ; - CONTRACT %add nat - /* [ option (contract nat) : address : list operation ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract nat : address : list operation ] */ ; - PUSH nat 5 - /* [ nat : mutez : contract nat : address : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : address : list operation ] */ ; - SWAP - /* [ address : operation : list operation ] */ ; - DIP { CONS /* [ list operation ] */ } - /* [ address : list operation ] */ ; - DROP - /* [ list operation ] */ ; - DIP { NONE address /* [ option address ] */ } - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } - { CAR - /* [ unit ] */ ; - DUP - /* [ unit : unit ] */ ; - DIP { DIP { PUSH int 0 - /* [ int ] */ ; - PUSH mutez 0 - /* [ mutez : int ] */ ; - NONE key_hash - /* [ option key_hash : mutez : int ] */ } - /* [ unit : option key_hash : mutez : int ] */ ; - DROP - /* [ option key_hash : mutez : int ] */ ; - CREATE_CONTRACT - { parameter (or (or (nat %add) (nat %sub)) (unit %default)) ; - storage int ; - code { AMOUNT ; - PUSH mutez 0 ; - ASSERT_CMPEQ ; - UNPAIR ; - IF_LEFT - { IF_LEFT { ADD } { SWAP ; SUB } } - { DROP ; DROP ; PUSH int 0 } ; - NIL operation ; - PAIR } } - /* [ operation : address ] */ } - /* [ unit : operation : address ] */ ; - DIP { SELF - /* [ contract unit : operation : address ] */ ; - PUSH mutez 0 - /* [ mutez : contract unit : operation : address ] */ } - /* [ unit : mutez : contract unit : operation : address ] */ ; - TRANSFER_TOKENS - /* [ operation : operation : address ] */ ; - NIL operation - /* [ list operation : operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : operation : address ] */ ; - CONS - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - DIP { SOME /* [ option address ] */ } - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } - /* [ mutez : pair (or (or nat nat) unit) int ] */ } } -Well typed (Gas remaining: 1039997.849 units remaining) michelson_test_scripts/mini_scenarios/multisig_dest_entrypoint.tz -{ parameter (or (unit %a) (string %b)) ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.849 units remaining) michelson_test_scripts/mini_scenarios/multisig_dest_entrypoint_arg.tz -{ parameter (or (int %a) (string %b)) ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/mini_scenarios/nat_id.tz -{ parameter nat ; - storage nat ; - code { CAR - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/mini_scenarios/noop_bytes.tz -{ parameter bytes ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.446 units remaining) michelson_test_scripts/mini_scenarios/originate_contract.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [ unit ] */ ; - UNIT - /* [ list operation : unit ] */ ; - AMOUNT - /* [ mutez : unit ] */ ; - NONE key_hash - /* [ pair (list operation) unit ] */ ; - CREATE_CONTRACT - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } - /* [ operation : address ] */ ; - DIP { DROP - /* [] */ ; - PUSH unit Unit - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ } - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039942.668 units remaining) michelson_test_scripts/mini_scenarios/parameterized_multisig.tz -{ storage (pair bool (pair (map nat (pair bool bool)) (pair key key))) ; - parameter (or nat (pair signature nat)) ; - code { DUP - /* [ pair (or nat (pair signature nat)) bool (map nat (pair bool bool)) key key - : pair (or nat (pair signature nat)) bool (map nat (pair bool bool)) key key ] */ ; - CAR - /* [ or nat (pair signature nat) - : pair (or nat (pair signature nat)) bool (map nat (pair bool bool)) key key ] */ ; - DIP { CDDR } - /* [ or nat (pair signature nat) : pair (map nat (pair bool bool)) key key ] */ ; - IF_LEFT - { DIP { DUP - /* [ pair (map nat (pair bool bool)) key key - : pair (map nat (pair bool bool)) key key ] */ ; - CAR - /* [ map nat (pair bool bool) : pair (map nat (pair bool bool)) key key ] */ } - /* [ nat : map nat (pair bool bool) : pair (map nat (pair bool bool)) key key ] */ ; - GET - /* [ option (pair bool bool) : pair (map nat (pair bool bool)) key key ] */ ; - IF_NONE - { PUSH bool False /* [ bool : pair (map nat (pair bool bool)) key key ] */ } - { DUP - /* [ pair bool bool : pair bool bool : pair (map nat (pair bool bool)) key key ] */ ; - CAR - /* [ bool : pair bool bool : pair (map nat (pair bool bool)) key key ] */ ; - DIP { CDR /* [ bool : pair (map nat (pair bool bool)) key key ] */ } - /* [ bool : bool : pair (map nat (pair bool bool)) key key ] */ ; - AND - /* [ bool : pair (map nat (pair bool bool)) key key ] */ } ; - PAIR - /* [ pair bool (map nat (pair bool bool)) key key ] */ } - { DUP - /* [ pair signature nat : pair signature nat - : pair (map nat (pair bool bool)) key key ] */ ; - CAR - /* [ signature : pair signature nat : pair (map nat (pair bool bool)) key key ] */ ; - DIP { CDR - /* [ nat : pair (map nat (pair bool bool)) key key ] */ ; - DUP - /* [ nat : nat : pair (map nat (pair bool bool)) key key ] */ ; - PACK - /* [ bytes : nat : pair (map nat (pair bool bool)) key key ] */ ; - BLAKE2B - /* [ bytes : nat : pair (map nat (pair bool bool)) key key ] */ } - /* [ signature : bytes : nat : pair (map nat (pair bool bool)) key key ] */ ; - PAIR - /* [ pair signature bytes : nat : pair (map nat (pair bool bool)) key key ] */ ; - SWAP - /* [ nat : pair signature bytes : pair (map nat (pair bool bool)) key key ] */ ; - DIP { DIP { DUP - /* [ pair (map nat (pair bool bool)) key key - : pair (map nat (pair bool bool)) key key ] */ ; - CDR - /* [ pair key key : pair (map nat (pair bool bool)) key key ] */ ; - DIP { CAR /* [ map nat (pair bool bool) ] */ } - /* [ pair key key : map nat (pair bool bool) ] */ ; - DUP - /* [ pair key key : pair key key : map nat (pair bool bool) ] */ } - /* [ pair signature bytes : pair key key : pair key key - : map nat (pair bool bool) ] */ ; - SWAP - /* [ pair key key : pair signature bytes : pair key key - : map nat (pair bool bool) ] */ ; - CAR - /* [ key : pair signature bytes : pair key key : map nat (pair bool bool) ] */ ; - DIP { DUP - /* [ pair signature bytes : pair signature bytes : pair key key - : map nat (pair bool bool) ] */ ; - UNPAIR - /* [ signature : bytes : pair signature bytes : pair key key - : map nat (pair bool bool) ] */ } - /* [ key : signature : bytes : pair signature bytes : pair key key - : map nat (pair bool bool) ] */ ; - CHECK_SIGNATURE - /* [ bool : pair signature bytes : pair key key : map nat (pair bool bool) ] */ } - /* [ nat : bool : pair signature bytes : pair key key - : map nat (pair bool bool) ] */ ; - SWAP - /* [ bool : nat : pair signature bytes : pair key key - : map nat (pair bool bool) ] */ ; - IF { DIP { DROP - /* [ pair key key : map nat (pair bool bool) ] */ ; - SWAP - /* [ map nat (pair bool bool) : pair key key ] */ ; - DUP - /* [ map nat (pair bool bool) : map nat (pair bool bool) : pair key key ] */ } - /* [ nat : map nat (pair bool bool) : map nat (pair bool bool) : pair key key ] */ ; - DUP - /* [ nat : nat : map nat (pair bool bool) : map nat (pair bool bool) - : pair key key ] */ ; - DIP { GET - /* [ option (pair bool bool) : map nat (pair bool bool) : pair key key ] */ ; - IF_NONE - { PUSH (pair bool bool) - (Pair False False) - /* [ pair bool bool : map nat (pair bool bool) : pair key key ] */ } - { /* [ pair bool bool : map nat (pair bool bool) : pair key key ] */ } ; - CDR - /* [ bool : map nat (pair bool bool) : pair key key ] */ ; - PUSH bool True - /* [ bool : bool : map nat (pair bool bool) : pair key key ] */ ; - PAIR - /* [ pair bool bool : map nat (pair bool bool) : pair key key ] */ ; - SOME - /* [ option (pair bool bool) : map nat (pair bool bool) : pair key key ] */ } - /* [ nat : option (pair bool bool) : map nat (pair bool bool) : pair key key ] */ } - { DIP { DIP { DUP - /* [ pair key key : pair key key : map nat (pair bool bool) ] */ ; - CDR - /* [ key : pair key key : map nat (pair bool bool) ] */ } - /* [ pair signature bytes : key : pair key key : map nat (pair bool bool) ] */ ; - SWAP - /* [ key : pair signature bytes : pair key key : map nat (pair bool bool) ] */ ; - DIP { UNPAIR /* [ signature : bytes : pair key key : map nat (pair bool bool) ] */ } - /* [ key : signature : bytes : pair key key : map nat (pair bool bool) ] */ ; - CHECK_SIGNATURE - /* [ bool : pair key key : map nat (pair bool bool) ] */ } - /* [ nat : bool : pair key key : map nat (pair bool bool) ] */ ; - SWAP - /* [ bool : nat : pair key key : map nat (pair bool bool) ] */ ; - IF { DUP - /* [ nat : nat : pair key key : map nat (pair bool bool) ] */ ; - DIP { DIP { SWAP - /* [ map nat (pair bool bool) : pair key key ] */ ; - DUP - /* [ map nat (pair bool bool) : map nat (pair bool bool) : pair key key ] */ } - /* [ nat : map nat (pair bool bool) : map nat (pair bool bool) : pair key key ] */ ; - GET - /* [ option (pair bool bool) : map nat (pair bool bool) : pair key key ] */ } - /* [ nat : option (pair bool bool) : map nat (pair bool bool) : pair key key ] */ ; - SWAP - /* [ option (pair bool bool) : nat : map nat (pair bool bool) : pair key key ] */ ; - IF_NONE - { PUSH (pair bool bool) - (Pair False False) - /* [ pair bool bool : nat : map nat (pair bool bool) : pair key key ] */ } - { /* [ pair bool bool : nat : map nat (pair bool bool) : pair key key ] */ } ; - CAR - /* [ bool : nat : map nat (pair bool bool) : pair key key ] */ ; - PUSH bool True - /* [ bool : bool : nat : map nat (pair bool bool) : pair key key ] */ ; - SWAP - /* [ bool : bool : nat : map nat (pair bool bool) : pair key key ] */ ; - PAIR - /* [ pair bool bool : nat : map nat (pair bool bool) : pair key key ] */ ; - SOME - /* [ option (pair bool bool) : nat : map nat (pair bool bool) : pair key key ] */ ; - SWAP - /* [ nat : option (pair bool bool) : map nat (pair bool bool) : pair key key ] */ } - { FAIL } } ; - UPDATE - /* [ map nat (pair bool bool) : pair key key ] */ ; - PAIR - /* [ pair (map nat (pair bool bool)) key key ] */ ; - PUSH bool False - /* [ bool : pair (map nat (pair bool bool)) key key ] */ ; - PAIR - /* [ pair bool (map nat (pair bool bool)) key key ] */ } ; - NIL operation - /* [ list operation : pair bool (map nat (pair bool bool)) key key ] */ ; - PAIR - /* [ pair (list operation) bool (map nat (pair bool bool)) key key ] */ } } -Well typed (Gas remaining: 1039980.814 units remaining) michelson_test_scripts/mini_scenarios/parsable_contract.tz -{ parameter int ; - storage (map int address) ; - code { UNPAIR - /* [ int : map int address ] */ ; - PUSH int 0 - /* [ int : int : map int address ] */ ; - SWAP - /* [ int : int : map int address ] */ ; - DUP - /* [ int : int : int : map int address ] */ ; - DUG 2 - /* [ int : int : int : map int address ] */ ; - COMPARE - /* [ int : int : map int address ] */ ; - GT - /* [ bool : int : map int address ] */ ; - IF { SWAP - /* [ map int address : int ] */ ; - SENDER - /* [ address : map int address : int ] */ ; - DIG 2 - /* [ int : address : map int address ] */ ; - SWAP - /* [ address : int : map int address ] */ ; - SOME - /* [ option address : int : map int address ] */ ; - SWAP - /* [ int : option address : map int address ] */ ; - UPDATE - /* [ map int address ] */ } - { SWAP - /* [ map int address : int ] */ ; - DROP - /* [ int ] */ ; - PUSH int 0 - /* [ int : int ] */ ; - SWAP - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - LT - /* [ bool ] */ ; - IF { PUSH string "NEGATIVE_INT" /* [ string ] */ ; FAILWITH /* [] */ } - { PUSH unit Unit - /* [ unit ] */ ; - LEFT (map int address) - /* [ or unit (map int address) ] */ ; - LOOP_LEFT - { DROP - /* [] */ ; - PUSH unit Unit - /* [ unit ] */ ; - LEFT (map int address) - /* [ or unit (map int address) ] */ } - /* [ map int address ] */ } } ; - NIL operation - /* [ list operation : map int address ] */ ; - PAIR - /* [ pair (list operation) (map int address) ] */ } } -Well typed (Gas remaining: 1039997.247 units remaining) michelson_test_scripts/mini_scenarios/receive_tickets_in_big_map.tz -{ parameter (big_map int (ticket string)) ; - storage (big_map int (ticket string)) ; - code { CAR - /* [ big_map int (ticket string) ] */ ; - NIL operation - /* [ list operation : big_map int (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (big_map int (ticket string)) ] */ } } -Well typed (Gas remaining: 1039990.816 units remaining) michelson_test_scripts/mini_scenarios/replay.tz -{ parameter unit ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - SOURCE - /* [ address : list operation : unit ] */ ; - CONTRACT unit - /* [ option (contract unit) : list operation : unit ] */ ; - ASSERT_SOME ; - PUSH mutez 1 - /* [ mutez : contract unit : list operation : unit ] */ ; - UNIT - /* [ unit : mutez : contract unit : list operation : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : list operation : unit ] */ ; - DUP - /* [ operation : operation : list operation : unit ] */ ; - DIP { CONS /* [ list operation : unit ] */ } - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039979.048 units remaining) michelson_test_scripts/mini_scenarios/reveal_signed_preimage.tz -{ parameter (pair bytes signature) ; - storage (pair bytes key) ; - code { DUP - /* [ pair (pair bytes signature) bytes key - : pair (pair bytes signature) bytes key ] */ ; - UNPAIR - /* [ pair bytes signature : pair bytes key - : pair (pair bytes signature) bytes key ] */ ; - CAR - /* [ bytes : pair bytes key : pair (pair bytes signature) bytes key ] */ ; - SHA256 - /* [ bytes : pair bytes key : pair (pair bytes signature) bytes key ] */ ; - DIP { CAR /* [ bytes : pair (pair bytes signature) bytes key ] */ } - /* [ bytes : bytes : pair (pair bytes signature) bytes key ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (pair bytes signature) bytes key - : pair (pair bytes signature) bytes key ] */ ; - UNPAIR - /* [ pair bytes signature : pair bytes key - : pair (pair bytes signature) bytes key ] */ ; - SWAP - /* [ pair bytes key : pair bytes signature - : pair (pair bytes signature) bytes key ] */ ; - DIP { UNPAIR - /* [ bytes : signature : pair (pair bytes signature) bytes key ] */ ; - SWAP - /* [ signature : bytes : pair (pair bytes signature) bytes key ] */ } - /* [ pair bytes key : signature : bytes - : pair (pair bytes signature) bytes key ] */ ; - CDR - /* [ key : signature : bytes : pair (pair bytes signature) bytes key ] */ ; - CHECK_SIGNATURE - /* [ bool : pair (pair bytes signature) bytes key ] */ ; - ASSERT ; - CDR - /* [ pair bytes key ] */ ; - DUP - /* [ pair bytes key : pair bytes key ] */ ; - CDR - /* [ key : pair bytes key ] */ ; - HASH_KEY - /* [ key_hash : pair bytes key ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : pair bytes key ] */ ; - BALANCE - /* [ mutez : contract unit : pair bytes key ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair bytes key ] */ ; - TRANSFER_TOKENS - /* [ operation : pair bytes key ] */ ; - NIL operation - /* [ list operation : operation : pair bytes key ] */ ; - SWAP - /* [ operation : list operation : pair bytes key ] */ ; - CONS - /* [ list operation : pair bytes key ] */ ; - PAIR - /* [ pair (list operation) bytes key ] */ } } -Well typed (Gas remaining: 1039994.499 units remaining) michelson_test_scripts/mini_scenarios/sc_rollup_forward.tz -{ parameter (pair bytes (contract bytes)) ; - storage unit ; - code { UNPAIR - /* [ pair bytes (contract bytes) : unit ] */ ; - DIP { NIL operation /* [ list operation : unit ] */ } - /* [ pair bytes (contract bytes) : list operation : unit ] */ ; - UNPAIR - /* [ bytes : contract bytes : list operation : unit ] */ ; - DIP { PUSH mutez 0 /* [ mutez : contract bytes : list operation : unit ] */ } - /* [ bytes : mutez : contract bytes : list operation : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039990.991 units remaining) michelson_test_scripts/mini_scenarios/sc_rollup_mint_and_forward.tz -{ parameter (pair (pair bytes nat) (contract (ticket bytes))) ; - storage unit ; - code { UNPAIR - /* [ pair (pair bytes nat) (contract (ticket bytes)) : unit ] */ ; - UNPAIR - /* [ pair bytes nat : contract (ticket bytes) : unit ] */ ; - UNPAIR - /* [ bytes : nat : contract (ticket bytes) : unit ] */ ; - TICKET - /* [ option (ticket bytes) : contract (ticket bytes) : unit ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : ticket bytes : contract (ticket bytes) : unit ] */ ; - SWAP - /* [ ticket bytes : mutez : contract (ticket bytes) : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : unit ] */ ; - NIL operation - /* [ list operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039992.902 units remaining) michelson_test_scripts/mini_scenarios/self_address_receiver.tz -{ parameter (lambda unit address) ; - storage unit ; - code { UNPAIR - /* [ lambda unit address : unit ] */ ; - UNIT - /* [ unit : lambda unit address : unit ] */ ; - EXEC - /* [ address : unit ] */ ; - SELF_ADDRESS - /* [ address : address : unit ] */ ; - ASSERT_CMPEQ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.501 units remaining) michelson_test_scripts/mini_scenarios/self_address_sender.tz -{ parameter (contract (lambda unit address)) ; - storage unit ; - code { CAR - /* [ contract (lambda unit address) ] */ ; - BALANCE - /* [ mutez : contract (lambda unit address) ] */ ; - LAMBDA - unit - address - { DROP /* [] */ ; SELF_ADDRESS /* [ address ] */ } - /* [ lambda unit address : mutez : contract (lambda unit address) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - DIP { UNIT /* [ unit ] */ ; NIL operation /* [ list operation : unit ] */ } - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039986.349 units remaining) michelson_test_scripts/mini_scenarios/send_ticket_list_016.tz -{ parameter address ; - storage unit ; - code { CAR - /* [ address ] */ ; - CONTRACT (list (ticket string)) - /* [ option (contract (list (ticket string))) ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract (list (ticket string)) ] */ ; - NIL (ticket string) - /* [ list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - PUSH nat - 1 - /* [ nat : list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - PUSH string - "Ticket" - /* [ string : nat : list (ticket string) : mutez - : contract (list (ticket string)) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) : mutez - : contract (list (ticket string)) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039981.327 units remaining) michelson_test_scripts/mini_scenarios/send_ticket_list_multiple_016.tz -{ parameter address ; - storage unit ; - code { CAR - /* [ address ] */ ; - CONTRACT (list (ticket string)) - /* [ option (contract (list (ticket string))) ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract (list (ticket string)) ] */ ; - NIL (ticket string) - /* [ list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - PUSH nat - 1 - /* [ nat : list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - PUSH string - "Ticket" - /* [ string : nat : list (ticket string) : mutez - : contract (list (ticket string)) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) : mutez - : contract (list (ticket string)) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - PUSH nat - 1 - /* [ nat : list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - PUSH string - "Ticket2" - /* [ string : nat : list (ticket string) : mutez - : contract (list (ticket string)) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) : mutez - : contract (list (ticket string)) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039981.564 units remaining) michelson_test_scripts/mini_scenarios/send_tickets_from_storage_016.tz -{ parameter (or (unit %mint) (contract %send (list (ticket string)))) ; - storage (list (ticket string)) ; - code { UNPAIR - /* [ or unit (contract (list (ticket string))) : list (ticket string) ] */ ; - IF_LEFT - { DROP - /* [ list (ticket string) ] */ ; - PUSH nat 1 - /* [ nat : list (ticket string) ] */ ; - PUSH string "Ticket" - /* [ string : nat : list (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) ] */ ; - PUSH nat 1 - /* [ nat : list (ticket string) ] */ ; - PUSH string "Ticket2" - /* [ string : nat : list (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { PUSH mutez 0 - /* [ mutez : contract (list (ticket string)) : list (ticket string) ] */ ; - DIG 2 - /* [ list (ticket string) : mutez : contract (list (ticket string)) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL (ticket string) - /* [ list (ticket string) : operation ] */ ; - NIL operation - /* [ list operation : list (ticket string) : operation ] */ ; - DIG 2 - /* [ operation : list operation : list (ticket string) ] */ ; - CONS - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } } } -Well typed (Gas remaining: 1039968.364 units remaining) michelson_test_scripts/mini_scenarios/send_tickets_in_big_map_015.tz -{ parameter address ; - storage unit ; - code { CAR - /* [ address ] */ ; - CONTRACT - (big_map int (ticket string)) - /* [ option (contract (big_map int (ticket string))) ] */ ; - IF_NONE - { PUSH string "Contract of type `big_map(ticket(string))` not found" - /* [ string ] */ ; - FAILWITH - /* [] */ } - { EMPTY_BIG_MAP - int - (ticket string) - /* [ big_map int (ticket string) : contract (big_map int (ticket string)) ] */ ; - PUSH int - 100 - /* [ int : big_map int (ticket string) - : contract (big_map int (ticket string)) ] */ ; - SWAP - /* [ big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - PAIR - /* [ pair (big_map int (ticket string)) int - : contract (big_map int (ticket string)) ] */ ; - LEFT (big_map int (ticket string)) - /* [ or (pair (big_map int (ticket string)) int) (big_map int (ticket string)) - : contract (big_map int (ticket string)) ] */ ; - LOOP_LEFT - { UNPAIR - /* [ big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - SWAP - /* [ int : big_map int (ticket string) - : contract (big_map int (ticket string)) ] */ ; - DUP - /* [ int : int : big_map int (ticket string) - : contract (big_map int (ticket string)) ] */ ; - DUG 2 - /* [ int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - PUSH int - 0 - /* [ int : int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - COMPARE - /* [ int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - LT - /* [ bool : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - IF { PUSH int - 1 - /* [ int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - DUP 3 - /* [ int : int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - SUB - /* [ int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - SWAP - /* [ big_map int (ticket string) : int : int - : contract (big_map int (ticket string)) ] */ ; - PUSH nat - 1 - /* [ nat : big_map int (ticket string) : int : int - : contract (big_map int (ticket string)) ] */ ; - PUSH string - "BLUE" - /* [ string : nat : big_map int (ticket string) : int : int - : contract (big_map int (ticket string)) ] */ ; - TICKET - /* [ option (ticket string) : big_map int (ticket string) : int : int - : contract (big_map int (ticket string)) ] */ ; - ASSERT_SOME ; - DIG 3 - /* [ int : ticket string : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - SWAP - /* [ ticket string : int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - SOME - /* [ option (ticket string) : int : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - SWAP - /* [ int : option (ticket string) : big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - UPDATE - /* [ big_map int (ticket string) : int - : contract (big_map int (ticket string)) ] */ ; - PAIR - /* [ pair (big_map int (ticket string)) int - : contract (big_map int (ticket string)) ] */ ; - LEFT (big_map int (ticket string)) - /* [ or (pair (big_map int (ticket string)) int) (big_map int (ticket string)) - : contract (big_map int (ticket string)) ] */ } - { SWAP - /* [ int : big_map int (ticket string) - : contract (big_map int (ticket string)) ] */ ; - DROP - /* [ big_map int (ticket string) : contract (big_map int (ticket string)) ] */ ; - RIGHT - (pair (big_map int (ticket string)) int) - /* [ or (pair (big_map int (ticket string)) int) (big_map int (ticket string)) - : contract (big_map int (ticket string)) ] */ } } - /* [ big_map int (ticket string) : contract (big_map int (ticket string)) ] */ ; - SWAP - /* [ contract (big_map int (ticket string)) : big_map int (ticket string) ] */ ; - PUSH mutez - 0 - /* [ mutez : contract (big_map int (ticket string)) - : big_map int (ticket string) ] */ ; - DIG 2 - /* [ big_map int (ticket string) : mutez - : contract (big_map int (ticket string)) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - PUSH unit Unit - /* [ unit : operation ] */ ; - NIL operation - /* [ list operation : unit : operation ] */ ; - DIG 2 - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } } -Well typed (Gas remaining: 1039982.309 units remaining) michelson_test_scripts/mini_scenarios/smart_rollup_mint_and_deposit_ticket_016.tz -{ parameter - (pair (pair (contract %rollup (pair string (ticket string))) (string %rollup_account)) - (pair (nat %ticket_amount) (string %ticket_content))) ; - storage unit ; - code { CAR - /* [ pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - DUP - /* [ pair (pair (contract (pair string (ticket string))) string) nat string - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - CAR - /* [ pair (contract (pair string (ticket string))) string - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - CAR - /* [ contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - PUSH mutez - 0 - /* [ mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - DUP 3 - /* [ pair (pair (contract (pair string (ticket string))) string) nat string - : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - CDR - /* [ pair nat string : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - CAR - /* [ nat : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - DUP 4 - /* [ pair (pair (contract (pair string (ticket string))) string) nat string - : nat : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - CDR - /* [ pair nat string : nat : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - CDR - /* [ string : nat : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - TICKET - /* [ option (ticket string) : mutez : contract (pair string (ticket string)) - : pair (pair (contract (pair string (ticket string))) string) nat string ] */ ; - ASSERT_SOME ; - DIG 3 - /* [ pair (pair (contract (pair string (ticket string))) string) nat string - : ticket string : mutez : contract (pair string (ticket string)) ] */ ; - CAR - /* [ pair (contract (pair string (ticket string))) string : ticket string - : mutez : contract (pair string (ticket string)) ] */ ; - CDR - /* [ string : ticket string : mutez : contract (pair string (ticket string)) ] */ ; - PAIR - /* [ pair string (ticket string) : mutez - : contract (pair string (ticket string)) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - PUSH unit Unit - /* [ unit : operation ] */ ; - NIL operation - /* [ list operation : unit : operation ] */ ; - DIG 2 - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.969 units remaining) michelson_test_scripts/mini_scenarios/smart_rollup_receive_tickets_016.tz -{ parameter (or (unit %burn_all_tickets) (ticket %receive_tickets string)) ; - storage (list (ticket string)) ; - code { UNPAIR - /* [ or unit (ticket string) : list (ticket string) ] */ ; - IF_LEFT - { DROP 2 - /* [] */ ; - NIL (ticket string) - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { CONS - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } } } -Well typed (Gas remaining: 1039997.447 units remaining) michelson_test_scripts/mini_scenarios/str_id.tz -{ parameter string ; - storage (option string) ; - code { CAR - /* [ string ] */ ; - SOME - /* [ option string ] */ ; - NIL operation - /* [ list operation : option string ] */ ; - PAIR - /* [ pair (list operation) (option string) ] */ } } -Well typed (Gas remaining: 1039974.138 units remaining) michelson_test_scripts/mini_scenarios/ticket_builder_fungible.tz -{ parameter - (or (ticket %burn unit) - (pair %mint (contract %destination (ticket unit)) (nat %amount))) ; - storage address ; - code { AMOUNT - /* [ mutez - : pair (or (ticket unit) (pair (contract (ticket unit)) nat)) address ] */ ; - PUSH mutez - 0 - /* [ mutez : mutez - : pair (or (ticket unit) (pair (contract (ticket unit)) nat)) address ] */ ; - ASSERT_CMPEQ ; - UNPAIR - /* [ or (ticket unit) (pair (contract (ticket unit)) nat) : address ] */ ; - IF_LEFT - { READ_TICKET - /* [ pair address unit nat : ticket unit : address ] */ ; - CAR - /* [ address : ticket unit : address ] */ ; - SELF_ADDRESS - /* [ address : address : ticket unit : address ] */ ; - ASSERT_CMPEQ ; - DROP - /* [ address ] */ ; - NIL operation - /* [ list operation : address ] */ } - { DUP @manager 2 - /* [ address : pair (contract (ticket unit)) nat : address ] */ ; - SENDER - /* [ address : address : pair (contract (ticket unit)) nat : address ] */ ; - ASSERT_CMPEQ ; - UNPAIR - /* [ contract (ticket unit) : nat : address ] */ ; - SWAP - /* [ nat : contract (ticket unit) : address ] */ ; - UNIT - /* [ unit : nat : contract (ticket unit) : address ] */ ; - TICKET - /* [ option (ticket unit) : contract (ticket unit) : address ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : ticket unit : contract (ticket unit) : address ] */ ; - SWAP - /* [ ticket unit : mutez : contract (ticket unit) : address ] */ ; - TRANSFER_TOKENS - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ } ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039971.719 units remaining) michelson_test_scripts/mini_scenarios/ticket_builder_non_fungible.tz -{ parameter (or (ticket %burn nat) (contract %mint_destination (ticket nat))) ; - storage (pair (address %manager) (nat %counter)) ; - code { AMOUNT - /* [ mutez : pair (or (ticket nat) (contract (ticket nat))) address nat ] */ ; - PUSH mutez - 0 - /* [ mutez : mutez - : pair (or (ticket nat) (contract (ticket nat))) address nat ] */ ; - ASSERT_CMPEQ ; - UNPAIR 3 - /* [ or (ticket nat) (contract (ticket nat)) : address : nat ] */ ; - IF_LEFT - { READ_TICKET - /* [ pair address nat nat : ticket nat : address : nat ] */ ; - CAR - /* [ address : ticket nat : address : nat ] */ ; - SELF_ADDRESS - /* [ address : address : ticket nat : address : nat ] */ ; - ASSERT_CMPEQ ; - DROP - /* [ address : nat ] */ ; - NIL operation - /* [ list operation : address : nat ] */ } - { DUP @manager 2 - /* [ address : contract (ticket nat) : address : nat ] */ ; - SENDER - /* [ address : address : contract (ticket nat) : address : nat ] */ ; - ASSERT_CMPEQ ; - PUSH @amount nat 1 - /* [ nat : contract (ticket nat) : address : nat ] */ ; - DUP @counter 4 - /* [ nat : nat : contract (ticket nat) : address : nat ] */ ; - TICKET - /* [ option (ticket nat) : contract (ticket nat) : address : nat ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : ticket nat : contract (ticket nat) : address : nat ] */ ; - SWAP - /* [ ticket nat : mutez : contract (ticket nat) : address : nat ] */ ; - TRANSFER_TOKENS - /* [ operation : address : nat ] */ ; - NIL operation - /* [ list operation : operation : address : nat ] */ ; - SWAP - /* [ operation : list operation : address : nat ] */ ; - CONS - /* [ list operation : address : nat ] */ ; - DIP 2 - { PUSH nat 1 /* [ nat : nat ] */ ; ADD /* [ nat ] */ } - /* [ list operation : address : nat ] */ } ; - PAIR 3 - /* [ pair (list operation) address nat ] */ } } -Well typed (Gas remaining: 1039938.422 units remaining) michelson_test_scripts/mini_scenarios/ticket_wallet_fungible.tz -{ parameter - (or (ticket %receive unit) - (pair %send (contract %destination (ticket unit)) (nat %amount) (address %ticketer))) ; - storage (pair (address %manager) (big_map %tickets address (ticket unit))) ; - code { AMOUNT - /* [ mutez - : pair (or (ticket unit) (pair (contract (ticket unit)) nat address)) - address - (big_map address (ticket unit)) ] */ ; - PUSH mutez - 0 - /* [ mutez : mutez - : pair (or (ticket unit) (pair (contract (ticket unit)) nat address)) - address - (big_map address (ticket unit)) ] */ ; - ASSERT_CMPEQ ; - UNPAIR - 3 - /* [ or (ticket unit) (pair (contract (ticket unit)) nat address) : address - : big_map address (ticket unit) ] */ ; - IF_LEFT - { READ_TICKET - /* [ pair address unit nat : ticket unit : address - : big_map address (ticket unit) ] */ ; - CAR @ticketer - /* [ address : ticket unit : address : big_map address (ticket unit) ] */ ; - DUP - /* [ address : address : ticket unit : address : big_map address (ticket unit) ] */ ; - DIG 4 - /* [ big_map address (ticket unit) : address : address : ticket unit : address ] */ ; - NONE (ticket unit) - /* [ option (ticket unit) : big_map address (ticket unit) : address : address - : ticket unit : address ] */ ; - DIG 2 - /* [ address : option (ticket unit) : big_map address (ticket unit) : address - : ticket unit : address ] */ ; - GET_AND_UPDATE - /* [ option (ticket unit) : big_map address (ticket unit) : address - : ticket unit : address ] */ ; - IF_SOME - { DIG 3 - /* [ ticket unit : ticket unit : big_map address (ticket unit) : address - : address ] */ ; - PAIR - /* [ pair (ticket unit) (ticket unit) : big_map address (ticket unit) : address - : address ] */ ; - JOIN_TICKETS - /* [ option (ticket unit) : big_map address (ticket unit) : address : address ] */ ; - ASSERT_SOME } - { DIG 2 - /* [ ticket unit : big_map address (ticket unit) : address : address ] */ } ; - SOME - /* [ option (ticket unit) : big_map address (ticket unit) : address : address ] */ ; - DIG 2 - /* [ address : option (ticket unit) : big_map address (ticket unit) : address ] */ ; - GET_AND_UPDATE - /* [ option (ticket unit) : big_map address (ticket unit) : address ] */ ; - ASSERT_NONE ; - SWAP - /* [ address : big_map address (ticket unit) ] */ ; - PAIR - /* [ pair address (big_map address (ticket unit)) ] */ ; - NIL operation - /* [ list operation : pair address (big_map address (ticket unit)) ] */ } - { DUP @manager - 2 - /* [ address : pair (contract (ticket unit)) nat address : address - : big_map address (ticket unit) ] */ ; - SENDER - /* [ address : address : pair (contract (ticket unit)) nat address : address - : big_map address (ticket unit) ] */ ; - ASSERT_CMPEQ ; - UNPAIR - 3 - /* [ contract (ticket unit) : nat : address : address - : big_map address (ticket unit) ] */ ; - DIG 4 - /* [ big_map address (ticket unit) : contract (ticket unit) : nat : address - : address ] */ ; - NONE (ticket unit) - /* [ option (ticket unit) : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - DUP @ticketer - 5 - /* [ address : option (ticket unit) : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - GET_AND_UPDATE - /* [ option (ticket unit) : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - ASSERT_SOME ; - READ_TICKET - /* [ pair address unit nat : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - GET @total_amount - 4 - /* [ nat : ticket unit : big_map address (ticket unit) : contract (ticket unit) - : nat : address : address ] */ ; - DUP @amount - 5 - /* [ nat : nat : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - SWAP - /* [ nat : nat : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - SUB - /* [ int : ticket unit : big_map address (ticket unit) : contract (ticket unit) - : nat : address : address ] */ ; - DUP - /* [ int : int : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - EQ - /* [ bool : int : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - IF { DROP - /* [ ticket unit : big_map address (ticket unit) : contract (ticket unit) : nat - : address : address ] */ ; - DIG 3 - /* [ nat : ticket unit : big_map address (ticket unit) : contract (ticket unit) - : address : address ] */ ; - DROP - /* [ ticket unit : big_map address (ticket unit) : contract (ticket unit) - : address : address ] */ ; - DIG 3 - /* [ address : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : address ] */ ; - DROP - /* [ ticket unit : big_map address (ticket unit) : contract (ticket unit) - : address ] */ ; - DUG 3 - /* [ big_map address (ticket unit) : contract (ticket unit) : address - : ticket unit ] */ } - { ISNAT - /* [ option nat : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : nat : address : address ] */ ; - ASSERT_SOME @remaining_amount ; - DIG 4 - /* [ nat : nat : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : address : address ] */ ; - PAIR - /* [ pair nat nat : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : address : address ] */ ; - SWAP - /* [ ticket unit : pair nat nat : big_map address (ticket unit) - : contract (ticket unit) : address : address ] */ ; - SPLIT_TICKET - /* [ option (pair (ticket unit) (ticket unit)) : big_map address (ticket unit) - : contract (ticket unit) : address : address ] */ ; - ASSERT_SOME ; - UNPAIR @to_send @to_keep - /* [ ticket unit : ticket unit : big_map address (ticket unit) - : contract (ticket unit) : address : address ] */ ; - DUG 5 - /* [ ticket unit : big_map address (ticket unit) : contract (ticket unit) - : address : address : ticket unit ] */ ; - SOME - /* [ option (ticket unit) : big_map address (ticket unit) - : contract (ticket unit) : address : address : ticket unit ] */ ; - DIG 3 - /* [ address : option (ticket unit) : big_map address (ticket unit) - : contract (ticket unit) : address : ticket unit ] */ ; - GET_AND_UPDATE - /* [ option (ticket unit) : big_map address (ticket unit) - : contract (ticket unit) : address : ticket unit ] */ ; - ASSERT_NONE } ; - DIG 2 - /* [ address : big_map address (ticket unit) : contract (ticket unit) - : ticket unit ] */ ; - PAIR - /* [ pair address (big_map address (ticket unit)) : contract (ticket unit) - : ticket unit ] */ ; - SWAP - /* [ contract (ticket unit) : pair address (big_map address (ticket unit)) - : ticket unit ] */ ; - PUSH mutez - 0 - /* [ mutez : contract (ticket unit) - : pair address (big_map address (ticket unit)) : ticket unit ] */ ; - DIG 3 - /* [ ticket unit : mutez : contract (ticket unit) - : pair address (big_map address (ticket unit)) ] */ ; - TRANSFER_TOKENS - /* [ operation : pair address (big_map address (ticket unit)) ] */ ; - NIL operation - /* [ list operation : operation : pair address (big_map address (ticket unit)) ] */ ; - SWAP - /* [ operation : list operation : pair address (big_map address (ticket unit)) ] */ ; - CONS - /* [ list operation : pair address (big_map address (ticket unit)) ] */ } ; - PAIR - /* [ pair (list operation) address (big_map address (ticket unit)) ] */ } } -Well typed (Gas remaining: 1039960.699 units remaining) michelson_test_scripts/mini_scenarios/ticket_wallet_non_fungible.tz -{ parameter - (or (ticket %receive nat) - (pair %send (contract %destination (ticket nat)) (address %ticketer) (nat %id))) ; - storage (pair (address %manager) (big_map %tickets (pair address nat) (ticket nat))) ; - code { AMOUNT - /* [ mutez - : pair (or (ticket nat) (pair (contract (ticket nat)) address nat)) - address - (big_map (pair address nat) (ticket nat)) ] */ ; - PUSH mutez - 0 - /* [ mutez : mutez - : pair (or (ticket nat) (pair (contract (ticket nat)) address nat)) - address - (big_map (pair address nat) (ticket nat)) ] */ ; - ASSERT_CMPEQ ; - UNPAIR - 3 - /* [ or (ticket nat) (pair (contract (ticket nat)) address nat) : address - : big_map (pair address nat) (ticket nat) ] */ ; - IF_LEFT - { READ_TICKET - /* [ pair address nat nat : ticket nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - CAST (pair (address %ticketer) (nat %id) (nat %amount)) - /* [ pair address nat nat : ticket nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - UNPAIR - 3 - /* [ address : nat : nat : ticket nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - DIG 2 - /* [ nat : address : nat : ticket nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - PUSH nat - 1 - /* [ nat : nat : address : nat : ticket nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - ASSERT_CMPEQ ; - PAIR - /* [ pair address nat : ticket nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - DIP { SOME - /* [ option (ticket nat) : address : big_map (pair address nat) (ticket nat) ] */ ; - DIP { SWAP /* [ big_map (pair address nat) (ticket nat) : address ] */ } - /* [ option (ticket nat) : big_map (pair address nat) (ticket nat) : address ] */ } - /* [ pair address nat : option (ticket nat) - : big_map (pair address nat) (ticket nat) : address ] */ ; - GET_AND_UPDATE - /* [ option (ticket nat) : big_map (pair address nat) (ticket nat) : address ] */ ; - ASSERT_NONE ; - SWAP - /* [ address : big_map (pair address nat) (ticket nat) ] */ ; - PAIR - /* [ pair address (big_map (pair address nat) (ticket nat)) ] */ ; - NIL operation - /* [ list operation : pair address (big_map (pair address nat) (ticket nat)) ] */ } - { DUP @manager - 2 - /* [ address : pair (contract (ticket nat)) address nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - SENDER - /* [ address : address : pair (contract (ticket nat)) address nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - ASSERT_CMPEQ ; - UNPAIR - /* [ contract (ticket nat) : pair address nat : address - : big_map (pair address nat) (ticket nat) ] */ ; - DIG 3 - /* [ big_map (pair address nat) (ticket nat) : contract (ticket nat) - : pair address nat : address ] */ ; - NONE (ticket nat) - /* [ option (ticket nat) : big_map (pair address nat) (ticket nat) - : contract (ticket nat) : pair address nat : address ] */ ; - DIG 3 - /* [ pair address nat : option (ticket nat) - : big_map (pair address nat) (ticket nat) : contract (ticket nat) : address ] */ ; - GET_AND_UPDATE - /* [ option (ticket nat) : big_map (pair address nat) (ticket nat) - : contract (ticket nat) : address ] */ ; - ASSERT_SOME ; - SWAP - /* [ big_map (pair address nat) (ticket nat) : ticket nat - : contract (ticket nat) : address ] */ ; - DIG 3 - /* [ address : big_map (pair address nat) (ticket nat) : ticket nat - : contract (ticket nat) ] */ ; - PAIR - /* [ pair address (big_map (pair address nat) (ticket nat)) : ticket nat - : contract (ticket nat) ] */ ; - DUG 2 - /* [ ticket nat : contract (ticket nat) - : pair address (big_map (pair address nat) (ticket nat)) ] */ ; - PUSH mutez - 0 - /* [ mutez : ticket nat : contract (ticket nat) - : pair address (big_map (pair address nat) (ticket nat)) ] */ ; - SWAP - /* [ ticket nat : mutez : contract (ticket nat) - : pair address (big_map (pair address nat) (ticket nat)) ] */ ; - TRANSFER_TOKENS - /* [ operation : pair address (big_map (pair address nat) (ticket nat)) ] */ ; - NIL operation - /* [ list operation : operation - : pair address (big_map (pair address nat) (ticket nat)) ] */ ; - SWAP - /* [ operation : list operation - : pair address (big_map (pair address nat) (ticket nat)) ] */ ; - CONS - /* [ list operation : pair address (big_map (pair address nat) (ticket nat)) ] */ } ; - PAIR - /* [ pair (list operation) address (big_map (pair address nat) (ticket nat)) ] */ } } -Well typed (Gas remaining: 1039993.131 units remaining) michelson_test_scripts/mini_scenarios/tickets_015.tz -{ parameter unit ; - storage (list (ticket string)) ; - code { CDR - /* [ list (ticket string) ] */ ; - PUSH nat 1 - /* [ nat : list (ticket string) ] */ ; - PUSH string "Red" - /* [ string : nat : list (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : list (ticket string) ] */ ; - ASSERT_SOME ; - CONS - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } } -Well typed (Gas remaining: 1039986.391 units remaining) michelson_test_scripts/mini_scenarios/tickets_bag_016.tz -{ parameter (or (ticket %save string) (address %send)) ; - storage (list (ticket string)) ; - code { UNPAIR - /* [ or (ticket string) address : list (ticket string) ] */ ; - IF_LEFT - { CONS - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { SWAP - /* [ list (ticket string) : address ] */ ; - IF_CONS - { DIG 2 - /* [ address : ticket string : list (ticket string) ] */ ; - CONTRACT %ticket - (ticket string) - /* [ option (contract (ticket string)) : ticket string : list (ticket string) ] */ ; - ASSERT_SOME ; - PUSH mutez - 0 - /* [ mutez : contract (ticket string) : ticket string : list (ticket string) ] */ ; - DIG 2 - /* [ ticket string : mutez : contract (ticket string) : list (ticket string) ] */ ; - TRANSFER_TOKENS - /* [ operation : list (ticket string) ] */ ; - NIL operation - /* [ list operation : operation : list (ticket string) ] */ ; - SWAP - /* [ operation : list operation : list (ticket string) ] */ ; - CONS - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { PUSH string "no ticket to send" /* [ string : address ] */ ; FAILWITH /* [] */ } } } } -Well typed (Gas remaining: 1039986.391 units remaining) michelson_test_scripts/mini_scenarios/tickets_bag_implicit_016.tz -{ parameter (or (ticket %save string) (address %send)) ; - storage (list (ticket string)) ; - code { UNPAIR - /* [ or (ticket string) address : list (ticket string) ] */ ; - IF_LEFT - { CONS - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { SWAP - /* [ list (ticket string) : address ] */ ; - IF_CONS - { DIG 2 - /* [ address : ticket string : list (ticket string) ] */ ; - CONTRACT - (ticket string) - /* [ option (contract (ticket string)) : ticket string : list (ticket string) ] */ ; - ASSERT_SOME ; - PUSH mutez - 0 - /* [ mutez : contract (ticket string) : ticket string : list (ticket string) ] */ ; - DIG 2 - /* [ ticket string : mutez : contract (ticket string) : list (ticket string) ] */ ; - TRANSFER_TOKENS - /* [ operation : list (ticket string) ] */ ; - NIL operation - /* [ list operation : operation : list (ticket string) ] */ ; - SWAP - /* [ operation : list operation : list (ticket string) ] */ ; - CONS - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } - { PUSH string "no ticket to send" /* [ string : address ] */ ; FAILWITH /* [] */ } } } } -Well typed (Gas remaining: 1039997.932 units remaining) michelson_test_scripts/mini_scenarios/tickets_blackhole_016.tz -{ parameter (ticket %ticket string) ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039961.303 units remaining) michelson_test_scripts/mini_scenarios/tickets_create_and_send_015.tz -{ parameter (pair address address) ; - storage (list (ticket string)) ; - code { CAR - /* [ pair address address ] */ ; - UNPAIR - /* [ address : address ] */ ; - PUSH nat 1 - /* [ nat : address : address ] */ ; - PUSH string "red" - /* [ string : nat : address : address ] */ ; - TICKET - /* [ option (ticket string) : address : address ] */ ; - ASSERT_SOME ; - PUSH nat 1 - /* [ nat : ticket string : address : address ] */ ; - PUSH string "green" - /* [ string : nat : ticket string : address : address ] */ ; - TICKET - /* [ option (ticket string) : ticket string : address : address ] */ ; - ASSERT_SOME ; - PUSH nat 1 - /* [ nat : ticket string : ticket string : address : address ] */ ; - PUSH string - "green" - /* [ string : nat : ticket string : ticket string : address : address ] */ ; - TICKET - /* [ option (ticket string) : ticket string : ticket string : address - : address ] */ ; - ASSERT_SOME ; - PUSH nat - 1 - /* [ nat : ticket string : ticket string : ticket string : address : address ] */ ; - PUSH string - "blue" - /* [ string : nat : ticket string : ticket string : ticket string : address - : address ] */ ; - TICKET - /* [ option (ticket string) : ticket string : ticket string : ticket string - : address : address ] */ ; - ASSERT_SOME ; - PUSH nat - 1 - /* [ nat : ticket string : ticket string : ticket string : ticket string - : address : address ] */ ; - PUSH string - "blue" - /* [ string : nat : ticket string : ticket string : ticket string - : ticket string : address : address ] */ ; - TICKET - /* [ option (ticket string) : ticket string : ticket string : ticket string - : ticket string : address : address ] */ ; - ASSERT_SOME ; - DIG 5 - /* [ address : ticket string : ticket string : ticket string : ticket string - : ticket string : address ] */ ; - CONTRACT - (pair (pair (ticket string) (ticket string)) address) - /* [ option (contract (pair (pair (ticket string) (ticket string)) address)) - : ticket string : ticket string : ticket string : ticket string - : ticket string : address ] */ ; - IF_NONE - { PUSH string - "option is None" - /* [ string : ticket string : ticket string : ticket string : ticket string - : ticket string : address ] */ ; - FAILWITH - /* [] */ } - { /* [ contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string : ticket string - : ticket string : address ] */ } ; - PUSH mutez - 0 - /* [ mutez : contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string : ticket string - : ticket string : address ] */ ; - DIG 7 - /* [ address : mutez - : contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string : ticket string - : ticket string ] */ ; - DIG 3 - /* [ ticket string : address : mutez - : contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string : ticket string ] */ ; - DIG 4 - /* [ ticket string : ticket string : address : mutez - : contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string ] */ ; - PAIR - /* [ pair (ticket string) (ticket string) : address : mutez - : contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string ] */ ; - PAIR - /* [ pair (pair (ticket string) (ticket string)) address : mutez - : contract (pair (pair (ticket string) (ticket string)) address) - : ticket string : ticket string : ticket string ] */ ; - TRANSFER_TOKENS - /* [ operation : ticket string : ticket string : ticket string ] */ ; - NIL (ticket string) - /* [ list (ticket string) : operation : ticket string : ticket string - : ticket string ] */ ; - DIG 2 - /* [ ticket string : list (ticket string) : operation : ticket string - : ticket string ] */ ; - CONS - /* [ list (ticket string) : operation : ticket string : ticket string ] */ ; - DIG 2 - /* [ ticket string : list (ticket string) : operation : ticket string ] */ ; - CONS - /* [ list (ticket string) : operation : ticket string ] */ ; - DIG 2 - /* [ ticket string : list (ticket string) : operation ] */ ; - CONS - /* [ list (ticket string) : operation ] */ ; - NIL operation - /* [ list operation : list (ticket string) : operation ] */ ; - DIG 2 - /* [ operation : list operation : list (ticket string) ] */ ; - CONS - /* [ list operation : list (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } } -Well typed (Gas remaining: 1039997.849 units remaining) michelson_test_scripts/mini_scenarios/tickets_list_blackhole_016.tz -{ parameter (list (ticket string)) ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039985.858 units remaining) michelson_test_scripts/mini_scenarios/tickets_mint_and_store_complex_param.tz -{ parameter - (or (pair %mint_and_send string nat (contract (ticket string))) - (pair %store int (list (pair string (ticket string))))) ; - storage (list (ticket string)) ; - code { UNPAIR - /* [ or (pair string nat (contract (ticket string))) - (pair int (list (pair string (ticket string)))) : list (ticket string) ] */ ; - IF_LEFT - { UNPAIR 3 - /* [ string : nat : contract (ticket string) : list (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : contract (ticket string) : list (ticket string) ] */ ; - IF_NONE - { PUSH string - "option is None" - /* [ string : contract (ticket string) : list (ticket string) ] */ ; - FAILWITH - /* [] */ } - { /* [ ticket string : contract (ticket string) : list (ticket string) ] */ } ; - SWAP - /* [ contract (ticket string) : ticket string : list (ticket string) ] */ ; - PUSH mutez - 0 - /* [ mutez : contract (ticket string) : ticket string : list (ticket string) ] */ ; - DIG 2 - /* [ ticket string : mutez : contract (ticket string) : list (ticket string) ] */ ; - TRANSFER_TOKENS - /* [ operation : list (ticket string) ] */ ; - SWAP - /* [ list (ticket string) : operation ] */ ; - NIL operation - /* [ list operation : list (ticket string) : operation ] */ ; - DIG 2 - /* [ operation : list operation : list (ticket string) ] */ ; - CONS - /* [ list operation : list (ticket string) ] */ } - { CDR - /* [ list (pair string (ticket string)) : list (ticket string) ] */ ; - ITER { CDR - /* [ ticket string : list (ticket string) ] */ ; - CONS - /* [ list (ticket string) ] */ } - /* [ list (ticket string) ] */ ; - NIL operation - /* [ list operation : list (ticket string) ] */ } ; - PAIR - /* [ pair (list operation) (list (ticket string)) ] */ } } -Well typed (Gas remaining: 1039997.186 units remaining) michelson_test_scripts/mini_scenarios/tickets_receive_and_store.tz -{ parameter (ticket string) ; - storage (option (ticket string)) ; - code { CAR - /* [ ticket string ] */ ; - SOME - /* [ option (ticket string) ] */ ; - NIL operation - /* [ list operation : option (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (option (ticket string)) ] */ } } -Well typed (Gas remaining: 1039987.529 units remaining) michelson_test_scripts/mini_scenarios/tickets_send_016.tz -{ parameter (pair address nat) ; - storage unit ; - code { CAR - /* [ pair address nat ] */ ; - UNPAIR - /* [ address : nat ] */ ; - CONTRACT (ticket string) - /* [ option (contract (ticket string)) : nat ] */ ; - IF_NONE - { PUSH string "Contract not found" /* [ string : nat ] */ ; FAILWITH /* [] */ } - { PUSH mutez 0 - /* [ mutez : contract (ticket string) : nat ] */ ; - DIG 2 - /* [ nat : mutez : contract (ticket string) ] */ ; - PUSH string "Ticket" - /* [ string : nat : mutez : contract (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : mutez : contract (ticket string) ] */ ; - ASSERT_SOME ; - TRANSFER_TOKENS - /* [ operation ] */ ; - PUSH unit Unit - /* [ unit : operation ] */ ; - NIL operation - /* [ list operation : unit : operation ] */ ; - DIG 2 - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } } -Well typed (Gas remaining: 1039988.096 units remaining) michelson_test_scripts/mini_scenarios/tickets_send_with_tez_016.tz -{ parameter address ; - storage unit ; - code { CAR - /* [ address ] */ ; - CONTRACT (ticket string) - /* [ option (contract (ticket string)) ] */ ; - IF_NONE - { PUSH string "Contract not found" /* [ string ] */ ; FAILWITH /* [] */ } - { PUSH mutez 1 - /* [ mutez : contract (ticket string) ] */ ; - PUSH nat 1 - /* [ nat : mutez : contract (ticket string) ] */ ; - PUSH string "Ticket" - /* [ string : nat : mutez : contract (ticket string) ] */ ; - TICKET - /* [ option (ticket string) : mutez : contract (ticket string) ] */ ; - ASSERT_SOME ; - TRANSFER_TOKENS - /* [ operation ] */ ; - PUSH unit Unit - /* [ unit : operation ] */ ; - NIL operation - /* [ list operation : unit : operation ] */ ; - DIG 2 - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } } -Well typed (Gas remaining: 1039988.829 units remaining) michelson_test_scripts/mini_scenarios/tickets_store_fst_and_rely_snd.tz -{ parameter (pair (pair (ticket string) (ticket string)) address) ; - storage (option (ticket string)) ; - code { CAR - /* [ pair (pair (ticket string) (ticket string)) address ] */ ; - UNPAIR - /* [ pair (ticket string) (ticket string) : address ] */ ; - UNPAIR - /* [ ticket string : ticket string : address ] */ ; - DIG 2 - /* [ address : ticket string : ticket string ] */ ; - CONTRACT - (ticket string) - /* [ option (contract (ticket string)) : ticket string : ticket string ] */ ; - IF_NONE - { PUSH string "option is None" - /* [ string : ticket string : ticket string ] */ ; - FAILWITH - /* [] */ } - { /* [ contract (ticket string) : ticket string : ticket string ] */ } ; - PUSH mutez - 0 - /* [ mutez : contract (ticket string) : ticket string : ticket string ] */ ; - DIG 3 - /* [ ticket string : mutez : contract (ticket string) : ticket string ] */ ; - TRANSFER_TOKENS - /* [ operation : ticket string ] */ ; - SWAP - /* [ ticket string : operation ] */ ; - SOME - /* [ option (ticket string) : operation ] */ ; - NIL operation - /* [ list operation : option (ticket string) : operation ] */ ; - DIG 2 - /* [ operation : list operation : option (ticket string) ] */ ; - CONS - /* [ list operation : option (ticket string) ] */ ; - PAIR - /* [ pair (list operation) (option (ticket string)) ] */ } } -Well typed (Gas remaining: 1039986.304 units remaining) michelson_test_scripts/mini_scenarios/tzip4_view.tz -{ parameter - (or (pair %view_const unit (contract nat)) - (pair %view_add (pair int int) (contract int))) ; - storage unit ; - code { CAR - /* [ or (pair unit (contract nat)) (pair (pair int int) (contract int)) ] */ ; - IF_LEFT - { CDR - /* [ contract nat ] */ ; - AMOUNT - /* [ mutez : contract nat ] */ ; - PUSH nat 5 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } - { UNPAIR - /* [ pair int int : contract int ] */ ; - UNPAIR - /* [ int : int : contract int ] */ ; - ADD - /* [ int : contract int ] */ ; - AMOUNT - /* [ mutez : int : contract int ] */ ; - SWAP - /* [ int : mutez : contract int ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/mini_scenarios/very_small.tz -{ parameter unit ; - storage unit ; - code { UNPAIR - /* [ unit : unit ] */ ; - DROP - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039982.522 units remaining) michelson_test_scripts/mini_scenarios/view_check_caller.tz -{ parameter address ; - storage (option address) ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - UNIT - /* [ unit : address : address ] */ ; - VIEW "calls_count" nat - /* [ option nat : address ] */ ; - IF_NONE { UNIT /* [ unit : address ] */ ; FAILWITH /* [] */ } { /* [ nat : address ] */ } ; - DIP { UNIT - /* [ unit : address ] */ ; - VIEW "last_caller" (option address) - /* [ option (option address) ] */ } - /* [ nat : option (option address) ] */ ; - PUSH nat 0 - /* [ nat : nat : option (option address) ] */ ; - IFCMPEQ - { IF_NONE - { UNIT /* [ unit ] */ ; FAILWITH /* [] */ } - { IF_NONE { /* [] */ } { UNIT /* [ unit : address ] */ ; FAILWITH /* [] */ } } ; - NONE address - /* [ option address ] */ } - { IF_NONE - { UNIT /* [ unit ] */ ; FAILWITH /* [] */ } - { IF_NONE { UNIT /* [ unit ] */ ; FAILWITH /* [] */ } { /* [ address ] */ } } ; - SOME - /* [ option address ] */ } ; - NIL operation - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } -Well typed (Gas remaining: 1039991.454 units remaining) michelson_test_scripts/mini_scenarios/view_registers_callers.tz -{ parameter unit ; - storage (list address) ; - code { CDR - /* [ list address ] */ ; - SOURCE - /* [ address : list address ] */ ; - CONS - /* [ list address ] */ ; - NIL operation - /* [ list operation : list address ] */ ; - PAIR - /* [ pair (list operation) (list address) ] */ } ; - view "calls_count" unit nat { CDR /* [ list address ] */ ; SIZE /* [ nat ] */ } ; - view "last_caller" - unit - (option address) - { CDR - /* [ list address ] */ ; - IF_CONS - { DIP { DROP /* [] */ } /* [ address ] */ ; SOME /* [ option address ] */ } - { NONE address /* [ option address ] */ } } } -Well typed (Gas remaining: 1039960.608 units remaining) michelson_test_scripts/mini_scenarios/viewable.tz -{ parameter nat ; - storage nat ; - code { CAR - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } ; - view "add_v" nat nat { UNPAIR /* [ nat : nat ] */ ; ADD /* [ nat ] */ } ; - view "mul_v" nat nat { UNPAIR /* [ nat : nat ] */ ; MUL /* [ nat ] */ } ; - view "value" unit nat { CDR /* [ nat ] */ } ; - view "loop" - int - unit - { CAR - /* [ int ] */ ; - DUP - /* [ int : int ] */ ; - EQ - /* [ bool : int ] */ ; - IF { DROP /* [] */ ; UNIT /* [ unit ] */ } - { SELF_ADDRESS - /* [ address : int ] */ ; - SWAP - /* [ int : address ] */ ; - PUSH int -1 - /* [ int : int : address ] */ ; - ADD - /* [ int : address ] */ ; - VIEW "loop" unit - /* [ option unit ] */ ; - ASSERT_SOME } } ; - view "my_external_view" - int - int - { LAMBDA - int - int - { DUP /* [ int : int ] */ ; MUL /* [ int ] */ } - /* [ lambda int int : pair int nat ] */ ; - SWAP - /* [ pair int nat : lambda int int ] */ ; - UNPAIR - /* [ int : nat : lambda int int ] */ ; - DUP 3 - /* [ lambda int int : int : nat : lambda int int ] */ ; - SWAP - /* [ int : lambda int int : nat : lambda int int ] */ ; - EXEC - /* [ int : nat : lambda int int ] */ ; - SWAP - /* [ nat : int : lambda int int ] */ ; - DIG 2 - /* [ lambda int int : nat : int ] */ ; - SWAP - /* [ nat : lambda int int : int ] */ ; - INT - /* [ int : lambda int int : int ] */ ; - EXEC - /* [ int : int ] */ ; - ADD - /* [ int ] */ ; - PUSH int 1000000 - /* [ int : int ] */ ; - NEG - /* [ int : int ] */ ; - ADD - /* [ int ] */ } ; - view "v_external" - address - int - { UNPAIR - /* [ address : nat ] */ ; - PUSH int 33 - /* [ int : address : nat ] */ ; - VIEW "my_external_view" int - /* [ option int : nat ] */ ; - IF_NONE - { DROP - /* [] */ ; - PUSH string "Call to 'my_external_view' returned None" - /* [ string ] */ ; - FAILWITH - /* [] */ } - { ADD /* [ int ] */ } } ; - view "v_entrypoint" - int - int - { LAMBDA - int - int - { DUP /* [ int : int ] */ ; MUL /* [ int ] */ } - /* [ lambda int int : pair int nat ] */ ; - SWAP - /* [ pair int nat : lambda int int ] */ ; - UNPAIR - /* [ int : nat : lambda int int ] */ ; - DUP 3 - /* [ lambda int int : int : nat : lambda int int ] */ ; - SWAP - /* [ int : lambda int int : nat : lambda int int ] */ ; - EXEC - /* [ int : nat : lambda int int ] */ ; - SWAP - /* [ nat : int : lambda int int ] */ ; - DIG 2 - /* [ lambda int int : nat : int ] */ ; - SWAP - /* [ nat : lambda int int : int ] */ ; - INT - /* [ int : lambda int int : int ] */ ; - EXEC - /* [ int : int ] */ ; - ADD - /* [ int ] */ } } -Well typed (Gas remaining: 1039947.221 units remaining) michelson_test_scripts/mini_scenarios/vote_for_delegate.tz -{ parameter (option key_hash) ; - storage - (pair (pair %mgr1 (address %addr) (option %key key_hash)) - (pair %mgr2 (address %addr) (option %key key_hash))) ; - code { DUP - /* [ pair (option key_hash) (pair address (option key_hash)) address (option key_hash) - : pair (option key_hash) (pair address (option key_hash)) address (option key_hash) ] */ ; - CDAAR %addr @% ; - SENDER - /* [ address : address - : pair (option key_hash) (pair address (option key_hash)) address (option key_hash) ] */ ; - PAIR %@ %@ - /* [ pair address address - : pair (option key_hash) (pair address (option key_hash)) address (option key_hash) ] */ ; - UNPAIR - /* [ address : address - : pair (option key_hash) (pair address (option key_hash)) address (option key_hash) ] */ ; - IFCMPEQ - { UNPAIR - /* [ option key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - SWAP - /* [ pair (pair address (option key_hash)) address (option key_hash) - : option key_hash ] */ ; - SET_CADR %key @changed_mgr1_key } - { DUP - /* [ pair (option key_hash) (pair address (option key_hash)) address (option key_hash) - : pair (option key_hash) (pair address (option key_hash)) address (option key_hash) ] */ ; - CDDAR ; - SENDER - /* [ address : address - : pair (option key_hash) (pair address (option key_hash)) address (option key_hash) ] */ ; - IFCMPEQ - { UNPAIR - /* [ option key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - SWAP - /* [ pair (pair address (option key_hash)) address (option key_hash) - : option key_hash ] */ ; - SET_CDDR %key } - { FAIL } } ; - DUP - /* [ pair (pair address (option key_hash)) address (option key_hash) - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - CADR ; - DIP { DUP - /* [ pair (pair address (option key_hash)) address (option key_hash) - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - CDDR } - /* [ option key_hash : option key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - IF_NONE - { IF_NONE - { NONE key_hash - /* [ option key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - SET_DELEGATE - /* [ operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - NIL operation - /* [ list operation : operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - SWAP - /* [ operation : list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - CONS - /* [ list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ } - { DROP - /* [ pair (pair address (option key_hash)) address (option key_hash) ] */ ; - NIL operation - /* [ list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ } } - { SWAP - /* [ option key_hash : key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - IF_SOME - { DIP { DUP - /* [ key_hash : key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ } - /* [ key_hash : key_hash : key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - IFCMPEQ - { SOME - /* [ option key_hash - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - SET_DELEGATE - /* [ operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - NIL operation - /* [ list operation : operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - SWAP - /* [ operation : list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ ; - CONS - /* [ list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ } - { DROP - /* [ pair (pair address (option key_hash)) address (option key_hash) ] */ ; - NIL operation - /* [ list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ } } - { DROP - /* [ pair (pair address (option key_hash)) address (option key_hash) ] */ ; - NIL operation - /* [ list operation - : pair (pair address (option key_hash)) address (option key_hash) ] */ } } ; - PAIR - /* [ pair (list operation) (pair address (option key_hash)) address (option key_hash) ] */ } } -Well typed (Gas remaining: 1039964.178 units remaining) michelson_test_scripts/mini_scenarios/weather_insurance.tz -{ parameter (pair (signature %signed_weather_data) (nat :rain %actual_level)) ; - storage - (pair (pair (address %under_key) (address %over_key)) - (pair (nat :rain %rain_level) (key %weather_service_key))) ; - code { DUP - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - DUP - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - CAR - /* [ pair signature nat - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - MAP_CDR - { PACK - /* [ bytes : pair signature nat - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - BLAKE2B - /* [ bytes : pair signature nat - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ } ; - SWAP - /* [ pair (pair signature nat) (pair address address) nat key - : pair signature bytes - : pair (pair signature nat) (pair address address) nat key ] */ ; - CDDDR %weather_service_key ; - DIP { UNPAIR - /* [ signature : bytes - : pair (pair signature nat) (pair address address) nat key ] */ } - /* [ key : signature : bytes - : pair (pair signature nat) (pair address address) nat key ] */ ; - CHECK_SIGNATURE @sigok - /* [ bool : pair (pair signature nat) (pair address address) nat key ] */ ; - ASSERT ; - DUP - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - DUP - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - DUP - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key ] */ ; - DIP 3 - { CDR %storage /* [ pair (pair address address) nat key ] */ } - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair (pair address address) nat key ] */ ; - DIP 2 - { CDAR } - /* [ pair (pair signature nat) (pair address address) nat key - : pair (pair signature nat) (pair address address) nat key - : pair address address : pair (pair address address) nat key ] */ ; - DIP { CADR %actual_level } - /* [ pair (pair signature nat) (pair address address) nat key : nat - : pair address address : pair (pair address address) nat key ] */ ; - CDDAR %rain_level ; - CMPLT ; - IF { CAR %under_key /* [ address : pair (pair address address) nat key ] */ } - { CDR %over_key /* [ address : pair (pair address address) nat key ] */ } ; - CONTRACT unit - /* [ option (contract unit) : pair (pair address address) nat key ] */ ; - ASSERT_SOME ; - BALANCE - /* [ mutez : contract unit : pair (pair address address) nat key ] */ ; - UNIT - /* [ unit : mutez : contract unit : pair (pair address address) nat key ] */ ; - TRANSFER_TOKENS @trans.op - /* [ operation : pair (pair address address) nat key ] */ ; - NIL operation - /* [ list operation : operation : pair (pair address address) nat key ] */ ; - SWAP - /* [ operation : list operation : pair (pair address address) nat key ] */ ; - CONS - /* [ list operation : pair (pair address address) nat key ] */ ; - PAIR - /* [ pair (list operation) (pair address address) nat key ] */ } } -Well typed (Gas remaining: 1039967.364 units remaining) michelson_test_scripts/mini_scenarios/xcat.tz -{ parameter bytes ; - storage unit ; - code { CAR @preimage - /* [ bytes ] */ ; - DIP { PUSH @from key_hash "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - /* [ key_hash ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit ] */ ; - PUSH @to - key_hash - "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" - /* [ key_hash : contract unit ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : contract unit ] */ ; - PUSH @target_hash bytes 0x123456 - /* [ bytes : contract unit : contract unit ] */ ; - PUSH @deadline - timestamp - "2018-08-08 00:00:00Z" - /* [ timestamp : bytes : contract unit : contract unit ] */ } - /* [ bytes : timestamp : bytes : contract unit : contract unit ] */ ; - SWAP - /* [ timestamp : bytes : bytes : contract unit : contract unit ] */ ; - NOW - /* [ timestamp : timestamp : bytes : bytes : contract unit : contract unit ] */ ; - IFCMPLT - { DROP - /* [ bytes : contract unit : contract unit ] */ ; - DROP - /* [ contract unit : contract unit ] */ ; - DROP - /* [ contract unit ] */ ; - BALANCE - /* [ mutez : contract unit ] */ ; - UNIT - /* [ unit : mutez : contract unit ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ } - { DUP - /* [ bytes : bytes : bytes : contract unit : contract unit ] */ ; - SIZE - /* [ nat : bytes : bytes : contract unit : contract unit ] */ ; - PUSH @max_length - nat - 32 - /* [ nat : nat : bytes : bytes : contract unit : contract unit ] */ ; - IFCMPLT - { PUSH string - "preimage too long" - /* [ string : bytes : bytes : contract unit : contract unit ] */ ; - FAILWITH - /* [] */ } - { SHA256 @candidate_hash - /* [ bytes : bytes : contract unit : contract unit ] */ ; - IFCMPNEQ - { PUSH string "invalid preimage" - /* [ string : contract unit : contract unit ] */ ; - FAILWITH - /* [] */ } - { BALANCE - /* [ mutez : contract unit : contract unit ] */ ; - UNIT - /* [ unit : mutez : contract unit : contract unit ] */ ; - TRANSFER_TOKENS - /* [ operation : contract unit ] */ ; - DIP { DROP /* [] */ } - /* [ operation ] */ } } } ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039924.536 units remaining) michelson_test_scripts/mini_scenarios/xcat_dapp.tz -{ parameter - (or (pair %fund - (address %dest) - (pair %settings (bytes %target_hash) (timestamp %deadline))) - (or %claim_refund (bytes %preimage_claim) (bytes %refund_hash))) ; - storage - (pair (big_map - bytes - (pair (pair %recipients (address %from) (address %dest)) - (pair %settings (mutez %amount) (timestamp %deadline)))) - unit) ; - code { NIL @operations - operation - /* [ list operation - : pair (or (pair address bytes timestamp) (or bytes bytes)) - (big_map bytes (pair (pair address address) mutez timestamp)) - unit ] */ ; - SWAP - /* [ pair (or (pair address bytes timestamp) (or bytes bytes)) - (big_map bytes (pair (pair address address) mutez timestamp)) - unit : list operation ] */ ; - UNPAPAIR @% @% @% ; - DIP { DUP - /* [ big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ } - /* [ or (pair address bytes timestamp) (or bytes bytes) - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - IF_LEFT - { UNPAIR @% @% - /* [ address : pair bytes timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DUP - /* [ address : address : pair bytes timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - CONTRACT @dest - unit - /* [ option (contract unit) : address : pair bytes timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_SOME ; - DROP - /* [ address : pair bytes timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SWAP - /* [ pair bytes timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - UNPAIR @% @% - /* [ bytes : timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DIP { AMOUNT @amount - /* [ mutez : timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SENDER - /* [ address : mutez : timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DUP - /* [ address : address : mutez : timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - CONTRACT @from - unit - /* [ option (contract unit) : address : mutez : timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_SOME ; - DROP - /* [ address : mutez : timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DIP { PAIR - /* [ pair mutez timestamp : address - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SWAP - /* [ address : pair mutez timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ } - /* [ address : address : pair mutez timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - PAIR - /* [ pair address address : pair mutez timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - PAIR - /* [ pair (pair address address) mutez timestamp - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SOME @xcat - /* [ option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SWAP - /* [ big_map bytes (pair (pair address address) mutez timestamp) - : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ } - /* [ bytes : big_map bytes (pair (pair address address) mutez timestamp) - : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DUP - /* [ bytes : bytes : big_map bytes (pair (pair address address) mutez timestamp) - : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DIP { MEM - /* [ bool : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - NOT - /* [ bool : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT } - /* [ bytes : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - UPDATE - /* [ big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - PAIR @new_storage - /* [ pair (big_map bytes (pair (pair address address) mutez timestamp)) unit - : list operation ] */ ; - SWAP - /* [ list operation - : pair (big_map bytes (pair (pair address address) mutez timestamp)) unit ] */ ; - PAIR - /* [ pair (list operation) - (big_map bytes (pair (pair address address) mutez timestamp)) - unit ] */ } - { IF_LEFT - { DUP - /* [ bytes : bytes : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SIZE - /* [ nat : bytes : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - PUSH nat - 32 - /* [ nat : nat : bytes - : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_CMPGE ; - SHA256 @hash - /* [ bytes : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DUP - /* [ bytes : bytes : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DIP { SWAP - /* [ big_map bytes (pair (pair address address) mutez timestamp) : bytes - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ } - /* [ bytes : big_map bytes (pair (pair address address) mutez timestamp) : bytes - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DIP 2 - { GET - /* [ option (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_SOME ; - DUP - /* [ pair (pair address address) mutez timestamp - : pair (pair address address) mutez timestamp : unit : list operation ] */ ; - CADR @% ; - CONTRACT @dest - unit - /* [ option (contract unit) : pair (pair address address) mutez timestamp : unit - : list operation ] */ ; - ASSERT_SOME ; - SWAP - /* [ pair (pair address address) mutez timestamp : contract unit : unit - : list operation ] */ ; - CDR @% - /* [ pair mutez timestamp : contract unit : unit : list operation ] */ ; - UNPAIR @% @% - /* [ mutez : timestamp : contract unit : unit : list operation ] */ ; - SWAP - /* [ timestamp : mutez : contract unit : unit : list operation ] */ ; - NOW - /* [ timestamp : timestamp : mutez : contract unit : unit : list operation ] */ ; - ASSERT_CMPLT ; - UNIT - /* [ unit : mutez : contract unit : unit : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : unit : list operation ] */ } - /* [ bytes : big_map bytes (pair (pair address address) mutez timestamp) - : operation : unit : list operation ] */ } - { DUP - /* [ bytes : bytes : big_map bytes (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - DIP { GET - /* [ option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_SOME ; - DUP - /* [ pair (pair address address) mutez timestamp - : pair (pair address address) mutez timestamp - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - CAAR @% ; - CONTRACT @from - unit - /* [ option (contract unit) : pair (pair address address) mutez timestamp - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_SOME ; - SWAP - /* [ pair (pair address address) mutez timestamp : contract unit - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - CDR - /* [ pair mutez timestamp : contract unit - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - UNPAIR @% @% - /* [ mutez : timestamp : contract unit - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - SWAP - /* [ timestamp : mutez : contract unit - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - NOW - /* [ timestamp : timestamp : mutez : contract unit - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - ASSERT_CMPGE ; - UNIT - /* [ unit : mutez : contract unit - : big_map bytes (pair (pair address address) mutez timestamp) : unit - : list operation ] */ ; - TRANSFER_TOKENS - /* [ operation : big_map bytes (pair (pair address address) mutez timestamp) - : unit : list operation ] */ ; - SWAP - /* [ big_map bytes (pair (pair address address) mutez timestamp) : operation - : unit : list operation ] */ } - /* [ bytes : big_map bytes (pair (pair address address) mutez timestamp) - : operation : unit : list operation ] */ } ; - NONE @none - (pair (pair address address) (pair mutez timestamp)) - /* [ option (pair (pair address address) mutez timestamp) : bytes - : big_map bytes (pair (pair address address) mutez timestamp) : operation - : unit : list operation ] */ ; - SWAP - /* [ bytes : option (pair (pair address address) mutez timestamp) - : big_map bytes (pair (pair address address) mutez timestamp) : operation - : unit : list operation ] */ ; - UPDATE @cleared_map - /* [ big_map bytes (pair (pair address address) mutez timestamp) : operation - : unit : list operation ] */ ; - SWAP - /* [ operation : big_map bytes (pair (pair address address) mutez timestamp) - : unit : list operation ] */ ; - DIP { PAIR - /* [ pair (big_map bytes (pair (pair address address) mutez timestamp)) unit - : list operation ] */ ; - SWAP - /* [ list operation - : pair (big_map bytes (pair (pair address address) mutez timestamp)) unit ] */ } - /* [ operation : list operation - : pair (big_map bytes (pair (pair address address) mutez timestamp)) unit ] */ ; - CONS - /* [ list operation - : pair (big_map bytes (pair (pair address address) mutez timestamp)) unit ] */ ; - PAIR - /* [ pair (list operation) - (big_map bytes (pair (pair address address) mutez timestamp)) - unit ] */ } } } -Well typed (Gas remaining: 1039996.019 units remaining) michelson_test_scripts/non_regression/262_bug.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - LAMBDA unit unit { /* [ unit ] */ } - /* [ lambda unit unit ] */ ; - UNIT - /* [ unit : lambda unit unit ] */ ; - EXEC - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.536 units remaining) michelson_test_scripts/non_regression/843_bug.tz -{ parameter never ; - storage (pair address (lambda unit unit)) ; - code { CAR - /* [ never ] */ ; - PUSH address "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - /* [ address : never ] */ ; - DROP - /* [ never ] */ ; - NEVER - /* [] */ } } -Well typed (Gas remaining: 1039996.898 units remaining) michelson_test_scripts/non_regression/bad_annot_contract.tz -{ parameter bytes ; - storage (option (lambda unit unit)) ; - code { CAR - /* [ bytes ] */ ; - UNPACK (lambda unit unit) - /* [ option (lambda unit unit) ] */ ; - NIL operation - /* [ list operation : option (lambda unit unit) ] */ ; - PAIR - /* [ pair (list operation) (option (lambda unit unit)) ] */ } } -Well typed (Gas remaining: 1039993.858 units remaining) michelson_test_scripts/non_regression/pairk_annot.tz -{ parameter unit ; - storage unit ; - code { SENDER - /* [ address : pair unit unit ] */ ; - SOURCE - /* [ address : address : pair unit unit ] */ ; - PAIR 2 - /* [ pair address address : pair unit unit ] */ ; - SOURCE - /* [ address : pair address address : pair unit unit ] */ ; - SENDER - /* [ address : address : pair address address : pair unit unit ] */ ; - PAIR 2 - /* [ pair address address : pair address address : pair unit unit ] */ ; - COMPARE - /* [ int : pair unit unit ] */ ; - DROP - /* [ pair unit unit ] */ ; - CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039992.816 units remaining) michelson_test_scripts/opcodes/abs.tz -{ parameter nat ; - storage unit ; - code { CAR - /* [ nat ] */ ; - DUP - /* [ nat : nat ] */ ; - NEG - /* [ int : nat ] */ ; - ABS - /* [ nat : nat ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039947.520 units remaining) michelson_test_scripts/opcodes/add.tz -{ parameter unit ; - storage unit ; - code { CAR - /* [ unit ] */ ; - PUSH int 2 - /* [ int : unit ] */ ; - PUSH int 2 - /* [ int : int : unit ] */ ; - ADD - /* [ int : unit ] */ ; - PUSH int 4 - /* [ int : int : unit ] */ ; - ASSERT_CMPEQ ; - PUSH int 2 - /* [ int : unit ] */ ; - PUSH int 2 - /* [ int : int : unit ] */ ; - ADD - /* [ int : unit ] */ ; - PUSH int 4 - /* [ int : int : unit ] */ ; - ASSERT_CMPEQ ; - PUSH int 2 - /* [ int : unit ] */ ; - PUSH nat 2 - /* [ nat : int : unit ] */ ; - ADD - /* [ int : unit ] */ ; - PUSH int 4 - /* [ int : int : unit ] */ ; - ASSERT_CMPEQ ; - PUSH nat 2 - /* [ nat : unit ] */ ; - PUSH int 2 - /* [ int : nat : unit ] */ ; - ADD - /* [ int : unit ] */ ; - PUSH int 4 - /* [ int : int : unit ] */ ; - ASSERT_CMPEQ ; - PUSH nat 2 - /* [ nat : unit ] */ ; - PUSH nat 2 - /* [ nat : nat : unit ] */ ; - ADD - /* [ nat : unit ] */ ; - PUSH nat 4 - /* [ nat : nat : unit ] */ ; - ASSERT_CMPEQ ; - PUSH int 60 - /* [ int : unit ] */ ; - PUSH timestamp "2019-09-09T12:08:37Z" - /* [ timestamp : int : unit ] */ ; - ADD - /* [ timestamp : unit ] */ ; - PUSH timestamp "2019-09-09T12:09:37Z" - /* [ timestamp : timestamp : unit ] */ ; - ASSERT_CMPEQ ; - PUSH timestamp "2019-09-09T12:08:37Z" - /* [ timestamp : unit ] */ ; - PUSH int 60 - /* [ int : timestamp : unit ] */ ; - ADD - /* [ timestamp : unit ] */ ; - PUSH timestamp "2019-09-09T12:09:37Z" - /* [ timestamp : timestamp : unit ] */ ; - ASSERT_CMPEQ ; - PUSH mutez 1000 - /* [ mutez : unit ] */ ; - PUSH mutez 1000 - /* [ mutez : mutez : unit ] */ ; - ADD - /* [ mutez : unit ] */ ; - PUSH mutez 2000 - /* [ mutez : mutez : unit ] */ ; - ASSERT_CMPEQ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/add_bls12_381_fr.tz -{ parameter (pair bls12_381_fr bls12_381_fr) ; - storage (option bls12_381_fr) ; - code { CAR - /* [ pair bls12_381_fr bls12_381_fr ] */ ; - UNPAIR - /* [ bls12_381_fr : bls12_381_fr ] */ ; - ADD - /* [ bls12_381_fr ] */ ; - SOME - /* [ option bls12_381_fr ] */ ; - NIL operation - /* [ list operation : option bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_fr) ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/add_bls12_381_g1.tz -{ parameter (pair bls12_381_g1 bls12_381_g1) ; - storage (option bls12_381_g1) ; - code { CAR - /* [ pair bls12_381_g1 bls12_381_g1 ] */ ; - UNPAIR - /* [ bls12_381_g1 : bls12_381_g1 ] */ ; - ADD - /* [ bls12_381_g1 ] */ ; - SOME - /* [ option bls12_381_g1 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g1 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g1) ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/add_bls12_381_g2.tz -{ parameter (pair bls12_381_g2 bls12_381_g2) ; - storage (option bls12_381_g2) ; - code { CAR - /* [ pair bls12_381_g2 bls12_381_g2 ] */ ; - UNPAIR - /* [ bls12_381_g2 : bls12_381_g2 ] */ ; - ADD - /* [ bls12_381_g2 ] */ ; - SOME - /* [ option bls12_381_g2 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g2 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g2) ] */ } } -Well typed (Gas remaining: 1039994.537 units remaining) michelson_test_scripts/opcodes/add_delta_timestamp.tz -{ parameter (pair int timestamp) ; - storage (option timestamp) ; - code { CAR - /* [ pair int timestamp ] */ ; - DUP - /* [ pair int timestamp : pair int timestamp ] */ ; - CAR - /* [ int : pair int timestamp ] */ ; - DIP { CDR /* [ timestamp ] */ } - /* [ int : timestamp ] */ ; - ADD - /* [ timestamp ] */ ; - SOME - /* [ option timestamp ] */ ; - NIL operation - /* [ list operation : option timestamp ] */ ; - PAIR - /* [ pair (list operation) (option timestamp) ] */ } } -Well typed (Gas remaining: 1039994.537 units remaining) michelson_test_scripts/opcodes/add_timestamp_delta.tz -{ parameter (pair timestamp int) ; - storage (option timestamp) ; - code { CAR - /* [ pair timestamp int ] */ ; - DUP - /* [ pair timestamp int : pair timestamp int ] */ ; - CAR - /* [ timestamp : pair timestamp int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ timestamp : int ] */ ; - ADD - /* [ timestamp ] */ ; - SOME - /* [ option timestamp ] */ ; - NIL operation - /* [ list operation : option timestamp ] */ ; - PAIR - /* [ pair (list operation) (option timestamp) ] */ } } -Well typed (Gas remaining: 1039996.828 units remaining) michelson_test_scripts/opcodes/address.tz -{ parameter (contract unit) ; - storage (option address) ; - code { CAR - /* [ contract unit ] */ ; - ADDRESS - /* [ address ] */ ; - SOME - /* [ option address ] */ ; - NIL operation - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } -Well typed (Gas remaining: 1039986.649 units remaining) michelson_test_scripts/opcodes/amount_after_fib_view.tz -{ parameter address ; - storage mutez ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 3 - /* [ nat : address : address ] */ ; - VIEW "fib" nat - /* [ option nat : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 15000000 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - AMOUNT - /* [ mutez : operation ] */ ; - SWAP - /* [ operation : mutez ] */ ; - NIL operation - /* [ list operation : operation : mutez ] */ ; - SWAP - /* [ operation : list operation : mutez ] */ ; - CONS - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039986.856 units remaining) michelson_test_scripts/opcodes/amount_after_nonexistent_view.tz -{ parameter address ; - storage mutez ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "nonexistent" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_NONE ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 15000000 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - AMOUNT - /* [ mutez : operation ] */ ; - SWAP - /* [ operation : mutez ] */ ; - NIL operation - /* [ list operation : operation : mutez ] */ ; - SWAP - /* [ operation : list operation : mutez ] */ ; - CONS - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039986.472 units remaining) michelson_test_scripts/opcodes/amount_after_view.tz -{ parameter address ; - storage mutez ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 15000000 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - AMOUNT - /* [ mutez : operation ] */ ; - SWAP - /* [ operation : mutez ] */ ; - NIL operation - /* [ list operation : operation : mutez ] */ ; - SWAP - /* [ operation : list operation : mutez ] */ ; - CONS - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039995.334 units remaining) michelson_test_scripts/opcodes/and.tz -{ parameter (pair :param (bool %first) (bool %second)) ; - storage (option bool) ; - code { CAR - /* [ pair bool bool ] */ ; - UNPAIR - /* [ bool : bool ] */ ; - AND @and - /* [ bool ] */ ; - SOME @res - /* [ option bool ] */ ; - NIL @noop operation - /* [ list operation : option bool ] */ ; - PAIR - /* [ pair (list operation) (option bool) ] */ ; - UNPAIR @x @y - /* [ list operation : option bool ] */ ; - PAIR %a %b - /* [ pair (list operation) (option bool) ] */ } } -Well typed (Gas remaining: 1039972.833 units remaining) michelson_test_scripts/opcodes/and_binary.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 5 - /* [ nat ] */ ; - PUSH nat 6 - /* [ nat : nat ] */ ; - AND - /* [ nat ] */ ; - PUSH nat 4 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - PUSH nat 6 - /* [ nat ] */ ; - PUSH int 5 - /* [ int : nat ] */ ; - AND - /* [ nat ] */ ; - PUSH nat 4 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - PUSH nat 12 - /* [ nat ] */ ; - PUSH int -1 - /* [ int : nat ] */ ; - AND - /* [ nat ] */ ; - PUSH nat 12 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - PUSH nat 12 - /* [ nat ] */ ; - PUSH int -5 - /* [ int : nat ] */ ; - AND - /* [ nat ] */ ; - PUSH nat 8 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039978.970 units remaining) michelson_test_scripts/opcodes/and_bytes_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - PUSH bytes 0x06 - /* [ bytes : bytes ] */ ; - AND - /* [ bytes ] */ ; - PUSH bytes 0x04 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0005 - /* [ bytes ] */ ; - PUSH bytes 0x0106 - /* [ bytes : bytes ] */ ; - AND - /* [ bytes ] */ ; - PUSH bytes 0x0004 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - PUSH bytes 0x0106 - /* [ bytes : bytes ] */ ; - AND - /* [ bytes ] */ ; - PUSH bytes 0x04 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.850 units remaining) michelson_test_scripts/opcodes/and_logical_1.tz -{ parameter (pair bool bool) ; - storage bool ; - code { CAR - /* [ pair bool bool ] */ ; - UNPAIR - /* [ bool : bool ] */ ; - AND @and - /* [ bool ] */ ; - NIL @noop operation - /* [ list operation : bool ] */ ; - PAIR - /* [ pair (list operation) bool ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/balance.tz -{ parameter unit ; - storage mutez ; - code { DROP - /* [] */ ; - BALANCE - /* [ mutez ] */ ; - NIL operation - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039986.649 units remaining) michelson_test_scripts/opcodes/balance_after_fib_view.tz -{ parameter address ; - storage mutez ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 3 - /* [ nat : address : address ] */ ; - VIEW "fib" nat - /* [ option nat : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 15000000 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - BALANCE - /* [ mutez : operation ] */ ; - SWAP - /* [ operation : mutez ] */ ; - NIL operation - /* [ list operation : operation : mutez ] */ ; - SWAP - /* [ operation : list operation : mutez ] */ ; - CONS - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039986.856 units remaining) michelson_test_scripts/opcodes/balance_after_nonexistent_view.tz -{ parameter address ; - storage mutez ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "nonexistent" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_NONE ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 15000000 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - BALANCE - /* [ mutez : operation ] */ ; - SWAP - /* [ operation : mutez ] */ ; - NIL operation - /* [ list operation : operation : mutez ] */ ; - SWAP - /* [ operation : list operation : mutez ] */ ; - CONS - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039986.472 units remaining) michelson_test_scripts/opcodes/balance_after_view.tz -{ parameter address ; - storage mutez ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 15000000 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - BALANCE - /* [ mutez : operation ] */ ; - SWAP - /* [ operation : mutez ] */ ; - NIL operation - /* [ list operation : operation : mutez ] */ ; - SWAP - /* [ operation : list operation : mutez ] */ ; - CONS - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039993.786 units remaining) michelson_test_scripts/opcodes/big_map_mem_nat.tz -{ parameter nat ; - storage (pair (big_map nat nat) (option bool)) ; - code { UNPAIR - /* [ nat : pair (big_map nat nat) (option bool) ] */ ; - DIP { CAR /* [ big_map nat nat ] */ ; DUP /* [ big_map nat nat : big_map nat nat ] */ } - /* [ nat : big_map nat nat : big_map nat nat ] */ ; - MEM - /* [ bool : big_map nat nat ] */ ; - SOME - /* [ option bool : big_map nat nat ] */ ; - SWAP - /* [ big_map nat nat : option bool ] */ ; - PAIR - /* [ pair (big_map nat nat) (option bool) ] */ ; - NIL operation - /* [ list operation : pair (big_map nat nat) (option bool) ] */ ; - PAIR - /* [ pair (list operation) (big_map nat nat) (option bool) ] */ } } -Well typed (Gas remaining: 1039993.786 units remaining) michelson_test_scripts/opcodes/big_map_mem_string.tz -{ parameter string ; - storage (pair (big_map string nat) (option bool)) ; - code { UNPAIR - /* [ string : pair (big_map string nat) (option bool) ] */ ; - DIP { CAR - /* [ big_map string nat ] */ ; - DUP - /* [ big_map string nat : big_map string nat ] */ } - /* [ string : big_map string nat : big_map string nat ] */ ; - MEM - /* [ bool : big_map string nat ] */ ; - SOME - /* [ option bool : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : option bool ] */ ; - PAIR - /* [ pair (big_map string nat) (option bool) ] */ ; - NIL operation - /* [ list operation : pair (big_map string nat) (option bool) ] */ ; - PAIR - /* [ pair (list operation) (big_map string nat) (option bool) ] */ } } -Well typed (Gas remaining: 1039987.823 units remaining) michelson_test_scripts/opcodes/big_map_to_self.tz -{ parameter (or (pair %have_fun (big_map string nat) unit) (unit %default)) ; - storage (big_map string nat) ; - code { UNPAIR - /* [ or (pair (big_map string nat) unit) unit : big_map string nat ] */ ; - DIP { NIL operation /* [ list operation : big_map string nat ] */ } - /* [ or (pair (big_map string nat) unit) unit : list operation - : big_map string nat ] */ ; - IF_LEFT - { DROP /* [ list operation : big_map string nat ] */ } - { DROP - /* [ list operation : big_map string nat ] */ ; - SELF %have_fun - /* [ contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - PUSH mutez - 0 - /* [ mutez : contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - DUP 4 - /* [ big_map string nat : mutez : contract (pair (big_map string nat) unit) - : list operation : big_map string nat ] */ ; - PUSH (option nat) - (Some 8) - /* [ option nat : big_map string nat : mutez - : contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - PUSH string - "hahaha" - /* [ string : option nat : big_map string nat : mutez - : contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - UPDATE - /* [ big_map string nat : mutez : contract (pair (big_map string nat) unit) - : list operation : big_map string nat ] */ ; - UNIT - /* [ unit : big_map string nat : mutez - : contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - SWAP - /* [ big_map string nat : unit : mutez - : contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - PAIR - /* [ pair (big_map string nat) unit : mutez - : contract (pair (big_map string nat) unit) : list operation - : big_map string nat ] */ ; - TRANSFER_TOKENS - /* [ operation : list operation : big_map string nat ] */ ; - CONS - /* [ list operation : big_map string nat ] */ } ; - PAIR - /* [ pair (list operation) (big_map string nat) ] */ } } -Well typed (Gas remaining: 1039996.579 units remaining) michelson_test_scripts/opcodes/bls12_381_fr_push_bytes_not_padded.tz -{ parameter unit ; - storage (option bls12_381_fr) ; - code { DROP - /* [] */ ; - PUSH bls12_381_fr 0x00 - /* [ bls12_381_fr ] */ ; - SOME - /* [ option bls12_381_fr ] */ ; - NIL operation - /* [ list operation : option bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_fr) ] */ } } -Well typed (Gas remaining: 1039996.579 units remaining) michelson_test_scripts/opcodes/bls12_381_fr_push_nat.tz -{ parameter unit ; - storage (option bls12_381_fr) ; - code { DROP - /* [] */ ; - PUSH bls12_381_fr 16 - /* [ bls12_381_fr ] */ ; - SOME - /* [ option bls12_381_fr ] */ ; - NIL operation - /* [ list operation : option bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_fr) ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz -{ parameter bls12_381_fr ; - storage int ; - code { CAR - /* [ bls12_381_fr ] */ ; - INT - /* [ int ] */ ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039993.693 units remaining) michelson_test_scripts/opcodes/bls12_381_fr_to_mutez.tz -{ parameter bls12_381_fr ; - storage mutez ; - code { CAR - /* [ bls12_381_fr ] */ ; - INT - /* [ int ] */ ; - ISNAT - /* [ option nat ] */ ; - ASSERT_SOME ; - PUSH mutez 1 - /* [ mutez : nat ] */ ; - MUL - /* [ mutez ] */ ; - NIL operation - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz -{ parameter int ; - storage bls12_381_fr ; - code { UNPAIR - /* [ int : bls12_381_fr ] */ ; - MUL - /* [ bls12_381_fr ] */ ; - NIL operation - /* [ list operation : bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) bls12_381_fr ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz -{ parameter nat ; - storage bls12_381_fr ; - code { UNPAIR - /* [ nat : bls12_381_fr ] */ ; - MUL - /* [ bls12_381_fr ] */ ; - NIL operation - /* [ list operation : bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) bls12_381_fr ] */ } } -Well typed (Gas remaining: 1039997.089 units remaining) michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz -{ parameter int ; - storage bls12_381_fr ; - code { UNPAIR - /* [ int : bls12_381_fr ] */ ; - SWAP - /* [ bls12_381_fr : int ] */ ; - MUL - /* [ bls12_381_fr ] */ ; - NIL operation - /* [ list operation : bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) bls12_381_fr ] */ } } -Well typed (Gas remaining: 1039997.089 units remaining) michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz -{ parameter nat ; - storage bls12_381_fr ; - code { UNPAIR - /* [ nat : bls12_381_fr ] */ ; - SWAP - /* [ bls12_381_fr : nat ] */ ; - MUL - /* [ bls12_381_fr ] */ ; - NIL operation - /* [ list operation : bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) bls12_381_fr ] */ } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/opcodes/bytes.tz -{ parameter bytes ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039907.915 units remaining) michelson_test_scripts/opcodes/bytes_of_int_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH int 0 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH int 1 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x01 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH int 1193046 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x123456 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x123456 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int 1193046 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0000123456 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int 1193046 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int 0 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0000 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int 0 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH int -128 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x80 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH int -129 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0xff7f - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH int -33024 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0xff7f00 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH int -4294967296 - /* [ int ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0xff00000000 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x80 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int -128 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0xff7f - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int -129 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0xff7f00 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int -33024 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0xffffff7f00 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int -33024 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0xff00000000 - /* [ bytes ] */ ; - INT - /* [ int ] */ ; - PUSH int -4294967296 - /* [ int : int ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039958.799 units remaining) michelson_test_scripts/opcodes/bytes_of_nat_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 0 - /* [ nat ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 1 - /* [ nat ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x01 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 1193046 - /* [ nat ] */ ; - BYTES - /* [ bytes ] */ ; - PUSH bytes 0x123456 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x123456 - /* [ bytes ] */ ; - NAT - /* [ nat ] */ ; - PUSH nat 1193046 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0000123456 - /* [ bytes ] */ ; - NAT - /* [ nat ] */ ; - PUSH nat 1193046 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x - /* [ bytes ] */ ; - NAT - /* [ nat ] */ ; - PUSH nat 0 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0000 - /* [ bytes ] */ ; - NAT - /* [ nat ] */ ; - PUSH nat 0 - /* [ nat : nat ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.385 units remaining) michelson_test_scripts/opcodes/car.tz -{ parameter (pair (nat :l) (nat :r)) ; - storage nat ; - code { CAR - /* [ pair nat nat ] */ ; - CAR - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039997.385 units remaining) michelson_test_scripts/opcodes/cdr.tz -{ parameter (pair (nat :l) (nat :r)) ; - storage nat ; - code { CAR - /* [ pair nat nat ] */ ; - CDR - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039997.089 units remaining) michelson_test_scripts/opcodes/chain_id.tz -{ parameter unit ; - storage unit ; - code { CHAIN_ID - /* [ chain_id : pair unit unit ] */ ; - DROP - /* [ pair unit unit ] */ ; - CAR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/chain_id_store.tz -{ parameter unit ; - storage (option chain_id) ; - code { DROP - /* [] */ ; - CHAIN_ID - /* [ chain_id ] */ ; - SOME - /* [ option chain_id ] */ ; - NIL operation - /* [ list operation : option chain_id ] */ ; - PAIR - /* [ pair (list operation) (option chain_id) ] */ } } -Well typed (Gas remaining: 1039989.149 units remaining) michelson_test_scripts/opcodes/check_signature.tz -{ parameter key ; - storage (pair signature string) ; - code { DUP - /* [ pair key signature string : pair key signature string ] */ ; - DUP - /* [ pair key signature string : pair key signature string - : pair key signature string ] */ ; - DIP { CDR - /* [ pair signature string : pair key signature string ] */ ; - DUP - /* [ pair signature string : pair signature string : pair key signature string ] */ ; - CAR - /* [ signature : pair signature string : pair key signature string ] */ ; - DIP { CDR - /* [ string : pair key signature string ] */ ; - PACK - /* [ bytes : pair key signature string ] */ } - /* [ signature : bytes : pair key signature string ] */ } - /* [ pair key signature string : signature : bytes : pair key signature string ] */ ; - CAR - /* [ key : signature : bytes : pair key signature string ] */ ; - CHECK_SIGNATURE - /* [ bool : pair key signature string ] */ ; - IF { /* [ pair key signature string ] */ } { FAIL } ; - CDR - /* [ pair signature string ] */ ; - NIL operation - /* [ list operation : pair signature string ] */ ; - PAIR - /* [ pair (list operation) signature string ] */ } } -Well typed (Gas remaining: 1039995.265 units remaining) michelson_test_scripts/opcodes/comb.tz -{ parameter unit ; - storage (pair nat nat nat) ; - code { DROP - /* [] */ ; - PUSH nat 3 - /* [ nat ] */ ; - PUSH nat 2 - /* [ nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat ] */ ; - NIL operation - /* [ list operation : nat : nat : nat ] */ ; - PAIR 4 - /* [ pair (list operation) nat nat nat ] */ } } -Well typed (Gas remaining: 1039966.290 units remaining) michelson_test_scripts/opcodes/comb-get.tz -{ parameter (pair nat nat nat unit) ; - storage unit ; - code { CAR - /* [ pair nat nat nat unit ] */ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - CAR - /* [ nat : pair nat nat nat unit ] */ ; - PUSH nat 1 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - GET 1 - /* [ nat : pair nat nat nat unit ] */ ; - PUSH nat 1 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - GET 3 - /* [ nat : pair nat nat nat unit ] */ ; - PUSH nat 4 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - GET 5 - /* [ nat : pair nat nat nat unit ] */ ; - PUSH nat 2 - /* [ nat : nat : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat nat nat unit : pair nat nat nat unit ] */ ; - GET 6 - /* [ unit : pair nat nat nat unit ] */ ; - UNIT - /* [ unit : unit : pair nat nat nat unit ] */ ; - ASSERT_CMPEQ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.354 units remaining) michelson_test_scripts/opcodes/comb-literals.tz -{ parameter unit ; - storage unit ; - code { PUSH (list (pair nat nat nat nat)) - { Pair 0 3 6 9 ; Pair 1 (Pair 4 (Pair 7 10)) ; { 2 ; 5 ; 8 ; 11 } } - /* [ list (pair nat nat nat nat) : pair unit unit ] */ ; - DROP 2 - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.939 units remaining) michelson_test_scripts/opcodes/comb-set.tz -{ parameter unit ; - storage (pair nat nat nat unit) ; - code { CDR - /* [ pair nat nat nat unit ] */ ; - PUSH nat 2 - /* [ nat : pair nat nat nat unit ] */ ; - UPDATE 1 - /* [ pair nat nat nat unit ] */ ; - PUSH nat 12 - /* [ nat : pair nat nat nat unit ] */ ; - UPDATE 3 - /* [ pair nat nat nat unit ] */ ; - PUSH nat 8 - /* [ nat : pair nat nat nat unit ] */ ; - UPDATE 5 - /* [ pair nat nat nat unit ] */ ; - UNIT - /* [ unit : pair nat nat nat unit ] */ ; - UPDATE 6 - /* [ pair nat nat nat unit ] */ ; - NIL operation - /* [ list operation : pair nat nat nat unit ] */ ; - PAIR - /* [ pair (list operation) nat nat nat unit ] */ } } -Well typed (Gas remaining: 1039991.931 units remaining) michelson_test_scripts/opcodes/comb-set-2.tz -{ parameter (pair nat nat nat unit) ; - storage (option (pair int nat string bytes)) ; - code { CAR - /* [ pair nat nat nat unit ] */ ; - PUSH int 2 - /* [ int : pair nat nat nat unit ] */ ; - UPDATE 1 - /* [ pair int nat nat unit ] */ ; - PUSH string "toto" - /* [ string : pair int nat nat unit ] */ ; - UPDATE 5 - /* [ pair int nat string unit ] */ ; - PUSH bytes 0x01 - /* [ bytes : pair int nat string unit ] */ ; - UPDATE 6 - /* [ pair int nat string bytes ] */ ; - SOME - /* [ option (pair int nat string bytes) ] */ ; - NIL operation - /* [ list operation : option (pair int nat string bytes) ] */ ; - PAIR - /* [ pair (list operation) (option (pair int nat string bytes)) ] */ } } -Well typed (Gas remaining: 1039839.822 units remaining) michelson_test_scripts/opcodes/compare.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH bool True - /* [ bool ] */ ; - DUP - /* [ bool : bool ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH bool False - /* [ bool ] */ ; - DUP - /* [ bool : bool ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH bool False - /* [ bool ] */ ; - PUSH bool True - /* [ bool : bool ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH bool True - /* [ bool ] */ ; - PUSH bool False - /* [ bool : bool ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH bytes 0xaabbcc - /* [ bytes ] */ ; - DUP - /* [ bytes : bytes ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH bytes 0x - /* [ bytes ] */ ; - PUSH bytes 0x - /* [ bytes : bytes ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH bytes 0x - /* [ bytes ] */ ; - PUSH bytes 0x01 - /* [ bytes : bytes ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH bytes 0x01 - /* [ bytes ] */ ; - PUSH bytes 0x02 - /* [ bytes : bytes ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH bytes 0x02 - /* [ bytes ] */ ; - PUSH bytes 0x01 - /* [ bytes : bytes ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH int 1 - /* [ int ] */ ; - DUP - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH int 10 - /* [ int ] */ ; - PUSH int 5 - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH int -4 - /* [ int ] */ ; - PUSH int 1923 - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH nat 1 - /* [ nat ] */ ; - DUP - /* [ nat : nat ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH nat 10 - /* [ nat ] */ ; - PUSH nat 5 - /* [ nat : nat ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH nat 4 - /* [ nat ] */ ; - PUSH nat 1923 - /* [ nat : nat ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH key_hash "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - /* [ key_hash ] */ ; - DUP - /* [ key_hash : key_hash ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH key_hash "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" - /* [ key_hash ] */ ; - PUSH key_hash "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - /* [ key_hash : key_hash ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH key_hash "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - /* [ key_hash ] */ ; - PUSH key_hash "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" - /* [ key_hash : key_hash ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH mutez 1 - /* [ mutez ] */ ; - DUP - /* [ mutez : mutez ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH mutez 10 - /* [ mutez ] */ ; - PUSH mutez 5 - /* [ mutez : mutez ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH mutez 4 - /* [ mutez ] */ ; - PUSH mutez 1923 - /* [ mutez : mutez ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH string "AABBCC" - /* [ string ] */ ; - DUP - /* [ string : string ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH string "" - /* [ string ] */ ; - PUSH string "" - /* [ string : string ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH string "" - /* [ string ] */ ; - PUSH string "a" - /* [ string : string ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH string "a" - /* [ string ] */ ; - PUSH string "b" - /* [ string : string ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH string "b" - /* [ string ] */ ; - PUSH string "a" - /* [ string : string ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - PUSH timestamp "2019-09-16T08:38:05Z" - /* [ timestamp ] */ ; - DUP - /* [ timestamp : timestamp ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH timestamp "2017-09-16T08:38:04Z" - /* [ timestamp ] */ ; - PUSH timestamp "2019-09-16T08:38:05Z" - /* [ timestamp : timestamp ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_GT ; - PUSH timestamp "2019-09-16T08:38:05Z" - /* [ timestamp ] */ ; - PUSH timestamp "2019-09-16T08:38:04Z" - /* [ timestamp : timestamp ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_LT ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039246.273 units remaining) michelson_test_scripts/opcodes/compare_big_type.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 0 - /* [ nat ] */ ; - DUP - /* [ nat : nat ] */ ; - PAIR - /* [ pair nat nat ] */ ; - DUP - /* [ pair nat nat : pair nat nat ] */ ; - PAIR - /* [ pair (pair nat nat) nat nat ] */ ; - DUP - /* [ pair (pair nat nat) nat nat : pair (pair nat nat) nat nat ] */ ; - PAIR - /* [ pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat ] */ ; - DUP - /* [ pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat - : pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat ] */ ; - PAIR - /* [ pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039130.903 units remaining) michelson_test_scripts/opcodes/compare_big_type2.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 0 - /* [ nat ] */ ; - DUP - /* [ nat : nat ] */ ; - PAIR - /* [ pair nat nat ] */ ; - DUP - /* [ pair nat nat : pair nat nat ] */ ; - PAIR - /* [ pair (pair nat nat) nat nat ] */ ; - DUP - /* [ pair (pair nat nat) nat nat : pair (pair nat nat) nat nat ] */ ; - PAIR - /* [ pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat ] */ ; - DUP - /* [ pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat - : pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat ] */ ; - PAIR - /* [ pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - PAIR - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DUP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - COMPARE - /* [ int - : pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [ pair (pair (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat) - (pair (pair (pair nat nat) nat nat) (pair nat nat) nat nat) - (pair (pair nat nat) nat nat) - (pair nat nat) - nat - nat ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039977.792 units remaining) michelson_test_scripts/opcodes/comparisons.tz -{ parameter (list int) ; - storage (list (list bool)) ; - code { CAR - /* [ list int ] */ ; - NIL (list bool) - /* [ list (list bool) : list int ] */ ; - DIP { DUP - /* [ list int : list int ] */ ; - MAP { EQ /* [ bool : list int ] */ } - /* [ list bool : list int ] */ } - /* [ list (list bool) : list bool : list int ] */ ; - SWAP - /* [ list bool : list (list bool) : list int ] */ ; - CONS - /* [ list (list bool) : list int ] */ ; - DIP { DUP - /* [ list int : list int ] */ ; - MAP { NEQ /* [ bool : list int ] */ } - /* [ list bool : list int ] */ } - /* [ list (list bool) : list bool : list int ] */ ; - SWAP - /* [ list bool : list (list bool) : list int ] */ ; - CONS - /* [ list (list bool) : list int ] */ ; - DIP { DUP - /* [ list int : list int ] */ ; - MAP { LE /* [ bool : list int ] */ } - /* [ list bool : list int ] */ } - /* [ list (list bool) : list bool : list int ] */ ; - SWAP - /* [ list bool : list (list bool) : list int ] */ ; - CONS - /* [ list (list bool) : list int ] */ ; - DIP { DUP - /* [ list int : list int ] */ ; - MAP { LT /* [ bool : list int ] */ } - /* [ list bool : list int ] */ } - /* [ list (list bool) : list bool : list int ] */ ; - SWAP - /* [ list bool : list (list bool) : list int ] */ ; - CONS - /* [ list (list bool) : list int ] */ ; - DIP { DUP - /* [ list int : list int ] */ ; - MAP { GE /* [ bool : list int ] */ } - /* [ list bool : list int ] */ } - /* [ list (list bool) : list bool : list int ] */ ; - SWAP - /* [ list bool : list (list bool) : list int ] */ ; - CONS - /* [ list (list bool) : list int ] */ ; - DIP { MAP { GT /* [ bool ] */ } /* [ list bool ] */ } - /* [ list (list bool) : list bool ] */ ; - SWAP - /* [ list bool : list (list bool) ] */ ; - CONS - /* [ list (list bool) ] */ ; - NIL operation - /* [ list operation : list (list bool) ] */ ; - PAIR - /* [ pair (list operation) (list (list bool)) ] */ } } -Well typed (Gas remaining: 1039996.039 units remaining) michelson_test_scripts/opcodes/concat_hello.tz -{ parameter (list string) ; - storage (list string) ; - code { CAR - /* [ list string ] */ ; - MAP { PUSH @hello string "Hello " /* [ string : string ] */ ; CONCAT /* [ string ] */ } - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039996.114 units remaining) michelson_test_scripts/opcodes/concat_hello_bytes.tz -{ parameter (list bytes) ; - storage (list bytes) ; - code { CAR - /* [ list bytes ] */ ; - MAP { PUSH bytes 0xff /* [ bytes : bytes ] */ ; CONCAT /* [ bytes ] */ } - /* [ list bytes ] */ ; - NIL operation - /* [ list operation : list bytes ] */ ; - PAIR - /* [ pair (list operation) (list bytes) ] */ } } -Well typed (Gas remaining: 1039992.642 units remaining) michelson_test_scripts/opcodes/concat_list.tz -{ parameter (list string) ; - storage string ; - code { CAR - /* [ list string ] */ ; - PUSH string "" - /* [ string : list string ] */ ; - SWAP - /* [ list string : string ] */ ; - ITER { SWAP - /* [ string : string ] */ ; - DIP { NIL string - /* [ list string : string ] */ ; - SWAP - /* [ string : list string ] */ ; - CONS - /* [ list string ] */ } - /* [ string : list string ] */ ; - CONS - /* [ list string ] */ ; - CONCAT - /* [ string ] */ } - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039997.390 units remaining) michelson_test_scripts/opcodes/cons.tz -{ parameter int ; - storage (list int) ; - code { UNPAIR - /* [ int : list int ] */ ; - CONS - /* [ list int ] */ ; - NIL operation - /* [ list operation : list int ] */ ; - PAIR - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039975.058 units remaining) michelson_test_scripts/opcodes/contains_all.tz -{ parameter (pair (list string) (list string)) ; - storage (option bool) ; - code { CAR - /* [ pair (list string) (list string) ] */ ; - DUP - /* [ pair (list string) (list string) : pair (list string) (list string) ] */ ; - CAR - /* [ list string : pair (list string) (list string) ] */ ; - DIP { CDR /* [ list string ] */ } - /* [ list string : list string ] */ ; - EMPTY_SET string - /* [ set string : list string : list string ] */ ; - SWAP - /* [ list string : set string : list string ] */ ; - ITER { PAIR - /* [ pair string (set string) : list string ] */ ; - DUP - /* [ pair string (set string) : pair string (set string) : list string ] */ ; - CAR - /* [ string : pair string (set string) : list string ] */ ; - DIP { CDR /* [ set string : list string ] */ } - /* [ string : set string : list string ] */ ; - PUSH bool True - /* [ bool : string : set string : list string ] */ ; - SWAP - /* [ string : bool : set string : list string ] */ ; - UPDATE - /* [ set string : list string ] */ } - /* [ set string : list string ] */ ; - PUSH bool True - /* [ bool : set string : list string ] */ ; - SWAP - /* [ set string : bool : list string ] */ ; - PAIR - /* [ pair (set string) bool : list string ] */ ; - SWAP - /* [ list string : pair (set string) bool ] */ ; - ITER { PAIR - /* [ pair string (set string) bool ] */ ; - DUP - /* [ pair string (set string) bool : pair string (set string) bool ] */ ; - DUP - /* [ pair string (set string) bool : pair string (set string) bool - : pair string (set string) bool ] */ ; - CAR - /* [ string : pair string (set string) bool : pair string (set string) bool ] */ ; - DIP { CDAR ; - DIP { CDDR } - /* [ set string : bool ] */ ; - DUP - /* [ set string : set string : bool ] */ } - /* [ string : set string : set string : bool ] */ ; - MEM - /* [ bool : set string : bool ] */ ; - DIP { SWAP /* [ bool : set string ] */ } - /* [ bool : bool : set string ] */ ; - AND - /* [ bool : set string ] */ ; - SWAP - /* [ set string : bool ] */ ; - PAIR - /* [ pair (set string) bool ] */ } - /* [ pair (set string) bool ] */ ; - CDR - /* [ bool ] */ ; - SOME - /* [ option bool ] */ ; - NIL operation - /* [ list operation : option bool ] */ ; - PAIR - /* [ pair (list operation) (option bool) ] */ } } -Well typed (Gas remaining: 1039994.290 units remaining) michelson_test_scripts/opcodes/contract.tz -{ parameter address ; - storage unit ; - code { CAR - /* [ address ] */ ; - CONTRACT unit - /* [ option (contract unit) ] */ ; - ASSERT_SOME ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039992.030 units remaining) michelson_test_scripts/opcodes/create_contract.tz -{ parameter unit ; - storage (option address) ; - code { /* [ pair unit unit ] */ - DROP - /* [ list operation : unit ] */ ; - UNIT - /* [ unit ] */ ; - AMOUNT - /* [ pair (list operation) unit ] */ ; - NONE key_hash - /* [ option key_hash : mutez : unit ] */ ; - CREATE_CONTRACT - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } - /* [ operation : address ] */ ; - DIP { SOME - /* [ option address ] */ ; - NIL operation - /* [ list operation : option address ] */ } - /* [ operation : list operation : option address ] */ ; - CONS - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } -Well typed (Gas remaining: 1039992.030 units remaining) michelson_test_scripts/opcodes/create_contract_rootname.tz -{ parameter unit ; - storage (option address) ; - code { /* [ pair unit unit ] */ - DROP - /* [ list operation : unit ] */ ; - UNIT - /* [ unit ] */ ; - AMOUNT - /* [ pair (list operation) unit ] */ ; - NONE key_hash - /* [ option key_hash : mutez : unit ] */ ; - CREATE_CONTRACT - { parameter (unit %root) ; - storage unit ; - code { CDR ; NIL operation ; PAIR } } - /* [ operation : address ] */ ; - DIP { SOME - /* [ option address ] */ ; - NIL operation - /* [ list operation : option address ] */ } - /* [ operation : list operation : option address ] */ ; - CONS - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } -Well typed (Gas remaining: 1039992.030 units remaining) michelson_test_scripts/opcodes/create_contract_rootname_alt.tz -{ parameter unit ; - storage (option address) ; - code { /* [ pair unit unit ] */ - DROP - /* [ list operation : unit ] */ ; - UNIT - /* [ unit ] */ ; - AMOUNT - /* [ pair (list operation) unit ] */ ; - NONE key_hash - /* [ option key_hash : mutez : unit ] */ ; - CREATE_CONTRACT - { parameter (unit %root) ; - storage unit ; - code { CDR ; NIL operation ; PAIR } } - /* [ operation : address ] */ ; - DIP { SOME - /* [ option address ] */ ; - NIL operation - /* [ list operation : option address ] */ } - /* [ operation : list operation : option address ] */ ; - CONS - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } -Well typed (Gas remaining: 1039991.039 units remaining) michelson_test_scripts/opcodes/create_contract_with_view.tz -{ parameter unit ; - storage (option address) ; - code { /* [ pair unit unit ] */ - DROP - /* [ list operation : unit ] */ ; - UNIT - /* [ unit ] */ ; - AMOUNT - /* [ pair (list operation) unit ] */ ; - NONE key_hash - /* [ option key_hash : mutez : unit ] */ ; - CREATE_CONTRACT - { parameter unit /* [ nat ] */ ; - storage unit ; - code { CDR ; NIL operation ; PAIR } ; - view "const" nat nat { CAR } } - /* [ operation : address ] */ ; - DIP { SOME - /* [ option address ] */ ; - NIL operation - /* [ list operation : option address ] */ } - /* [ operation : list operation : option address ] */ ; - CONS - /* [ list operation : option address ] */ ; - PAIR - /* [ pair (list operation) (option address) ] */ } } -Well typed (Gas remaining: 1039995.116 units remaining) michelson_test_scripts/opcodes/diff_timestamps.tz -{ parameter (pair timestamp timestamp) ; - storage int ; - code { CAR - /* [ pair timestamp timestamp ] */ ; - DUP - /* [ pair timestamp timestamp : pair timestamp timestamp ] */ ; - CAR - /* [ timestamp : pair timestamp timestamp ] */ ; - DIP { CDR /* [ timestamp ] */ } - /* [ timestamp : timestamp ] */ ; - SUB - /* [ int ] */ ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039910.324 units remaining) michelson_test_scripts/opcodes/dig_eq.tz -{ parameter - (pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat) ; - storage unit ; - code { CAR - /* [ pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DUP - /* [ pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - UNPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAIR ; - DIG 0 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 1 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 2 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 3 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 4 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 5 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 6 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 7 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 8 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 9 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 10 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 11 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 12 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 13 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 14 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 15 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 16 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 0 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 1 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 2 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 3 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 4 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 5 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 6 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 7 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 8 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 9 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 10 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 11 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 12 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 13 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 14 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 15 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - DIG 16 - /* [ nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat : nat - : nat : nat : nat : nat - : pair nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat nat ] */ ; - PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAIR ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039992.167 units remaining) michelson_test_scripts/opcodes/dign.tz -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR - /* [ pair (pair (pair (pair nat nat) nat) nat) nat ] */ ; - UNPAIR - /* [ pair (pair (pair nat nat) nat) nat : nat ] */ ; - UNPAIR - /* [ pair (pair nat nat) nat : nat : nat ] */ ; - UNPAIR - /* [ pair nat nat : nat : nat : nat ] */ ; - UNPAIR - /* [ nat : nat : nat : nat : nat ] */ ; - DIG 4 - /* [ nat : nat : nat : nat : nat ] */ ; - DIP { DROP /* [ nat : nat : nat ] */ ; DROP /* [ nat : nat ] */ ; DROP /* [ nat ] */ ; DROP /* [] */ } - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039995.095 units remaining) michelson_test_scripts/opcodes/dip.tz -{ parameter (pair nat nat) ; - storage (pair nat nat) ; - code { CAR - /* [ pair nat nat ] */ ; - UNPAIR - /* [ nat : nat ] */ ; - DUP - /* [ nat : nat : nat ] */ ; - DIP { ADD /* [ nat ] */ } - /* [ nat : nat ] */ ; - PAIR - /* [ pair nat nat ] */ ; - NIL operation - /* [ list operation : pair nat nat ] */ ; - PAIR - /* [ pair (list operation) nat nat ] */ } } -Well typed (Gas remaining: 1039991.417 units remaining) michelson_test_scripts/opcodes/dipn.tz -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR - /* [ pair (pair (pair (pair nat nat) nat) nat) nat ] */ ; - UNPAIR - /* [ pair (pair (pair nat nat) nat) nat : nat ] */ ; - UNPAIR - /* [ pair (pair nat nat) nat : nat : nat ] */ ; - UNPAIR - /* [ pair nat nat : nat : nat : nat ] */ ; - UNPAIR - /* [ nat : nat : nat : nat : nat ] */ ; - DIP 5 { PUSH nat 6 /* [ nat ] */ } - /* [ nat : nat : nat : nat : nat : nat ] */ ; - DROP - /* [ nat : nat : nat : nat : nat ] */ ; - DROP - /* [ nat : nat : nat : nat ] */ ; - DROP - /* [ nat : nat : nat ] */ ; - DROP - /* [ nat : nat ] */ ; - DROP - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039994.685 units remaining) michelson_test_scripts/opcodes/dropn.tz -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR - /* [ pair (pair (pair (pair nat nat) nat) nat) nat ] */ ; - UNPAIR - /* [ pair (pair (pair nat nat) nat) nat : nat ] */ ; - UNPAIR - /* [ pair (pair nat nat) nat : nat : nat ] */ ; - UNPAIR - /* [ pair nat nat : nat : nat : nat ] */ ; - UNPAIR - /* [ nat : nat : nat : nat : nat ] */ ; - DROP 4 - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039992.811 units remaining) michelson_test_scripts/opcodes/dugn.tz -{ parameter (pair (pair (pair (pair nat nat) nat) nat) nat) ; - storage nat ; - code { CAR - /* [ pair (pair (pair (pair nat nat) nat) nat) nat ] */ ; - UNPAIR - /* [ pair (pair (pair nat nat) nat) nat : nat ] */ ; - UNPAIR - /* [ pair (pair nat nat) nat : nat : nat ] */ ; - UNPAIR - /* [ pair nat nat : nat : nat : nat ] */ ; - UNPAIR - /* [ nat : nat : nat : nat : nat ] */ ; - DUG 4 - /* [ nat : nat : nat : nat : nat ] */ ; - DROP - /* [ nat : nat : nat : nat ] */ ; - DROP - /* [ nat : nat : nat ] */ ; - DROP - /* [ nat : nat ] */ ; - DROP - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039968.060 units remaining) michelson_test_scripts/opcodes/dup-n.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 5 - /* [ nat ] */ ; - PUSH nat 4 - /* [ nat : nat ] */ ; - PUSH nat 3 - /* [ nat : nat : nat ] */ ; - PUSH nat 2 - /* [ nat : nat : nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat : nat : nat ] */ ; - DUP 1 - /* [ nat : nat : nat : nat : nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat : nat : nat : nat : nat ] */ ; - ASSERT_CMPEQ ; - DUP 2 - /* [ nat : nat : nat : nat : nat : nat ] */ ; - PUSH nat 2 - /* [ nat : nat : nat : nat : nat : nat : nat ] */ ; - ASSERT_CMPEQ ; - DUP 3 - /* [ nat : nat : nat : nat : nat : nat ] */ ; - PUSH nat 3 - /* [ nat : nat : nat : nat : nat : nat : nat ] */ ; - ASSERT_CMPEQ ; - DUP 4 - /* [ nat : nat : nat : nat : nat : nat ] */ ; - PUSH nat 4 - /* [ nat : nat : nat : nat : nat : nat : nat ] */ ; - ASSERT_CMPEQ ; - DUP 5 - /* [ nat : nat : nat : nat : nat : nat ] */ ; - PUSH nat 5 - /* [ nat : nat : nat : nat : nat : nat : nat ] */ ; - ASSERT_CMPEQ ; - DROP 5 - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039982.466 units remaining) michelson_test_scripts/opcodes/ediv.tz -{ parameter (pair int int) ; - storage - (pair (option (pair int nat)) - (option (pair int nat)) - (option (pair int nat)) - (option (pair nat nat))) ; - code { CAR - /* [ pair int int ] */ ; - DUP - /* [ pair int int : pair int int ] */ ; - UNPAIR - /* [ int : int : pair int int ] */ ; - ABS - /* [ nat : int : pair int int ] */ ; - DIP { ABS /* [ nat : pair int int ] */ } - /* [ nat : nat : pair int int ] */ ; - EDIV - /* [ option (pair nat nat) : pair int int ] */ ; - SWAP - /* [ pair int int : option (pair nat nat) ] */ ; - DUP - /* [ pair int int : pair int int : option (pair nat nat) ] */ ; - UNPAIR - /* [ int : int : pair int int : option (pair nat nat) ] */ ; - ABS - /* [ nat : int : pair int int : option (pair nat nat) ] */ ; - EDIV - /* [ option (pair int nat) : pair int int : option (pair nat nat) ] */ ; - SWAP - /* [ pair int int : option (pair int nat) : option (pair nat nat) ] */ ; - DUP - /* [ pair int int : pair int int : option (pair int nat) - : option (pair nat nat) ] */ ; - UNPAIR - /* [ int : int : pair int int : option (pair int nat) : option (pair nat nat) ] */ ; - DIP { ABS - /* [ nat : pair int int : option (pair int nat) : option (pair nat nat) ] */ } - /* [ int : nat : pair int int : option (pair int nat) : option (pair nat nat) ] */ ; - EDIV - /* [ option (pair int nat) : pair int int : option (pair int nat) - : option (pair nat nat) ] */ ; - SWAP - /* [ pair int int : option (pair int nat) : option (pair int nat) - : option (pair nat nat) ] */ ; - UNPAIR - /* [ int : int : option (pair int nat) : option (pair int nat) - : option (pair nat nat) ] */ ; - EDIV - /* [ option (pair int nat) : option (pair int nat) : option (pair int nat) - : option (pair nat nat) ] */ ; - PAPAPAIR ; - NIL operation - /* [ list operation - : pair (option (pair int nat)) - (option (pair int nat)) - (option (pair int nat)) - (option (pair nat nat)) ] */ ; - PAIR - /* [ pair (list operation) - (option (pair int nat)) - (option (pair int nat)) - (option (pair int nat)) - (option (pair nat nat)) ] */ } } -Well typed (Gas remaining: 1039991.312 units remaining) michelson_test_scripts/opcodes/ediv_mutez.tz -{ parameter (pair mutez (or mutez nat)) ; - storage (or (option (pair nat mutez)) (option (pair mutez mutez))) ; - code { CAR - /* [ pair mutez (or mutez nat) ] */ ; - UNPAIR - /* [ mutez : or mutez nat ] */ ; - SWAP - /* [ or mutez nat : mutez ] */ ; - IF_LEFT - { SWAP - /* [ mutez : mutez ] */ ; - EDIV - /* [ option (pair nat mutez) ] */ ; - LEFT (option (pair mutez mutez)) - /* [ or (option (pair nat mutez)) (option (pair mutez mutez)) ] */ } - { SWAP - /* [ mutez : nat ] */ ; - EDIV - /* [ option (pair mutez mutez) ] */ ; - RIGHT - (option (pair nat mutez)) - /* [ or (option (pair nat mutez)) (option (pair mutez mutez)) ] */ } ; - NIL operation - /* [ list operation : or (option (pair nat mutez)) (option (pair mutez mutez)) ] */ ; - PAIR - /* [ pair (list operation) (or (option (pair nat mutez)) (option (pair mutez mutez))) ] */ } } -Well typed (Gas remaining: 1039991.081 units remaining) michelson_test_scripts/opcodes/emit.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - PUSH nat 10 - /* [ nat : unit ] */ ; - LEFT string - /* [ or nat string : unit ] */ ; - EMIT %event - /* [ operation : unit ] */ ; - PUSH string "lorem ipsum" - /* [ string : operation : unit ] */ ; - RIGHT nat - /* [ or nat string : operation : unit ] */ ; - EMIT %event (or (nat %number) (string %words)) - /* [ operation : operation : unit ] */ ; - NIL operation - /* [ list operation : operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : operation : unit ] */ ; - CONS - /* [ list operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039994.545 units remaining) michelson_test_scripts/opcodes/empty_map.tz -{ storage (map string string) ; - parameter unit ; - code { DROP - /* [] */ ; - EMPTY_MAP string string - /* [ map string string ] */ ; - PUSH string "world" - /* [ string : map string string ] */ ; - SOME - /* [ option string : map string string ] */ ; - PUSH string "hello" - /* [ string : option string : map string string ] */ ; - UPDATE - /* [ map string string ] */ ; - NIL operation - /* [ list operation : map string string ] */ ; - PAIR - /* [ pair (list operation) (map string string) ] */ } } -Well typed (Gas remaining: 1039992.485 units remaining) michelson_test_scripts/opcodes/exec_concat.tz -{ parameter string ; - storage string ; - code { CAR - /* [ string ] */ ; - LAMBDA - string - string - { PUSH string "_abc" - /* [ string : string ] */ ; - NIL string - /* [ list string : string : string ] */ ; - SWAP - /* [ string : list string : string ] */ ; - CONS - /* [ list string : string ] */ ; - SWAP - /* [ string : list string ] */ ; - CONS - /* [ list string ] */ ; - CONCAT - /* [ string ] */ } - /* [ lambda string string : string ] */ ; - SWAP - /* [ string : lambda string string ] */ ; - EXEC - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039989.486 units remaining) michelson_test_scripts/opcodes/fact.tz -{ parameter nat ; - storage nat ; - code { CAR - /* [ nat ] */ ; - LAMBDA_REC - nat - nat - { PUSH int -1 - /* [ int : nat : lambda nat nat ] */ ; - ADD - /* [ int : lambda nat nat ] */ ; - ISNAT - /* [ option nat : lambda nat nat ] */ ; - IF_NONE - { DROP /* [] */ ; PUSH nat 1 /* [ nat ] */ } - { DUP - /* [ nat : nat : lambda nat nat ] */ ; - DIP { EXEC /* [ nat ] */ } - /* [ nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat ] */ ; - ADD - /* [ nat : nat ] */ ; - MUL - /* [ nat ] */ } } - /* [ lambda nat nat : nat ] */ ; - SWAP - /* [ nat : lambda nat nat ] */ ; - EXEC - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039995.199 units remaining) michelson_test_scripts/opcodes/first.tz -{ parameter (list nat) ; - storage nat ; - code { CAR - /* [ list nat ] */ ; - IF_CONS { DIP { DROP /* [] */ } /* [ nat ] */ } { FAIL } ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039995.086 units remaining) michelson_test_scripts/opcodes/get_and_update_big_map.tz -{ parameter string ; - storage (pair (option nat) (big_map string nat)) ; - code { UNPAPAIR ; - GET_AND_UPDATE - /* [ option nat : big_map string nat ] */ ; - PAIR - /* [ pair (option nat) (big_map string nat) ] */ ; - NIL operation - /* [ list operation : pair (option nat) (big_map string nat) ] */ ; - PAIR - /* [ pair (list operation) (option nat) (big_map string nat) ] */ } } -Well typed (Gas remaining: 1039995.146 units remaining) michelson_test_scripts/opcodes/get_and_update_map.tz -{ parameter string ; - storage (pair (option nat) (map string nat)) ; - code { UNPAPAIR ; - GET_AND_UPDATE - /* [ option nat : map string nat ] */ ; - PAIR - /* [ pair (option nat) (map string nat) ] */ ; - NIL operation - /* [ list operation : pair (option nat) (map string nat) ] */ ; - PAIR - /* [ pair (list operation) (option nat) (map string nat) ] */ } } -Well typed (Gas remaining: 1039992.369 units remaining) michelson_test_scripts/opcodes/get_big_map_value.tz -{ parameter string ; - storage (pair (big_map string string) (option string)) ; - code { DUP - /* [ pair string (big_map string string) (option string) - : pair string (big_map string string) (option string) ] */ ; - CAR - /* [ string : pair string (big_map string string) (option string) ] */ ; - DIP { CDAR ; DUP /* [ big_map string string : big_map string string ] */ } - /* [ string : big_map string string : big_map string string ] */ ; - GET - /* [ option string : big_map string string ] */ ; - SWAP - /* [ big_map string string : option string ] */ ; - PAIR - /* [ pair (big_map string string) (option string) ] */ ; - NIL operation - /* [ list operation : pair (big_map string string) (option string) ] */ ; - PAIR - /* [ pair (list operation) (big_map string string) (option string) ] */ } } -Well typed (Gas remaining: 1039992.898 units remaining) michelson_test_scripts/opcodes/get_map_value.tz -{ parameter string ; - storage (pair (option string) (map string string)) ; - code { DUP - /* [ pair string (option string) (map string string) - : pair string (option string) (map string string) ] */ ; - CAR - /* [ string : pair string (option string) (map string string) ] */ ; - DIP { CDDR ; DUP /* [ map string string : map string string ] */ } - /* [ string : map string string : map string string ] */ ; - GET - /* [ option string : map string string ] */ ; - PAIR - /* [ pair (option string) (map string string) ] */ ; - NIL operation - /* [ list operation : pair (option string) (map string string) ] */ ; - PAIR - /* [ pair (list operation) (option string) (map string string) ] */ } } -Well typed (Gas remaining: 1039996.673 units remaining) michelson_test_scripts/opcodes/hash_consistency_checker.tz -{ parameter (pair mutez (pair timestamp int)) ; - storage bytes ; - code { CAR - /* [ pair mutez timestamp int ] */ ; - PACK - /* [ bytes ] */ ; - BLAKE2B - /* [ bytes ] */ ; - NIL operation - /* [ list operation : bytes ] */ ; - PAIR - /* [ pair (list operation) bytes ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/hash_key.tz -{ parameter key ; - storage (option key_hash) ; - code { CAR - /* [ key ] */ ; - HASH_KEY - /* [ key_hash ] */ ; - SOME - /* [ option key_hash ] */ ; - NIL operation - /* [ list operation : option key_hash ] */ ; - PAIR - /* [ pair (list operation) (option key_hash) ] */ } } -Well typed (Gas remaining: 1039997.089 units remaining) michelson_test_scripts/opcodes/hash_string.tz -{ parameter string ; - storage bytes ; - code { CAR - /* [ string ] */ ; - PACK - /* [ bytes ] */ ; - BLAKE2B - /* [ bytes ] */ ; - NIL operation - /* [ list operation : bytes ] */ ; - PAIR - /* [ pair (list operation) bytes ] */ } } -Well typed (Gas remaining: 1039995.431 units remaining) michelson_test_scripts/opcodes/if.tz -{ parameter bool ; - storage (option bool) ; - code { CAR - /* [ bool ] */ ; - IF { PUSH bool True /* [ bool ] */ } { PUSH bool False /* [ bool ] */ } ; - SOME - /* [ option bool ] */ ; - NIL operation - /* [ list operation : option bool ] */ ; - PAIR - /* [ pair (list operation) (option bool) ] */ } } -Well typed (Gas remaining: 1039996.124 units remaining) michelson_test_scripts/opcodes/if_some.tz -{ parameter (option string) ; - storage string ; - code { CAR - /* [ option string ] */ ; - IF_SOME { /* [ string ] */ } { PUSH string "" /* [ string ] */ } ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/int.tz -{ parameter nat ; - storage (option int) ; - code { CAR - /* [ nat ] */ ; - INT - /* [ int ] */ ; - SOME - /* [ option int ] */ ; - NIL operation - /* [ list operation : option int ] */ ; - PAIR - /* [ pair (list operation) (option int) ] */ } } -Well typed (Gas remaining: 1039996.910 units remaining) michelson_test_scripts/opcodes/iter_fail.tz -{ parameter (set nat) ; - storage unit ; - code { UNPAIR - /* [ set nat : unit ] */ ; - ITER { FAILWITH /* [] */ } - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/keccak.tz -{ storage (option bytes) ; - parameter bytes ; - code { CAR - /* [ bytes ] */ ; - KECCAK - /* [ bytes ] */ ; - SOME - /* [ option bytes ] */ ; - NIL operation - /* [ list operation : option bytes ] */ ; - PAIR - /* [ pair (list operation) (option bytes) ] */ } } -Well typed (Gas remaining: 1039995.825 units remaining) michelson_test_scripts/opcodes/left_right.tz -{ parameter (or bool string) ; - storage (or string bool) ; - code { CAR - /* [ or bool string ] */ ; - IF_LEFT - { RIGHT string /* [ or string bool ] */ } - { LEFT bool /* [ or string bool ] */ } ; - NIL operation - /* [ list operation : or string bool ] */ ; - PAIR - /* [ pair (list operation) (or string bool) ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/level.tz -{ parameter unit ; - storage nat ; - code { DROP - /* [] */ ; - LEVEL - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039996.413 units remaining) michelson_test_scripts/opcodes/list_concat.tz -{ parameter (list string) ; - storage string ; - code { UNPAIR - /* [ list string : string ] */ ; - SWAP - /* [ string : list string ] */ ; - CONS - /* [ list string ] */ ; - CONCAT - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039996.413 units remaining) michelson_test_scripts/opcodes/list_concat_bytes.tz -{ parameter (list bytes) ; - storage bytes ; - code { UNPAIR - /* [ list bytes : bytes ] */ ; - SWAP - /* [ bytes : list bytes ] */ ; - CONS - /* [ list bytes ] */ ; - CONCAT - /* [ bytes ] */ ; - NIL operation - /* [ list operation : bytes ] */ ; - PAIR - /* [ pair (list operation) bytes ] */ } } -Well typed (Gas remaining: 1039997.827 units remaining) michelson_test_scripts/opcodes/list_id.tz -{ parameter (list string) ; - storage (list string) ; - code { CAR - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039997.048 units remaining) michelson_test_scripts/opcodes/list_id_map.tz -{ parameter (list string) ; - storage (list string) ; - code { CAR - /* [ list string ] */ ; - MAP { /* [ string ] */ } - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039995.699 units remaining) michelson_test_scripts/opcodes/list_iter.tz -{ parameter (list int) ; - storage int ; - code { CAR - /* [ list int ] */ ; - PUSH int 1 - /* [ int : list int ] */ ; - SWAP - /* [ list int : int ] */ ; - ITER { MUL /* [ int ] */ } - /* [ int ] */ ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039991.754 units remaining) michelson_test_scripts/opcodes/list_map_block.tz -{ parameter (list int) ; - storage (list int) ; - code { CAR - /* [ list int ] */ ; - PUSH int 0 - /* [ int : list int ] */ ; - SWAP - /* [ list int : int ] */ ; - MAP { DIP { DUP /* [ int : int ] */ } - /* [ int : int : int ] */ ; - ADD - /* [ int : int ] */ ; - DIP { PUSH int 1 /* [ int : int ] */ ; ADD /* [ int ] */ } - /* [ int : int ] */ } - /* [ list int : int ] */ ; - NIL operation - /* [ list operation : list int : int ] */ ; - PAIR - /* [ pair (list operation) (list int) : int ] */ ; - DIP { DROP /* [] */ } - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039997.469 units remaining) michelson_test_scripts/opcodes/list_size.tz -{ parameter (list int) ; - storage nat ; - code { CAR - /* [ list int ] */ ; - SIZE - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039997.065 units remaining) michelson_test_scripts/opcodes/loop_failwith.tz -{ parameter bool ; - storage unit ; - code { UNPAIR - /* [ bool : unit ] */ ; - LOOP { FAILWITH /* [] */ } - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039988.053 units remaining) michelson_test_scripts/opcodes/loop_left.tz -{ parameter (list string) ; - storage (list string) ; - code { CAR - /* [ list string ] */ ; - NIL string - /* [ list string : list string ] */ ; - SWAP - /* [ list string : list string ] */ ; - PAIR - /* [ pair (list string) (list string) ] */ ; - LEFT (list string) - /* [ or (pair (list string) (list string)) (list string) ] */ ; - LOOP_LEFT - { DUP - /* [ pair (list string) (list string) : pair (list string) (list string) ] */ ; - CAR - /* [ list string : pair (list string) (list string) ] */ ; - DIP { CDR /* [ list string ] */ } - /* [ list string : list string ] */ ; - IF_CONS - { SWAP - /* [ list string : string : list string ] */ ; - DIP { CONS /* [ list string ] */ } - /* [ list string : list string ] */ ; - PAIR - /* [ pair (list string) (list string) ] */ ; - LEFT (list string) - /* [ or (pair (list string) (list string)) (list string) ] */ } - { RIGHT - (pair (list string) (list string)) - /* [ or (pair (list string) (list string)) (list string) ] */ } } - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039996.821 units remaining) michelson_test_scripts/opcodes/loop_left_failwith.tz -{ parameter (or string nat) ; - storage nat ; - code { CAR - /* [ or string nat ] */ ; - LOOP_LEFT { FAILWITH /* [] */ } - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039972.833 units remaining) michelson_test_scripts/opcodes/lsl_bytes_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 0 - /* [ nat ] */ ; - PUSH bytes 0x06 - /* [ bytes : nat ] */ ; - LSL - /* [ bytes ] */ ; - PUSH bytes 0x06 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 1 - /* [ nat ] */ ; - PUSH bytes 0x06 - /* [ bytes : nat ] */ ; - LSL - /* [ bytes ] */ ; - PUSH bytes 0x000c - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 8 - /* [ nat ] */ ; - PUSH bytes 0x06 - /* [ bytes : nat ] */ ; - LSL - /* [ bytes ] */ ; - PUSH bytes 0x0600 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 1 - /* [ nat ] */ ; - PUSH bytes 0x0006 - /* [ bytes : nat ] */ ; - LSL - /* [ bytes ] */ ; - PUSH bytes 0x00000c - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039959.932 units remaining) michelson_test_scripts/opcodes/lsr_bytes_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH nat 1 - /* [ nat ] */ ; - PUSH bytes 0x06 - /* [ bytes : nat ] */ ; - LSR - /* [ bytes ] */ ; - PUSH bytes 0x03 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 8 - /* [ nat ] */ ; - PUSH bytes 0x06 - /* [ bytes : nat ] */ ; - LSR - /* [ bytes ] */ ; - PUSH bytes 0x - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 1 - /* [ nat ] */ ; - PUSH bytes 0x0006 - /* [ bytes : nat ] */ ; - LSR - /* [ bytes ] */ ; - PUSH bytes 0x0003 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 8 - /* [ nat ] */ ; - PUSH bytes 0x0006 - /* [ bytes : nat ] */ ; - LSR - /* [ bytes ] */ ; - PUSH bytes 0x00 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 0 - /* [ nat ] */ ; - PUSH bytes 0x001234 - /* [ bytes : nat ] */ ; - LSR - /* [ bytes ] */ ; - PUSH bytes 0x001234 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH nat 30 - /* [ nat ] */ ; - PUSH bytes 0x001234 - /* [ bytes : nat ] */ ; - LSR - /* [ bytes ] */ ; - PUSH bytes 0x - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039991.235 units remaining) michelson_test_scripts/opcodes/map_car.tz -{ parameter bool ; - storage (pair (bool %b) (nat %n)) ; - code { DUP - /* [ pair bool bool nat : pair bool bool nat ] */ ; - CAR - /* [ bool : pair bool bool nat ] */ ; - DIP { CDR /* [ pair bool nat ] */ } - /* [ bool : pair bool nat ] */ ; - SWAP - /* [ pair bool nat : bool ] */ ; - MAP_CAR @new_storage %b { AND /* [ bool ] */ } ; - NIL operation - /* [ list operation : pair bool nat ] */ ; - PAIR - /* [ pair (list operation) bool nat ] */ } } -Well typed (Gas remaining: 1039997.566 units remaining) michelson_test_scripts/opcodes/map_id.tz -{ parameter (map nat nat) ; - storage (map nat nat) ; - code { CAR - /* [ map nat nat ] */ ; - NIL operation - /* [ list operation : map nat nat ] */ ; - PAIR - /* [ pair (list operation) (map nat nat) ] */ } } -Well typed (Gas remaining: 1039987.183 units remaining) michelson_test_scripts/opcodes/map_iter.tz -{ parameter (map (int :k) (int :e)) ; - storage (pair (int :k) (int :e)) ; - code { CAR - /* [ map int int ] */ ; - PUSH @acc_e (int :e) 0 - /* [ int : map int int ] */ ; - PUSH @acc_k (int :k) 0 - /* [ int : int : map int int ] */ ; - PAIR % %r - /* [ pair int int : map int int ] */ ; - SWAP - /* [ map int int : pair int int ] */ ; - ITER { DIP { DUP - /* [ pair int int : pair int int ] */ ; - CAR - /* [ int : pair int int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ int : int ] */ } - /* [ pair int int : int : int ] */ ; - DUP - /* [ pair int int : pair int int : int : int ] */ ; - DIP { CAR /* [ int : int : int ] */ ; ADD /* [ int : int ] */ } - /* [ pair int int : int : int ] */ ; - SWAP - /* [ int : pair int int : int ] */ ; - DIP { CDR /* [ int : int ] */ ; ADD /* [ int ] */ } - /* [ int : int ] */ ; - PAIR % %r - /* [ pair int int ] */ } - /* [ pair int int ] */ ; - NIL operation - /* [ list operation : pair int int ] */ ; - PAIR - /* [ pair (list operation) int int ] */ } } -Well typed (Gas remaining: 1039993.752 units remaining) michelson_test_scripts/opcodes/map_map.tz -{ parameter nat ; - storage (map string nat) ; - code { UNPAIR - /* [ nat : map string nat ] */ ; - SWAP - /* [ map string nat : nat ] */ ; - MAP { CDR - /* [ nat : nat ] */ ; - DIP { DUP /* [ nat : nat ] */ } - /* [ nat : nat : nat ] */ ; - ADD - /* [ nat : nat ] */ } - /* [ map string nat : nat ] */ ; - DIP { DROP /* [] */ } - /* [ map string nat ] */ ; - NIL operation - /* [ list operation : map string nat ] */ ; - PAIR - /* [ pair (list operation) (map string nat) ] */ } } -Well typed (Gas remaining: 1039988.773 units remaining) michelson_test_scripts/opcodes/map_map_sideeffect.tz -{ parameter nat ; - storage (pair (map string nat) nat) ; - code { UNPAIR - /* [ nat : pair (map string nat) nat ] */ ; - SWAP - /* [ pair (map string nat) nat : nat ] */ ; - CAR - /* [ map string nat : nat ] */ ; - DIP 2 { PUSH @sum nat 0 /* [ nat ] */ } - /* [ map string nat : nat : nat ] */ ; - MAP { CDR - /* [ nat : nat : nat ] */ ; - DIP { DUP /* [ nat : nat : nat ] */ } - /* [ nat : nat : nat : nat ] */ ; - ADD - /* [ nat : nat : nat ] */ ; - DUP - /* [ nat : nat : nat : nat ] */ ; - DUG 2 - /* [ nat : nat : nat : nat ] */ ; - DIP 2 { ADD @sum /* [ nat ] */ } - /* [ nat : nat : nat ] */ } - /* [ map string nat : nat : nat ] */ ; - DIP { DROP /* [ nat ] */ } - /* [ map string nat : nat ] */ ; - PAIR - /* [ pair (map string nat) nat ] */ ; - NIL operation - /* [ list operation : pair (map string nat) nat ] */ ; - PAIR - /* [ pair (list operation) (map string nat) nat ] */ } } -Well typed (Gas remaining: 1039993.846 units remaining) michelson_test_scripts/opcodes/map_mem_nat.tz -{ parameter nat ; - storage (pair (map nat nat) (option bool)) ; - code { UNPAIR - /* [ nat : pair (map nat nat) (option bool) ] */ ; - DIP { CAR /* [ map nat nat ] */ ; DUP /* [ map nat nat : map nat nat ] */ } - /* [ nat : map nat nat : map nat nat ] */ ; - MEM - /* [ bool : map nat nat ] */ ; - SOME - /* [ option bool : map nat nat ] */ ; - SWAP - /* [ map nat nat : option bool ] */ ; - PAIR - /* [ pair (map nat nat) (option bool) ] */ ; - NIL operation - /* [ list operation : pair (map nat nat) (option bool) ] */ ; - PAIR - /* [ pair (list operation) (map nat nat) (option bool) ] */ } } -Well typed (Gas remaining: 1039993.846 units remaining) michelson_test_scripts/opcodes/map_mem_string.tz -{ parameter string ; - storage (pair (map string nat) (option bool)) ; - code { UNPAIR - /* [ string : pair (map string nat) (option bool) ] */ ; - DIP { CAR /* [ map string nat ] */ ; DUP /* [ map string nat : map string nat ] */ } - /* [ string : map string nat : map string nat ] */ ; - MEM - /* [ bool : map string nat ] */ ; - SOME - /* [ option bool : map string nat ] */ ; - SWAP - /* [ map string nat : option bool ] */ ; - PAIR - /* [ pair (map string nat) (option bool) ] */ ; - NIL operation - /* [ list operation : pair (map string nat) (option bool) ] */ ; - PAIR - /* [ pair (list operation) (map string nat) (option bool) ] */ } } -Well typed (Gas remaining: 1039997.385 units remaining) michelson_test_scripts/opcodes/map_size.tz -{ parameter (map string nat) ; - storage nat ; - code { CAR - /* [ map string nat ] */ ; - SIZE - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039992.457 units remaining) michelson_test_scripts/opcodes/merge_comparable_pairs.tz -{ parameter (set (pair (nat %n) (pair %p (string %s) (int %i)))) ; - storage nat ; - code { UNPAIR - /* [ set (pair nat string int) : nat ] */ ; - SWAP - /* [ nat : set (pair nat string int) ] */ ; - PUSH nat 3 - /* [ nat : nat : set (pair nat string int) ] */ ; - COMPARE - /* [ int : set (pair nat string int) ] */ ; - GT - /* [ bool : set (pair nat string int) ] */ ; - IF { /* [ set (pair nat string int) ] */ } - { DROP - /* [] */ ; - EMPTY_SET (pair nat (pair string int)) - /* [ set (pair nat string int) ] */ } ; - SIZE - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039961.027 units remaining) michelson_test_scripts/opcodes/mul.tz -{ parameter unit ; - storage unit ; - code { CAR - /* [ unit ] */ ; - DROP - /* [] */ ; - PUSH nat 7987 - /* [ nat ] */ ; - PUSH mutez 10 - /* [ mutez : nat ] */ ; - MUL - /* [ mutez ] */ ; - PUSH mutez 79870 - /* [ mutez : mutez ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH mutez 10 - /* [ mutez ] */ ; - PUSH nat 7987 - /* [ nat : mutez ] */ ; - MUL - /* [ mutez ] */ ; - PUSH mutez 79870 - /* [ mutez : mutez ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH int 10 - /* [ int ] */ ; - PUSH int -7987 - /* [ int : int ] */ ; - MUL - /* [ int ] */ ; - PUSH int -79870 - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH nat 10 - /* [ nat ] */ ; - PUSH int -7987 - /* [ int : nat ] */ ; - MUL - /* [ int ] */ ; - PUSH int -79870 - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH int -10 - /* [ int ] */ ; - PUSH nat 7987 - /* [ nat : int ] */ ; - MUL - /* [ int ] */ ; - PUSH int -79870 - /* [ int : int ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - PUSH nat 10 - /* [ nat ] */ ; - PUSH nat 7987 - /* [ nat : nat ] */ ; - MUL - /* [ nat ] */ ; - PUSH nat 79870 - /* [ nat : nat ] */ ; - COMPARE - /* [ int ] */ ; - ASSERT_EQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/mul_bls12_381_fr.tz -{ parameter (pair bls12_381_fr bls12_381_fr) ; - storage (option bls12_381_fr) ; - code { CAR - /* [ pair bls12_381_fr bls12_381_fr ] */ ; - UNPAIR - /* [ bls12_381_fr : bls12_381_fr ] */ ; - MUL - /* [ bls12_381_fr ] */ ; - SOME - /* [ option bls12_381_fr ] */ ; - NIL operation - /* [ list operation : option bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_fr) ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/mul_bls12_381_g1.tz -{ parameter (pair bls12_381_g1 bls12_381_fr) ; - storage (option bls12_381_g1) ; - code { CAR - /* [ pair bls12_381_g1 bls12_381_fr ] */ ; - UNPAIR - /* [ bls12_381_g1 : bls12_381_fr ] */ ; - MUL - /* [ bls12_381_g1 ] */ ; - SOME - /* [ option bls12_381_g1 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g1 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g1) ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/mul_bls12_381_g2.tz -{ parameter (pair bls12_381_g2 bls12_381_fr) ; - storage (option bls12_381_g2) ; - code { CAR - /* [ pair bls12_381_g2 bls12_381_fr ] */ ; - UNPAIR - /* [ bls12_381_g2 : bls12_381_fr ] */ ; - MUL - /* [ bls12_381_g2 ] */ ; - SOME - /* [ option bls12_381_g2 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g2 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g2) ] */ } } -Well typed (Gas remaining: 1039992.436 units remaining) michelson_test_scripts/opcodes/mul_overflow.tz -{ parameter (or unit unit) ; - storage unit ; - code { CAR - /* [ or unit unit ] */ ; - IF_LEFT - { PUSH nat 922337203685477580700 - /* [ nat : unit ] */ ; - PUSH mutez 10 - /* [ mutez : nat : unit ] */ ; - MUL - /* [ mutez : unit ] */ ; - DROP - /* [ unit ] */ } - { PUSH mutez 10 - /* [ mutez : unit ] */ ; - PUSH nat 922337203685477580700 - /* [ nat : mutez : unit ] */ ; - MUL - /* [ mutez : unit ] */ ; - DROP - /* [ unit ] */ } ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.167 units remaining) michelson_test_scripts/opcodes/munch.tz -{ parameter - (or (bytes %bytes) (or (lambda %lambda unit unit) (or (nat %nat) (list %list_nat nat)))) ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039992.419 units remaining) michelson_test_scripts/opcodes/mutez_to_bls12_381_fr.tz -{ parameter mutez ; - storage bls12_381_fr ; - code { CAR - /* [ mutez ] */ ; - PUSH mutez 1 - /* [ mutez : mutez ] */ ; - SWAP - /* [ mutez : mutez ] */ ; - EDIV - /* [ option (pair nat mutez) ] */ ; - ASSERT_SOME ; - CAR - /* [ nat ] */ ; - PUSH bls12_381_fr 1 - /* [ bls12_381_fr : nat ] */ ; - MUL - /* [ bls12_381_fr ] */ ; - NIL operation - /* [ list operation : bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) bls12_381_fr ] */ } } -Well typed (Gas remaining: 1039996.267 units remaining) michelson_test_scripts/opcodes/neg.tz -{ parameter (or int nat) ; - storage int ; - code { CAR - /* [ or int nat ] */ ; - IF_LEFT { NEG /* [ int ] */ } { NEG /* [ int ] */ } ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/neg_bls12_381_fr.tz -{ parameter bls12_381_fr ; - storage (option bls12_381_fr) ; - code { CAR - /* [ bls12_381_fr ] */ ; - NEG - /* [ bls12_381_fr ] */ ; - SOME - /* [ option bls12_381_fr ] */ ; - NIL operation - /* [ list operation : option bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_fr) ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/neg_bls12_381_g1.tz -{ parameter bls12_381_g1 ; - storage (option bls12_381_g1) ; - code { CAR - /* [ bls12_381_g1 ] */ ; - NEG - /* [ bls12_381_g1 ] */ ; - SOME - /* [ option bls12_381_g1 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g1 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g1) ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/neg_bls12_381_g2.tz -{ parameter bls12_381_g2 ; - storage (option bls12_381_g2) ; - code { CAR - /* [ bls12_381_g2 ] */ ; - NEG - /* [ bls12_381_g2 ] */ ; - SOME - /* [ option bls12_381_g2 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g2 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g2) ] */ } } -Well typed (Gas remaining: 1039997.363 units remaining) michelson_test_scripts/opcodes/none.tz -{ parameter unit ; - storage (option nat) ; - code { DROP - /* [] */ ; - NONE nat - /* [ option nat ] */ ; - NIL operation - /* [ list operation : option nat ] */ ; - PAIR - /* [ pair (list operation) (option nat) ] */ } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/opcodes/noop.tz -{ parameter unit ; - storage unit ; - code { CDR - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/not.tz -{ parameter bool ; - storage (option bool) ; - code { CAR - /* [ bool ] */ ; - NOT - /* [ bool ] */ ; - SOME - /* [ option bool ] */ ; - NIL operation - /* [ list operation : option bool ] */ ; - PAIR - /* [ pair (list operation) (option bool) ] */ } } -Well typed (Gas remaining: 1039995.688 units remaining) michelson_test_scripts/opcodes/not_binary.tz -{ parameter (or int nat) ; - storage (option int) ; - code { CAR - /* [ or int nat ] */ ; - IF_LEFT { NOT /* [ int ] */ } { NOT /* [ int ] */ } ; - SOME - /* [ option int ] */ ; - NIL operation - /* [ list operation : option int ] */ ; - PAIR - /* [ pair (list operation) (option int) ] */ } } -Well typed (Gas remaining: 1039981.112 units remaining) michelson_test_scripts/opcodes/not_bytes_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - NOT - /* [ bytes ] */ ; - PUSH bytes 0xfa - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0005 - /* [ bytes ] */ ; - NOT - /* [ bytes ] */ ; - PUSH bytes 0xfffa - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0xff05 - /* [ bytes ] */ ; - NOT - /* [ bytes ] */ ; - PUSH bytes 0x00fa - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039994.565 units remaining) michelson_test_scripts/opcodes/or.tz -{ parameter (pair bool bool) ; - storage (option bool) ; - code { CAR - /* [ pair bool bool ] */ ; - DUP - /* [ pair bool bool : pair bool bool ] */ ; - CAR - /* [ bool : pair bool bool ] */ ; - SWAP - /* [ pair bool bool : bool ] */ ; - CDR - /* [ bool : bool ] */ ; - OR - /* [ bool ] */ ; - SOME - /* [ option bool ] */ ; - NIL operation - /* [ list operation : option bool ] */ ; - PAIR - /* [ pair (list operation) (option bool) ] */ } } -Well typed (Gas remaining: 1039996.271 units remaining) michelson_test_scripts/opcodes/or_binary.tz -{ parameter (pair nat nat) ; - storage (option nat) ; - code { CAR - /* [ pair nat nat ] */ ; - UNPAIR - /* [ nat : nat ] */ ; - OR - /* [ nat ] */ ; - SOME - /* [ option nat ] */ ; - NIL operation - /* [ list operation : option nat ] */ ; - PAIR - /* [ pair (list operation) (option nat) ] */ } } -Well typed (Gas remaining: 1039978.970 units remaining) michelson_test_scripts/opcodes/or_bytes_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - PUSH bytes 0x06 - /* [ bytes : bytes ] */ ; - OR - /* [ bytes ] */ ; - PUSH bytes 0x07 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0005 - /* [ bytes ] */ ; - PUSH bytes 0x0106 - /* [ bytes : bytes ] */ ; - OR - /* [ bytes ] */ ; - PUSH bytes 0x0107 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - PUSH bytes 0x0106 - /* [ bytes : bytes ] */ ; - OR - /* [ bytes ] */ ; - PUSH bytes 0x0107 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.446 units remaining) michelson_test_scripts/opcodes/originate_big_map.tz -{ parameter (big_map int int) ; - storage (big_map int int) ; - code { CAR - /* [ big_map int int ] */ ; - NIL operation - /* [ list operation : big_map int int ] */ ; - PAIR - /* [ pair (list operation) (big_map int int) ] */ } } -Well typed (Gas remaining: 1039987.385 units remaining) michelson_test_scripts/opcodes/packunpack.tz -{ parameter (pair (pair (pair string (list int)) (set nat)) bytes) ; - storage unit ; - code { CAR - /* [ pair (pair (pair string (list int)) (set nat)) bytes ] */ ; - UNPAIR - /* [ pair (pair string (list int)) (set nat) : bytes ] */ ; - DIP { DUP /* [ bytes : bytes ] */ } - /* [ pair (pair string (list int)) (set nat) : bytes : bytes ] */ ; - PACK - /* [ bytes : bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNPACK - (pair (pair string (list int)) (set nat)) - /* [ option (pair (pair string (list int)) (set nat)) ] */ ; - ASSERT_SOME ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039888.537 units remaining) michelson_test_scripts/opcodes/packunpack_rev.tz -{ parameter (pair int nat string bytes mutez bool key_hash timestamp address) ; - storage unit ; - code { CAR - /* [ pair int nat string bytes mutez bool key_hash timestamp address ] */ ; - DUP - /* [ pair int nat string bytes mutez bool key_hash timestamp address - : pair int nat string bytes mutez bool key_hash timestamp address ] */ ; - CAR - /* [ int : pair int nat string bytes mutez bool key_hash timestamp address ] */ ; - DIP { UNPAIR - /* [ int : pair nat string bytes mutez bool key_hash timestamp address ] */ } - /* [ int : int : pair nat string bytes mutez bool key_hash timestamp address ] */ ; - PACK - /* [ bytes : int : pair nat string bytes mutez bool key_hash timestamp address ] */ ; - UNPACK - int - /* [ option int : int - : pair nat string bytes mutez bool key_hash timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair nat string bytes mutez bool key_hash timestamp address - : pair nat string bytes mutez bool key_hash timestamp address ] */ ; - CAR - /* [ nat : pair nat string bytes mutez bool key_hash timestamp address ] */ ; - DIP { UNPAIR /* [ nat : pair string bytes mutez bool key_hash timestamp address ] */ } - /* [ nat : nat : pair string bytes mutez bool key_hash timestamp address ] */ ; - PACK - /* [ bytes : nat : pair string bytes mutez bool key_hash timestamp address ] */ ; - UNPACK - nat - /* [ option nat : nat - : pair string bytes mutez bool key_hash timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair string bytes mutez bool key_hash timestamp address - : pair string bytes mutez bool key_hash timestamp address ] */ ; - CAR - /* [ string : pair string bytes mutez bool key_hash timestamp address ] */ ; - DIP { UNPAIR /* [ string : pair bytes mutez bool key_hash timestamp address ] */ } - /* [ string : string : pair bytes mutez bool key_hash timestamp address ] */ ; - PACK - /* [ bytes : string : pair bytes mutez bool key_hash timestamp address ] */ ; - UNPACK - string - /* [ option string : string : pair bytes mutez bool key_hash timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair bytes mutez bool key_hash timestamp address - : pair bytes mutez bool key_hash timestamp address ] */ ; - CAR - /* [ bytes : pair bytes mutez bool key_hash timestamp address ] */ ; - DIP { UNPAIR /* [ bytes : pair mutez bool key_hash timestamp address ] */ } - /* [ bytes : bytes : pair mutez bool key_hash timestamp address ] */ ; - PACK - /* [ bytes : bytes : pair mutez bool key_hash timestamp address ] */ ; - UNPACK - bytes - /* [ option bytes : bytes : pair mutez bool key_hash timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair mutez bool key_hash timestamp address - : pair mutez bool key_hash timestamp address ] */ ; - CAR - /* [ mutez : pair mutez bool key_hash timestamp address ] */ ; - DIP { UNPAIR /* [ mutez : pair bool key_hash timestamp address ] */ } - /* [ mutez : mutez : pair bool key_hash timestamp address ] */ ; - PACK - /* [ bytes : mutez : pair bool key_hash timestamp address ] */ ; - UNPACK mutez - /* [ option mutez : mutez : pair bool key_hash timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair bool key_hash timestamp address - : pair bool key_hash timestamp address ] */ ; - CAR - /* [ bool : pair bool key_hash timestamp address ] */ ; - DIP { UNPAIR /* [ bool : pair key_hash timestamp address ] */ } - /* [ bool : bool : pair key_hash timestamp address ] */ ; - PACK - /* [ bytes : bool : pair key_hash timestamp address ] */ ; - UNPACK bool - /* [ option bool : bool : pair key_hash timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair key_hash timestamp address : pair key_hash timestamp address ] */ ; - CAR - /* [ key_hash : pair key_hash timestamp address ] */ ; - DIP { UNPAIR /* [ key_hash : pair timestamp address ] */ } - /* [ key_hash : key_hash : pair timestamp address ] */ ; - PACK - /* [ bytes : key_hash : pair timestamp address ] */ ; - UNPACK key_hash - /* [ option key_hash : key_hash : pair timestamp address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ pair timestamp address : pair timestamp address ] */ ; - CAR - /* [ timestamp : pair timestamp address ] */ ; - DIP { UNPAIR /* [ timestamp : address ] */ } - /* [ timestamp : timestamp : address ] */ ; - PACK - /* [ bytes : timestamp : address ] */ ; - UNPACK timestamp - /* [ option timestamp : timestamp : address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - DUP - /* [ address : address ] */ ; - PACK - /* [ bytes : address ] */ ; - UNPACK address - /* [ option address : address ] */ ; - ASSERT_SOME ; - ASSERT_CMPEQ ; - PUSH int 0 - /* [ int ] */ ; - PACK - /* [ bytes ] */ ; - UNPACK nat - /* [ option nat ] */ ; - ASSERT_SOME ; - DROP - /* [] */ ; - PUSH int -1 - /* [ int ] */ ; - PACK - /* [ bytes ] */ ; - UNPACK nat - /* [ option nat ] */ ; - ASSERT_NONE ; - PUSH bytes 0x - /* [ bytes ] */ ; - UNPACK nat - /* [ option nat ] */ ; - ASSERT_NONE ; - PUSH bytes 0x04 - /* [ bytes ] */ ; - UNPACK nat - /* [ option nat ] */ ; - ASSERT_NONE ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - UNPACK nat - /* [ option nat ] */ ; - ASSERT_NONE ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039874.912 units remaining) michelson_test_scripts/opcodes/packunpack_rev_cty.tz -{ parameter - (pair key - unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes)) ; - storage unit ; - code { CAR - /* [ pair key - unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DUP - /* [ pair key - unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) - : pair key - unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - CAR - /* [ key - : pair key - unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ key - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ key : key - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - PACK - /* [ bytes : key - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - UNPACK - key - /* [ option key - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - CAR - /* [ unit - : pair unit - signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ unit - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ unit : unit - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - PACK - /* [ bytes : unit - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - UNPACK - unit - /* [ option unit - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - CAR - /* [ signature - : pair signature - (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ signature - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ signature : signature - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - PACK - /* [ bytes : signature - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - UNPACK - signature - /* [ option signature - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - CAR - /* [ option signature - : pair (option signature) - (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ option signature - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ option signature : option signature - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - PACK - /* [ bytes : option signature - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - UNPACK - (option signature) - /* [ option (option signature) - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - CAR - /* [ list unit - : pair (list unit) - (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ list unit - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ list unit : list unit - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - PACK - /* [ bytes : list unit - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - UNPACK - (list unit) - /* [ option (list unit) - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - CAR - /* [ set bool - : pair (set bool) - (pair int int) - (or key_hash timestamp) - (map int string) - (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ set bool - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ } - /* [ set bool : set bool - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - PACK - /* [ bytes : set bool - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - UNPACK - (set bool) - /* [ option (set bool) - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - CAR - /* [ pair int int - : pair (pair int int) (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ pair int int - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ } - /* [ pair int int : pair int int - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - PACK - /* [ bytes : pair int int - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - UNPACK - (pair int int) - /* [ option (pair int int) - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ } - /* [ bytes : bytes - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (or key_hash timestamp) (map int string) (lambda string bytes) - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - CAR - /* [ or key_hash timestamp - : pair (or key_hash timestamp) (map int string) (lambda string bytes) ] */ ; - DIP { UNPAIR - /* [ or key_hash timestamp : pair (map int string) (lambda string bytes) ] */ } - /* [ or key_hash timestamp : or key_hash timestamp - : pair (map int string) (lambda string bytes) ] */ ; - PACK - /* [ bytes : or key_hash timestamp - : pair (map int string) (lambda string bytes) ] */ ; - DIP { PACK - /* [ bytes : pair (map int string) (lambda string bytes) ] */ ; - UNPACK - (or key_hash timestamp) - /* [ option (or key_hash timestamp) - : pair (map int string) (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes : pair (map int string) (lambda string bytes) ] */ } - /* [ bytes : bytes : pair (map int string) (lambda string bytes) ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ pair (map int string) (lambda string bytes) - : pair (map int string) (lambda string bytes) ] */ ; - CAR - /* [ map int string : pair (map int string) (lambda string bytes) ] */ ; - DIP { UNPAIR /* [ map int string : lambda string bytes ] */ } - /* [ map int string : map int string : lambda string bytes ] */ ; - PACK - /* [ bytes : map int string : lambda string bytes ] */ ; - DIP { PACK - /* [ bytes : lambda string bytes ] */ ; - UNPACK (map int string) - /* [ option (map int string) : lambda string bytes ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes : lambda string bytes ] */ } - /* [ bytes : bytes : lambda string bytes ] */ ; - ASSERT_CMPEQ ; - DUP - /* [ lambda string bytes : lambda string bytes ] */ ; - PACK - /* [ bytes : lambda string bytes ] */ ; - DIP { PACK - /* [ bytes ] */ ; - UNPACK (lambda string bytes) - /* [ option (lambda string bytes) ] */ ; - ASSERT_SOME ; - PACK - /* [ bytes ] */ } - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.987 units remaining) michelson_test_scripts/opcodes/pair_id.tz -{ parameter (pair bool bool) ; - storage (option (pair bool bool)) ; - code { CAR - /* [ pair bool bool ] */ ; - SOME - /* [ option (pair bool bool) ] */ ; - NIL operation - /* [ list operation : option (pair bool bool) ] */ ; - PAIR - /* [ pair (list operation) (option (pair bool bool)) ] */ } } -Well typed (Gas remaining: 1039996.651 units remaining) michelson_test_scripts/opcodes/pairing_check.tz -{ parameter (list (pair bls12_381_g1 bls12_381_g2)) ; - storage (option bool) ; - code { CAR - /* [ list (pair bls12_381_g1 bls12_381_g2) ] */ ; - PAIRING_CHECK - /* [ bool ] */ ; - SOME - /* [ option bool ] */ ; - NIL operation - /* [ list operation : option bool ] */ ; - PAIR - /* [ pair (list operation) (option bool) ] */ } } -Well typed (Gas remaining: 1039994.102 units remaining) michelson_test_scripts/opcodes/pexec.tz -{ parameter nat ; - storage nat ; - code { LAMBDA - (pair nat nat) - nat - { UNPAIR /* [ nat : nat ] */ ; ADD /* [ nat ] */ } - /* [ lambda (pair nat nat) nat : pair nat nat ] */ ; - SWAP - /* [ pair nat nat : lambda (pair nat nat) nat ] */ ; - UNPAIR - /* [ nat : nat : lambda (pair nat nat) nat ] */ ; - DIP { APPLY /* [ lambda nat nat ] */ } - /* [ nat : lambda nat nat ] */ ; - EXEC - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039988.370 units remaining) michelson_test_scripts/opcodes/pexec_2.tz -{ parameter int ; - storage (list int) ; - code { UNPAIR @p @s - /* [ int : list int ] */ ; - LAMBDA - (pair int (pair int int)) - int - { UNPAIR - /* [ int : pair int int ] */ ; - DIP { UNPAIR /* [ int : int ] */ } - /* [ int : int : int ] */ ; - ADD - /* [ int : int ] */ ; - MUL - /* [ int ] */ } - /* [ lambda (pair int int int) int : int : list int ] */ ; - SWAP - /* [ int : lambda (pair int int int) int : list int ] */ ; - APPLY - /* [ lambda (pair int int) int : list int ] */ ; - PUSH int 3 - /* [ int : lambda (pair int int) int : list int ] */ ; - APPLY - /* [ lambda int int : list int ] */ ; - SWAP - /* [ list int : lambda int int ] */ ; - MAP { DIP { DUP /* [ lambda int int : lambda int int ] */ } - /* [ int : lambda int int : lambda int int ] */ ; - EXEC - /* [ int : lambda int int ] */ } - /* [ list int : lambda int int ] */ ; - DIP { DROP /* [] */ } - /* [ list int ] */ ; - NIL operation - /* [ list operation : list int ] */ ; - PAIR - /* [ pair (list operation) (list int) ] */ } } -Well typed (Gas remaining: 1039995.390 units remaining) michelson_test_scripts/opcodes/proxy.tz -{ parameter (contract unit) ; - storage unit ; - code { UNPAIR - /* [ contract unit : unit ] */ ; - AMOUNT - /* [ mutez : contract unit : unit ] */ ; - UNIT - /* [ unit : mutez : contract unit : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : unit ] */ ; - DIP { NIL operation /* [ list operation : unit ] */ } - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.699 units remaining) michelson_test_scripts/opcodes/ret_int.tz -{ parameter unit ; - storage (option nat) ; - code { DROP - /* [] */ ; - PUSH nat 300 - /* [ nat ] */ ; - SOME - /* [ option nat ] */ ; - NIL operation - /* [ list operation : option nat ] */ ; - PAIR - /* [ pair (list operation) (option nat) ] */ } } -Well typed (Gas remaining: 1039995.638 units remaining) michelson_test_scripts/opcodes/reverse.tz -{ parameter (list string) ; - storage (list string) ; - code { CAR - /* [ list string ] */ ; - NIL string - /* [ list string : list string ] */ ; - SWAP - /* [ list string : list string ] */ ; - ITER { CONS /* [ list string ] */ } - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039990.539 units remaining) michelson_test_scripts/opcodes/reverse_loop.tz -{ parameter (list string) ; - storage (list string) ; - code { CAR - /* [ list string ] */ ; - NIL string - /* [ list string : list string ] */ ; - SWAP - /* [ list string : list string ] */ ; - PUSH bool True - /* [ bool : list string : list string ] */ ; - LOOP { IF_CONS - { SWAP - /* [ list string : string : list string ] */ ; - DIP { CONS /* [ list string ] */ } - /* [ list string : list string ] */ ; - PUSH bool True - /* [ bool : list string : list string ] */ } - { NIL string - /* [ list string : list string ] */ ; - PUSH bool False - /* [ bool : list string : list string ] */ } } - /* [ list string : list string ] */ ; - DROP - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039997.505 units remaining) michelson_test_scripts/opcodes/sapling_empty_state.tz -{ parameter unit ; - storage (sapling_state 8) ; - code { DROP - /* [] */ ; - SAPLING_EMPTY_STATE 8 - /* [ sapling_state 8 ] */ ; - NIL operation - /* [ list operation : sapling_state 8 ] */ ; - PAIR - /* [ pair (list operation) (sapling_state 8) ] */ } } -Well typed (Gas remaining: 1039997.054 units remaining) michelson_test_scripts/opcodes/self.tz -{ parameter unit ; - storage address ; - code { DROP - /* [] */ ; - SELF - /* [ contract unit ] */ ; - ADDRESS - /* [ address ] */ ; - NIL operation - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039990.287 units remaining) michelson_test_scripts/opcodes/self_address.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - LAMBDA - unit - address - { DROP /* [] */ ; SELF_ADDRESS /* [ address ] */ } - /* [ lambda unit address ] */ ; - UNIT - /* [ unit : lambda unit address ] */ ; - EXEC - /* [ address ] */ ; - SELF - /* [ contract unit : address ] */ ; - ADDRESS - /* [ address : address ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039986.649 units remaining) michelson_test_scripts/opcodes/self_address_after_fib_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 3 - /* [ nat : address : address ] */ ; - VIEW "fib" nat - /* [ option nat : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SELF_ADDRESS - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039987.133 units remaining) michelson_test_scripts/opcodes/self_address_after_nonexistent_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" string - /* [ option string : address ] */ ; - ASSERT_NONE ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SELF_ADDRESS - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039986.472 units remaining) michelson_test_scripts/opcodes/self_address_after_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SELF_ADDRESS - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039986.141 units remaining) michelson_test_scripts/opcodes/self_after_fib_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 3 - /* [ nat : address : address ] */ ; - VIEW "fib" nat - /* [ option nat : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SELF - /* [ contract address : operation ] */ ; - ADDRESS - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039986.534 units remaining) michelson_test_scripts/opcodes/self_after_nonexistent_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "nonexistent" string - /* [ option string : address ] */ ; - ASSERT_NONE ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SELF - /* [ contract address : operation ] */ ; - ADDRESS - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039985.965 units remaining) michelson_test_scripts/opcodes/self_after_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SELF - /* [ contract address : operation ] */ ; - ADDRESS - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039988.888 units remaining) michelson_test_scripts/opcodes/self_with_default_entrypoint.tz -{ parameter (or (or (nat %A) (bool %B)) (or %maybe_C (unit %default) (string %C))) ; - storage unit ; - code { DROP - /* [] */ ; - SELF - /* [ contract unit ] */ ; - DROP - /* [] */ ; - SELF %A - /* [ contract nat ] */ ; - DROP - /* [] */ ; - SELF %default - /* [ contract unit ] */ ; - PACK - /* [ bytes ] */ ; - SELF - /* [ contract unit : bytes ] */ ; - PACK - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039971.670 units remaining) michelson_test_scripts/opcodes/self_with_entrypoint.tz -{ parameter (or (or (nat %A) (bool %B)) (or %maybe_C (unit %Z) (string %C))) ; - storage unit ; - code { DROP - /* [] */ ; - SELF %A - /* [ contract nat ] */ ; - PACK @Apacked - /* [ bytes ] */ ; - SELF %default - /* [ contract (or (or nat bool) (or unit string)) : bytes ] */ ; - PACK @defpacked - /* [ bytes : bytes ] */ ; - DUP - /* [ bytes : bytes : bytes ] */ ; - DIP { SWAP /* [ bytes : bytes ] */ } - /* [ bytes : bytes : bytes ] */ ; - ASSERT_CMPNEQ ; - SELF - /* [ contract (or (or nat bool) (or unit string)) : bytes ] */ ; - PACK @selfpacked - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - SELF %A - /* [ contract nat ] */ ; - CAST (contract nat) - /* [ contract nat ] */ ; - DROP - /* [] */ ; - SELF %B - /* [ contract bool ] */ ; - CAST (contract bool) - /* [ contract bool ] */ ; - DROP - /* [] */ ; - SELF %maybe_C - /* [ contract (or unit string) ] */ ; - CAST (contract (or unit string)) - /* [ contract (or unit string) ] */ ; - DROP - /* [] */ ; - SELF %Z - /* [ contract unit ] */ ; - CAST (contract unit) - /* [ contract unit ] */ ; - DROP - /* [] */ ; - SELF - /* [ contract (or (or nat bool) (or unit string)) ] */ ; - CAST (contract (or (or (nat %A) (bool %B)) (or %maybe_C (unit %Z) (string %C)))) - /* [ contract (or (or nat bool) (or unit string)) ] */ ; - DROP - /* [] */ ; - SELF %default - /* [ contract (or (or nat bool) (or unit string)) ] */ ; - CAST (contract (or (or (nat %A) (bool %B)) (or %maybe_C (unit %Z) (string %C)))) - /* [ contract (or (or nat bool) (or unit string)) ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/sender.tz -{ parameter unit ; - storage address ; - code { DROP - /* [] */ ; - SENDER - /* [ address ] */ ; - NIL operation - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039986.649 units remaining) michelson_test_scripts/opcodes/sender_after_fib_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 3 - /* [ nat : address : address ] */ ; - VIEW "fib" nat - /* [ option nat : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SENDER - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039987.133 units remaining) michelson_test_scripts/opcodes/sender_after_nonexistent_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" string - /* [ option string : address ] */ ; - ASSERT_NONE ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SENDER - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039986.472 units remaining) michelson_test_scripts/opcodes/sender_after_view.tz -{ parameter address ; - storage address ; - code { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - PUSH nat 0 - /* [ nat : address : address ] */ ; - VIEW "id" (pair nat nat) - /* [ option (pair nat nat) : address ] */ ; - ASSERT_SOME ; - DROP - /* [ address ] */ ; - CONTRACT nat - /* [ option (contract nat) ] */ ; - ASSERT_SOME ; - PUSH mutez 1500 - /* [ mutez : contract nat ] */ ; - PUSH nat 0 - /* [ nat : mutez : contract nat ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - SENDER - /* [ address : operation ] */ ; - SWAP - /* [ operation : address ] */ ; - NIL operation - /* [ list operation : operation : address ] */ ; - SWAP - /* [ operation : list operation : address ] */ ; - CONS - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039992.449 units remaining) michelson_test_scripts/opcodes/set_car.tz -{ parameter string ; - storage (pair (string %s) (nat %n)) ; - code { DUP - /* [ pair string string nat : pair string string nat ] */ ; - CDR - /* [ pair string nat : pair string string nat ] */ ; - DIP { CAR /* [ string ] */ } - /* [ pair string nat : string ] */ ; - SET_CAR %s ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } } -Well typed (Gas remaining: 1039992.918 units remaining) michelson_test_scripts/opcodes/set_cdr.tz -{ parameter nat ; - storage (pair (string %s) (nat %n)) ; - code { DUP - /* [ pair nat string nat : pair nat string nat ] */ ; - CDR - /* [ pair string nat : pair nat string nat ] */ ; - DIP { CAR /* [ nat ] */ } - /* [ pair string nat : nat ] */ ; - SET_CDR %n ; - NIL operation - /* [ list operation : pair string nat ] */ ; - PAIR - /* [ pair (list operation) string nat ] */ } } -Well typed (Gas remaining: 1039996.384 units remaining) michelson_test_scripts/opcodes/set_delegate.tz -{ parameter (option key_hash) ; - storage unit ; - code { UNPAIR - /* [ option key_hash : unit ] */ ; - SET_DELEGATE - /* [ operation : unit ] */ ; - DIP { NIL operation /* [ list operation : unit ] */ } - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.827 units remaining) michelson_test_scripts/opcodes/set_id.tz -{ parameter (set string) ; - storage (set string) ; - code { CAR - /* [ set string ] */ ; - NIL operation - /* [ list operation : set string ] */ ; - PAIR - /* [ pair (list operation) (set string) ] */ } } -Well typed (Gas remaining: 1039995.699 units remaining) michelson_test_scripts/opcodes/set_iter.tz -{ parameter (set int) ; - storage int ; - code { CAR - /* [ set int ] */ ; - PUSH int 0 - /* [ int : set int ] */ ; - SWAP - /* [ set int : int ] */ ; - ITER { ADD /* [ int ] */ } - /* [ int ] */ ; - NIL operation - /* [ list operation : int ] */ ; - PAIR - /* [ pair (list operation) int ] */ } } -Well typed (Gas remaining: 1039989.942 units remaining) michelson_test_scripts/opcodes/set_member.tz -{ parameter string ; - storage (pair (set string) (option bool)) ; - code { DUP - /* [ pair string (set string) (option bool) - : pair string (set string) (option bool) ] */ ; - DUP - /* [ pair string (set string) (option bool) - : pair string (set string) (option bool) - : pair string (set string) (option bool) ] */ ; - CAR - /* [ string : pair string (set string) (option bool) - : pair string (set string) (option bool) ] */ ; - DIP { CDAR } - /* [ string : set string : pair string (set string) (option bool) ] */ ; - MEM - /* [ bool : pair string (set string) (option bool) ] */ ; - SOME - /* [ option bool : pair string (set string) (option bool) ] */ ; - DIP { CDAR } - /* [ option bool : set string ] */ ; - SWAP - /* [ set string : option bool ] */ ; - PAIR - /* [ pair (set string) (option bool) ] */ ; - NIL operation - /* [ list operation : pair (set string) (option bool) ] */ ; - PAIR - /* [ pair (list operation) (set string) (option bool) ] */ } } -Well typed (Gas remaining: 1039997.469 units remaining) michelson_test_scripts/opcodes/set_size.tz -{ parameter (set int) ; - storage nat ; - code { CAR - /* [ set int ] */ ; - SIZE - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039956.190 units remaining) michelson_test_scripts/opcodes/sets.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH (set nat) { 0 ; 1 ; 3 } - /* [ set nat ] */ ; - DROP - /* [] */ ; - PUSH (set int) { -1 ; 0 ; 3 } - /* [ set int ] */ ; - DROP - /* [] */ ; - PUSH (set mutez) { 1 ; 4 ; 5 ; 10 ; 1923 } - /* [ set mutez ] */ ; - DROP - /* [] */ ; - PUSH (set timestamp) - { -1 ; 0 ; "2017-09-16T08:38:04Z" ; "2019-09-16T08:38:05Z" } - /* [ set timestamp ] */ ; - DROP - /* [] */ ; - PUSH (set bool) {} - /* [ set bool ] */ ; - DROP - /* [] */ ; - PUSH (set bool) { True } - /* [ set bool ] */ ; - DROP - /* [] */ ; - PUSH (set bool) { False } - /* [ set bool ] */ ; - DROP - /* [] */ ; - PUSH (set bool) { False ; True } - /* [ set bool ] */ ; - DROP - /* [] */ ; - PUSH (set string) { "" ; "A" ; "B" ; "a" ; "aa" ; "b" } - /* [ set string ] */ ; - DROP - /* [] */ ; - PUSH (set bytes) { 0x ; 0x01 ; 0x02 ; 0xaabbcc } - /* [ set bytes ] */ ; - DROP - /* [] */ ; - PUSH (set key_hash) - { "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ; - "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" } - /* [ set key_hash ] */ ; - DROP - /* [] */ ; - PUSH (set address) - { "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" ; - "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv" ; - "KT1TZCh8fmUbuDqFxetPWC2fsQanAHzLx4W9" } - /* [ set address ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039996.983 units remaining) michelson_test_scripts/opcodes/sha3.tz -{ storage (option bytes) ; - parameter bytes ; - code { CAR - /* [ bytes ] */ ; - SHA3 - /* [ bytes ] */ ; - SOME - /* [ option bytes ] */ ; - NIL operation - /* [ list operation : option bytes ] */ ; - PAIR - /* [ pair (list operation) (option bytes) ] */ } } -Well typed (Gas remaining: 1039994.397 units remaining) michelson_test_scripts/opcodes/shifts.tz -{ parameter (or (pair nat nat) (pair nat nat)) ; - storage (option nat) ; - code { CAR - /* [ or (pair nat nat) (pair nat nat) ] */ ; - IF_LEFT - { UNPAIR /* [ nat : nat ] */ ; LSL /* [ nat ] */ } - { UNPAIR /* [ nat : nat ] */ ; LSR /* [ nat ] */ } ; - SOME - /* [ option nat ] */ ; - NIL operation - /* [ list operation : option nat ] */ ; - PAIR - /* [ pair (list operation) (option nat) ] */ } } -Well typed (Gas remaining: 1039993.924 units remaining) michelson_test_scripts/opcodes/slice.tz -{ parameter (pair nat nat) ; - storage (option string) ; - code { UNPAIR - /* [ pair nat nat : option string ] */ ; - SWAP - /* [ option string : pair nat nat ] */ ; - IF_SOME - { SWAP - /* [ pair nat nat : string ] */ ; - UNPAIR - /* [ nat : nat : string ] */ ; - SLICE - /* [ option string ] */ } - { DROP /* [] */ ; NONE string /* [ option string ] */ } ; - NIL operation - /* [ list operation : option string ] */ ; - PAIR - /* [ pair (list operation) (option string) ] */ } } -Well typed (Gas remaining: 1039993.924 units remaining) michelson_test_scripts/opcodes/slice_bytes.tz -{ parameter (pair nat nat) ; - storage (option bytes) ; - code { UNPAIR - /* [ pair nat nat : option bytes ] */ ; - SWAP - /* [ option bytes : pair nat nat ] */ ; - IF_SOME - { SWAP - /* [ pair nat nat : bytes ] */ ; - UNPAIR - /* [ nat : nat : bytes ] */ ; - SLICE - /* [ option bytes ] */ } - { DROP /* [] */ ; NONE bytes /* [ option bytes ] */ } ; - NIL operation - /* [ list operation : option bytes ] */ ; - PAIR - /* [ pair (list operation) (option bytes) ] */ } } -Well typed (Gas remaining: 1039936.992 units remaining) michelson_test_scripts/opcodes/slices.tz -{ parameter (pair bytes signature) ; - storage key ; - code { DUP - /* [ pair (pair bytes signature) key : pair (pair bytes signature) key ] */ ; - CAAR ; - DUP - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - SIZE - /* [ nat : bytes : pair (pair bytes signature) key ] */ ; - PUSH nat 128 - /* [ nat : nat : bytes : pair (pair bytes signature) key ] */ ; - SWAP - /* [ nat : nat : bytes : pair (pair bytes signature) key ] */ ; - SUB - /* [ int : bytes : pair (pair bytes signature) key ] */ ; - ISNAT - /* [ option nat : bytes : pair (pair bytes signature) key ] */ ; - IF_SOME { /* [ nat : bytes : pair (pair bytes signature) key ] */ } { FAIL } ; - PUSH nat 128 - /* [ nat : nat : bytes : pair (pair bytes signature) key ] */ ; - SLICE @payload - /* [ option bytes : pair (pair bytes signature) key ] */ ; - ASSERT_SOME ; - DUP - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - DIP { DIP { DUP - /* [ pair (pair bytes signature) key : pair (pair bytes signature) key ] */ ; - CAAR ; - PUSH nat 32 - /* [ nat : bytes : pair (pair bytes signature) key ] */ ; - PUSH nat 0 - /* [ nat : nat : bytes : pair (pair bytes signature) key ] */ ; - SLICE - /* [ option bytes : pair (pair bytes signature) key ] */ ; - ASSERT_SOME } - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - SHA256 - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - ASSERT_CMPEQ } - /* [ bytes : pair (pair bytes signature) key ] */ ; - DUP - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - DIP { DIP { DUP - /* [ pair (pair bytes signature) key : pair (pair bytes signature) key ] */ ; - CAAR ; - PUSH nat 32 - /* [ nat : bytes : pair (pair bytes signature) key ] */ ; - PUSH nat 32 - /* [ nat : nat : bytes : pair (pair bytes signature) key ] */ ; - SLICE - /* [ option bytes : pair (pair bytes signature) key ] */ ; - ASSERT_SOME } - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - BLAKE2B - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - ASSERT_CMPEQ } - /* [ bytes : pair (pair bytes signature) key ] */ ; - DUP - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - DIP { DIP { DUP - /* [ pair (pair bytes signature) key : pair (pair bytes signature) key ] */ ; - CAAR ; - PUSH nat 64 - /* [ nat : bytes : pair (pair bytes signature) key ] */ ; - PUSH nat 64 - /* [ nat : nat : bytes : pair (pair bytes signature) key ] */ ; - SLICE - /* [ option bytes : pair (pair bytes signature) key ] */ ; - ASSERT_SOME } - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - SHA512 - /* [ bytes : bytes : pair (pair bytes signature) key ] */ ; - ASSERT_CMPEQ } - /* [ bytes : pair (pair bytes signature) key ] */ ; - DIP { DUP - /* [ pair (pair bytes signature) key : pair (pair bytes signature) key ] */ ; - CDR - /* [ key : pair (pair bytes signature) key ] */ ; - DIP { DUP - /* [ pair (pair bytes signature) key : pair (pair bytes signature) key ] */ ; - CADR } - /* [ key : signature : pair (pair bytes signature) key ] */ } - /* [ bytes : key : signature : pair (pair bytes signature) key ] */ ; - SWAP - /* [ key : bytes : signature : pair (pair bytes signature) key ] */ ; - DIP { SWAP /* [ signature : bytes : pair (pair bytes signature) key ] */ } - /* [ key : signature : bytes : pair (pair bytes signature) key ] */ ; - CHECK_SIGNATURE - /* [ bool : pair (pair bytes signature) key ] */ ; - ASSERT ; - CDR - /* [ key ] */ ; - DUP - /* [ key : key ] */ ; - HASH_KEY - /* [ key_hash : key ] */ ; - IMPLICIT_ACCOUNT - /* [ contract unit : key ] */ ; - BALANCE - /* [ mutez : contract unit : key ] */ ; - UNIT - /* [ unit : mutez : contract unit : key ] */ ; - TRANSFER_TOKENS - /* [ operation : key ] */ ; - NIL operation - /* [ list operation : operation : key ] */ ; - SWAP - /* [ operation : list operation : key ] */ ; - CONS - /* [ list operation : key ] */ ; - PAIR - /* [ pair (list operation) key ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/source.tz -{ parameter unit ; - storage address ; - code { DROP - /* [] */ ; - SOURCE - /* [ address ] */ ; - NIL operation - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039973.560 units remaining) michelson_test_scripts/opcodes/split_bytes.tz -{ parameter bytes ; - storage (list bytes) ; - code { UNPAIR - /* [ bytes : list bytes ] */ ; - DIP { NIL bytes - /* [ list bytes : list bytes ] */ ; - SWAP - /* [ list bytes : list bytes ] */ ; - ITER { CONS /* [ list bytes ] */ } - /* [ list bytes ] */ } - /* [ bytes : list bytes ] */ ; - DUP - /* [ bytes : bytes : list bytes ] */ ; - SIZE - /* [ nat : bytes : list bytes ] */ ; - PUSH nat 0 - /* [ nat : nat : bytes : list bytes ] */ ; - CMPNEQ ; - DIP { PUSH @index nat 0 /* [ nat : bytes : list bytes ] */ } - /* [ bool : nat : bytes : list bytes ] */ ; - LOOP { PAIR - /* [ pair nat bytes : list bytes ] */ ; - DUP - /* [ pair nat bytes : pair nat bytes : list bytes ] */ ; - DIP { UNPAIR - /* [ nat : bytes : list bytes ] */ ; - DIP { PUSH nat 1 /* [ nat : bytes : list bytes ] */ } - /* [ nat : nat : bytes : list bytes ] */ ; - SLICE - /* [ option bytes : list bytes ] */ ; - ASSERT_SOME ; - CONS @storage - /* [ list bytes ] */ } - /* [ pair nat bytes : list bytes ] */ ; - UNPAIR - /* [ nat : bytes : list bytes ] */ ; - PUSH nat 1 - /* [ nat : nat : bytes : list bytes ] */ ; - ADD @index - /* [ nat : bytes : list bytes ] */ ; - DUP - /* [ nat : nat : bytes : list bytes ] */ ; - DIP { DIP { DUP /* [ bytes : bytes : list bytes ] */ } - /* [ nat : bytes : bytes : list bytes ] */ ; - SWAP - /* [ bytes : nat : bytes : list bytes ] */ ; - SIZE - /* [ nat : nat : bytes : list bytes ] */ ; - CMPNEQ } - /* [ nat : bool : bytes : list bytes ] */ ; - SWAP - /* [ bool : nat : bytes : list bytes ] */ } - /* [ nat : bytes : list bytes ] */ ; - DROP - /* [ bytes : list bytes ] */ ; - DROP - /* [ list bytes ] */ ; - NIL bytes - /* [ list bytes : list bytes ] */ ; - SWAP - /* [ list bytes : list bytes ] */ ; - ITER { CONS /* [ list bytes ] */ } - /* [ list bytes ] */ ; - NIL operation - /* [ list operation : list bytes ] */ ; - PAIR - /* [ pair (list operation) (list bytes) ] */ } } -Well typed (Gas remaining: 1039973.560 units remaining) michelson_test_scripts/opcodes/split_string.tz -{ parameter string ; - storage (list string) ; - code { UNPAIR - /* [ string : list string ] */ ; - DIP { NIL string - /* [ list string : list string ] */ ; - SWAP - /* [ list string : list string ] */ ; - ITER { CONS /* [ list string ] */ } - /* [ list string ] */ } - /* [ string : list string ] */ ; - DUP - /* [ string : string : list string ] */ ; - SIZE - /* [ nat : string : list string ] */ ; - PUSH nat 0 - /* [ nat : nat : string : list string ] */ ; - CMPNEQ ; - DIP { PUSH @index nat 0 /* [ nat : string : list string ] */ } - /* [ bool : nat : string : list string ] */ ; - LOOP { PAIR - /* [ pair nat string : list string ] */ ; - DUP - /* [ pair nat string : pair nat string : list string ] */ ; - DIP { UNPAIR - /* [ nat : string : list string ] */ ; - DIP { PUSH nat 1 /* [ nat : string : list string ] */ } - /* [ nat : nat : string : list string ] */ ; - SLICE - /* [ option string : list string ] */ ; - ASSERT_SOME ; - CONS @storage - /* [ list string ] */ } - /* [ pair nat string : list string ] */ ; - UNPAIR - /* [ nat : string : list string ] */ ; - PUSH nat 1 - /* [ nat : nat : string : list string ] */ ; - ADD @index - /* [ nat : string : list string ] */ ; - DUP - /* [ nat : nat : string : list string ] */ ; - DIP { DIP { DUP /* [ string : string : list string ] */ } - /* [ nat : string : string : list string ] */ ; - SWAP - /* [ string : nat : string : list string ] */ ; - SIZE - /* [ nat : nat : string : list string ] */ ; - CMPNEQ } - /* [ nat : bool : string : list string ] */ ; - SWAP - /* [ bool : nat : string : list string ] */ } - /* [ nat : string : list string ] */ ; - DROP - /* [ string : list string ] */ ; - DROP - /* [ list string ] */ ; - NIL string - /* [ list string : list string ] */ ; - SWAP - /* [ list string : list string ] */ ; - ITER { CONS /* [ list string ] */ } - /* [ list string ] */ ; - NIL operation - /* [ list operation : list string ] */ ; - PAIR - /* [ pair (list operation) (list string) ] */ } } -Well typed (Gas remaining: 1039997.447 units remaining) michelson_test_scripts/opcodes/store_bls12_381_fr.tz -{ parameter bls12_381_fr ; - storage (option bls12_381_fr) ; - code { CAR - /* [ bls12_381_fr ] */ ; - SOME - /* [ option bls12_381_fr ] */ ; - NIL operation - /* [ list operation : option bls12_381_fr ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_fr) ] */ } } -Well typed (Gas remaining: 1039997.447 units remaining) michelson_test_scripts/opcodes/store_bls12_381_g1.tz -{ parameter bls12_381_g1 ; - storage (option bls12_381_g1) ; - code { CAR - /* [ bls12_381_g1 ] */ ; - SOME - /* [ option bls12_381_g1 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g1 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g1) ] */ } } -Well typed (Gas remaining: 1039997.447 units remaining) michelson_test_scripts/opcodes/store_bls12_381_g2.tz -{ parameter bls12_381_g2 ; - storage (option bls12_381_g2) ; - code { CAR - /* [ bls12_381_g2 ] */ ; - SOME - /* [ option bls12_381_g2 ] */ ; - NIL operation - /* [ list operation : option bls12_381_g2 ] */ ; - PAIR - /* [ pair (list operation) (option bls12_381_g2) ] */ } } -Well typed (Gas remaining: 1039998.017 units remaining) michelson_test_scripts/opcodes/store_input.tz -{ parameter string ; - storage string ; - code { CAR - /* [ string ] */ ; - NIL operation - /* [ list operation : string ] */ ; - PAIR - /* [ pair (list operation) string ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/store_now.tz -{ parameter unit ; - storage timestamp ; - code { DROP - /* [] */ ; - NOW - /* [ timestamp ] */ ; - NIL operation - /* [ list operation : timestamp ] */ ; - PAIR - /* [ pair (list operation) timestamp ] */ } } -Well typed (Gas remaining: 1039997.447 units remaining) michelson_test_scripts/opcodes/str_id.tz -{ parameter string ; - storage (option string) ; - code { CAR - /* [ string ] */ ; - SOME - /* [ option string ] */ ; - NIL operation - /* [ list operation : option string ] */ ; - PAIR - /* [ pair (list operation) (option string) ] */ } } -Well typed (Gas remaining: 1039995.116 units remaining) michelson_test_scripts/opcodes/sub_timestamp_delta.tz -{ parameter (pair timestamp int) ; - storage timestamp ; - code { CAR - /* [ pair timestamp int ] */ ; - DUP - /* [ pair timestamp int : pair timestamp int ] */ ; - CAR - /* [ timestamp : pair timestamp int ] */ ; - DIP { CDR /* [ int ] */ } - /* [ timestamp : int ] */ ; - SUB - /* [ timestamp ] */ ; - NIL operation - /* [ list operation : timestamp ] */ ; - PAIR - /* [ pair (list operation) timestamp ] */ } } -Well typed (Gas remaining: 1039986.601 units remaining) michelson_test_scripts/opcodes/subset.tz -{ parameter (pair (set string) (set string)) ; - storage bool ; - code { CAR - /* [ pair (set string) (set string) ] */ ; - DUP - /* [ pair (set string) (set string) : pair (set string) (set string) ] */ ; - CDR - /* [ set string : pair (set string) (set string) ] */ ; - DIP { CAR /* [ set string ] */ } - /* [ set string : set string ] */ ; - PUSH bool True - /* [ bool : set string : set string ] */ ; - PAIR - /* [ pair bool (set string) : set string ] */ ; - SWAP - /* [ set string : pair bool (set string) ] */ ; - ITER { DIP { DUP - /* [ pair bool (set string) : pair bool (set string) ] */ ; - DUP - /* [ pair bool (set string) : pair bool (set string) : pair bool (set string) ] */ ; - CDR - /* [ set string : pair bool (set string) : pair bool (set string) ] */ ; - DIP { CAR - /* [ bool : pair bool (set string) ] */ ; - DIP { CDR /* [ set string ] */ } - /* [ bool : set string ] */ } - /* [ set string : bool : set string ] */ } - /* [ string : set string : bool : set string ] */ ; - MEM - /* [ bool : bool : set string ] */ ; - AND - /* [ bool : set string ] */ ; - PAIR - /* [ pair bool (set string) ] */ } - /* [ pair bool (set string) ] */ ; - CAR - /* [ bool ] */ ; - NIL operation - /* [ list operation : bool ] */ ; - PAIR - /* [ pair (list operation) bool ] */ } } -Well typed (Gas remaining: 1039987.541 units remaining) michelson_test_scripts/opcodes/tez_add_sub.tz -{ parameter (pair mutez mutez) ; - storage (option (pair mutez mutez)) ; - code { CAR - /* [ pair mutez mutez ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez ] */ ; - DUP - /* [ pair mutez mutez : pair mutez mutez : pair mutez mutez ] */ ; - CAR - /* [ mutez : pair mutez mutez : pair mutez mutez ] */ ; - DIP { CDR /* [ mutez : pair mutez mutez ] */ } - /* [ mutez : mutez : pair mutez mutez ] */ ; - ADD - /* [ mutez : pair mutez mutez ] */ ; - DIP { DUP - /* [ pair mutez mutez : pair mutez mutez ] */ ; - CAR - /* [ mutez : pair mutez mutez ] */ ; - DIP { CDR /* [ mutez ] */ } - /* [ mutez : mutez ] */ ; - SUB_MUTEZ - /* [ option mutez ] */ ; - ASSERT_SOME } - /* [ mutez : mutez ] */ ; - PAIR - /* [ pair mutez mutez ] */ ; - SOME - /* [ option (pair mutez mutez) ] */ ; - NIL operation - /* [ list operation : option (pair mutez mutez) ] */ ; - PAIR - /* [ pair (list operation) (option (pair mutez mutez)) ] */ } } -Well typed (Gas remaining: 1039997.910 units remaining) michelson_test_scripts/opcodes/ticket_bad.tz -{ parameter unit ; - storage (ticket nat) ; - code { CDR - /* [ ticket nat ] */ ; - NIL operation - /* [ list operation : ticket nat ] */ ; - PAIR - /* [ pair (list operation) (ticket nat) ] */ } } -Well typed (Gas remaining: 1039992.229 units remaining) michelson_test_scripts/opcodes/ticket_big_store.tz -{ parameter nat ; - storage (big_map unit (ticket nat)) ; - code { UNPAIR - /* [ nat : big_map unit (ticket nat) ] */ ; - PUSH nat 1 - /* [ nat : nat : big_map unit (ticket nat) ] */ ; - SWAP - /* [ nat : nat : big_map unit (ticket nat) ] */ ; - TICKET - /* [ option (ticket nat) : big_map unit (ticket nat) ] */ ; - ASSERT_SOME ; - SOME - /* [ option (ticket nat) : big_map unit (ticket nat) ] */ ; - UNIT - /* [ unit : option (ticket nat) : big_map unit (ticket nat) ] */ ; - UPDATE - /* [ big_map unit (ticket nat) ] */ ; - NIL operation - /* [ list operation : big_map unit (ticket nat) ] */ ; - PAIR - /* [ pair (list operation) (big_map unit (ticket nat)) ] */ } } -Well typed (Gas remaining: 1039992.719 units remaining) michelson_test_scripts/opcodes/ticket_join.tz -{ parameter (ticket nat) ; - storage (option (ticket nat)) ; - code { UNPAIR - /* [ ticket nat : option (ticket nat) ] */ ; - SWAP - /* [ option (ticket nat) : ticket nat ] */ ; - IF_NONE - { /* [ ticket nat ] */ } - { PAIR - /* [ pair (ticket nat) (ticket nat) ] */ ; - JOIN_TICKETS - /* [ option (ticket nat) ] */ ; - ASSERT_SOME } ; - SOME - /* [ option (ticket nat) ] */ ; - NIL operation - /* [ list operation : option (ticket nat) ] */ ; - PAIR - /* [ pair (list operation) (option (ticket nat)) ] */ } } -Well typed (Gas remaining: 1039985.428 units remaining) michelson_test_scripts/opcodes/ticket_read.tz -{ parameter (ticket nat) ; - storage address ; - code { CAR - /* [ ticket nat ] */ ; - READ_TICKET - /* [ pair address nat nat : ticket nat ] */ ; - DIP { DROP /* [] */ } - /* [ pair address nat nat ] */ ; - UNPAIR - /* [ address : pair nat nat ] */ ; - DIP { UNPAIR /* [ nat : nat ] */ } - /* [ address : nat : nat ] */ ; - DIP 2 { PUSH nat 1 /* [ nat : nat ] */ ; ASSERT_CMPEQ } - /* [ address : nat ] */ ; - DIP { PUSH nat 42 /* [ nat : nat ] */ ; ASSERT_CMPEQ } - /* [ address ] */ ; - NIL operation - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039979.615 units remaining) michelson_test_scripts/opcodes/ticket_split.tz -{ parameter (ticket nat) ; - storage unit ; - code { CAR - /* [ ticket nat ] */ ; - PUSH (pair nat nat) (Pair 1 2) - /* [ pair nat nat : ticket nat ] */ ; - SWAP - /* [ ticket nat : pair nat nat ] */ ; - SPLIT_TICKET - /* [ option (pair (ticket nat) (ticket nat)) ] */ ; - ASSERT_SOME ; - UNPAIR - /* [ ticket nat : ticket nat ] */ ; - READ_TICKET - /* [ pair address nat nat : ticket nat : ticket nat ] */ ; - CDDR ; - PUSH nat 1 - /* [ nat : nat : ticket nat : ticket nat ] */ ; - ASSERT_CMPEQ ; - DROP - /* [ ticket nat ] */ ; - READ_TICKET - /* [ pair address nat nat : ticket nat ] */ ; - CDDR ; - PUSH nat 2 - /* [ nat : nat : ticket nat ] */ ; - ASSERT_CMPEQ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.186 units remaining) michelson_test_scripts/opcodes/ticket_store.tz -{ parameter (ticket nat) ; - storage (option (ticket nat)) ; - code { CAR - /* [ ticket nat ] */ ; - SOME - /* [ option (ticket nat) ] */ ; - NIL operation - /* [ list operation : option (ticket nat) ] */ ; - PAIR - /* [ pair (list operation) (option (ticket nat)) ] */ } } -Well typed (Gas remaining: 1039997.566 units remaining) michelson_test_scripts/opcodes/ticket_store-2.tz -{ parameter (option (ticket nat)) ; - storage (option (ticket nat)) ; - code { CAR - /* [ option (ticket nat) ] */ ; - NIL operation - /* [ list operation : option (ticket nat) ] */ ; - PAIR - /* [ pair (list operation) (option (ticket nat)) ] */ } } -Well typed (Gas remaining: 1039986.866 units remaining) michelson_test_scripts/opcodes/ticketer.tz -{ parameter address ; - storage nat ; - code { UNPAIR - /* [ address : nat ] */ ; - DIP { DUP /* [ nat : nat ] */ } - /* [ address : nat : nat ] */ ; - SWAP - /* [ nat : address : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : address : nat ] */ ; - SWAP - /* [ nat : nat : address : nat ] */ ; - TICKET - /* [ option (ticket nat) : address : nat ] */ ; - ASSERT_SOME ; - DIP { CONTRACT (ticket nat) - /* [ option (contract (ticket nat)) : nat ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract (ticket nat) : nat ] */ } - /* [ ticket nat : mutez : contract (ticket nat) : nat ] */ ; - TRANSFER_TOKENS - /* [ operation : nat ] */ ; - NIL operation - /* [ list operation : operation : nat ] */ ; - SWAP - /* [ operation : list operation : nat ] */ ; - CONS - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039986.345 units remaining) michelson_test_scripts/opcodes/ticketer-2.tz -{ parameter (pair (pair address nat) nat) ; - storage unit ; - code { CAR - /* [ pair (pair address nat) nat ] */ ; - UNPAIR - /* [ pair address nat : nat ] */ ; - UNPAIR - /* [ address : nat : nat ] */ ; - CONTRACT (ticket nat) - /* [ option (contract (ticket nat)) : nat : nat ] */ ; - ASSERT_SOME ; - DIP { TICKET /* [ option (ticket nat) ] */ ; ASSERT_SOME } - /* [ contract (ticket nat) : ticket nat ] */ ; - SWAP - /* [ ticket nat : contract (ticket nat) ] */ ; - DIP { PUSH mutez 0 /* [ mutez : contract (ticket nat) ] */ } - /* [ ticket nat : mutez : contract (ticket nat) ] */ ; - TRANSFER_TOKENS - /* [ operation ] */ ; - NIL operation - /* [ list operation : operation ] */ ; - SWAP - /* [ operation : list operation ] */ ; - CONS - /* [ list operation ] */ ; - UNIT - /* [ unit : list operation ] */ ; - SWAP - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039997.552 units remaining) michelson_test_scripts/opcodes/transfer_amount.tz -{ parameter unit ; - storage mutez ; - code { DROP - /* [] */ ; - AMOUNT - /* [ mutez ] */ ; - NIL operation - /* [ list operation : mutez ] */ ; - PAIR - /* [ pair (list operation) mutez ] */ } } -Well typed (Gas remaining: 1039994.236 units remaining) michelson_test_scripts/opcodes/transfer_tokens.tz -{ parameter (contract unit) ; - storage unit ; - code { CAR - /* [ contract unit ] */ ; - DIP { UNIT /* [ unit ] */ } - /* [ contract unit : unit ] */ ; - PUSH mutez 100000000 - /* [ mutez : contract unit : unit ] */ ; - UNIT - /* [ unit : mutez : contract unit : unit ] */ ; - TRANSFER_TOKENS - /* [ operation : unit ] */ ; - NIL operation - /* [ list operation : operation : unit ] */ ; - SWAP - /* [ operation : list operation : unit ] */ ; - CONS - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.278 units remaining) michelson_test_scripts/opcodes/uncomb.tz -{ parameter (pair nat nat nat) ; - storage nat ; - code { CAR - /* [ pair nat nat nat ] */ ; - UNPAIR 3 - /* [ nat : nat : nat ] */ ; - PUSH nat 100 - /* [ nat : nat : nat : nat ] */ ; - MUL - /* [ nat : nat : nat ] */ ; - SWAP - /* [ nat : nat : nat ] */ ; - PUSH nat 10 - /* [ nat : nat : nat : nat ] */ ; - MUL - /* [ nat : nat : nat ] */ ; - ADD - /* [ nat : nat ] */ ; - ADD - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039904.400 units remaining) michelson_test_scripts/opcodes/unpair.tz -{ parameter (unit :param_unit) ; - storage (unit :u1) ; - code { DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - UNIT - /* [ unit : unit ] */ ; - PAIR - /* [ pair unit unit ] */ ; - UNPAIR - /* [ unit : unit ] */ ; - DROP 2 - /* [] */ ; - UNIT @b - /* [ unit ] */ ; - UNIT @a - /* [ unit : unit ] */ ; - PAIR - /* [ pair unit unit ] */ ; - UNPAIR @c @d - /* [ unit : unit ] */ ; - DROP 2 - /* [] */ ; - UNIT @b - /* [ unit ] */ ; - UNIT @a - /* [ unit : unit ] */ ; - PAIR %@ %@ - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a %b @a @b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @b %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @% %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @% %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @b %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DROP - /* [] */ ; - UNIT @d - /* [ unit ] */ ; - UNIT @c - /* [ unit : unit ] */ ; - PAIR %a %b - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a %b @a @b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @b %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @% %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @% %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @b %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - UNIT - /* [ unit : unit ] */ ; - PAIR %a %b - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR % - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %a %b @a @b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @b %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @% %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @% %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @b %a %b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - UNIT - /* [ unit : unit ] */ ; - PAIR %a %b @p - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @%% @b - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @a @%% - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @%% @%% - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @% @%% - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR @%% @% - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DROP - /* [] */ ; - UNIT @b - /* [ unit ] */ ; - UNIT @a - /* [ unit : unit ] */ ; - PAIR @c - /* [ pair unit unit ] */ ; - UNPAIR @b @a - /* [ unit : unit ] */ ; - DROP 2 - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.787 units remaining) michelson_test_scripts/opcodes/unpair_field_annotation_mismatch.tz -{ parameter (unit :param_unit) ; - storage (unit :u1) ; - code { DROP - /* [] */ ; - UNIT @b - /* [ unit ] */ ; - UNIT @a - /* [ unit : unit ] */ ; - PAIR %@ %@ - /* [ pair unit unit ] */ ; - DUP - /* [ pair unit unit : pair unit unit ] */ ; - UNPAIR %c %d - /* [ unit : unit : pair unit unit ] */ ; - DROP 2 - /* [ pair unit unit ] */ ; - DROP - /* [] */ ; - UNIT - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039993.808 units remaining) michelson_test_scripts/opcodes/update_big_map.tz -{ storage (pair (big_map string string) unit) ; - parameter (map string (option string)) ; - code { UNPAPAIR ; - ITER { UNPAIR - /* [ string : option string : big_map string string : unit ] */ ; - UPDATE - /* [ big_map string string : unit ] */ } - /* [ big_map string string : unit ] */ ; - PAIR - /* [ pair (big_map string string) unit ] */ ; - NIL operation - /* [ list operation : pair (big_map string string) unit ] */ ; - PAIR - /* [ pair (list operation) (big_map string string) unit ] */ } } -Well typed (Gas remaining: 1039985.468 units remaining) michelson_test_scripts/opcodes/utxo_read.tz -{ parameter (pair (ticket nat) nat) ; - storage address ; - code { CAR - /* [ pair (ticket nat) nat ] */ ; - UNPAIR - /* [ ticket nat : nat ] */ ; - READ_TICKET - /* [ pair address nat nat : ticket nat : nat ] */ ; - DIP { DROP /* [ nat ] */ } - /* [ pair address nat nat : nat ] */ ; - UNPAIR - /* [ address : pair nat nat : nat ] */ ; - DIP { UNPAIR /* [ nat : nat : nat ] */ } - /* [ address : nat : nat : nat ] */ ; - DIP 2 { ASSERT_CMPEQ } - /* [ address : nat ] */ ; - DIP { PUSH nat 42 /* [ nat : nat ] */ ; ASSERT_CMPEQ } - /* [ address ] */ ; - NIL operation - /* [ list operation : address ] */ ; - PAIR - /* [ pair (list operation) address ] */ } } -Well typed (Gas remaining: 1039967.053 units remaining) michelson_test_scripts/opcodes/utxor.tz -{ parameter (pair address address) ; - storage nat ; - code { UNPAIR - /* [ pair address address : nat ] */ ; - DIP { DUP /* [ nat : nat ] */ } - /* [ pair address address : nat : nat ] */ ; - SWAP - /* [ nat : pair address address : nat ] */ ; - PUSH nat 5 - /* [ nat : nat : pair address address : nat ] */ ; - SWAP - /* [ nat : nat : pair address address : nat ] */ ; - TICKET - /* [ option (ticket nat) : pair address address : nat ] */ ; - ASSERT_SOME ; - PUSH nat 2 - /* [ nat : ticket nat : pair address address : nat ] */ ; - PUSH nat 3 - /* [ nat : nat : ticket nat : pair address address : nat ] */ ; - PAIR - /* [ pair nat nat : ticket nat : pair address address : nat ] */ ; - SWAP - /* [ ticket nat : pair nat nat : pair address address : nat ] */ ; - SPLIT_TICKET - /* [ option (pair (ticket nat) (ticket nat)) : pair address address : nat ] */ ; - ASSERT_SOME ; - UNPAIR - /* [ ticket nat : ticket nat : pair address address : nat ] */ ; - DIP { DIP { DUP - /* [ pair address address : pair address address : nat ] */ ; - CAR - /* [ address : pair address address : nat ] */ ; - CONTRACT - (pair (ticket nat) nat) - /* [ option (contract (pair (ticket nat) nat)) : pair address address : nat ] */ ; - ASSERT_SOME ; - PUSH mutez - 0 - /* [ mutez : contract (pair (ticket nat) nat) : pair address address : nat ] */ } - /* [ ticket nat : mutez : contract (pair (ticket nat) nat) - : pair address address : nat ] */ ; - PUSH nat - 2 - /* [ nat : ticket nat : mutez : contract (pair (ticket nat) nat) - : pair address address : nat ] */ ; - SWAP - /* [ ticket nat : nat : mutez : contract (pair (ticket nat) nat) - : pair address address : nat ] */ ; - PAIR - /* [ pair (ticket nat) nat : mutez : contract (pair (ticket nat) nat) - : pair address address : nat ] */ } - /* [ ticket nat : pair (ticket nat) nat : mutez - : contract (pair (ticket nat) nat) : pair address address : nat ] */ ; - DIP { TRANSFER_TOKENS /* [ operation : pair address address : nat ] */ } - /* [ ticket nat : operation : pair address address : nat ] */ ; - SWAP - /* [ operation : ticket nat : pair address address : nat ] */ ; - DIP { DIP { CDR - /* [ address : nat ] */ ; - CONTRACT - (pair (ticket nat) nat) - /* [ option (contract (pair (ticket nat) nat)) : nat ] */ ; - ASSERT_SOME ; - PUSH mutez 0 - /* [ mutez : contract (pair (ticket nat) nat) : nat ] */ } - /* [ ticket nat : mutez : contract (pair (ticket nat) nat) : nat ] */ ; - PUSH nat - 3 - /* [ nat : ticket nat : mutez : contract (pair (ticket nat) nat) : nat ] */ ; - SWAP - /* [ ticket nat : nat : mutez : contract (pair (ticket nat) nat) : nat ] */ ; - PAIR - /* [ pair (ticket nat) nat : mutez : contract (pair (ticket nat) nat) : nat ] */ } - /* [ operation : pair (ticket nat) nat : mutez - : contract (pair (ticket nat) nat) : nat ] */ ; - DIP { TRANSFER_TOKENS /* [ operation : nat ] */ } - /* [ operation : operation : nat ] */ ; - NIL operation - /* [ list operation : operation : operation : nat ] */ ; - SWAP - /* [ operation : list operation : operation : nat ] */ ; - CONS - /* [ list operation : operation : nat ] */ ; - SWAP - /* [ operation : list operation : nat ] */ ; - CONS - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039994.728 units remaining) michelson_test_scripts/opcodes/view_fib.tz -{ parameter (pair nat address) ; - storage nat ; - code { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - VIEW "fib" nat - /* [ option nat ] */ ; - IF_SOME - { NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } - { FAIL } } } -Well typed (Gas remaining: 1039993.431 units remaining) michelson_test_scripts/opcodes/view_mutual_recursion.tz -{ parameter (pair nat address) ; - storage nat ; - code { CAR - /* [ pair nat address ] */ ; - DUP - /* [ pair nat address : pair nat address ] */ ; - CDR - /* [ address : pair nat address ] */ ; - SWAP - /* [ pair nat address : address ] */ ; - VIEW "is_twenty" nat - /* [ option nat ] */ ; - IF_SOME - { NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } - { FAIL } } } -Well typed (Gas remaining: 1039994.508 units remaining) michelson_test_scripts/opcodes/view_op_add.tz -{ parameter (pair nat address) ; - storage nat ; - code { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - VIEW "add" nat - /* [ option nat ] */ ; - IF_SOME { /* [ nat ] */ } { FAIL } ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039994.488 units remaining) michelson_test_scripts/opcodes/view_op_constant.tz -{ parameter (pair nat address) ; - storage nat ; - code { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - VIEW "const" nat - /* [ option nat ] */ ; - IF_SOME { /* [ nat ] */ } { FAIL } ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039994.120 units remaining) michelson_test_scripts/opcodes/view_op_id.tz -{ parameter (pair nat address) ; - storage (pair nat nat) ; - code { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - VIEW "id" (pair nat nat) - /* [ option (pair nat nat) ] */ ; - IF_SOME { /* [ pair nat nat ] */ } { FAIL } ; - NIL operation - /* [ list operation : pair nat nat ] */ ; - PAIR - /* [ pair (list operation) nat nat ] */ } } -Well typed (Gas remaining: 1039989.349 units remaining) michelson_test_scripts/opcodes/view_op_nonexistent_addr.tz -{ parameter (pair nat address) ; - storage bool ; - code { DROP - /* [] */ ; - PUSH address "tz1SuakBpFdG9b4twyfrSMqZzruxhpMeSrE5" - /* [ address ] */ ; - PUSH nat 0 - /* [ nat : address ] */ ; - VIEW "test" bool - /* [ option bool ] */ ; - IF_SOME - { DROP /* [] */ ; PUSH bool True /* [ bool ] */ } - { PUSH bool False /* [ bool ] */ } ; - NIL operation - /* [ list operation : bool ] */ ; - PAIR - /* [ pair (list operation) bool ] */ } } -Well typed (Gas remaining: 1039993.957 units remaining) michelson_test_scripts/opcodes/view_op_nonexistent_func.tz -{ parameter (pair nat address) ; - storage bool ; - code { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - VIEW "not_exist" bool - /* [ option bool ] */ ; - IF_SOME - { DROP /* [] */ ; PUSH bool True /* [ bool ] */ } - { PUSH bool False /* [ bool ] */ } ; - NIL operation - /* [ list operation : bool ] */ ; - PAIR - /* [ pair (list operation) bool ] */ } } -Well typed (Gas remaining: 1039994.900 units remaining) michelson_test_scripts/opcodes/view_op_test_step_contants.tz -{ parameter address ; - storage (option (pair (pair mutez mutez) (pair (pair address address) address))) ; - code { CAR - /* [ address ] */ ; - UNIT - /* [ unit : address ] */ ; - VIEW "step_constants" - (pair (pair mutez mutez) (pair (pair address address) address)) - /* [ option (pair (pair mutez mutez) (pair address address) address) ] */ ; - NIL operation - /* [ list operation - : option (pair (pair mutez mutez) (pair address address) address) ] */ ; - PAIR - /* [ pair (list operation) (option (pair (pair mutez mutez) (pair address address) address)) ] */ } } -Well typed (Gas remaining: 1039994.017 units remaining) michelson_test_scripts/opcodes/view_op_toplevel_inconsistent_input_type.tz -{ parameter (pair int address) ; - storage nat ; - code { CAR - /* [ pair int address ] */ ; - UNPAIR - /* [ int : address ] */ ; - VIEW "add" nat - /* [ option nat ] */ ; - IF_SOME { DROP /* [] */ ; PUSH nat 1 /* [ nat ] */ } { PUSH nat 0 /* [ nat ] */ } ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } } -Well typed (Gas remaining: 1039994.017 units remaining) michelson_test_scripts/opcodes/view_op_toplevel_inconsistent_output_type.tz -{ parameter (pair nat address) ; - storage bool ; - code { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - VIEW "add" bool - /* [ option bool ] */ ; - IF_SOME - { DROP /* [] */ ; PUSH bool True /* [ bool ] */ } - { PUSH bool False /* [ bool ] */ } ; - NIL operation - /* [ list operation : bool ] */ ; - PAIR - /* [ pair (list operation) bool ] */ } } -Well typed (Gas remaining: 1039988.594 units remaining) michelson_test_scripts/opcodes/view_rec.tz -{ parameter unit ; - storage unit ; - view "loop" - address - never - { CAR - /* [ address ] */ ; - DUP - /* [ address : address ] */ ; - VIEW "loop" never - /* [ option never ] */ ; - ASSERT_SOME } ; - code { CDR - /* [ unit ] */ ; - SELF - /* [ contract unit : unit ] */ ; - ADDRESS - /* [ address : unit ] */ ; - DUP - /* [ address : address : unit ] */ ; - VIEW "loop" never - /* [ option never : unit ] */ ; - ASSERT_SOME ; - DROP - /* [ unit ] */ ; - NIL operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } -Well typed (Gas remaining: 1039948.512 units remaining) michelson_test_scripts/opcodes/view_toplevel_lib.tz -{ parameter nat ; - storage nat ; - code { CAR - /* [ nat ] */ ; - NIL operation - /* [ list operation : nat ] */ ; - PAIR - /* [ pair (list operation) nat ] */ } ; - view "add" nat nat { UNPAIR /* [ nat : nat ] */ ; ADD /* [ nat ] */ } ; - view "id" nat (pair nat nat) { /* [ pair nat nat ] */ } ; - view "test_failwith" nat (pair nat nat) { FAILWITH /* [] */ } ; - view "step_constants" - unit - (pair (pair mutez mutez) (pair (pair address address) address)) - { DROP - /* [] */ ; - SOURCE - /* [ address ] */ ; - SENDER - /* [ address : address ] */ ; - SELF_ADDRESS - /* [ address : address : address ] */ ; - PAIR - /* [ pair address address : address ] */ ; - PAIR - /* [ pair (pair address address) address ] */ ; - BALANCE - /* [ mutez : pair (pair address address) address ] */ ; - AMOUNT - /* [ mutez : mutez : pair (pair address address) address ] */ ; - PAIR - /* [ pair mutez mutez : pair (pair address address) address ] */ ; - PAIR - /* [ pair (pair mutez mutez) (pair address address) address ] */ } ; - view "succ" - (pair nat address) - nat - { CAR - /* [ pair nat address ] */ ; - UNPAIR - /* [ nat : address ] */ ; - PUSH nat 1 - /* [ nat : nat : address ] */ ; - ADD - /* [ nat : address ] */ ; - PAIR - /* [ pair nat address ] */ ; - DUP - /* [ pair nat address : pair nat address ] */ ; - CDR - /* [ address : pair nat address ] */ ; - SWAP - /* [ pair nat address : address ] */ ; - VIEW "is_twenty" nat - /* [ option nat ] */ ; - ASSERT_SOME } ; - view "is_twenty" - (pair nat address) - nat - { CAR - /* [ pair nat address ] */ ; - DUP - /* [ pair nat address : pair nat address ] */ ; - CAR - /* [ nat : pair nat address ] */ ; - PUSH nat 20 - /* [ nat : nat : pair nat address ] */ ; - COMPARE - /* [ int : pair nat address ] */ ; - EQ - /* [ bool : pair nat address ] */ ; - IF { CAR /* [ nat ] */ } - { DUP - /* [ pair nat address : pair nat address ] */ ; - CDR - /* [ address : pair nat address ] */ ; - SWAP - /* [ pair nat address : address ] */ ; - VIEW "succ" nat - /* [ option nat ] */ ; - ASSERT_SOME } } ; - view "fib" - nat - nat - { CAR - /* [ nat ] */ ; - DUP - /* [ nat : nat ] */ ; - PUSH nat 0 - /* [ nat : nat : nat ] */ ; - COMPARE - /* [ int : nat ] */ ; - EQ - /* [ bool : nat ] */ ; - IF { /* [ nat ] */ } - { DUP - /* [ nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat ] */ ; - COMPARE - /* [ int : nat ] */ ; - EQ - /* [ bool : nat ] */ ; - IF { /* [ nat ] */ } - { DUP - /* [ nat : nat ] */ ; - PUSH nat 1 - /* [ nat : nat : nat ] */ ; - SWAP - /* [ nat : nat : nat ] */ ; - SUB - /* [ int : nat ] */ ; - ABS - /* [ nat : nat ] */ ; - SELF_ADDRESS - /* [ address : nat : nat ] */ ; - SWAP - /* [ nat : address : nat ] */ ; - VIEW "fib" nat - /* [ option nat : nat ] */ ; - IF_SOME - { SWAP - /* [ nat : nat ] */ ; - PUSH nat 2 - /* [ nat : nat : nat ] */ ; - SWAP - /* [ nat : nat : nat ] */ ; - SUB - /* [ int : nat ] */ ; - ABS - /* [ nat : nat ] */ ; - SELF_ADDRESS - /* [ address : nat : nat ] */ ; - SWAP - /* [ nat : address : nat ] */ ; - VIEW "fib" nat - /* [ option nat : nat ] */ ; - IF_SOME { ADD /* [ nat ] */ } { FAIL } } - { FAIL } } } } } -Well typed (Gas remaining: 1039995.372 units remaining) michelson_test_scripts/opcodes/voting_power.tz -{ parameter key ; - storage (pair nat nat) ; - code { CAR - /* [ key ] */ ; - HASH_KEY - /* [ key_hash ] */ ; - VOTING_POWER - /* [ nat ] */ ; - DIP { TOTAL_VOTING_POWER /* [ nat ] */ } - /* [ nat : nat ] */ ; - PAIR - /* [ pair nat nat ] */ ; - NIL operation - /* [ list operation : pair nat nat ] */ ; - PAIR - /* [ pair (list operation) nat nat ] */ } } -Well typed (Gas remaining: 1039992.866 units remaining) michelson_test_scripts/opcodes/xor.tz -{ parameter (or (pair bool bool) (pair nat nat)) ; - storage (option (or bool nat)) ; - code { CAR - /* [ or (pair bool bool) (pair nat nat) ] */ ; - IF_LEFT - { UNPAIR /* [ bool : bool ] */ ; XOR /* [ bool ] */ ; LEFT nat /* [ or bool nat ] */ } - { UNPAIR /* [ nat : nat ] */ ; XOR /* [ nat ] */ ; RIGHT bool /* [ or bool nat ] */ } ; - SOME - /* [ option (or bool nat) ] */ ; - NIL operation - /* [ list operation : option (or bool nat) ] */ ; - PAIR - /* [ pair (list operation) (option (or bool nat)) ] */ } } -Well typed (Gas remaining: 1039978.970 units remaining) michelson_test_scripts/opcodes/xor_bytes_016.tz -{ parameter unit ; - storage unit ; - code { DROP - /* [] */ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - PUSH bytes 0x06 - /* [ bytes : bytes ] */ ; - XOR - /* [ bytes ] */ ; - PUSH bytes 0x03 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x0005 - /* [ bytes ] */ ; - PUSH bytes 0x0106 - /* [ bytes : bytes ] */ ; - XOR - /* [ bytes ] */ ; - PUSH bytes 0x0103 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - PUSH bytes 0x05 - /* [ bytes ] */ ; - PUSH bytes 0x0106 - /* [ bytes : bytes ] */ ; - XOR - /* [ bytes ] */ ; - PUSH bytes 0x0103 - /* [ bytes : bytes ] */ ; - ASSERT_CMPEQ ; - UNIT - /* [ unit ] */ ; - NIL @noop operation - /* [ list operation : unit ] */ ; - PAIR - /* [ pair (list operation) unit ] */ } } diff --git a/tezt/tests/expected/create_contract.ml/Parisb- Create contract.out b/tezt/tests/expected/create_contract.ml/Parisb- Create contract.out deleted file mode 100644 index 2a884632e8fc943687c2fa05920c59a2f4e5507f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/create_contract.ml/Parisb- Create contract.out +++ /dev/null @@ -1,109 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract originate_contract transferring 200 from bootstrap1 running michelson_test_scripts/mini_scenarios/originate_contract.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 599.311 units (will add 100 for safety) -Estimated storage: 350 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000393 - Expected counter: 1 - Gas limit: 700 - Storage limit: 370 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000393 - payload fees(the block proposer) ....... +ꜩ0.000393 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ200 - Script: - { parameter unit ; - storage unit ; - code { DROP ; - UNIT ; - AMOUNT ; - NONE key_hash ; - CREATE_CONTRACT - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } ; - DIP { DROP ; PUSH unit Unit ; NIL operation } ; - CONS ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 93 bytes - Paid storage size diff: 93 bytes - Consumed gas: 599.277 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.02325 - storage fees ........................... +ꜩ0.02325 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ200 - [CONTRACT_HASH] ... +ꜩ200 - -New contract [CONTRACT_HASH] originated. -Contract memorized as originate_contract. - -./octez-client --mode mockup --wait none transfer 1 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --arg Unit -Node is bootstrapped. -Estimated gas: 1793.731 units (will add 100 for safety) -Estimated storage: 295 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 1894 - Storage limit: 315 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Transaction: - Amount: ꜩ1 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: Unit - Storage size: 93 bytes - Consumed gas: 1289.005 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - Internal operations: - Internal Origination: - From: [CONTRACT_HASH] - Credit: ꜩ1 - Script: - { parameter unit ; storage unit ; code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 38 bytes - Paid storage size diff: 38 bytes - Consumed gas: 505.294 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0095 - storage fees ........................... +ꜩ0.0095 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [CONTRACT_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - -New contract [CONTRACT_HASH] originated. diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test Coordinator-s post preimage).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test Coordinator-s post preimage).out deleted file mode 100644 index bb7224052703c8cce7d6fa1b5e80425db3f727d8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test Coordinator-s post preimage).out +++ /dev/null @@ -1,7 +0,0 @@ -RPC_REQUEST_URI: POST $SCHEME://$HOST:$PORT/v0/preimage -RPC_REQUEST_HEADER: Content-Type: application/json - - -RPC_REQUEST_BODY: "74657374" -RPC_RESPONSE_BODY: "00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6" - diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-certificate).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-certificate).out deleted file mode 100644 index e4e77754f770fba1a4829a7a6461d28205d8780f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-certificate).out +++ /dev/null @@ -1,6 +0,0 @@ -RPC_REQUEST_URI: GET $SCHEME://$HOST:$PORT/v0/certificates/00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6 -RPC_REQUEST_HEADER: Content-Type: application/json - - -RPC_RESPONSE_BODY: {"version":0,"root_hash":"00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6","aggregate_signature":"[AGGREGATED_SIG]","witnesses":"1"} - diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-missing_page).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-missing_page).out deleted file mode 100644 index 11852713b787ded54937ca98a3e57dd88db062d9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-missing_page).out +++ /dev/null @@ -1,6 +0,0 @@ -RPC_REQUEST_URI: GET $SCHEME://$HOST:$PORT/v0/missing_page/00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6 -RPC_REQUEST_HEADER: Content-Type: application/json - - -RPC_RESPONSE_BODY: "000000000474657374" - diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-monitor-certificate).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-monitor-certificate).out deleted file mode 100644 index 903c9d0a2847d36a9e56feba06f519918cb55c05..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-monitor-certificate).out +++ /dev/null @@ -1,6 +0,0 @@ -RPC_REQUEST_URI: GET $SCHEME://$HOST:$PORT/v0/monitor/certificate/00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6 -RPC_REQUEST_HEADER: Content-Type: application/json - - -{"version":0,"root_hash":"00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6","aggregate_signature":"[AGGREGATED_SIG]","witnesses":"1"} - diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-monitor-root_hashes).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-monitor-root_hashes).out deleted file mode 100644 index 4870365dfa08cd7f6ac4fe51065efc8265f9edee..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-monitor-root_hashes).out +++ /dev/null @@ -1,4 +0,0 @@ -RPC_REQUEST_URI: GET $SCHEME://$HOST:$PORT/v0/monitor/root_hashes -RPC_REQUEST_HEADER: Content-Type: application/json - - diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-preimage).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-preimage).out deleted file mode 100644 index cf7625cfc1d670495dbd598cd9fbb6bed554e358..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test GET v0-preimage).out +++ /dev/null @@ -1,6 +0,0 @@ -RPC_REQUEST_URI: GET $SCHEME://$HOST:$PORT/v0/preimage/00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6 -RPC_REQUEST_HEADER: Content-Type: application/json - - -RPC_RESPONSE_BODY: "000000000474657374" - diff --git a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test PUT v0-dac_member_signature).out b/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test PUT v0-dac_member_signature).out deleted file mode 100644 index 95ebde52ff78b10d96c582cf0122aff63239d22e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dac.ml/Parisb- Testing Full DAC infrastructure (test PUT v0-dac_member_signature).out +++ /dev/null @@ -1,11 +0,0 @@ -RPC_REQUEST_URI: PUT $SCHEME://$HOST:$PORT/v0/dac_member_signature -RPC_REQUEST_HEADER: Content-Type: application/json - - -RPC_REQUEST_BODY: { - "root_hash": "00a3703854279d2f377d689163d1ec911a840d84b56c4c6f6cafdf0610394df7c6", - "signer_pkh": "[PUBLIC_KEY_HASH]", - "signature": "[AGGREGATED_SIG]" -} -RPC_RESPONSE_BODY: {} - diff --git a/tezt/tests/expected/dal.ml/Parisb- Test following dal and baker tutorial commands.out b/tezt/tests/expected/dal.ml/Parisb- Test following dal and baker tutorial commands.out deleted file mode 100644 index d9d3a08feb101a4f1569b65440f24854819bfae9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Test following dal and baker tutorial commands.out +++ /dev/null @@ -1,125 +0,0 @@ - -./octez-client --wait none transfer 500000 from bootstrap1 to my_baker --burn-cap 1 -Node is bootstrapped. -Estimated gas: 168.854 units (will add 0 for safety) -Estimated storage: 257 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000271 - Expected counter: 1 - Gas limit: 169 - Storage limit: 277 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000271 - payload fees(the block proposer) ....... +ꜩ0.000271 - Transaction: - Amount: ꜩ500000 - From: [PUBLIC_KEY_HASH] - To: [PUBLIC_KEY_HASH] - This transaction was successfully applied - Consumed gas: 168.821 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ500000 - [PUBLIC_KEY_HASH] ... +ꜩ500000 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - - -./octez-client rpc get /chains/main/blocks/head/context/adaptive_issuance_launch_cycle -0 - -./octez-client --wait none register key my_baker as delegate -Node is bootstrapped. -Estimated gas: 170.669 units (will add 0 for safety) -Estimated storage: no bytes added -Estimated gas: 100 units (will add 0 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000275 - Expected counter: 2 - Gas limit: 171 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000275 - payload fees(the block proposer) ....... +ꜩ0.000275 - Revelation of manager public key: - Contract: [PUBLIC_KEY_HASH] - Key: [PUBLIC_KEY] - This revelation was successfully applied - Consumed gas: 170.503 - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000159 - Expected counter: 3 - Gas limit: 100 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000159 - payload fees(the block proposer) ....... +ꜩ0.000159 - Delegation: - Contract: [PUBLIC_KEY_HASH] - To: [PUBLIC_KEY_HASH] - This delegation was successfully applied - Consumed gas: 100 - - -./octez-client --wait none stake 499900 for my_baker -Node is bootstrapped. -Estimated gas: 3629.086 units (will add 0 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000623 - Expected counter: 4 - Gas limit: 3630 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000623 - payload fees(the block proposer) ....... +ꜩ0.000623 - Transaction: - Amount: ꜩ499900 - From: [PUBLIC_KEY_HASH] - To: [PUBLIC_KEY_HASH] - Entrypoint: stake - This transaction was successfully applied - Consumed gas: 3629.020 - Balance updates: - [PUBLIC_KEY_HASH] ............. -ꜩ499900 - deposits([PUBLIC_KEY_HASH]) ... +ꜩ499900 - - -./octez-client rpc get '/chains/main/blocks/head/context/delegates/[PUBLIC_KEY_HASH]' -{ "full_balance": "499999998943", "current_frozen_deposits": "499900000000", - "frozen_deposits": "0", "staking_balance": "499999998943", - "delegated_contracts": [ "[PUBLIC_KEY_HASH]" ], - "delegated_balance": "0", - "min_delegated_in_current_cycle": - { "amount": "99998943", - "level": - { "level": 4, "level_position": 3, "cycle": 0, "cycle_position": 3, - "expected_commitment": true } }, "deactivated": false, - "grace_period": 5, "pending_denunciations": false, - "total_delegated_stake": "0", "staking_denominator": "0", - "active_consensus_key": "[PUBLIC_KEY_HASH]" } diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL L1 integration (Use all available slots).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL L1 integration (Use all available slots).out deleted file mode 100644 index c8a0d22b2b9db458bd3f7e4f7365e1dd9e14a1cd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL L1 integration (Use all available slots).out +++ /dev/null @@ -1,163 +0,0 @@ -GET http://[HOST]:[PORT]/chains/main/blocks/head/metadata -200 OK -{"protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","next_protocol":"PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ","test_chain_status":{"status":"not_running"},"max_operations_ttl":3,"max_operation_data_length":32768,"max_block_header_length":289,"max_operation_list_length":[{"max_size":4194304,"max_op":2048},{"max_size":32768},{"max_size":135168,"max_op":132},{"max_size":524288}],"proposer":"[PUBLIC_KEY_HASH]","baker":"[PUBLIC_KEY_HASH]","level_info":{"level":3,"level_position":2,"cycle":0,"cycle_position":2,"expected_commitment":false},"voting_period_info":{"voting_period":{"index":0,"kind":"proposal","start_position":0},"position":2,"remaining":61},"nonce_hash":null,"deactivated":[],"balance_updates":[{"kind":"accumulator","category":"block fees","change":"-416000","origin":"block"},{"kind":"contract","contract":"[PUBLIC_KEY_HASH]","change":"416000","origin":"block"},{"kind":"minted","category":"baking rewards","change":"-16667","origin":"block"},{"kind":"freezer","category":"deposits","staker":{"baker_own_stake":"[PUBLIC_KEY_HASH]"},"change":"16667","origin":"block"},{"kind":"minted","category":"baking rewards","change":"-316666","origin":"block"},{"kind":"contract","contract":"[PUBLIC_KEY_HASH]","change":"316666","origin":"block"},{"kind":"minted","category":"baking bonuses","change":"-16666","origin":"block"},{"kind":"freezer","category":"deposits","staker":{"baker_own_stake":"[PUBLIC_KEY_HASH]"},"change":"16666","origin":"block"},{"kind":"minted","category":"baking bonuses","change":"-316646","origin":"block"},{"kind":"contract","contract":"[PUBLIC_KEY_HASH]","change":"316646","origin":"block"}],"liquidity_baking_toggle_ema":0,"adaptive_issuance_vote_ema":0,"adaptive_issuance_activation_cycle":5,"implicit_operations_results":[{"kind":"transaction","storage":[{"int":"1"},{"int":"166766"},{"int":"100"},{"bytes":"01e927f00ef734dfc85919635e9afc9166c83ef9fc00"},{"bytes":"0115eb0104481a6d7921160bc982c5e0a561cd8a3a00"}],"balance_updates":[{"kind":"minted","category":"subsidy","change":"-83333","origin":"subsidy"},{"kind":"contract","contract":"[CONTRACT_HASH]","change":"83333","origin":"subsidy"}],"consumed_milligas":"206420","storage_size":"4629"}],"proposer_consensus_key":"[PUBLIC_KEY_HASH]","baker_consensus_key":"[PUBLIC_KEY_HASH]","consumed_milligas":"544000000","dal_attestation":"0"} - -{ - "protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "next_protocol": "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ", - "test_chain_status": { - "status": "not_running" - }, - "max_operations_ttl": 3, - "max_operation_data_length": 32768, - "max_block_header_length": 289, - "max_operation_list_length": [ - { - "max_size": 4194304, - "max_op": 2048 - }, - { - "max_size": 32768 - }, - { - "max_size": 135168, - "max_op": 132 - }, - { - "max_size": 524288 - } - ], - "proposer": "[PUBLIC_KEY_HASH]", - "baker": "[PUBLIC_KEY_HASH]", - "level_info": { - "level": 3, - "level_position": 2, - "cycle": 0, - "cycle_position": 2, - "expected_commitment": false - }, - "voting_period_info": { - "voting_period": { - "index": 0, - "kind": "proposal", - "start_position": 0 - }, - "position": 2, - "remaining": 61 - }, - "nonce_hash": null, - "deactivated": [], - "balance_updates": [ - { - "kind": "accumulator", - "category": "block fees", - "change": "-416000", - "origin": "block" - }, - { - "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "416000", - "origin": "block" - }, - { - "kind": "minted", - "category": "baking rewards", - "change": "-16667", - "origin": "block" - }, - { - "kind": "freezer", - "category": "deposits", - "staker": { - "baker_own_stake": "[PUBLIC_KEY_HASH]" - }, - "change": "16667", - "origin": "block" - }, - { - "kind": "minted", - "category": "baking rewards", - "change": "-316666", - "origin": "block" - }, - { - "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "316666", - "origin": "block" - }, - { - "kind": "minted", - "category": "baking bonuses", - "change": "-16666", - "origin": "block" - }, - { - "kind": "freezer", - "category": "deposits", - "staker": { - "baker_own_stake": "[PUBLIC_KEY_HASH]" - }, - "change": "16666", - "origin": "block" - }, - { - "kind": "minted", - "category": "baking bonuses", - "change": "-316646", - "origin": "block" - }, - { - "kind": "contract", - "contract": "[PUBLIC_KEY_HASH]", - "change": "316646", - "origin": "block" - } - ], - "liquidity_baking_toggle_ema": 0, - "adaptive_issuance_vote_ema": 0, - "adaptive_issuance_activation_cycle": 5, - "implicit_operations_results": [ - { - "kind": "transaction", - "storage": [ - { - "int": "1" - }, - { - "int": "166766" - }, - { - "int": "100" - }, - { - "bytes": "01e927f00ef734dfc85919635e9afc9166c83ef9fc00" - }, - { - "bytes": "0115eb0104481a6d7921160bc982c5e0a561cd8a3a00" - } - ], - "balance_updates": [ - { - "kind": "minted", - "category": "subsidy", - "change": "-83333", - "origin": "subsidy" - }, - { - "kind": "contract", - "contract": "[CONTRACT_HASH]", - "change": "83333", - "origin": "subsidy" - } - ], - "consumed_milligas": "206420", - "storage_size": "4629" - } - ], - "proposer_consensus_key": "[PUBLIC_KEY_HASH]", - "baker_consensus_key": "[PUBLIC_KEY_HASH]", - "consumed_milligas": "544000000", - "dal_attestation": "0" -} diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL node (GS-RPC get_connections).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL node (GS-RPC get_connections).out deleted file mode 100644 index 634e3b7d72437ada0f4168718132d0408c1cab63..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL node (GS-RPC get_connections).out +++ /dev/null @@ -1,12 +0,0 @@ -GET http://[HOST]:[PORT]/p2p/gossipsub/connections -200 OK -[{"peer":"[PEER]","connection":{"topics":[{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"}],"direct":false,"outbound":true}},{"peer":"[PEER]","connection":{"topics":[{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"}],"direct":false,"outbound":false}}] - -GET http://[HOST]:[PORT]/p2p/gossipsub/connections -200 OK -[{"peer":"[PEER]","connection":{"topics":[{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"}],"direct":false,"outbound":false}},{"peer":"[PEER]","connection":{"topics":[{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":1,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":2,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":3,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":4,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":5,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":6,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":7,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":8,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":9,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":10,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":11,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":12,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":13,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":14,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":15,"pkh":"[PUBLIC_KEY_HASH]"}],"direct":false,"outbound":true}}] - -GET http://[HOST]:[PORT]/p2p/gossipsub/connections -200 OK -[{"peer":"[PEER]","connection":{"topics":[{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"}],"direct":false,"outbound":false}},{"peer":"[PEER]","connection":{"topics":[{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"},{"slot_index":0,"pkh":"[PUBLIC_KEY_HASH]"}],"direct":false,"outbound":false}}] - diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL node (dal node list RPCs).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL node (dal node list RPCs).out deleted file mode 100644 index 96c67fc1d93e34836f56b071cce304b0a371b66c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL node (dal node list RPCs).out +++ /dev/null @@ -1,110 +0,0 @@ - -./octez-client rpc list - -Available services: - - + levels//slots// - - GET /levels//slots//commitment - Return the accepted commitment associated to the given slot index and - published at the given level. - - GET /levels//slots//content - Retrieve the content of the slot associated with the given - commitment. - - GET /levels//slots//pages - Fetch slot as list of pages - - GET /levels//slots//pages//proof - Compute the proof associated with a page of a given slot. - - GET /levels//slots//shards//content - Fetch shard as bytes - - GET /levels//slots//status - Return the status for the given slot. - + p2p/ - - POST /p2p/connect - Connect to a new peer. - + gossipsub/ - - GET /p2p/gossipsub/backoffs - Get the backoffs of the peers with a backoff, per topic. - - GET /p2p/gossipsub/connections - Get this node's currently active connections. - - GET /p2p/gossipsub/message_cache - Get the number of message ids in the message cache, grouped by - heartbeat tick and topic. - - GET /p2p/gossipsub/scores - Get the scores of the peers with a known score. - - GET /p2p/gossipsub/topics - Get the topics this node is currently subscribed to. - - GET /p2p/gossipsub/topics/peers - Get an association list between each topic subscribed to by the - connected peers and the remote peers subscribed to that topic. If - the 'subscribed' flag is given, then restrict the output to the - topics this node is subscribed to. - + peers/ - - GET /p2p/peers/by-id/ - Get info of the requested peer - - PATCH /p2p/peers/by-id/ - Change the permissions of a given peer. With `{acl: ban}`: - blacklist the given peer and remove it from the whitelist if - present. With `{acl: open}`: removes the peer from the blacklist - and whitelist. With `{acl: trust}`: trust the given peer - permanently and remove it from the blacklist if present. The peer - cannot be blocked (but its host IP still can). In all cases, the - updated information for the peer is returned. If input is omitted, - this is equivalent to using the `GET` version of this RPC. - - DELETE /p2p/peers/disconnect/ - Disconnect from a peer. - - GET /p2p/peers/info - Get list of known peers and their corresponding info. - - GET /p2p/peers/list - By default, get the list of known peers. When the 'connected' flag - is given, then only get the connected peers. - + points/ - - GET /p2p/points/by-id/ - Get info of the requested point - - DELETE /p2p/points/disconnect/ - Disconnect from a point. - - GET /p2p/points/info - By default, get the list of known points and their corresponding - info. When the 'connected' flag is given, then only get the - connected points. - - /plugin - - GET /profiles - Return the list of current profiles tracked by the DAL node. - - PATCH /profiles - Update the list of profiles tracked by the DAL node. Note that it does - not take the bootstrap profile as it is incompatible with other - profiles. - - GET /profiles//attested_levels//assigned_shard_indices - Return the shard indexes assigned to the given public key hash at the - given level. - - GET /profiles//attested_levels//attestable_slots - Return the currently attestable slots at the given attested level by - the given public key hash. A slot is attestable at level [l] if it is - published at level [l - attestation_lag] and *all* the shards assigned - at level [l] to the given public key hash are available in the DAL - node's store. - - POST /slots - Post a slot to the DAL node, computes its commitment and commitment - proof, then computes the correspoding shards with their proof. The - result of this RPC can be directly used to publish a slot header. - - GET /version - version - - -Dynamic parameter description: - - int32 - - A Secp256k1 of a Ed25519 public key hash (Base58Check-encoded) - - A network point (ipv4:port or [ipv6]:port). - - A cryptographic node identity (Base58Check-encoded) - int - int - int - int32 - -Warning: - Failed to acquire the protocol version from the node - Did not find service: GET http://[HOST]:[PORT]/chains/main/blocks/head/protocols - diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (rollup_node_applies_dal_pages).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (rollup_node_applies_dal_pages).out deleted file mode 100644 index b1c30c2808ffb61a4a971609e9a7f20d630a75a8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (rollup_node_applies_dal_pages).out +++ /dev/null @@ -1,109 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from '[PUBLIC_KEY_HASH]' of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/genesis_info' -{ "level": 2, - "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } - -./octez-client --wait none send smart rollup message '["dal:16:8:32:0:2:4:6"]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 170.903 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000279 - Expected counter: 1 - Gas limit: 271 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000279 - payload fees(the block proposer) ....... +ꜩ0.000279 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 170.836 - -GET http://[HOST]:[PORT]/global/block/head/dal/slot_headers -200 OK -[{"version":"0","level":4,"index":0,"commitment":"[DAL_SLOT_HEADER]"},{"version":"0","level":4,"index":1,"commitment":"[DAL_SLOT_HEADER]"},{"version":"0","level":4,"index":2,"commitment":"[DAL_SLOT_HEADER]"}] - -GET http://[HOST]:[PORT]/global/block/head/dal/processed_slots -200 OK -[{"index":0,"status":"unconfirmed"},{"index":1,"status":"confirmed"},{"index":2,"status":"confirmed"},{"index":3,"status":"unconfirmed"},{"index":4,"status":"unconfirmed"},{"index":5,"status":"unconfirmed"},{"index":6,"status":"unconfirmed"},{"index":7,"status":"unconfirmed"},{"index":8,"status":"unconfirmed"},{"index":9,"status":"unconfirmed"},{"index":10,"status":"unconfirmed"},{"index":11,"status":"unconfirmed"},{"index":12,"status":"unconfirmed"},{"index":13,"status":"unconfirmed"},{"index":14,"status":"unconfirmed"},{"index":15,"status":"unconfirmed"}] - -GET http://[HOST]:[PORT]/global/block/12/dal/processed_slots -200 OK -[{"index":0,"status":"unconfirmed"},{"index":1,"status":"confirmed"},{"index":2,"status":"confirmed"},{"index":3,"status":"unconfirmed"},{"index":4,"status":"unconfirmed"},{"index":5,"status":"unconfirmed"},{"index":6,"status":"unconfirmed"},{"index":7,"status":"unconfirmed"},{"index":8,"status":"unconfirmed"},{"index":9,"status":"unconfirmed"},{"index":10,"status":"unconfirmed"},{"index":11,"status":"unconfirmed"},{"index":12,"status":"unconfirmed"},{"index":13,"status":"unconfirmed"},{"index":14,"status":"unconfirmed"},{"index":15,"status":"unconfirmed"}] - - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/genesis_info' -{ "level": 2, - "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } - -./octez-client --wait none send smart rollup message '[" 99 3 "," + + value"]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 172.978 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00028 - Expected counter: 3 - Gas limit: 273 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00028 - payload fees(the block proposer) ....... +ꜩ0.00028 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 172.912 - -GET http://[HOST]:[PORT]/global/block/head/state?key=vars/value -200 OK -"000001f6" - diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (rollup_node_downloads_slots).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (rollup_node_downloads_slots).out deleted file mode 100644 index b550bb53b458aa36c7520931ebc1e4dd72f79801..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (rollup_node_downloads_slots).out +++ /dev/null @@ -1,76 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from '[PUBLIC_KEY_HASH]' of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/genesis_info' -{ "level": 2, - "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } - -./octez-client --wait none send smart rollup message '["dal:16:8:32:0:2:4:6"]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 170.903 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000279 - Expected counter: 1 - Gas limit: 271 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000279 - payload fees(the block proposer) ....... +ꜩ0.000279 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 170.836 - -GET http://[HOST]:[PORT]/global/block/head/dal/slot_headers -200 OK -[{"version":"0","level":4,"index":0,"commitment":"[DAL_SLOT_HEADER]"},{"version":"0","level":4,"index":1,"commitment":"[DAL_SLOT_HEADER]"},{"version":"0","level":4,"index":2,"commitment":"[DAL_SLOT_HEADER]"}] - -GET http://[HOST]:[PORT]/global/block/head/dal/processed_slots -200 OK -[{"index":0,"status":"unconfirmed"},{"index":1,"status":"confirmed"},{"index":2,"status":"confirmed"},{"index":3,"status":"unconfirmed"},{"index":4,"status":"unconfirmed"},{"index":5,"status":"unconfirmed"},{"index":6,"status":"unconfirmed"},{"index":7,"status":"unconfirmed"},{"index":8,"status":"unconfirmed"},{"index":9,"status":"unconfirmed"},{"index":10,"status":"unconfirmed"},{"index":11,"status":"unconfirmed"},{"index":12,"status":"unconfirmed"},{"index":13,"status":"unconfirmed"},{"index":14,"status":"unconfirmed"},{"index":15,"status":"unconfirmed"}] - -GET http://[HOST]:[PORT]/global/block/12/dal/processed_slots -200 OK -[{"index":0,"status":"unconfirmed"},{"index":1,"status":"confirmed"},{"index":2,"status":"confirmed"},{"index":3,"status":"unconfirmed"},{"index":4,"status":"unconfirmed"},{"index":5,"status":"unconfirmed"},{"index":6,"status":"unconfirmed"},{"index":7,"status":"unconfirmed"},{"index":8,"status":"unconfirmed"},{"index":9,"status":"unconfirmed"},{"index":10,"status":"unconfirmed"},{"index":11,"status":"unconfirmed"},{"index":12,"status":"unconfirmed"},{"index":13,"status":"unconfirmed"},{"index":14,"status":"unconfirmed"},{"index":15,"status":"unconfirmed"}] - diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test echo_kernel).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test echo_kernel).out deleted file mode 100644 index 2f6f670223d3a0063297aee21135fb3286b828ac..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test echo_kernel).out +++ /dev/null @@ -1,39 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from '[PUBLIC_KEY_HASH]' of kind wasm_2_0_0 of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: wasm_2_0_0 - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/value?key=/output/slot-0 -200 OK -"68656c6c6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test reveal_dal_page in fast exec w.out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test reveal_dal_page in fast exec w.out deleted file mode 100644 index d4f6045bf607270f60e2aa4c6940c86d609a30f3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test reveal_dal_page in fast exec w.out +++ /dev/null @@ -1,39 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from '[PUBLIC_KEY_HASH]' of kind wasm_2_0_0 of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: wasm_2_0_0 - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/value?key=/output/slot-0 -200 OK -"6162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162636162" - diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test tx_kernel).out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test tx_kernel).out deleted file mode 100644 index 837c6aecb4d316adfbad80de6ade8d339b225452..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test tx_kernel).out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from '[PUBLIC_KEY_HASH]' of kind wasm_2_0_0 of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: wasm_2_0_0 - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" diff --git a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test_lag-10_time-8_preinject-1_slot.out b/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test_lag-10_time-8_preinject-1_slot.out deleted file mode 100644 index 6222cc4172c1b84d73fb49923379ba3c88410876..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/dal.ml/Parisb- Testing DAL rollup and node with L1 (test_lag-10_time-8_preinject-1_slot.out +++ /dev/null @@ -1,101 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from '[PUBLIC_KEY_HASH]' of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" - -./octez-client --wait none send smart rollup message '[" dal:16:10:32:5 "]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 170.788 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000276 - Expected counter: 1 - Gas limit: 271 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000276 - payload fees(the block proposer) ....... +ꜩ0.000276 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 170.722 - - -./octez-client --wait none send smart rollup message '["+ value"]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 170.444 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000267 - Expected counter: 4 - Gas limit: 271 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000267 - payload fees(the block proposer) ....... +ꜩ0.000267 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 170.378 - -GET http://[HOST]:[PORT]/global/block/head/state?key=vars/value -200 OK -"0000000d" - -GET http://[HOST]:[PORT]/global/block/head/state?key=vars/value -200 OK -"0000000d" - -GET http://[HOST]:[PORT]/global/block/head/state?key=vars/value -200 OK -"0000000d" - -GET http://[HOST]:[PORT]/global/block/head/state?key=vars/value -200 OK -"0000000d" - diff --git a/tezt/tests/expected/deposits_limit.ml/Parisb- set deposits limit.out b/tezt/tests/expected/deposits_limit.ml/Parisb- set deposits limit.out deleted file mode 100644 index 8ac64a759156d64f8e6245177a1ac64667dede16..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/deposits_limit.ml/Parisb- set deposits limit.out +++ /dev/null @@ -1,26 +0,0 @@ -Node is bootstrapped. -Estimated gas: 168.052 units (will add 0 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is 'oogPg9fm3Wo8Fub69ehKvyhmefv442MSvvKME7awo3zvZVAsuTo' -NOT waiting for the operation to be included. -Use command - octez-client wait for oogPg9fm3Wo8Fub69ehKvyhmefv442MSvvKME7awo3zvZVAsuTo to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisf79b5d1CoW2 -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.000247 - Expected counter: 1 - Gas limit: 169 - Storage limit: 0 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.000247 - payload fees(the block proposer) ....... +ꜩ0.000247 - Set deposits limit: - Delegate: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Limit: 1000 - This deposits limit modification was successfully applied - Consumed gas: 167.986 - - diff --git a/tezt/tests/expected/deposits_limit.ml/Parisb- unset deposits limit.out b/tezt/tests/expected/deposits_limit.ml/Parisb- unset deposits limit.out deleted file mode 100644 index fc4436f54195c0977d349be25721b7af5f50b9ec..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/deposits_limit.ml/Parisb- unset deposits limit.out +++ /dev/null @@ -1,26 +0,0 @@ -Node is bootstrapped. -Estimated gas: 167.886 units (will add 0 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is 'oo1PJ41t8u2VYdoeFVgREH9LKKtASE141H3wWRmKRbuBcshW3hR' -NOT waiting for the operation to be included. -Use command - octez-client wait for oo1PJ41t8u2VYdoeFVgREH9LKKtASE141H3wWRmKRbuBcshW3hR to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisf79b5d1CoW2 -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Fee to the baker: ꜩ0.000242 - Expected counter: 1 - Gas limit: 168 - Storage limit: 0 bytes - Balance updates: - tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx ... -ꜩ0.000242 - payload fees(the block proposer) ....... +ꜩ0.000242 - Set deposits limit: - Delegate: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx - Unlimited deposits - This deposits limit modification was successfully applied - Consumed gas: 167.820 - - diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.out deleted file mode 100644 index 293079041216309e0f7507e67cb1bf012cd51caa..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.out +++ /dev/null @@ -1,36 +0,0 @@ - -./octez-codec encode 019-PtParisB.block_header from '{ - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 2, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "seed_nonce_hash": "nceUFoeQDgkJCmzdMWh19ZjBYqQD3N9fe6bXQ1ZsUKKvMn7iun5Z3", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 -}' -00000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00242e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d5580166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.block_header from 00000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00242e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d5580166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "level": 1331, "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 2, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "seed_nonce_hash": "nceUFoeQDgkJCmzdMWh19ZjBYqQD3N9fe6bXQ1ZsUKKvMn7iun5Z3", - "liquidity_baking_toggle_vote": "off", "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.raw.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.raw.out deleted file mode 100644 index e2118dc4ebb7a5417c6042f106dd08d720ac5ca1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.raw.out +++ /dev/null @@ -1,26 +0,0 @@ - -./octez-codec encode 019-PtParisB.block_header.raw from '{ - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 2, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "protocol_data": "521d101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d55866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c" -}' -00000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00242e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c521d101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d55866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.block_header.raw from 00000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00242e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c521d101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d55866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "level": 1331, "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 2, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "protocol_data": - "521d101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d55866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.unsigned.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.unsigned.out deleted file mode 100644 index fe72fa55d831b9c0fde775d8970669e44df2290b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- block_header.unsigned.out +++ /dev/null @@ -1,33 +0,0 @@ - -./octez-codec encode 019-PtParisB.block_header.unsigned from '{ - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 2, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "seed_nonce_hash": "nceUFoeQDgkJCmzdMWh19ZjBYqQD3N9fe6bXQ1ZsUKKvMn7iun5Z3", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 -}' -00000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00242e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d55801 - -./octez-codec decode 019-PtParisB.block_header.unsigned from 00000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00242e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000ff043691f53c02ca1ac6f1a0c1586bf77973e04c2d9b618a8309e79651daf0d55801 -{ "level": 1331, "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 2, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "seed_nonce_hash": "nceUFoeQDgkJCmzdMWh19ZjBYqQD3N9fe6bXQ1ZsUKKvMn7iun5Z3", - "liquidity_baking_toggle_vote": "off", "adaptive_issuance_vote": "on" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- contract.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- contract.out deleted file mode 100644 index 743a4986674964242d0a0d528142d7e7bf2d9893..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- contract.out +++ /dev/null @@ -1,12 +0,0 @@ - -./octez-codec encode 019-PtParisB.contract from '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' -000002298c03ed7d454a101eb7022bc95f7e5f41ac78 - -./octez-codec decode 019-PtParisB.contract from 000002298c03ed7d454a101eb7022bc95f7e5f41ac78 -"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - -./octez-codec encode 019-PtParisB.contract from '"KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat"' -0138560805b4c8d7b7fbbafad5c59dbfa3878ca70500 - -./octez-codec decode 019-PtParisB.contract from 0138560805b4c8d7b7fbbafad5c59dbfa3878ca70500 -"KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- cycle.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- cycle.out deleted file mode 100644 index 5dad06b32c0f9586208e874a606af89c78568c2f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- cycle.out +++ /dev/null @@ -1,12 +0,0 @@ - -./octez-codec encode 019-PtParisB.cycle from 2147483647 -7fffffff - -./octez-codec decode 019-PtParisB.cycle from 7fffffff -2147483647 - -./octez-codec encode 019-PtParisB.cycle from 0 -00000000 - -./octez-codec decode 019-PtParisB.cycle from 00000000 -0 diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- fitness.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- fitness.out deleted file mode 100644 index 97141f2639dcf9fcb0232d4d1975a1152e300aa5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- fitness.out +++ /dev/null @@ -1,11 +0,0 @@ - -./octez-codec encode 019-PtParisB.fitness from '{ - "level": 1, - "locked_round": 1, - "predecessor_round": 1, - "round": 2 -}' -0000000101000000010000000100000002 - -./octez-codec decode 019-PtParisB.fitness from 0000000101000000010000000100000002 -{ "level": 1, "locked_round": 1, "predecessor_round": 1, "round": 2 } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- gas.cost.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- gas.cost.out deleted file mode 100644 index 27b06f3fbcb9ec07c4464f22aa085c02fcb2c1bd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- gas.cost.out +++ /dev/null @@ -1,12 +0,0 @@ - -./octez-codec encode 019-PtParisB.gas.cost from '"8920392083423078"' -a6fd9d9694c3d81f - -./octez-codec decode 019-PtParisB.gas.cost from a6fd9d9694c3d81f -"8920392083423078" - -./octez-codec encode 019-PtParisB.gas.cost from '"0"' -00 - -./octez-codec decode 019-PtParisB.gas.cost from 00 -"0" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- gas.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- gas.out deleted file mode 100644 index c315124ccb7a072cee0fc91d136b462782f34878..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- gas.out +++ /dev/null @@ -1,18 +0,0 @@ - -./octez-codec encode 019-PtParisB.gas from '"1238"' -009613 - -./octez-codec decode 019-PtParisB.gas from 009613 -"1238" - -./octez-codec encode 019-PtParisB.gas from '"unaccounted"' -01 - -./octez-codec decode 019-PtParisB.gas from 01 -"unaccounted" - -./octez-codec encode 019-PtParisB.gas from '"0"' -0000 - -./octez-codec decode 019-PtParisB.gas from 0000 -"0" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- level.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- level.out deleted file mode 100644 index 498bd89e84dad6739bc0f3a61f86fc50c1a6b583..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- level.out +++ /dev/null @@ -1,13 +0,0 @@ - -./octez-codec encode 019-PtParisB.level from '{ - "level": 1331, - "level_position": 2147483647, - "cycle": 300, - "cycle_position": 600, - "expected_commitment": true -}' -000005337fffffff0000012c00000258ff - -./octez-codec decode 019-PtParisB.level from 000005337fffffff0000012c00000258ff -{ "level": 1331, "level_position": 2147483647, "cycle": 300, - "cycle_position": 600, "expected_commitment": true } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- nonce.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- nonce.out deleted file mode 100644 index ad537aa4cdf303bbb601b527f476a78a4e3f1af0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- nonce.out +++ /dev/null @@ -1,6 +0,0 @@ - -./octez-codec encode 019-PtParisB.nonce from '"0000000000000000000000000000000000000000000000000000000000000000"' -0000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.nonce from 0000000000000000000000000000000000000000000000000000000000000000 -"0000000000000000000000000000000000000000000000000000000000000000" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.internal.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.internal.out deleted file mode 100644 index 2c4954dcc3391050797c52b5e578f97db7117a4a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.internal.out +++ /dev/null @@ -1,140 +0,0 @@ - -./octez-codec encode 019-PtParisB.operation.internal from '{ - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "nonce": 0, - "kind": "delegation" -}' -000002298c03ed7d454a101eb7022bc95f7e5f41ac7800000300 - -./octez-codec decode 019-PtParisB.operation.internal from 000002298c03ed7d454a101eb7022bc95f7e5f41ac7800000300 -{ "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "nonce": 0, - "kind": "delegation" } - -./octez-codec encode 019-PtParisB.operation.internal from '{ - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "nonce": 0, - "kind": "delegation", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" -}' -000002298c03ed7d454a101eb7022bc95f7e5f41ac78000003ff0002298c03ed7d454a101eb7022bc95f7e5f41ac78 - -./octez-codec decode 019-PtParisB.operation.internal from 000002298c03ed7d454a101eb7022bc95f7e5f41ac78000003ff0002298c03ed7d454a101eb7022bc95f7e5f41ac78 -{ "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "nonce": 0, - "kind": "delegation", "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } - -./octez-codec encode 019-PtParisB.operation.internal from '{ - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "nonce": 0, - "kind": "origination", - "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": { - "code": [ - { - "prim": "parameter", - "args": [ - { - "prim": "string" - } - ] - }, - { - "prim": "storage", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "string" - } - ] - } - ] - }, - { - "prim": "code", - "args": [ - [ - { - "prim": "CAR" - }, - { - "prim": "SOME" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - "storage": [ - { - "string": "test" - } - ] - } -}' -000002298c03ed7d454a101eb7022bc95f7e5f41ac78000002af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e0200000009010000000474657374 - -./octez-codec decode 019-PtParisB.operation.internal from 000002298c03ed7d454a101eb7022bc95f7e5f41ac78000002af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e0200000009010000000474657374 -{ "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "nonce": 0, - "kind": "origination", "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": [ { "string": "test" } ] } } - -./octez-codec encode 019-PtParisB.operation.internal from '{ - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "nonce": 3, - "kind": "transaction", - "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" -}' -000002298c03ed7d454a101eb7022bc95f7e5f41ac780003019703000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 - -./octez-codec decode 019-PtParisB.operation.internal from 000002298c03ed7d454a101eb7022bc95f7e5f41ac780003019703000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 -{ "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "nonce": 3, - "kind": "transaction", "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } - -./octez-codec encode 019-PtParisB.operation.internal from '{ - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "nonce": 0, - "kind": "transaction", - "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": { - "entrypoint": "action", - "value": [ - { - "prim": "UNIT" - } - ] - } -}' -000002298c03ed7d454a101eb7022bc95f7e5f41ac7800000197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f - -./octez-codec decode 019-PtParisB.operation.internal from 000002298c03ed7d454a101eb7022bc95f7e5f41ac7800000197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f -{ "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "nonce": 0, - "kind": "transaction", "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": { "entrypoint": "action", "value": [ { "prim": "UNIT" } ] } } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.out deleted file mode 100644 index 0ecb3d3b2bb60ff21d1dcfff4391ae888d8f8eb7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.out +++ /dev/null @@ -1,561 +0,0 @@ - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "attestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "attestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "ballot", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c0066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c0066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "ballot", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4010066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4010066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "attestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "attestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_baking_evidence", - "bh1": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - }, - "bh2": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_baking_evidence", - "bh1": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "bh2": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_preattestation_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preattestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preattestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_preattestation_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preattestation", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preattestation", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": { - "code": [ - { - "prim": "parameter", - "args": [ - { - "prim": "string" - } - ] - }, - { - "prim": "storage", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "string" - } - ] - } - ] - }, - { - "prim": "code", - "args": [ - [ - { - "prim": "CAR" - }, - { - "prim": "SOME" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - "storage": [ - { - "string": "test" - } - ] - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e020000000901000000047465737466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e020000000901000000047465737466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": [ { "string": "test" } ] } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "preattestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "preattestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposals": [ - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" - ] - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "period": 719, - "proposals": - [ "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" ] } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "reveal", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "reveal", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "seed_nonce_revelation", - "level": 1331, - "nonce": "0000000000000000000000000000000000000000000000000000000000000000" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a80100000533000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a80100000533000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "seed_nonce_revelation", "level": 1331, - "nonce": - "0000000000000000000000000000000000000000000000000000000000000000" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac780066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac780066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": { - "entrypoint": "action", - "value": [ - { - "prim": "UNIT" - } - ] - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": - { "entrypoint": "action", "value": [ { "prim": "UNIT" } ] } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.raw.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.raw.out deleted file mode 100644 index eab362bf16f85eaa3a2b4aab7db329ae5a00426c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.raw.out +++ /dev/null @@ -1,11 +0,0 @@ - -./octez-codec encode 019-PtParisB.operation.raw from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "data": "000000053366804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000053366804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation.raw from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000053366804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "data": - "000000053366804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.unsigned.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.unsigned.out deleted file mode 100644 index 887a0de30bd907e6481bdf25195744947a4626f6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation.unsigned.out +++ /dev/null @@ -1,548 +0,0 @@ - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac4 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac4 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "attestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a815000000000533000000000000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a815000000000533000000000000000000000000000000000000000000000000000000000000000000000000 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "attestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "ballot", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c00 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c00 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "ballot", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40100 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40100 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac78 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac78 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_attestation_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "attestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "attestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_attestation_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "attestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "attestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_baking_evidence", - "bh1": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - }, - "bh2": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_baking_evidence", - "bh1": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "bh2": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_preattestation_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preattestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preattestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_preattestation_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preattestation", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preattestation", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": { - "code": [ - { - "prim": "parameter", - "args": [ - { - "prim": "string" - } - ] - }, - { - "prim": "storage", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "string" - } - ] - } - ] - }, - { - "prim": "code", - "args": [ - [ - { - "prim": "CAR" - }, - { - "prim": "SOME" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - "storage": [ - { - "string": "test" - } - ] - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e0200000009010000000474657374 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e0200000009010000000474657374 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": [ { "string": "test" } ] } } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "preattestation", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a814000000000533000000000000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a814000000000533000000000000000000000000000000000000000000000000000000000000000000000000 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "preattestation", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposals": [ - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" - ] - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "period": 719, - "proposals": - [ "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" ] } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "reveal", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "reveal", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "seed_nonce_revelation", - "level": 1331, - "nonce": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a801000005330000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a801000005330000000000000000000000000000000000000000000000000000000000000000 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "seed_nonce_revelation", "level": 1331, - "nonce": - "0000000000000000000000000000000000000000000000000000000000000000" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ] } - -./octez-codec encode 019-PtParisB.operation.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": { - "entrypoint": "action", - "value": [ - { - "prim": "UNIT" - } - ] - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f - -./octez-codec decode 019-PtParisB.operation.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": - { "entrypoint": "action", "value": [ { "prim": "UNIT" } ] } } ] } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation_with_legacy.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation_with_legacy.out deleted file mode 100644 index c518c50ba57214a315644ce2d7f461f67feae470..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation_with_legacy.out +++ /dev/null @@ -1,593 +0,0 @@ - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "ballot", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c0066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c0066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "ballot", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4010066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4010066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7866804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_baking_evidence", - "bh1": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - }, - "bh2": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_baking_evidence", - "bh1": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "bh2": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_endorsement_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "endorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "endorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_endorsement_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_preendorsement_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preendorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preendorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_preendorsement_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preendorsement", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preendorsement", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "endorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": { - "code": [ - { - "prim": "parameter", - "args": [ - { - "prim": "string" - } - ] - }, - { - "prim": "storage", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "string" - } - ] - } - ] - }, - { - "prim": "code", - "args": [ - [ - { - "prim": "CAR" - }, - { - "prim": "SOME" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - "storage": [ - { - "string": "test" - } - ] - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e020000000901000000047465737466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e020000000901000000047465737466804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": [ { "string": "test" } ] } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "preendorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "preendorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposals": [ - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" - ] - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "period": 719, - "proposals": - [ "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" ] } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "reveal", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "reveal", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "seed_nonce_revelation", - "level": 1331, - "nonce": "0000000000000000000000000000000000000000000000000000000000000000" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a80100000533000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a80100000533000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "seed_nonce_revelation", "level": 1331, - "nonce": - "0000000000000000000000000000000000000000000000000000000000000000" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac780066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac780066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": { - "entrypoint": "action", - "value": [ - { - "prim": "UNIT" - } - ] - } - } - ], - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": - { "entrypoint": "action", "value": [ { "prim": "UNIT" } ] } } ], - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation_with_legacy.unsigned.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation_with_legacy.unsigned.out deleted file mode 100644 index 9dcd119ae540071df0f349db61f491f9c87e018d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- operation_with_legacy.unsigned.out +++ /dev/null @@ -1,548 +0,0 @@ - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac4 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a804c55cf02dbeecc978d9c84625dcae72bb77ea4fbd41f98b15efc63fa893d61d7d6eee4a2ce9427ac4 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "activate_account", - "pkh": "tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv", - "secret": "41f98b15efc63fa893d61d7d6eee4a2ce9427ac4" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "ballot", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c00 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8060002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c00 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "ballot", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposal": "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "ballot": "yay" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40100 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40100 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac78 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86e0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401ff0002298c03ed7d454a101eb7022bc95f7e5f41ac78 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "delegation", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_baking_evidence", - "bh1": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - }, - "bh2": { - "level": 1331, - "proto": 1, - "predecessor": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", - "validation_pass": 4, - "operations_hash": "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ - "01", - "000000000000000a" - ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ", - "payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0 - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a803000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c000000f100000533010e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8000000005e9dcbb00442e9bc4583d4f9fa6ba422733f45d3a44397141a953d2237bf8df62e5046eef700000011000000010100000008000000000000000a4c7319284b55068bb7c4e0b9f8585729db7fb27ab4ca9cff2038a1fc324f650c000000000000000000000000000000000000000000000000000000000000000000000000101895ca00000000000166804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_baking_evidence", - "bh1": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "bh2": - { "level": 1331, "proto": 1, - "predecessor": - "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "timestamp": "2020-04-20T16:20:00Z", "validation_pass": 4, - "operations_hash": - "LLoZqBDX1E2ADRXbmwYo8VtMNeHG6Ygzmm4Zqv97i91UPBQHy9Vq3", - "fitness": [ "01", "000000000000000a" ], - "context": "CoVDyf9y9gHfAkPWofBJffo4X4bWjmehH2LeVonDcCKKzyQYwqdk", - "payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "payload_round": 0, "proof_of_work_nonce": "101895ca00000000", - "liquidity_baking_toggle_vote": "off", - "adaptive_issuance_vote": "on", - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_endorsement_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "endorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "endorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_endorsement_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "double_preendorsement_evidence", - "op1": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preendorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - }, - "op2": { - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": { - "kind": "preendorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - }, - "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "double_preendorsement_evidence", - "op1": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preendorsement", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, - "op2": - { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "operations": - { "kind": "preendorsement", "slot": 0, "level": 1331, - "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, - "signature": - "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "endorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a815000000000533000000000000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a815000000000533000000000000000000000000000000000000000000000000000000000000000000000000 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": { - "code": [ - { - "prim": "parameter", - "args": [ - { - "prim": "string" - } - ] - }, - { - "prim": "storage", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "string" - } - ] - } - ] - }, - { - "prim": "code", - "args": [ - [ - { - "prim": "CAR" - }, - { - "prim": "SOME" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - "storage": [ - { - "string": "test" - } - ] - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e0200000009010000000474657374 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86d0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401af9105ff0002298c03ed7d454a101eb7022bc95f7e5f41ac7800000020020000001b050003680501056303680502020000000a03160346053d036d03420000000e0200000009010000000474657374 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "origination", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "balance": "84143", - "delegate": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "script": - { "code": - [ { "prim": "parameter", "args": [ { "prim": "string" } ] }, - { "prim": "storage", - "args": - [ { "prim": "option", "args": [ { "prim": "string" } ] } ] }, - { "prim": "code", - "args": - [ [ { "prim": "CAR" }, { "prim": "SOME" }, - { "prim": "NIL", - "args": [ { "prim": "operation" } ] }, - { "prim": "PAIR" } ] ] } ], - "storage": [ { "string": "test" } ] } } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "preendorsement", - "level": 1331, - "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", - "round": 0, - "slot": 0 - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a814000000000533000000000000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a814000000000533000000000000000000000000000000000000000000000000000000000000000000000000 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "preendorsement", "slot": 0, "level": 1331, "round": 0, - "block_payload_hash": - "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "period": 719, - "proposals": [ - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" - ] - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8050002298c03ed7d454a101eb7022bc95f7e5f41ac78000002cf000000407663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c7663cf120f3dc8189d5dc7d4d7a0483bcc53f3f18e700f5a2f5076aa8b9dc55c -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "proposals", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "period": 719, - "proposals": - [ "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp", - "PscqRYywd243M2eZspXZEJGsRmNchp4ZKfKmoyEZTRHeLQvVGjp" ] } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "reveal", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86b0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d401004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "reveal", "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", - "public_key": - "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "seed_nonce_revelation", - "level": 1331, - "nonce": "0000000000000000000000000000000000000000000000000000000000000000" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a801000005330000000000000000000000000000000000000000000000000000000000000000 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a801000005330000000000000000000000000000000000000000000000000000000000000000 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "seed_nonce_revelation", "level": 1331, - "nonce": - "0000000000000000000000000000000000000000000000000000000000000000" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d4019703000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" } ] } - -./octez-codec encode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from '{ - "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": [ - { - "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "fee": "33", - "counter": "732", - "gas_limit": "9451117", - "storage_limit": "57024931117", - "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": { - "entrypoint": "action", - "value": [ - { - "prim": "UNIT" - } - ] - } - } - ] -}' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f - -./octez-codec decode 019-PtParisB.operation_with_legacy_attestation_name.unsigned from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a86c0002298c03ed7d454a101eb7022bc95f7e5f41ac7821dc05edecc004adcacdb7d40197030138560805b4c8d7b7fbbafad5c59dbfa3878ca70500ffff06616374696f6e000000070200000002034f -{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", - "contents": - [ { "kind": "transaction", - "source": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "fee": "33", - "counter": "732", "gas_limit": "9451117", - "storage_limit": "57024931117", "amount": "407", - "destination": "KT1DieU51jzXLerQx5AqMCiLC1SsCeM8yRat", - "parameters": - { "entrypoint": "action", "value": [ { "prim": "UNIT" } ] } } ] } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- period.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- period.out deleted file mode 100644 index c09c4e11230bf6580d3a57ddeb22b6a2cc7ab7c7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- period.out +++ /dev/null @@ -1,12 +0,0 @@ - -./octez-codec encode 019-PtParisB.period from '"2789"' -0000000000000ae5 - -./octez-codec decode 019-PtParisB.period from 0000000000000ae5 -"2789" - -./octez-codec encode 019-PtParisB.period from '"0"' -0000000000000000 - -./octez-codec decode 019-PtParisB.period from 0000000000000000 -"0" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- raw_level.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- raw_level.out deleted file mode 100644 index 04d66b53ec25324e75da5d7b7abf03448c8e4630..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- raw_level.out +++ /dev/null @@ -1,12 +0,0 @@ - -./octez-codec encode 019-PtParisB.raw_level from 2147483647 -7fffffff - -./octez-codec decode 019-PtParisB.raw_level from 7fffffff -2147483647 - -./octez-codec encode 019-PtParisB.raw_level from 0 -00000000 - -./octez-codec decode 019-PtParisB.raw_level from 00000000 -0 diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- seed.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- seed.out deleted file mode 100644 index fbcb344af37adec4a8b0f26af04e1eb8538bbf67..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- seed.out +++ /dev/null @@ -1,6 +0,0 @@ - -./octez-codec encode 019-PtParisB.seed from '"0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8"' -0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8 - -./octez-codec decode 019-PtParisB.seed from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8 -"0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- tez.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- tez.out deleted file mode 100644 index 9fa12fa1cbf4cbea2fe6d430c8f2cb590854261c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- tez.out +++ /dev/null @@ -1,12 +0,0 @@ - -./octez-codec encode 019-PtParisB.tez from '"7322135"' -97f4be03 - -./octez-codec decode 019-PtParisB.tez from 97f4be03 -"7322135" - -./octez-codec encode 019-PtParisB.tez from '"0"' -00 - -./octez-codec decode 019-PtParisB.tez from 00 -"0" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- timestamp.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- timestamp.out deleted file mode 100644 index 8046d6087b9c12db9220702bec5b30f22943d6cf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- timestamp.out +++ /dev/null @@ -1,6 +0,0 @@ - -./octez-codec encode 019-PtParisB.timestamp from '"2020-04-20T16:19:59Z"' -000000005e9dcbaf - -./octez-codec decode 019-PtParisB.timestamp from 000000005e9dcbaf -"2020-04-20T16:19:59Z" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.ballot.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.ballot.out deleted file mode 100644 index 660f3fabada2eecac9b4c24641adf22a7dde1ae9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.ballot.out +++ /dev/null @@ -1,18 +0,0 @@ - -./octez-codec encode 019-PtParisB.vote.ballot from '"nay"' -01 - -./octez-codec decode 019-PtParisB.vote.ballot from 01 -"nay" - -./octez-codec encode 019-PtParisB.vote.ballot from '"pass"' -02 - -./octez-codec decode 019-PtParisB.vote.ballot from 02 -"pass" - -./octez-codec encode 019-PtParisB.vote.ballot from '"yay"' -00 - -./octez-codec decode 019-PtParisB.vote.ballot from 00 -"yay" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.ballots.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.ballots.out deleted file mode 100644 index b1117e4d96bda146925b87ec0bdb072fb3f18ae1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.ballots.out +++ /dev/null @@ -1,10 +0,0 @@ - -./octez-codec encode 019-PtParisB.vote.ballots from '{ - "yay": "2147483647", - "nay": "0", - "pass": "455" -}' -000000007fffffff000000000000000000000000000001c7 - -./octez-codec decode 019-PtParisB.vote.ballots from 000000007fffffff000000000000000000000000000001c7 -{ "yay": "2147483647", "nay": "0", "pass": "455" } diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.listings.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.listings.out deleted file mode 100644 index 7b1d0ca9987eae8afb6f0726e1fa4e3eea131e40..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- vote.listings.out +++ /dev/null @@ -1,16 +0,0 @@ - -./octez-codec encode 019-PtParisB.vote.listings from '[ - { - "pkh": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", - "voting_power": "20115" - }, - { - "pkh": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "voting_power": "9000" - } -]' -0000003a0002298c03ed7d454a101eb7022bc95f7e5f41ac780000000000004e9300e7670f32038107a59a2b9cfefae36ea21f5aa63c0000000000002328 - -./octez-codec decode 019-PtParisB.vote.listings from 0000003a0002298c03ed7d454a101eb7022bc95f7e5f41ac780000000000004e9300e7670f32038107a59a2b9cfefae36ea21f5aa63c0000000000002328 -[ { "pkh": "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx", "voting_power": "20115" }, - { "pkh": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", "voting_power": "9000" } ] diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- voting_period.kind.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- voting_period.kind.out deleted file mode 100644 index ab7135de90785695448c2cc67fbd4521c5301a0a..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- voting_period.kind.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-codec encode 019-PtParisB.voting_period.kind from '"promotion"' -03 - -./octez-codec decode 019-PtParisB.voting_period.kind from 03 -"promotion" - -./octez-codec encode 019-PtParisB.voting_period.kind from '"proposal"' -00 - -./octez-codec decode 019-PtParisB.voting_period.kind from 00 -"proposal" - -./octez-codec encode 019-PtParisB.voting_period.kind from '"exploration"' -01 - -./octez-codec decode 019-PtParisB.voting_period.kind from 01 -"exploration" - -./octez-codec encode 019-PtParisB.voting_period.kind from '"cooldown"' -02 - -./octez-codec decode 019-PtParisB.voting_period.kind from 02 -"cooldown" diff --git a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- voting_period.out b/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- voting_period.out deleted file mode 100644 index 269af65cf63415fec0810eff169bfd7ae41fdce2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/encoding.ml/Parisb- protocol encoding regression test- voting_period.out +++ /dev/null @@ -1,20 +0,0 @@ - -./octez-codec encode 019-PtParisB.voting_period from '{ - "start_position": 1159026, - "kind": "proposal", - "index": 0 -}' -00000000000011af72 - -./octez-codec decode 019-PtParisB.voting_period from 00000000000011af72 -{ "index": 0, "kind": "proposal", "start_position": 1159026 } - -./octez-codec encode 019-PtParisB.voting_period from '{ - "start_position": 0, - "kind": "proposal", - "index": 0 -}' -000000000000000000 - -./octez-codec decode 019-PtParisB.voting_period from 000000000000000000 -{ "index": 0, "kind": "proposal", "start_position": 0 } diff --git a/tezt/tests/expected/hash_data.ml/Parisb- hash data ... of type ... (bad).out b/tezt/tests/expected/hash_data.ml/Parisb- hash data ... of type ... (bad).out deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/tezt/tests/expected/hash_data.ml/Parisb- hash data ... of type ... (good).out b/tezt/tests/expected/hash_data.ml/Parisb- hash data ... of type ... (good).out deleted file mode 100644 index 314a2e670a6fd7eb6571f9da0ba300eefc1885cc..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/hash_data.ml/Parisb- hash data ... of type ... (good).out +++ /dev/null @@ -1,594 +0,0 @@ - -./octez-client --mode mockup hash data -92233720368547758089223372036854775807 of type int -Raw packed data: 0x0500ffffffffffffffffff8180c09e91c191c79502 -Script-expression-ID-Hash: expruG5Q9N4beaRnBNDX9c1rQ1QUGRyPgQyTpwJedPhTpxXfTkguXn -Raw Script-expression-ID-Hash: 0x6216452f655bf0e4ba4f86c58a7bface77c01dc88e9db83102212e1fe3d50ca7 -Ledger Blake2b hash: 7bteidcLhhSczK6rV7WZQMFW1S7jEApuMPPEUvZDk2B8 -Raw Sha256 hash: 0x19392ac75f657ecb477bf79085a4490f1be98a31c03434b40d38e089cf345e33 -Raw Sha512 hash: 0x94afe9bdf473c06f33fb1c59854e1c15b13d76eeef4b2c4d27605f9be3f3113d13fc0b979870fff2604bf816510522abdee8622535917fc112813fabb5d38a9a -Gas remaining: 1039999.224 units remaining - -./octez-client --mode mockup hash data -9223372036854775808 of type int -Raw packed data: 0x0500c0808080808080808002 -Script-expression-ID-Hash: exprv3Fy2Seq49zs6JYAGd9zGkFFqiACPjyyHf3sCZFFRnxVvYKUPz -Raw Script-expression-ID-Hash: 0xc8adbddf5949c1d4d104c1b7d658baa7a4c5813c1ae7cbee9d099bbb73ccb5a3 -Ledger Blake2b hash: EWNCTfpNyM4iYvGgWPNoCxkFbGYnNzM61zTAUkc2gh4E -Raw Sha256 hash: 0x6ff401ab35f93209f6c1c8c4d7c36adfd58dba53bca644ecd9107edb30e184cd -Raw Sha512 hash: 0x9ae07221db7b28fdd73a89744a7d7b94fbe44a150cf752a864aa554adf9ac849a73cfdf0bc682c2b830b4dcaec5ac4de71a19eb1fbc58ded3d7a793f96cc4afa -Gas remaining: 1039999.424 units remaining - -./octez-client --mode mockup hash data -4611686018427387904 of type int -Raw packed data: 0x0500c0808080808080808001 -Script-expression-ID-Hash: exprtdBSRcCcmApcTq7pu378scXyxCVPbLxfiQ5uCsqNATnXQGaDbQ -Raw Script-expression-ID-Hash: 0x0e4f763b32f9f61a670de9049e17b51051a7eb39110a2fc978d4075fcad01cb1 -Ledger Blake2b hash: xrz5vpBWhFXPadfA7xjRBmhCRahN5UzoQE73iBMnkbi -Raw Sha256 hash: 0x99f3e8cb5de4405979d25b07b08d7e0c040c185f9e1ba22f4165f23f959b5765 -Raw Sha512 hash: 0x21f8c0bdb48495f65e9933b9a66ab86e5f980acd2e1c247c17c1f707474682e8f88fbd0ff6ad7eece958bb80c1963a2cc30ebd81708de4bb79f86878468c651e -Gas remaining: 1039999.424 units remaining - -./octez-client --mode mockup hash data -1 of type int -Raw packed data: 0x050041 -Script-expression-ID-Hash: expru57wdzZCHCeGnKwUzxCJjG1HjveGXp1CCusScXEMq9kbidSvDG -Raw Script-expression-ID-Hash: 0x4935af0cbcc38e08fae2742399a95eaa2a8aa3c4504971b72afbf1e336fd9d8b -Ledger Blake2b hash: 5vnEvsKtB8ojf9DuVntudWnfy6yRLfY4Duwx2j6a36dp -Raw Sha256 hash: 0x5db11f873d99e0d9c25e52c9137676326f8a03f18c6c802fecbcd4a5543c28f7 -Raw Sha512 hash: 0x45256a6d4fe9afc4eda42131ad62e28b5903c43243afdbc69709e8bb9a7cf49a0c117c26d58849f41757beae1052d00d78deb10bd62728a7c04afb32afb637e2 -Gas remaining: 1039999.599 units remaining - -./octez-client --mode mockup hash data 1 of type int -Raw packed data: 0x050001 -Script-expression-ID-Hash: expru2dKqDfZG8hu4wNGkiyunvq2hdSKuVYtcKta7BWP6Q18oNxKjS -Raw Script-expression-ID-Hash: 0x438c52065d4605460b12d1b9446876a1c922b416103a20d44e994a9fd2b8ed07 -Ledger Blake2b hash: 5YgR7rjfSbSbzGEYhhBG9ENRHhdVSUu2TJ6RyNLawjiv -Raw Sha256 hash: 0x57072915640d052f4e2843e1498b10c4f71b62df565525d33c4a66a724e3e20a -Raw Sha512 hash: 0x112e6b61a60ecf001d501f39284ff8a575d818f2f79295b90b24f045d165a490c19cac2add9149dbdd23a8f2cf956dbee0efe17449111e6326e97ab21532f445 -Gas remaining: 1039999.599 units remaining - -./octez-client --mode mockup hash data 2 of type int -Raw packed data: 0x050002 -Script-expression-ID-Hash: expruDuAZnFKqmLoisJqUGqrNzXTvw7PJM2rYk97JErM5FHCerQqgn -Raw Script-expression-ID-Hash: 0x5d2525095b5382da2c9c295a739a189382cfaa2ebfa54e320d15bc6f178d6820 -Ledger Blake2b hash: 7GbmUchPX2Y61XEnLc2xfFHA8bAqQ8Qj8o1xEkU4g3VR -Raw Sha256 hash: 0x0a8efab5eba4157330b3113690508ee944e684a3c6949c00d64fcab2d565e5a6 -Raw Sha512 hash: 0x4747a1aba769d89519dddbee3a1fb9d79555831b9044508efee0bd4f1837bd78dfeb585bf1e150d3c7f8dc79e815c4c3f7e4c7ef477e77bdc84dc4f5fb0598c5 -Gas remaining: 1039999.599 units remaining - -./octez-client --mode mockup hash data 4611686018427387903 of type int -Raw packed data: 0x0500bfffffffffffffff7f -Script-expression-ID-Hash: exprtucdegDH8uqtjprBzMMVaAFJxsctauXP7Qzmfu3KxcyTwnRnfk -Raw Script-expression-ID-Hash: 0x33a06c095748ee4505cba0c1b7ef8d7666ff5cff1ebf865d7b75b4fb8606a130 -Ledger Blake2b hash: 4UXfu1ECmNSrir6LkbB1wkcptuVFk1Supjch6Si4PfkT -Raw Sha256 hash: 0x563ee067653bda5b3609ef10c5fba6f76392642b950dca8ab70e85343caa6c41 -Raw Sha512 hash: 0x40691c0bb573951c3c48c13db7acf03cbb3c5164197555c98ff5a4858acbb2957e2daf0178bedcfd7e5cbd2cf045d693d822cb218b417e10ed517da1f34fe8c5 -Gas remaining: 1039999.424 units remaining - -./octez-client --mode mockup hash data 9223372036854775807 of type int -Raw packed data: 0x0500bfffffffffffffffff01 -Script-expression-ID-Hash: exprupFUK8vtnxuBeiwi8ajvzyqT3eytHd5RueTNQztXn6Q1rFGPKM -Raw Script-expression-ID-Hash: 0xab242636b94a88d317af40fe4928ede501f51249840fa44b2e57c2ff6d7d326b -Ledger Blake2b hash: CX4gqnkyYpudVKQVtwkvq2JbfjzPPZsgQG547UGxcKg6 -Raw Sha256 hash: 0x15d152f6eeb5baf6bf2630719997223fe2c1bedf2730656a755b36f841cc8606 -Raw Sha512 hash: 0x63af709255528779eeb42613bc0385b3564aa4882a7b8a3f9387850a907e7cee3f2a8a22b881f1222400dae352b1363b7ffb4ff7528995f8b8384932be5af625 -Gas remaining: 1039999.424 units remaining - -./octez-client --mode mockup hash data 92233720368547758079223372036854775807 of type int -Raw packed data: 0x0500bfffbfe1eebeeeb8eaffffbf9e91c191c79502 -Script-expression-ID-Hash: expruEdpvhN7bLdgrLpgAGvrzHSu9gs2K7V474qz6BjpAP9uXegr3q -Raw Script-expression-ID-Hash: 0x5ed0b316a2ab47e3698fa3b046ebefc2e775ad37426a0886c4f14d3f7650c462 -Ledger Blake2b hash: 7P7u7hLd2MNuGyXfWD6bzYdXhBxfGn8LPmcMRgzEYath -Raw Sha256 hash: 0xeb749cd1d6d7184d6d0d6f0aae0cf379082bc340f468e2b89a9beb3190f59a91 -Raw Sha512 hash: 0xb8bec79fbca40add468205be6c6ec631f3977fadcf843ef65ca288dd6b8f18ddaa822608163d825ca00e4d348bb3c79abacc0b1555d45ac9c235fd38234dbe31 -Gas remaining: 1039999.224 units remaining - -./octez-client --mode mockup hash data False of type bool -Raw packed data: 0x050303 -Script-expression-ID-Hash: exprvDnoPjyKeR9FSnvwYg5a1v6mDyB6TmnATwWySSP6VmJxrzQb9E -Raw Script-expression-ID-Hash: 0xe0978ddc9329cbd84d25fd15a161a7d2e7e555da91e2a335ece8c8bc11ade245 -Ledger Blake2b hash: G7iMrYNckCFRujDLFgtj3cDMCnfeSQ2cmhnDtkh9REc4 -Raw Sha256 hash: 0x35ef99f7718e7d1f065bae635780f41c0cd201e9ffb3390ba6ef428c2815fa66 -Raw Sha512 hash: 0x2c9ca967bf47f6cc76861693379b7397f65e6a1b6e633df28cf02be0b0d18319ae783b4c199fd61115e000a15a5ba8a292a3b1468c2cfe2b3e3a9fa08d419698 -Gas remaining: 1039999.624 units remaining - -./octez-client --mode mockup hash data True of type bool -Raw packed data: 0x05030a -Script-expression-ID-Hash: exprvMjTcyX8e8HskSUV3ipMhPzMLKTn92vsWZkiJTTYj7U9J8sAyP -Raw Script-expression-ID-Hash: 0xf2a04e59c51d374e01df59a69495e400c6548415d628cf212a108f46697e4f53 -Ledger Blake2b hash: HL7SRbwe6n7r92rqsPQqN1hu1kd8uJhECY6Z5PJTwSRp -Raw Sha256 hash: 0xfb2a0db46fe82f0aeb2824b2f0840cc1437bf7bdf836d5164351e0cfe5b0f330 -Raw Sha512 hash: 0xcd0d052ce182cb449207cbb0781be4c9eb3f48c631fe210a03996f6a287e528d8a94817758102a647820007d18cb8e94f0f8bb829ca571287d390b47ab6ae389 -Gas remaining: 1039999.624 units remaining - -./octez-client --mode mockup hash data '{}' of type 'list(bool)' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039999.564 units remaining - -./octez-client --mode mockup hash data '{}' of type 'list(int)' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039999.564 units remaining - -./octez-client --mode mockup hash data '{}' of type 'list(unit)' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039999.564 units remaining - -./octez-client --mode mockup hash data '{True; False}' of type 'list(bool)' -Raw packed data: 0x050200000004030a0303 -Script-expression-ID-Hash: exprvAgoBrfufCNYoqAjdTcW2zD965bvLPD76xT7bVBNSn9SU6UgVd -Raw Script-expression-ID-Hash: 0xd98b8c66ef2fb29d4d2ad21a667a753e0dd7044571e709330d4b92a5dc3d622c -Ledger Blake2b hash: FeCtVSz9QEDR78yiR1aQwQaFMaoGES8VjX2HQCjZAfz3 -Raw Sha256 hash: 0xc939a10e1f26f0fddb7d00e26595b383bcd8d5fad6cc5427e8b0385a323d2a78 -Raw Sha512 hash: 0x98e4f14ef8e5ad0fa7520f07459fec0d5eb2f5759f0beebd5fa63beb950f6afa0d51c2573402d09684308677bae667ae8323fc2a32b5358be3155f56b73e263f -Gas remaining: 1039998.932 units remaining - -./octez-client --mode mockup hash data '{True; True}' of type 'list(bool)' -Raw packed data: 0x050200000004030a030a -Script-expression-ID-Hash: expruRvaTS59Lau3wHMFuiADbSkSTPf61W3UCW25ej1kY8TnioYiG4 -Raw Script-expression-ID-Hash: 0x7872a58d23f32f0e045de43738dc925bcab9c84c4ea5e7d25774832cdf66f2a8 -Ledger Blake2b hash: 97BKSDXQr12DzEiMg2HiFoA2Aq9QnzDpmVatc2nrr5xB -Raw Sha256 hash: 0x709190aaed8bda9abbca553974949a4a81dcdb927ebbc89aa7aef53bee218ff4 -Raw Sha512 hash: 0x7e67d91c4bb7a7c56e66ca752878e07ec45d61c6ff413b210384be67e946ca63cb1f852137d29494a7e232e2439092270e3b7abd834bcf2b18d192729794dbf7 -Gas remaining: 1039998.932 units remaining - -./octez-client --mode mockup hash data '{-1; 0}' of type 'list(int)' -Raw packed data: 0x05020000000400410000 -Script-expression-ID-Hash: expruNySy7xWaeniq7qraAeEtFzBvJvFA4Jt3op3Dt2m6PddU2Hqr7 -Raw Script-expression-ID-Hash: 0x71bf94bc4515cc0afc439e3714423dfa3ef180fa8ff2c671f245dba990eb41ce -Ledger Blake2b hash: 8f2WHzqFH7YhWa1rrFtHehTMxTUFJg49iwSNokpdZLSR -Raw Sha256 hash: 0x28e46755a35977ff466f50cb4224bf71541ca519ca1a3f900e1d2cd7da4537b3 -Raw Sha512 hash: 0x0f79f40cb2c56e753120d405b1bb5bb843ac34fc2b362b4f8f684913318ecbf3d99e4be5fc6f8ed16ee11fef6f4c412ecfc8c6efbab1684585b0ceb8a6bad3b1 -Gas remaining: 1039998.907 units remaining - -./octez-client --mode mockup hash data '"[CONTRACT_HASH]"' of type address -Raw packed data: 0x050a0000001601d1a37c088a1221b636bb5fccb35e05181038ba7c00 -Script-expression-ID-Hash: expruKMyQaSREJvvRY1engxJjG9eExbrS22JaZUiBmMnhVew5nyu98 -Raw Script-expression-ID-Hash: 0x698c356a1846c517db5b16f7a8ff507c3eb4aaa46c316a6936e955123358b306 -Ledger Blake2b hash: 871oxBK1GsehvbFAwL4bBF4w22oBKfxom746gk7wnr8d -Raw Sha256 hash: 0xa5f6f6520cfa43309e72f6745efcbebc1edd1486ab219421e349c8000ddfe485 -Raw Sha512 hash: 0x4618bdd8850b8707c52bbf7f64526f8d83e59ccb3f2f1067ca33b5c470c709be21dc9242db15d5428af7b13dfb77353ab39d9367e2a6a12986e95aaf2d4285a7 -Gas remaining: 1039995.724 units remaining - -./octez-client --mode mockup hash data '"[CONTRACT_HASH]%entrypoint"' of type address -Raw packed data: 0x050a00000020011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600656e747279706f696e74 -Script-expression-ID-Hash: exprttX9EL2UJb6Jw6tALybjjfRB3YUC4XsXdYjoGs7SnwZwwiEDHB -Raw Script-expression-ID-Hash: 0x31241f23ec93014cd7b7cfe1e0a21517bfd0f08b38e348d78f45d37a40da530c -Ledger Blake2b hash: 4JpvZAMQiWdgASBEyfLJB45oCrsFocB5ApSNa99DbRPZ -Raw Sha256 hash: 0xf1c661a1663f788977e3508c6fe3c85346a34101d76b1d47783839ed2d756303 -Raw Sha512 hash: 0x781bd064edc01ff80b436682932dd2f0550a6dbf26be32ac434c6386235f4b4c5bb4610b9fad23374d606dcf853a7e16fcce4e3c20fd796e116adb587cdddcbd -Gas remaining: 1039995.624 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY_HASH]"' of type address -Raw packed data: 0x050a00000016000002298c03ed7d454a101eb7022bc95f7e5f41ac78 -Script-expression-ID-Hash: expruH3qgknRBJVLVkwdzf6wfBxd7Y1uqNxr7zuMFxTC12e5PacLfv -Raw Script-expression-ID-Hash: 0x644beb3894b35023de5b76a4c054a32eb7a818b2a83a1b0eb3974184faad1cbe -Ledger Blake2b hash: 7kWuwaa65KxeAcBTC9U9TvSn4d7eo4hzmTReXrFU6QA1 -Raw Sha256 hash: 0x690cf3688186dafd5f78765b514f62ebf98804ed4732d3e9504d1e5d10f62c64 -Raw Sha512 hash: 0x9fe6e4a006013a541dde89aeef0db58a39c1b6d06f12554c8d01dc67dff183602d4e5d4a04ac37088d8e7e7836d08f044b279bc70a752b3ad3f1ed0131a9ea03 -Gas remaining: 1039995.724 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY_HASH]"' of type address -Raw packed data: 0x050a000000160001e5c6d1f726796e98b2bad2a819a36f742b2fe25b -Script-expression-ID-Hash: exprte1BpSKiw9DnLocxVhaUQYqPGZiCbHrENpe2VsvfjvNZ3LTiGf -Raw Script-expression-ID-Hash: 0x102dff270630ac032e24ae0a62b478930f56f4f5a27c9c3c799a8496d749b8a6 -Ledger Blake2b hash: 26ACmTEYpcjnxbUcXQZxYQgWbig1zpHXpmjKecLqMJEH -Raw Sha256 hash: 0xc7016dde1b3b0a15dbfc476de05480386d8781f996769b0113bcf8d3a0f73502 -Raw Sha512 hash: 0x8446a69748c9e209bbd9e2d7ec652b3edd1516905b2ef11008993c27d239a237b3372c26854b8a1d393aa504478de76560a9fdd96fef24faff8483851814c6c7 -Gas remaining: 1039995.724 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY_HASH]"' of type address -Raw packed data: 0x050a0000001600026c9b3ad59e0f8bdc2bd2011675825f9f547131da -Script-expression-ID-Hash: expruXqtng8pcQAshhkrVpENv9xXSirB19McDD4geN3aFFSbjJQMRy -Raw Script-expression-ID-Hash: 0x85e36142a913e3c8d6fb5a77aaad753b01ebe40096bf46090737b8e80effbee3 -Ledger Blake2b hash: A1eKYfrX11WNdtxr3QeEzEpY95epaJtJhmeTQEhw3BTg -Raw Sha256 hash: 0x1520063584bffabc0cc4d64d1d9f35c205ee403789653fef4465fad7da23a484 -Raw Sha512 hash: 0xe8fa1be3ab9fc177a731fdea29e3242831ccea70db15fa5f0dd8f592794261c9e49b51311e0b5387a81472c77edd87cba3afa6207e36ef0bce7f30b0c03bacb0 -Gas remaining: 1039995.724 units remaining - -./octez-client --mode mockup hash data 0 of type bls12_381_fr -Raw packed data: 0x050a000000200000000000000000000000000000000000000000000000000000000000000000 -Script-expression-ID-Hash: exprvGRJUuBnkCc3vi2nFiCKonniDQhcJxTGRuJY68uJubvS1bxnmA -Raw Script-expression-ID-Hash: 0xe68feee8b6ba14292b006b585748c4bd4757955f04320efd37fc0c719bdd7258 -Ledger Blake2b hash: GX24pFg5TqeFyCjH3dpXHP3tWZs8ZMm4MVo61DQnXRzo -Raw Sha256 hash: 0xc928f798bdcab5fc59c9c06f348c2b1dd1d846ef8d2694ff3359a7fa98e5aaf1 -Raw Sha512 hash: 0x56d50c63bacfbac2102091e99071b824150d2c61cbfba9b65a9bad467f1e364a3e1286b0c5de1e7084c7dd3d27a29c19ecbac42d4f5d7797c003b75063f688b4 -Gas remaining: 1039999.104 units remaining - -./octez-client --mode mockup hash data 1 of type bls12_381_fr -Raw packed data: 0x050a000000200100000000000000000000000000000000000000000000000000000000000000 -Script-expression-ID-Hash: exprtgCbDCSxBsG1xnR5B2MmdvwomjRwGZdM2MxfW5NdcB3uXiUUgD -Raw Script-expression-ID-Hash: 0x152ad70bf1a27b6885d3085953411591cbeccd289c0c9fae3257cec340745254 -Ledger Blake2b hash: 2RdT5REqvvzsKNsc2wkGeVcve9j8srXqAqbz6ZPECHi3 -Raw Sha256 hash: 0x251c21e3c764b0993d4e49a7939ebc0192c9af7f6fbb5073f1035ea17a2cbe22 -Raw Sha512 hash: 0x31a063e0701b89ff1a19364d44c39c7ba28fbeb20b95e5a12be432fcc419666fcf030ed6349e3bca6f7446989b5cb9fb3b4425c4eff01ca1993efca695db199b -Gas remaining: 1039999.104 units remaining - -./octez-client --mode mockup hash data 0x01 of type bls12_381_fr -Raw packed data: 0x050a000000200100000000000000000000000000000000000000000000000000000000000000 -Script-expression-ID-Hash: exprtgCbDCSxBsG1xnR5B2MmdvwomjRwGZdM2MxfW5NdcB3uXiUUgD -Raw Script-expression-ID-Hash: 0x152ad70bf1a27b6885d3085953411591cbeccd289c0c9fae3257cec340745254 -Ledger Blake2b hash: 2RdT5REqvvzsKNsc2wkGeVcve9j8srXqAqbz6ZPECHi3 -Raw Sha256 hash: 0x251c21e3c764b0993d4e49a7939ebc0192c9af7f6fbb5073f1035ea17a2cbe22 -Raw Sha512 hash: 0x31a063e0701b89ff1a19364d44c39c7ba28fbeb20b95e5a12be432fcc419666fcf030ed6349e3bca6f7446989b5cb9fb3b4425c4eff01ca1993efca695db199b -Gas remaining: 1039999.104 units remaining - -./octez-client --mode mockup hash data 0x0001 of type bls12_381_fr -Raw packed data: 0x050a000000200001000000000000000000000000000000000000000000000000000000000000 -Script-expression-ID-Hash: exprtitZpQKmhwwbedezDJBMs2aC9a9xwK1QgAEyZXsArw4d2FQ5Kt -Raw Script-expression-ID-Hash: 0x1b460a4d53d8b7029da22adfcaa257555be45259e3480690cafa1e997212afcf -Ledger Blake2b hash: 2qTxCogJudjrxMBHHvtNsurx1dc1P9Gx1JPUbBaJXDre -Raw Sha256 hash: 0xe7038c6478963c7e52c61c9590b774280cfacf0547adc4943a26a608bdb0f277 -Raw Sha512 hash: 0x70e7340161a29e3dc08258b154fc797e2ea407ed35dcaf7782e0ad693906c75d15fd68887f2b03375f5c869c9912c390d020b47aee1ca6d20c5ac714c45b678e -Gas remaining: 1039999.104 units remaining - -./octez-client --mode mockup hash data 0x0572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28 of type bls12_381_g1 -Raw packed data: 0x050a000000600572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28 -Script-expression-ID-Hash: exprupSAayZNCY4pMsSxx2Cbqr8LUcZ5YUnRG38hXjqRhkCAkVvt9q -Raw Script-expression-ID-Hash: 0xab8f542bd84f792908f266964e5329c1532fd6e932de8c34256c3dd5d972fd91 -Ledger Blake2b hash: CYhUfj7xreN4aQ1vV8YWApwu8o1Yuhuv9JrHKdFivGuN -Raw Sha256 hash: 0xeb0effa0878f7c1dfba8a579b282f45ae24715eebc01929bad29dcd9ab44d4da -Raw Sha512 hash: 0x918f9b3b2b615817b4108beca643225a11796825fb00a9126c950f59afbf95364b11ac468150e6fd458b01d1ad3d77ccb0c08a2849e9262e66058014c41cd487 -Gas remaining: 1039940.864 units remaining - -./octez-client --mode mockup hash data 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899 of type bls12_381_g2 -Raw packed data: 0x050a000000c00a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899 -Script-expression-ID-Hash: expruyowq2jYmYPBWkdc5ZSgqP4daGevfjJePrhDTUtP7YQL4Dzi5x -Raw Script-expression-ID-Hash: 0xc0d91f9ad81185f09853efcfc5951eca5c19f9b983808d824637f7bdc03ff595 -Ledger Blake2b hash: DyoJaUpE63MSnYEmW1pBQCK4DjLCURe2My2snWkmyC9S -Raw Sha256 hash: 0xa160577bd9510066d5aa8043d4ce365f03a4f5057516d951c380a521c04fddd8 -Raw Sha512 hash: 0xb0ce4a3348adff71470fc470d700b28fd991a91d4013cc6d89bd34a2f1c05f9d0be5cfe64f6b5d79fdbc27eb3e84be520e4e2d864d6b6649722b22061bbfbd7b -Gas remaining: 1039924.804 units remaining - -./octez-client --mode mockup hash data 0x of type bytes -Raw packed data: 0x050a00000000 -Script-expression-ID-Hash: expru3w5vUB5kLiEvvbFA81Su29kZM9bvCuVVPDNqVQq9RJ5PZ8oRw -Raw Script-expression-ID-Hash: 0x468397e139c257d8cd242c3e9a9a821f987eaab1e2e5098f11095258f1f11eec -Ledger Blake2b hash: 5kFvPvb5eUSrt99ekYQYag1Yfz5AsvsUTzVQFHeNPoW3 -Raw Sha256 hash: 0x59b7ebd426a428d05b6f1d634e56708f7711bd6d0495578281115368c1635e2d -Raw Sha512 hash: 0xb3dd201d5209fd911e193f3490154db2335205f472f0a7730e28182c5a3f07fa997f266226b12efb1bb39e8bc39d7a54d9c69fb575664bfb0be3bdd0550f7d65 -Gas remaining: 1039999.624 units remaining - -./octez-client --mode mockup hash data 0xABCDEF42 of type bytes -Raw packed data: 0x050a00000004abcdef42 -Script-expression-ID-Hash: exprtbzFhHQHhmEMHRqKi6k1fzAQYiVtuCXauZvM1VrN1p8iJLhJeG -Raw Script-expression-ID-Hash: 0x0b9a15faff1a1effa06a876cb86e81c9df2ca55fa8adfc4759449c602720a8c9 -Ledger Blake2b hash: nHm2FU2b9wwdwJVPrUS4tYmBbrsTrhsqY1U4moGsFNG -Raw Sha256 hash: 0x616628cdbcd057574ae41c224271249cd8b1cca683b206d58c088922cb9f9222 -Raw Sha512 hash: 0xc93e6e937d63f506af719edccc50d15d0faf7b213e5f572dd3ac73271815816ebdf738fc6345464af7a2ce7fbace473a03ae38157dea3fb4cc34a6c3b17b7dbc -Gas remaining: 1039999.584 units remaining - -./octez-client --mode mockup hash data 0x7a06a770 of type chain_id -Raw packed data: 0x050a000000047a06a770 -Script-expression-ID-Hash: expruWMYwqN4LDi29J8v47jRfpLkqjEkUaYtn6N9RZL8PB6z7Kca2w -Raw Script-expression-ID-Hash: 0x82820dedcd30b1b2c3253042b252e0b385dd365eaffdac09fbadf19cea1fab4a -Ledger Blake2b hash: 9nT2FHdDkNKBJZie1VRm6WookGzwzZ57FYetGbjvgam7 -Raw Sha256 hash: 0x092220899acefcdc4870e3c2d6ce436cf3e7a27855ebca4d3b24da62bc294a5c -Raw Sha512 hash: 0x99d8d47bed4a102b519062df6f04a65ce5ab7f98fadd3fdf7cdc6c21c652d9a59e8116781683c08b2094bb4fd99f516b690978d0a1f105aa05443a3e7e087697 -Gas remaining: 1039999.484 units remaining - -./octez-client --mode mockup hash data '"NetXynUjJNZm7wi"' of type chain_id -Raw packed data: 0x050a00000004f3d48554 -Script-expression-ID-Hash: exprtXgy1oXtj7HHY7Vw9rw3nKoPmrWaGE9iYF6ToeYfvcwmKTFECY -Raw Script-expression-ID-Hash: 0x01d7b61758f39c12865684f612da8f479d3755efaa0af26636254068a31c5083 -Ledger Blake2b hash: 8CBfWC4xY9SgFvQidL2r53pwquTtGhW8UJGcgu5wcYa -Raw Sha256 hash: 0xf6a25e29f615b4f5edb309db8229c4e607828111795f6ac68a30684bd04bcda5 -Raw Sha512 hash: 0x09ef7ad4129366f7c7e3beae66514b91728428b1b6b62454876fd7b07621bffa068de15dbc4cf3b550682481663df2a64435f65ed231787feeec183221dd4c6b -Gas remaining: 1039997.934 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY]"' of type key -Raw packed data: 0x050a00000021004798d2cc98473d7e250c898885718afd2e4efbcb1a1595ab9730761ed830de0f -Script-expression-ID-Hash: exprtbUKNrgLiggTQePME77Tgz9QcD1HK2pEVWHFLnR1qaah41D2XF -Raw Script-expression-ID-Hash: 0x0a6e0f781438d15aea8aeb41e8f00ea25bacc3d1efedfc62ca2eed7fcf299e3a -Ledger Blake2b hash: hiR4yro9kA38FKWeB8Ps8hzNyeqSoskUNGePRJQi4Uy -Raw Sha256 hash: 0x30467dc415ef58a775a6aa618f515d856287ad20b56477a16c0cfdf0f2a2ed3c -Raw Sha512 hash: 0x1b3f5993512659e0164d186381de64bd6a4c678cefd7ca756ec087769208fc62b4563df31cd4680707e3c43a5a8c7a4579ad5c34ae471a5731ebcbe0db2255ec -Gas remaining: 1039919.839 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY]"' of type key -Raw packed data: 0x050a000000210057b0e07666fe26167f92bffe667dc2ba2214a404f4fe5d1bb8ce01baef5663a5 -Script-expression-ID-Hash: expruJXx976B1KtYQeE96FS74k4VRXRKBAWx5e9TMWEBGPwv8VG5tt -Raw Script-expression-ID-Hash: 0x67aaee572e9d4e0673e66273b43e2300393ee44eb95984304b1407abb5809c24 -Ledger Blake2b hash: 7ygAaVU28qwNcCvg5stUKDPUikjnoMtDJM6FbNnrEmeT -Raw Sha256 hash: 0x13830142ebb330c5f0177637a05894338307e1179b67c45d90eb2e98151175a9 -Raw Sha512 hash: 0x075b346f72fb69759345eff13f52ad51b9c5c138fc6155742c309910412e2efc9a33615a8d4a3e6724c15de7960807cd7e83185d24ab5c096f766916ac035982 -Gas remaining: 1039919.839 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY_HASH]"' of type key_hash -Raw packed data: 0x050a000000150002298c03ed7d454a101eb7022bc95f7e5f41ac78 -Script-expression-ID-Hash: expru6fotvwsd3SnSHp5qhcUTHAmd1hqQA24srgXcGRRaCA2gPLYkf -Raw Script-expression-ID-Hash: 0x4cba54c206c1ccfd72a4a5492b21ae41f1faa6a7a7cce3f1b270218dc79814d3 -Ledger Blake2b hash: 6AWn5TRUkgYJe4fjjZrovKq81K9bNDNNgcS7xiTszkbC -Raw Sha256 hash: 0x4156dbe479999c7df14d90ae46e304304534cc38795d73ecc76d60c78724f2a1 -Raw Sha512 hash: 0xffb476c7d1ae269c82ea4d09a1513a8d915a8b50acb759c351228edc5e623e6f7390f2bd856625476ba14bb17b4dac07572fc40341e9eedf44e372a40550d798 -Gas remaining: 1039995.734 units remaining - -./octez-client --mode mockup hash data '"[PUBLIC_KEY_HASH]"' of type key_hash -Raw packed data: 0x050a000000150080dfbed18097a4cb62dea643ebc5346600b5204d -Script-expression-ID-Hash: expruEg1o4eXzeCwhgod4hTPbJjdpULmL2cbYphGFC9trLLhNaK3kw -Raw Script-expression-ID-Hash: 0x5ee69f25f750a193690ec32802a7a33b9572c7856791471d21fc4e73199dbaf3 -Ledger Blake2b hash: 7PTHd1XgawoAQDjiktNjDyPC5tsse21LnNFufiRifYbc -Raw Sha256 hash: 0x6f54374213823a79f912fb52cb57793466b4a39267dfbdcfdc918eeef296499f -Raw Sha512 hash: 0x2cb036951cd1725c7863f5c04f6f81a879bd0a533b1422a60a2a38d0c8243b10a0a879766e2a04c3cd47c532e417089839c3cf621621060f00bc5c79bda058bb -Gas remaining: 1039995.734 units remaining - -./octez-client --mode mockup hash data '{ }' of type 'lambda unit unit' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039998.846 units remaining - -./octez-client --mode mockup hash data '{ PUSH nat 1; ADD }' of type 'lambda nat nat' -Raw packed data: 0x0502000000080743036200010312 -Script-expression-ID-Hash: expru2DqBT8sxeHNp8FZnU3yEsE3eBRttz553dx3ct4fLZKvag6KXz -Raw Script-expression-ID-Hash: 0x42a0dcc26c782dcc094ba725e4bcc4f8710c72203a895b5e888990c12d03d7df -Ledger Blake2b hash: 5V6BBTaoBmSdwu8pv5xNMNBwm1mQGdPJ8e8N3s22Gcwp -Raw Sha256 hash: 0x113616e40fd9fcf4cb73a9cf9c57fc0ab1853fa4432b9ca975b472d0173bc007 -Raw Sha512 hash: 0x2256250f59e3c1c708eae9aa4d6f7d2dafdf82cb12b872db8320048c0dab3e225e96e846e284382fcfc832b83f0bf3ee3945fc6936357b2c29d96f29ba90315a -Gas remaining: 1039995.858 units remaining - -./octez-client --mode mockup hash data '{}' of type 'list unit' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039999.564 units remaining - -./octez-client --mode mockup hash data '{ 0 ; 10 }' of type 'list nat' -Raw packed data: 0x0502000000040000000a -Script-expression-ID-Hash: expru4vWphhWxDfcnCeXUdGZAhDpNTNt7qSvcoEAF58Se8dVgC2fBR -Raw Script-expression-ID-Hash: 0x48c32738e9d3772486ca8e0d150d6b94cebcd2421e3e8112434192c3c1df3a86 -Ledger Blake2b hash: 5u2x2XQZVxYHKm1LpjamMs894nT2CnvMKTQmeZsrtPH7 -Raw Sha256 hash: 0xaf9e7cce96fb6243ab05cd630f260862264dfe7eccda6fa24050a7cb9043134d -Raw Sha512 hash: 0xc699a04538d2cc260b183e65a02b1ea9fdeeca4c3bc253ae8e70d9824b7e79ebae34f6da3dd5eb3ceb29e9d18dc5e6f36d630b13be50adf566e9badb810f3349 -Gas remaining: 1039998.907 units remaining - -./octez-client --mode mockup hash data '{ Some 10 ; None }' of type 'list (option int)' -Raw packed data: 0x0502000000060509000a0306 -Script-expression-ID-Hash: exprv7yYyxehrZrCaxT9CLhMtAmQCUjjv9PDBZMkqASKLHUVGQUQHk -Raw Script-expression-ID-Hash: 0xd363a18306b7fc740debf0d1a981b5c4e5a3b7914eb04b90d6d406bce9f74d41 -Ledger Blake2b hash: FEB92G5KaAbrFnAp7UjD1AR9daiKQinjcvrAi3sRYG3S -Raw Sha256 hash: 0xa24baf1b39078a1811069da825039c4e6e8ab2de34d58f29baab4ffa9323fdfd -Raw Sha512 hash: 0xb92f1245587939c4ade1554874192d1bbd83f9d34a044e778fca611a6eac5f1a91a259b5fb0682495c1735a0f50e7da5fbdc4e4029e66ed64ecdc7a832a36e7c -Gas remaining: 1039998.531 units remaining - -./octez-client --mode mockup hash data '{}' of type 'map nat unit' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039999.504 units remaining - -./octez-client --mode mockup hash data '{ Elt 0 0xCB ; Elt 1 0xAB }' of type 'map nat bytes' -Raw packed data: 0x050200000014070400000a00000001cb070400010a00000001ab -Script-expression-ID-Hash: exprupowg2SRTtvx8kU3J6iV3Nta1rZ54KFMMHvX9ADcB9kg8vDR8u -Raw Script-expression-ID-Hash: 0xac6995309e75f33132a6819b36c2ae787684be3c23e7cf2a44533229b0aec974 -Ledger Blake2b hash: Cc2W7aPZgPoiuVfuxR8j6gjxgpuZDBJGjSaRQemzTnFM -Raw Sha256 hash: 0x732bb539d52c41e6cc09d6116b1b3d25257b27dfd7adc7a09e03d345c09e0594 -Raw Sha512 hash: 0x0d565633ca0b3c3751aee0fe54d9be744bea79b1a714d97227397dfe79b5058d6385bc86dcdabbb280c5fc2fb56fc073550ac63d947df2787a5927a1342c343b -Gas remaining: 1039997.748 units remaining - -./octez-client --mode mockup hash data 0 of type mutez -Raw packed data: 0x050000 -Script-expression-ID-Hash: exprtZBwZUeYYYfUs9B9Rg2ywHezVHnCCnmF9WsDQVrs582dSK63dC -Raw Script-expression-ID-Hash: 0x053f610929e2b6ea458c54dfd8b29716d379c13f5c8fd82d5c793a9e31271743 -Ledger Blake2b hash: MV6HviXsJnEwxPKHLSUxEvxZVZr14cYYiQth4DFa2NN -Raw Sha256 hash: 0x69c492e24afa52c556de5ea70e1b5d7da3f0bc7a5a7fd1d413444c1a42a7e9b3 -Raw Sha512 hash: 0x6fb0c536a65271998988dffee83efeb370514fcfecd339ebda1f97bde876ea5ecde4a2e8e93b22071849f5625639936ebc55b71c3b4118254f5bff444e515a85 -Gas remaining: 1039999.624 units remaining - -./octez-client --mode mockup hash data 1 of type mutez -Raw packed data: 0x050001 -Script-expression-ID-Hash: expru2dKqDfZG8hu4wNGkiyunvq2hdSKuVYtcKta7BWP6Q18oNxKjS -Raw Script-expression-ID-Hash: 0x438c52065d4605460b12d1b9446876a1c922b416103a20d44e994a9fd2b8ed07 -Ledger Blake2b hash: 5YgR7rjfSbSbzGEYhhBG9ENRHhdVSUu2TJ6RyNLawjiv -Raw Sha256 hash: 0x57072915640d052f4e2843e1498b10c4f71b62df565525d33c4a66a724e3e20a -Raw Sha512 hash: 0x112e6b61a60ecf001d501f39284ff8a575d818f2f79295b90b24f045d165a490c19cac2add9149dbdd23a8f2cf956dbee0efe17449111e6326e97ab21532f445 -Gas remaining: 1039999.599 units remaining - -./octez-client --mode mockup hash data 99999 of type mutez -Raw packed data: 0x05009f9a0c -Script-expression-ID-Hash: expruQUsZtokRsnKdzPwveAiq1QX2TgnMeRdhQ3rqBJw6LbfK7nJEa -Raw Script-expression-ID-Hash: 0x752bc02931fa202b4f7c174c0cea1254e6a007bc42f53d00d7f51556392f84f0 -Ledger Blake2b hash: 8tPPr8hLWFsY27xsdiM85nrPUoCXxEPR3PTWyma5JTyH -Raw Sha256 hash: 0xd794d67b0648f7a498c96eb5b8b8ab14d15c45dd13ae8168b4a3741e7b4cc701 -Raw Sha512 hash: 0xed76e4309dcbd480e19bb3e942adaada5ead9eeec944c0f90798c978cccee14b80d2a1b8f0f2346ca54b56d1662b02c6b0b58a2caa1a7187d5281e70ccd43ce6 -Gas remaining: 1039999.549 units remaining - -./octez-client --mode mockup hash data 0 of type nat -Raw packed data: 0x050000 -Script-expression-ID-Hash: exprtZBwZUeYYYfUs9B9Rg2ywHezVHnCCnmF9WsDQVrs582dSK63dC -Raw Script-expression-ID-Hash: 0x053f610929e2b6ea458c54dfd8b29716d379c13f5c8fd82d5c793a9e31271743 -Ledger Blake2b hash: MV6HviXsJnEwxPKHLSUxEvxZVZr14cYYiQth4DFa2NN -Raw Sha256 hash: 0x69c492e24afa52c556de5ea70e1b5d7da3f0bc7a5a7fd1d413444c1a42a7e9b3 -Raw Sha512 hash: 0x6fb0c536a65271998988dffee83efeb370514fcfecd339ebda1f97bde876ea5ecde4a2e8e93b22071849f5625639936ebc55b71c3b4118254f5bff444e515a85 -Gas remaining: 1039999.624 units remaining - -./octez-client --mode mockup hash data 1 of type nat -Raw packed data: 0x050001 -Script-expression-ID-Hash: expru2dKqDfZG8hu4wNGkiyunvq2hdSKuVYtcKta7BWP6Q18oNxKjS -Raw Script-expression-ID-Hash: 0x438c52065d4605460b12d1b9446876a1c922b416103a20d44e994a9fd2b8ed07 -Ledger Blake2b hash: 5YgR7rjfSbSbzGEYhhBG9ENRHhdVSUu2TJ6RyNLawjiv -Raw Sha256 hash: 0x57072915640d052f4e2843e1498b10c4f71b62df565525d33c4a66a724e3e20a -Raw Sha512 hash: 0x112e6b61a60ecf001d501f39284ff8a575d818f2f79295b90b24f045d165a490c19cac2add9149dbdd23a8f2cf956dbee0efe17449111e6326e97ab21532f445 -Gas remaining: 1039999.599 units remaining - -./octez-client --mode mockup hash data 99999 of type nat -Raw packed data: 0x05009f9a0c -Script-expression-ID-Hash: expruQUsZtokRsnKdzPwveAiq1QX2TgnMeRdhQ3rqBJw6LbfK7nJEa -Raw Script-expression-ID-Hash: 0x752bc02931fa202b4f7c174c0cea1254e6a007bc42f53d00d7f51556392f84f0 -Ledger Blake2b hash: 8tPPr8hLWFsY27xsdiM85nrPUoCXxEPR3PTWyma5JTyH -Raw Sha256 hash: 0xd794d67b0648f7a498c96eb5b8b8ab14d15c45dd13ae8168b4a3741e7b4cc701 -Raw Sha512 hash: 0xed76e4309dcbd480e19bb3e942adaada5ead9eeec944c0f90798c978cccee14b80d2a1b8f0f2346ca54b56d1662b02c6b0b58a2caa1a7187d5281e70ccd43ce6 -Gas remaining: 1039999.549 units remaining - -./octez-client --mode mockup hash data None of type 'option unit' -Raw packed data: 0x050306 -Script-expression-ID-Hash: exprtn5DaoF31YMuSLAJFjARQmKwsdUUnHMCKBqZ6zoH1SiAyqHkFh -Raw Script-expression-ID-Hash: 0x22809fd952c3478272e90aa2f8e59260e81bfa5c35329845dddbd462470f61bc -Ledger Blake2b hash: 3KgcqHyPuSS1yTH3UyqenupZv8z2dDJjXmuDNUoZa8ew -Raw Sha256 hash: 0xe61760f1647df1aa8f3f64cf8a93fecddf536ed4867d4111cbedab7652f8267f -Raw Sha512 hash: 0x4a3457a98c4f863fb53dfa90af26aa46becda18150cda8e2d3d1de2a1f6536b7c5bc7c99f0216610650e90653d69badca147cd88e3d6f472b5be617c076980e0 -Gas remaining: 1039999.564 units remaining - -./octez-client --mode mockup hash data 'Some "foo"' of type 'option string' -Raw packed data: 0x0505090100000003666f6f -Script-expression-ID-Hash: expruWj1i3NoT1rSzrv22q9uTuL8Ax5LcRkhHQJLDbRfaHSydRmpx4 -Raw Script-expression-ID-Hash: 0x83592457741d2dbb22af78846b3040e92614170c2e4850110a88b2d924a10ac7 -Ledger Blake2b hash: 9qjFGa2NhRMBbutDccsFotBEpNeCuK4mJu95q3hiJZ3U -Raw Sha256 hash: 0xcd56882646da9e0c3309537fb762087316b9bd0c754e7c858b30445e5a4df6a0 -Raw Sha512 hash: 0xb7c841f6c2ab26702ce4b2a72b0f70e63c561ed97bc77df78c2f763e492eb8c86ecf755b60aa1246cc1ba95b0de2d1a3afa3de408325b3b2c764efcb24d1a9e5 -Gas remaining: 1039999.173 units remaining - -./octez-client --mode mockup hash data '(Left True)' of type 'or bool string' -Raw packed data: 0x050505030a -Script-expression-ID-Hash: exprufiG2ZNeHqrtWKs4bJ3yPwqxxe2W1jPv8NfHezGjadF15ruvUw -Raw Script-expression-ID-Hash: 0x97c11ba899e5d0cb4772b7932f1669b4ab29113b0f17c88e22fd10fc1faf991e -Ledger Blake2b hash: BDPMBz4ejDv6jv7uARzSz4Uv5LbixRHZJ2K7vfXGhzhT -Raw Sha256 hash: 0x07b7ad9ed53b16bf17d52aa7eb3ae77fba8671f6f979eccc92ecf9e6702f7b1f -Raw Sha512 hash: 0xb2de8eb67db0b449a7b5b844e6c7d1cb8ca874003a1e43b802bf273474e621deaefe7cdfb27c2bd2c78326e2e0506f1ecae038be143cf5b4b4d7e918b6ebc72e -Gas remaining: 1039999.188 units remaining - -./octez-client --mode mockup hash data '(Right "foo")' of type 'or bool string' -Raw packed data: 0x0505080100000003666f6f -Script-expression-ID-Hash: exprvD9V6jDDCiYUQjkqNdnD2eFyqMA76Rkoa6rpVXkim7hcqHFFEz -Raw Script-expression-ID-Hash: 0xdf2193b9a689f10ac5c8a48c577f3e2a94221bd9ac884b5fa1b74f3f916d7dd3 -Ledger Blake2b hash: G21cWq5PkGo84UkfufjDCMXWsSQA3PEDBLKYPt1qtvan -Raw Sha256 hash: 0x2477b0dad8808245eacf22a51ef1f6b9bcb59b8f4d4b3a979132fa74dd129abf -Raw Sha512 hash: 0x64d21e4c66c2c1da70cda80a9609a28e8571734e42a63927753c2027f5c168086fd9925ddaee1544b254fbf63b055bc5ee4e9a987f457b58be04abbdfd29ac57 -Gas remaining: 1039999.113 units remaining - -./octez-client --mode mockup hash data '(Pair 0 True)' of type 'pair int bool' -Raw packed data: 0x0507070000030a -Script-expression-ID-Hash: exprubgTpz2xzfqw7VxoZ9CfmYeQCayFc4mAA9pgnXDKXo64FD2tDw -Raw Script-expression-ID-Hash: 0x8e99fc570ca12731c2a09203fb84b25f93264a234dc1dc6abd8b920a06309794 -Ledger Blake2b hash: Abf5a9UGQ2gcU7V918Pcss2DaTVaqdkBrDYUi55p4Bfh -Raw Sha256 hash: 0x754da3f12fe6c0317d39bc71ff0489d763047648833d3403cdb348c93f9c2678 -Raw Sha512 hash: 0xfc2f3d753f8749bec06d6cccadd8263d69ca4121af57d0fce69b62bdb82173d3403b28cd69eb551827c7b80384d77e48b42be7399f06e310762a80ebcdfb5e1b -Gas remaining: 1039998.872 units remaining - -./octez-client --mode mockup hash data '(Pair 0 (Pair True 0x))' of type 'pair int bool bytes' -Raw packed data: 0x05070700000707030a0a00000000 -Script-expression-ID-Hash: expruJK4yoH9hmZUDgbb5DBtjekERQd913ar43wFgkLVL4eYcFtDsT -Raw Script-expression-ID-Hash: 0x6729d37ba0b7c4f8746e53816067fec805fbbd37253d81cf974b6edd054da22b -Ledger Blake2b hash: 7whz5UYUjV52kQv1B1QUoYk1pMwRay1gEsB8XwP5ce5Q -Raw Sha256 hash: 0x2ee3aa1d789b740d21b535384a8ec28c7c375484576f070a0ea03f0ada7917fd -Raw Sha512 hash: 0x83faf6a6c5c205a86087d77460f54a582f285918f45847376b7a722520f69acf23d6a9f09cce2646fcd279f33241ab345e2e17613f0babd1ebc5979713bff784 -Gas remaining: 1039998.120 units remaining - -./octez-client --mode mockup hash data '(Pair 0 True 0x)' of type 'pair int bool bytes' -Raw packed data: 0x05070700000707030a0a00000000 -Script-expression-ID-Hash: expruJK4yoH9hmZUDgbb5DBtjekERQd913ar43wFgkLVL4eYcFtDsT -Raw Script-expression-ID-Hash: 0x6729d37ba0b7c4f8746e53816067fec805fbbd37253d81cf974b6edd054da22b -Ledger Blake2b hash: 7whz5UYUjV52kQv1B1QUoYk1pMwRay1gEsB8XwP5ce5Q -Raw Sha256 hash: 0x2ee3aa1d789b740d21b535384a8ec28c7c375484576f070a0ea03f0ada7917fd -Raw Sha512 hash: 0x83faf6a6c5c205a86087d77460f54a582f285918f45847376b7a722520f69acf23d6a9f09cce2646fcd279f33241ab345e2e17613f0babd1ebc5979713bff784 -Gas remaining: 1039998.120 units remaining - -./octez-client --mode mockup hash data '{0; True; 0x}' of type 'pair int bool bytes' -Raw packed data: 0x05070700000707030a0a00000000 -Script-expression-ID-Hash: expruJK4yoH9hmZUDgbb5DBtjekERQd913ar43wFgkLVL4eYcFtDsT -Raw Script-expression-ID-Hash: 0x6729d37ba0b7c4f8746e53816067fec805fbbd37253d81cf974b6edd054da22b -Ledger Blake2b hash: 7whz5UYUjV52kQv1B1QUoYk1pMwRay1gEsB8XwP5ce5Q -Raw Sha256 hash: 0x2ee3aa1d789b740d21b535384a8ec28c7c375484576f070a0ea03f0ada7917fd -Raw Sha512 hash: 0x83faf6a6c5c205a86087d77460f54a582f285918f45847376b7a722520f69acf23d6a9f09cce2646fcd279f33241ab345e2e17613f0babd1ebc5979713bff784 -Gas remaining: 1039998.120 units remaining - -./octez-client --mode mockup hash data '{}' of type 'set bool' -Raw packed data: 0x050200000000 -Script-expression-ID-Hash: exprvLcRMXArBMo4ZGN2fxbyDgW4hQTTTRd48VUbEwC4o2dMR2YjFP -Raw Script-expression-ID-Hash: 0xf0147b0fcd9ed958297e3e663f25d0427f7f70576f22047a8d52953941a8b057 -Ledger Blake2b hash: HAAxipLZ7LdX9GLgN7p1bX9KneQ82FcCsss3YicsKaAS -Raw Sha256 hash: 0x077e8b5d0b528d84284d773f8cc36da052248bb96c341d68d51b86e0ce098262 -Raw Sha512 hash: 0x7553bc601c56a361eb537e2bcba685ae6fbf3b68003bd9426db318352db433445aee770bab94631ce5bdf29b948caf1665e208c9be33d8b70fa67d2839d4a16a -Gas remaining: 1039999.564 units remaining - -./octez-client --mode mockup hash data '{ 0 ; 3 ; 4 }' of type 'set nat' -Raw packed data: 0x050200000006000000030004 -Script-expression-ID-Hash: expruTArjjBYFarD9wM3cZJWXr4ZGzDNmZ4NzJja4evPDhDaGRRS5F -Raw Script-expression-ID-Hash: 0x7b470c4d4cd099659964e7ae56f49599a16e5c4ddbe03898a7f87b08f8cb4a6f -Ledger Blake2b hash: 9JDyxjR1Pex14hzrrVN6wUuVdug418EbGy9PytyWi36E -Raw Sha256 hash: 0x79b8b0a86bb4e9939b552d8bfc98c50b991ae227235a3d39381349817ebdda9f -Raw Sha512 hash: 0x34de860c30437423f988cff5ed945981ed4b82dc8a9153f1fbb387e3a05d502d494aa3fb627698a2d7d3b769715e24f844274d0a86bbddff3d955d97ba39d410 -Gas remaining: 1039998.346 units remaining - -./octez-client --mode mockup hash data '"ABC\n123"' of type string -Raw packed data: 0x0501000000074142430a313233 -Script-expression-ID-Hash: expru9epr1Q99NjjgfhQBBmLiAb55ATvHcpvXqVfxnjQyAo3qLpTSU -Raw Script-expression-ID-Hash: 0x53804fa1fb0854914ed6562bc7dde5d9c2307bbf5ac70e787a715c113e36d6c6 -Ledger Blake2b hash: 6cxKSKRL7E2Bpg1ZPZkWT7hXgLKyHJxLc5NA2Q2H1jqX -Raw Sha256 hash: 0x3ebab0c348173626afcb9c982d06ee1189fb1a6359eecd33b30af851aacdcc0f -Raw Sha512 hash: 0x086fccde9f22aba378cd47833d9613f6d1cfd3f15fb6a8dde0eb57e1da651de8ef69886a7a4ebbadf50155910d1fbcc9048e0d9acb196be04adf519476d52307 -Gas remaining: 1039999.469 units remaining - -./octez-client --mode mockup hash data '"edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7"' of type signature -Raw packed data: 0x050a0000004049d47dba27bd76208b092f3e500f64818920c817491b8b9094f28c2c2b9c6721b257b8878ce47182122b8ea84aeacd84a8aa28cb1f1fe48a26355a7bca4b8306 -Script-expression-ID-Hash: exprtXK3xDMDMu3vGVkb6m9JxwRb3t62tZZNWZPS6FGCY5oFVcZuaM -Raw Script-expression-ID-Hash: 0x00fc144dd18ae1a2d0c6247aa7dad67b2f8bec1b26984437b4bdf02e2d296783 -Ledger Blake2b hash: 14qwXuZ6GDwjvb9GEyurnLg9ZABtnQUAVuDXuGtFAYhp -Raw Sha256 hash: 0xf432ec1cf86bc818d9dff9f69870eaedbbfaee429f2619500757f3ce1d7bc1a9 -Raw Sha512 hash: 0xd7f46bdf12090e235e59f0a61af1ca90f64f6022bd5df479a62f16fd829c6cec431dc081ee16f0c103eec70be968d3f70ec9f584f8948d31c804a87ddc82b1b3 -Gas remaining: 1039992.529 units remaining - -./octez-client --mode mockup hash data '"spsig1PPUFZucuAQybs5wsqsNQ68QNgFaBnVKMFaoZZfi1BtNnuCAWnmL9wVy5HfHkR6AeodjVGxpBVVSYcJKyMURn6K1yknYLm"' of type signature -Raw packed data: 0x050a00000040865b0ceaa2decd64fea1b7e0e97d6ae8035125d821ebe99d7d5c8a559f36fdd43388a570e475011f6d2bbef184ece9bafbf0ac12157f7257988e9575ae2cbca9 -Script-expression-ID-Hash: expruiLTZFkM8c6b9yURRmpLK3f7AAQbPQc11DeCSLoWUqGMUwLiSn -Raw Script-expression-ID-Hash: 0x9db673f2907fafceb934a674351b57e76ba2bf9b3ee2f6edac327089ef5aa749 -Ledger Blake2b hash: BceNWVXjPX5jc4D1kauy4Evh21C8q53aQRJFMzEpLXWx -Raw Sha256 hash: 0x42fe71aa3f9fa7d868a2a8aee492b2a559fba87f8c15403ffe753fc0effffd17 -Raw Sha512 hash: 0xc9a9d704af153d9a2d046bd428f817c9db9ec5d52881ac31e28ed1faca821d34b797bee5171855d6f35ecefed7db2800a20639fc1f877672d03b456af7cf296e -Gas remaining: 1039992.529 units remaining - -./octez-client --mode mockup hash data '"foo"' of type string -Raw packed data: 0x050100000003666f6f -Script-expression-ID-Hash: expruTFUPVsqkuD5iwLMJuzoyGSFABnxLo7CZrgnS1czt1WbTwpVrJ -Raw Script-expression-ID-Hash: 0x7b754bee2b13dd9f9486e6f933e27afc2c31765a8414fc98422255138b04a366 -Ledger Blake2b hash: 9JvtJaNHvYP5bpF7tjbbtpr8o7Jtptz445dZ8pemDnvH -Raw Sha256 hash: 0xe9341dd81166c9253032c8296ae443fbe0d6878502c31cdc431407c4f46dd094 -Raw Sha512 hash: 0x8bf21486ea4a0789bf772b75b3cd8f9edace809f79c38146dbbe2d447edf99f9fcc7c53f511063fe9de21b22baa01710ef6a300546fcc6529812128488e91309 -Gas remaining: 1039999.549 units remaining - -./octez-client --mode mockup hash data '"[TIMESTAMP]"' of type timestamp -Raw packed data: 0x0500a7e8e4d80b -Script-expression-ID-Hash: expruPr6RXBVA966PMQk4kFKyiph9smByS7tFn1hKE6RwAv77VxPes -Raw Script-expression-ID-Hash: 0x73bb27e87ad251d54484fc93a59fac977e3e1af83dfaaa33df4cb7646e01ffdf -Ledger Blake2b hash: 8nmQbgYU3gU2uTXAoJ77miKgQicBLCYYWtnoLzvF5k7Q -Raw Sha256 hash: 0x883ec8d70eeb0beb91bb34dbb5a9a49ffdbe79fd99d8a5fe2b5b508381597bce -Raw Sha512 hash: 0x2b7e8c38c164c6fd93d454fc2ac07122c45616cc616e2789bfb77cc023ef005cf97c8fb8e7c38565d52d0a5fd941a5be0e26e0fd323261069445b89f7ba6086a -Gas remaining: 1039999.416 units remaining - -./octez-client --mode mockup hash data 1571659294 of type timestamp -Raw packed data: 0x05009ef8ecda0b -Script-expression-ID-Hash: exprvPBUjsoev8w7shCt9SLykngSNL393Q8xHJS5eTMSrA2KbecS2x -Raw Script-expression-ID-Hash: 0xf5ea5a2add84cb09fcf97c1d6e931a177dc6b47c27859d0a8c67e6a89c87098c -Ledger Blake2b hash: HYx9bgNpSXhVfVKjoToFJ55LGxpZ8NGNwnfZJdGkYJSP -Raw Sha256 hash: 0xa4e6a8748a04d460e75e1420baa3f4e9d53c758f076a0a5e3730941eade9c72f -Raw Sha512 hash: 0x69c9ac176f1c5da7b15e859224d9877da0ecb9ecb84e0fa580405c46f13cc8ea11365502298f45354dc21ddeccd7ad3772c8d11091870536f156a6fc94aad89a -Gas remaining: 1039999.524 units remaining - -./octez-client --mode mockup hash data Unit of type unit -Raw packed data: 0x05030b -Script-expression-ID-Hash: expruaDPoTWXcTR6fiQPy4KZSW72U6Swc1rVmMiP1KdwmCceeEpVjd -Raw Script-expression-ID-Hash: 0x8b456a4530fb6d0fea9a0dcd0e9d6ff6b30d13b05d05cb4a375dd91bf2a7eadc -Ledger Blake2b hash: ANf4YSkDc71Uy14uWg3wL8u49LUAHdVVnVHbSwNKyEJo -Raw Sha256 hash: 0x5f6d1c5a35306dc8be3a54058774f9cb8f1bc71a6a743a253aad0bfe3a43feef -Raw Sha512 hash: 0xe89c39b714a041046cf421532526b466a8ad29a89a4f027954e4dbdc61b4557f54721ba9e12bf4b901d511037d39481379394e7f86a571bba60f2414e2a56b4c -Gas remaining: 1039999.624 units remaining diff --git a/tezt/tests/expected/increase_paid_storage.ml/Parisb- increase paid storage.out b/tezt/tests/expected/increase_paid_storage.ml/Parisb- increase paid storage.out deleted file mode 100644 index 449cf426ccdf696c8c307ef6467b75d9c2c94f45..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/increase_paid_storage.ml/Parisb- increase paid storage.out +++ /dev/null @@ -1,30 +0,0 @@ -Node is bootstrapped. -Estimated gas: 168.648 units (will add 0 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is 'oo4vECCgpTowVrRRSPwYcBM3FpkyvitMqVvpHonrjNstrqgR9yU' -NOT waiting for the operation to be included. -Use command - octez-client wait for oo4vECCgpTowVrRRSPwYcBM3FpkyvitMqVvpHonrjNstrqgR9yU to be included --confirmations 1 --branch BLockGenesisGenesisGenesisGenesisGenesisf79b5d1CoW2 -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - Fee to the baker: ꜩ0.000265 - Expected counter: 1 - Gas limit: 169 - Storage limit: 0 bytes - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.000265 - payload fees(the block proposer) ....... +ꜩ0.000265 - Increase paid storage: - Increased size: 1000 bytes - From: tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN - To: KT1QmpjYa3WKEtp27inFsS66PS1UyBuvQ2TW - This paid storage increase was successfully applied - Balance updates: - tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN ... -ꜩ0.25 - storage fees ........................... +ꜩ0.25 - Consumed gas: 168.582 - - diff --git a/tezt/tests/expected/normalize.ml/Parisb- Test Michelson stack normalization.out b/tezt/tests/expected/normalize.ml/Parisb- Test Michelson stack normalization.out deleted file mode 100644 index 3f4caec3f3b53de16f83a69f3d07ae5caec719b6..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/normalize.ml/Parisb- Test Michelson stack normalization.out +++ /dev/null @@ -1,520 +0,0 @@ - -./octez-client --mode mockup normalize stack '{}' -{} - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9)}' -{ Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9) } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10)))}' -{ Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9) ; - Stack_elt (pair nat nat nat nat) (Pair 1 4 7 10) } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10))); Stack_elt (pair nat nat (pair nat nat)) {2; 5; 8; 11}}' -{ Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9) ; - Stack_elt (pair nat nat nat nat) (Pair 1 4 7 10) ; - Stack_elt (pair nat nat nat nat) (Pair 2 5 8 11) } - -./octez-client --mode mockup normalize stack '{}' --unparsing-mode Readable -{} - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9)}' --unparsing-mode Readable -{ Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9) } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10)))}' --unparsing-mode Readable -{ Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9) ; - Stack_elt (pair nat nat nat nat) (Pair 1 4 7 10) } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10))); Stack_elt (pair nat nat (pair nat nat)) {2; 5; 8; 11}}' --unparsing-mode Readable -{ Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9) ; - Stack_elt (pair nat nat nat nat) (Pair 1 4 7 10) ; - Stack_elt (pair nat nat nat nat) (Pair 2 5 8 11) } - -./octez-client --mode mockup normalize stack '{}' --unparsing-mode Optimized -{} - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9)}' --unparsing-mode Optimized -{ Stack_elt (pair nat nat nat nat) { 0 ; 3 ; 6 ; 9 } } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10)))}' --unparsing-mode Optimized -{ Stack_elt (pair nat nat nat nat) { 0 ; 3 ; 6 ; 9 } ; - Stack_elt (pair nat nat nat nat) { 1 ; 4 ; 7 ; 10 } } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10))); Stack_elt (pair nat nat (pair nat nat)) {2; 5; 8; 11}}' --unparsing-mode Optimized -{ Stack_elt (pair nat nat nat nat) { 0 ; 3 ; 6 ; 9 } ; - Stack_elt (pair nat nat nat nat) { 1 ; 4 ; 7 ; 10 } ; - Stack_elt (pair nat nat nat nat) { 2 ; 5 ; 8 ; 11 } } - -./octez-client --mode mockup normalize stack '{}' --unparsing-mode Optimized_legacy -{} - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9)}' --unparsing-mode Optimized_legacy -{ Stack_elt (pair nat nat nat nat) (Pair 0 (Pair 3 (Pair 6 9))) } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10)))}' --unparsing-mode Optimized_legacy -{ Stack_elt (pair nat nat nat nat) (Pair 0 (Pair 3 (Pair 6 9))) ; - Stack_elt (pair nat nat nat nat) (Pair 1 (Pair 4 (Pair 7 10))) } - -./octez-client --mode mockup normalize stack '{Stack_elt (pair nat nat nat nat) (Pair 0 3 6 9); Stack_elt (pair nat (pair nat (pair nat nat))) (Pair 1 (Pair 4 (Pair 7 10))); Stack_elt (pair nat nat (pair nat nat)) {2; 5; 8; 11}}' --unparsing-mode Optimized_legacy -{ Stack_elt (pair nat nat nat nat) (Pair 0 (Pair 3 (Pair 6 9))) ; - Stack_elt (pair nat nat nat nat) (Pair 1 (Pair 4 (Pair 7 10))) ; - Stack_elt (pair nat nat nat nat) (Pair 2 (Pair 5 (Pair 8 11))) } - -./octez-client --mode mockup normalize stack -Error: - Erroneous command line argument 3 (). - empty expression - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack '{' -Error: - Erroneous command line argument 3 ({). - At line 1 characters 0 to 1, unclosed curly brace - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack 0 -Error: - At line 1 characters 0 to 1, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got 0. - -./octez-client --mode mockup normalize stack '{Stack_elt}' -Error: - At line 1 characters 0 to 11, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt }. - At line 1 characters 1 to 10, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack '{Stack_elt nat}' -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat }. - At line 1 characters 1 to 14, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat. - -./octez-client --mode mockup normalize stack '{Stack_elt 0 nat}' -At (unshown) location 0, unexpected int, only a primitive can be used here. -Fatal error: - ill-typed stack - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0 1}' -Error: - At line 1 characters 0 to 19, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 1 }. - At line 1 characters 1 to 18, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat 0 1. - -./octez-client --mode mockup normalize stack 'Stack_elt nat 0' -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got Stack_elt nat 0. - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0; Stack_elt}' -Error: - At line 1 characters 0 to 28, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 ; Stack_elt }. - At line 1 characters 18 to 27, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack --unparsing-mode Readable -Error: - Erroneous command line argument 3 (). - empty expression - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack '{' --unparsing-mode Readable -Error: - Erroneous command line argument 3 ({). - At line 1 characters 0 to 1, unclosed curly brace - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack 0 --unparsing-mode Readable -Error: - At line 1 characters 0 to 1, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got 0. - -./octez-client --mode mockup normalize stack '{Stack_elt}' --unparsing-mode Readable -Error: - At line 1 characters 0 to 11, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt }. - At line 1 characters 1 to 10, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack '{Stack_elt nat}' --unparsing-mode Readable -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat }. - At line 1 characters 1 to 14, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat. - -./octez-client --mode mockup normalize stack '{Stack_elt 0 nat}' --unparsing-mode Readable -At (unshown) location 0, unexpected int, only a primitive can be used here. -Fatal error: - ill-typed stack - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0 1}' --unparsing-mode Readable -Error: - At line 1 characters 0 to 19, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 1 }. - At line 1 characters 1 to 18, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat 0 1. - -./octez-client --mode mockup normalize stack 'Stack_elt nat 0' --unparsing-mode Readable -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got Stack_elt nat 0. - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0; Stack_elt}' --unparsing-mode Readable -Error: - At line 1 characters 0 to 28, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 ; Stack_elt }. - At line 1 characters 18 to 27, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack --unparsing-mode Optimized -Error: - Erroneous command line argument 3 (). - empty expression - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack '{' --unparsing-mode Optimized -Error: - Erroneous command line argument 3 ({). - At line 1 characters 0 to 1, unclosed curly brace - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack 0 --unparsing-mode Optimized -Error: - At line 1 characters 0 to 1, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got 0. - -./octez-client --mode mockup normalize stack '{Stack_elt}' --unparsing-mode Optimized -Error: - At line 1 characters 0 to 11, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt }. - At line 1 characters 1 to 10, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack '{Stack_elt nat}' --unparsing-mode Optimized -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat }. - At line 1 characters 1 to 14, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat. - -./octez-client --mode mockup normalize stack '{Stack_elt 0 nat}' --unparsing-mode Optimized -At (unshown) location 0, unexpected int, only a primitive can be used here. -Fatal error: - ill-typed stack - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0 1}' --unparsing-mode Optimized -Error: - At line 1 characters 0 to 19, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 1 }. - At line 1 characters 1 to 18, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat 0 1. - -./octez-client --mode mockup normalize stack 'Stack_elt nat 0' --unparsing-mode Optimized -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got Stack_elt nat 0. - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0; Stack_elt}' --unparsing-mode Optimized -Error: - At line 1 characters 0 to 28, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 ; Stack_elt }. - At line 1 characters 18 to 27, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack --unparsing-mode Optimized_legacy -Error: - Erroneous command line argument 3 (). - empty expression - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack '{' --unparsing-mode Optimized_legacy -Error: - Erroneous command line argument 3 ({). - At line 1 characters 0 to 1, unclosed curly brace - -Usage: - octez-client [global options] command [command options] - octez-client --help (for global options) - octez-client [global options] command --help (for command options) - octez-client --version (for version information) - -To browse the documentation: - octez-client [global options] man (for a list of commands) - octez-client [global options] man -v 3 (for the full manual) - -Global options (must come before the command): - -d --base-dir : client data directory (absent: TEZOS_CLIENT_DIR env) - -n --no-base-dir-warnings: silence warnings about client data directory - -c --config-file : configuration file - -t --timings: show RPC request times - --chain : chain on which to apply contextual commands (commands dependent on the context associated with the specified chain). Possible tags are 'main' and 'test'. - -b --block : block on which to apply contextual commands (commands dependent on the context associated with the specified block). Possible tags include 'head' and 'genesis' +/- an optional offset (e.g. "octez-client -b head-1 get timestamp"). Note that block queried must exist in node's storage. - -w --wait >: how many confirmation blocks are needed before an operation is considered included - -p --protocol : use commands of a specific protocol - -l --log-requests: log all requests to the node - --better-errors: Error reporting is more detailed. Can be used if a call to an RPC fails or if you don't know the input accepted by the RPC. It may happen that the RPC calls take more time however. - -A --addr : [DEPRECATED: use --endpoint instead] IP address of the node - -P --port : [DEPRECATED: use --endpoint instead] RPC port of the node - -S --tls: [DEPRECATED: use --endpoint instead] use TLS to connect to node. - -m --media-type : Sets the "media-type" value for the "accept" header for RPC requests to the node. The media accept header indicates to the node which format of data serialisation is supported. Use the value "json" for serialisation to the JSON format. - -E --endpoint : HTTP(S) endpoint of the node RPC interface; e.g. 'http://localhost:8732' - -s --sources : path to JSON file containing sources for --mode light. Example file content: {"min_agreement": 1.0, "uris": ["http://localhost:8732", "https://localhost:8733"]} - -R --remote-signer : URI of the remote signer - -f --password-filename : path to the password filename - -M --mode : how to interact with the node - -./octez-client --mode mockup normalize stack 0 --unparsing-mode Optimized_legacy -Error: - At line 1 characters 0 to 1, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got 0. - -./octez-client --mode mockup normalize stack '{Stack_elt}' --unparsing-mode Optimized_legacy -Error: - At line 1 characters 0 to 11, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt }. - At line 1 characters 1 to 10, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. - -./octez-client --mode mockup normalize stack '{Stack_elt nat}' --unparsing-mode Optimized_legacy -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat }. - At line 1 characters 1 to 14, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat. - -./octez-client --mode mockup normalize stack '{Stack_elt 0 nat}' --unparsing-mode Optimized_legacy -At (unshown) location 0, unexpected int, only a primitive can be used here. -Fatal error: - ill-typed stack - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0 1}' --unparsing-mode Optimized_legacy -Error: - At line 1 characters 0 to 19, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 1 }. - At line 1 characters 1 to 18, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt nat 0 1. - -./octez-client --mode mockup normalize stack 'Stack_elt nat 0' --unparsing-mode Optimized_legacy -Error: - At line 1 characters 0 to 15, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got Stack_elt nat 0. - -./octez-client --mode mockup normalize stack '{Stack_elt nat 0; Stack_elt}' --unparsing-mode Optimized_legacy -Error: - At line 1 characters 0 to 28, - Unexpected format for a typed stack. Expected a sequence of Stack_elt ; got { Stack_elt nat 0 ; Stack_elt }. - At line 1 characters 18 to 27, - Unexpected format for an item in a typed stack. Expected: Stack_elt ; got Stack_elt. diff --git a/tezt/tests/expected/normalize.ml/Parisb- Test normalize in unparsing mode.out b/tezt/tests/expected/normalize.ml/Parisb- Test normalize in unparsing mode.out deleted file mode 100644 index 80323b4574cb47d5c3653b4fdc5191efc62aac4e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/normalize.ml/Parisb- Test normalize in unparsing mode.out +++ /dev/null @@ -1,14 +0,0 @@ - -./octez-client --mode mockup normalize data '{Pair 0 3 6 9; Pair 1 (Pair 4 (Pair 7 10)); {2; 5; 8; 11}}' of type 'list (pair nat nat nat nat)' -{ Pair 0 3 6 9 ; Pair 1 4 7 10 ; Pair 2 5 8 11 } - -./octez-client --mode mockup normalize data '{Pair 0 3 6 9; Pair 1 (Pair 4 (Pair 7 10)); {2; 5; 8; 11}}' of type 'list (pair nat nat nat nat)' --unparsing-mode Readable -{ Pair 0 3 6 9 ; Pair 1 4 7 10 ; Pair 2 5 8 11 } - -./octez-client --mode mockup normalize data '{Pair 0 3 6 9; Pair 1 (Pair 4 (Pair 7 10)); {2; 5; 8; 11}}' of type 'list (pair nat nat nat nat)' --unparsing-mode Optimized -{ { 0 ; 3 ; 6 ; 9 } ; { 1 ; 4 ; 7 ; 10 } ; { 2 ; 5 ; 8 ; 11 } } - -./octez-client --mode mockup normalize data '{Pair 0 3 6 9; Pair 1 (Pair 4 (Pair 7 10)); {2; 5; 8; 11}}' of type 'list (pair nat nat nat nat)' --unparsing-mode Optimized_legacy -{ Pair 0 (Pair 3 (Pair 6 9)) ; - Pair 1 (Pair 4 (Pair 7 10)) ; - Pair 2 (Pair 5 (Pair 8 11)) } diff --git a/tezt/tests/expected/normalize.ml/Parisb- Test normalize script.out b/tezt/tests/expected/normalize.ml/Parisb- Test normalize script.out deleted file mode 100644 index b4642bc280edef2e33ca9678d57ee4666d6ba528..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/normalize.ml/Parisb- Test normalize script.out +++ /dev/null @@ -1,42 +0,0 @@ - -./octez-client --mode mockup normalize script michelson_test_scripts/opcodes/comb-literals.tz -{ parameter unit ; - storage unit ; - code { PUSH (list (pair nat nat nat nat)) - { Pair 0 3 6 9 ; Pair 1 4 7 10 ; Pair 2 5 8 11 } ; - DROP 2 ; - UNIT ; - NIL operation ; - PAIR } } - -./octez-client --mode mockup normalize script michelson_test_scripts/opcodes/comb-literals.tz --unparsing-mode Readable -{ parameter unit ; - storage unit ; - code { PUSH (list (pair nat nat nat nat)) - { Pair 0 3 6 9 ; Pair 1 4 7 10 ; Pair 2 5 8 11 } ; - DROP 2 ; - UNIT ; - NIL operation ; - PAIR } } - -./octez-client --mode mockup normalize script michelson_test_scripts/opcodes/comb-literals.tz --unparsing-mode Optimized -{ parameter unit ; - storage unit ; - code { PUSH (list (pair nat nat nat nat)) - { { 0 ; 3 ; 6 ; 9 } ; { 1 ; 4 ; 7 ; 10 } ; { 2 ; 5 ; 8 ; 11 } } ; - DROP 2 ; - UNIT ; - NIL operation ; - PAIR } } - -./octez-client --mode mockup normalize script michelson_test_scripts/opcodes/comb-literals.tz --unparsing-mode Optimized_legacy -{ parameter unit ; - storage unit ; - code { PUSH (list (pair nat nat nat nat)) - { Pair 0 (Pair 3 (Pair 6 9)) ; - Pair 1 (Pair 4 (Pair 7 10)) ; - Pair 2 (Pair 5 (Pair 8 11)) } ; - DROP 2 ; - UNIT ; - NIL operation ; - PAIR } } diff --git a/tezt/tests/expected/normalize.ml/Parisb- Test normalize type.out b/tezt/tests/expected/normalize.ml/Parisb- Test normalize type.out deleted file mode 100644 index c35ef0e62ff854500fdcbe60890ae2ac1888f5b7..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/normalize.ml/Parisb- Test normalize type.out +++ /dev/null @@ -1,24 +0,0 @@ - -./octez-client --mode mockup normalize type nat -nat - -./octez-client --mode mockup normalize type 'list nat' -list nat - -./octez-client --mode mockup normalize type 'pair nat int' -pair nat int - -./octez-client --mode mockup normalize type 'list (pair nat int)' -list (pair nat int) - -./octez-client --mode mockup normalize type 'pair nat int bool' -pair nat (pair int bool) - -./octez-client --mode mockup normalize type 'list (pair nat int bool)' -list (pair nat (pair int bool)) - -./octez-client --mode mockup normalize type 'pair nat int bool bytes' -pair nat (pair int (pair bool bytes)) - -./octez-client --mode mockup normalize type 'list (pair nat int bool bytes)' -list (pair nat (pair int (pair bool bytes))) diff --git a/tezt/tests/expected/normalize.ml/Parisb- Test normalize with legacy flag.out b/tezt/tests/expected/normalize.ml/Parisb- Test normalize with legacy flag.out deleted file mode 100644 index 8ecc6976ccf662ba2ebc888828af88e97cb2a030..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/normalize.ml/Parisb- Test normalize with legacy flag.out +++ /dev/null @@ -1,10 +0,0 @@ - -./octez-client --mode mockup normalize data '{Elt %a 0 1}' of type 'map nat nat' --legacy -{ Elt 0 1 } - -./octez-client --mode mockup normalize data '{Elt %a 0 1}' of type 'map nat nat' -At (unshown) location 0, value { Elt %a 0 1 } -is invalid for type map nat nat. -At (unshown) location 1, unexpected annotation. -Fatal error: - ill-typed data expression diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - RPC API should work and be stable.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - RPC API should work and be stable.out deleted file mode 100644 index f87d440e6e51383940b61ab8497cda4fa83dc066..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - RPC API should work and be stable.out +++ /dev/null @@ -1,261 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" -GET http://[HOST]:[PORT]/global/smart_rollup_address -200 OK -"[SMART_ROLLUP_HASH]" - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "312d31", - "312d32", - "312d33", - "312d34", - "312d35" -] -200 OK -["scmsg2rwuPwGBrYsQHFuusVq5DAZFfJ4iGcAJ6Ttvyobd6b1V1oSpUk","scmsg3WtaZfwmQQzbHobfzcZw3JFy7eYAAJs9RZsGGrnzwEAnzPP5We","scmsg2VDC22BtmBrJD2vGKdjeNBMv7W6uw1uRVvJmW7jRv2z9yiQTcM","scmsg25K99LfhZYmLRgiyFGPswB3YiNoH6Lw97AuPeZEaC1cKpdNaiN","scmsg3j2jViLpky6CbTuQWUguz3HxuvUL3XZYppP8euHHuWeDdW6QZy"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "322d31", - "322d32", - "322d33", - "322d34", - "322d35" -] -200 OK -["scmsg2Q8u9Ufd95zmF2DmjyhgaHyDNud45t5MXWh4BTdnnVabCT7hFc","scmsg3eoXpnbxkuUcg5DPWLxbLxRaewCjpLnB3GUoT8fa3NdEV1zTj1","scmsg2CcNmHmfTshLkupfyLMsDRQC5bWEVUYJKAY4hWD1QkjeBzqQuU","scmsg2bwoquA7WfWQCmvEpmWV2HNJw6pXX8gojemMhNTdMJuaQvovwt","scmsg2jUikwFvAacRFXSsFiohz8Ac1FzFxUMMDjj2FRn4wwbEue9GE1"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "332d31", - "332d32", - "332d33", - "332d34", - "332d35" -] -200 OK -["scmsg3dpi4Ju7FjurV5ygFfchk7AzEs4fkQwP5osyEC7KPwmpShKQsd","scmsg3U7d1dZ6fZnGSkcQaSgQGmCA59fM9HdfaAxn6iUyhMjJ7tzPvg","scmsg2ybFzC2zNxSiU3JGDQXpUFBaMSyruCrTNxncJGaAJWpKGoSwVD","scmsg3JAvYLWsukJD9qdzj71rMsUSVJiM1sgMfRtu9CYmJWL3unEmdw","scmsg2KGintqwnFJ2DpEqPzQ2wwKrqE4aWXePHaac6Wk4dZ2zYDzxq4"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "342d31", - "342d32", - "342d33", - "342d34", - "342d35" -] -200 OK -["scmsg3ig6Tfoiqy7J4pvCA69Xq5YGYwazYFwsiUYwjdKKBmVEiM7Bra","scmsg3DuDpF1odPhoS6mVEYT1FFyrmUJWEdqqAL768KE3rV3yWBwEMo","scmsg2M9XdPeq2rrhH9wCVw9EuaUmhvwdkSHMUfBbCKx3TBoV2j8Zzk","scmsg3BwQX5BJdaTdYf9UcqV3G6CwyxJjY5YaTTwSZKmZJi35GCTRk7","scmsg3ZLrgvvQaWKJgHB3nyQPoR5n7HDHbGp6nX2SeB1So3Fv1zVqdR"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "352d31", - "352d32", - "352d33", - "352d34", - "352d35" -] -200 OK -["scmsg32tLLi3b6P9nffRaxRYevU9nFKTPLRcdGGDGMuBYxoNp49h9fU","scmsg2WrjiWD88fiebhAnoZokDocz9XF2MqPp15hpJT5xGKG7jvBnph","scmsg3TWeiN93kzSuDei1T7PiBoxjVUxdqvMnDZ1x1bW7deVakpCBaH","scmsg238Qn5sQPP83DUtBamFgXEy3M74Zb23Cd2AuaQNiKWrhhoCMRZ","scmsg2fcex43ebcuDHXPaTFn4gaPsBoUtcZLZ4LatPvEppoxX8USaKb"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "362d31", - "362d32", - "362d33", - "362d34", - "362d35" -] -200 OK -["scmsg33ufVokVubNNkPvhVC2xVA6YQjePMV9KYHk3suh4aUmZLkxDUJ","scmsg2Veu8WVquo3WghLBoabaFsxJvQmrgRSR3J94RDEp18oecM9jwE","scmsg3UB9prgoMs2tgEE9avT1FMTiUUT6Ub67fHdFsCGFqs3XXTUraS","scmsg2ppDMPFbXGEhnkASETkvG4AdmigQzPjDPZPmAU63nJrXtBG9FD","scmsg3BonQUZ9SLxwfDKKefrJWnkAF4A9cVmaDAKSxnq2dBoX7vmXRp"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "372d31", - "372d32", - "372d33", - "372d34", - "372d35" -] -200 OK -["scmsg3b7y5ysxfjzRiSQHWygRQ37bf8fVtum2rfk7YuXLQQzyt9bsU5","scmsg3NrtDG5ynFbdEXewroyCm1rcFNHYRWQvBj3ooG1kg1JWB5gSUd","scmsg3CS5J6TrAvHKZ31PLBmLtzciH5xH8rRLsR8tY6kmm7TdkHFbKk","scmsg3i6pSyMeUewYGSEbPX2skk552iKmiq9RPsHCeG8WMJfBGMenXy","scmsg3GbNbAxSSFpnYneMLBRnL4h6byyJpkTCpc5GwzyAEtS2xxpSCB"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "382d31", - "382d32", - "382d33", - "382d34", - "382d35" -] -200 OK -["scmsg2jSC9soMxLqf9EkgtoZioZbg9q25LBeBKmkwsmGD2a8E9FaZtx","scmsg3tcqypPLNPYVC6Rtx62jZyT6Tqmua6JeSvfqLMg4ENmC78R6VT","scmsg2y9Lzxk9vmPzdijxtV1cisN9GTfWfZYfsShGiaTNqUc15xqGfm","scmsg2pHbd5gcWS41nzKcfhtzQXaC7T1PkZpEqmGrY6LCjBLJzkqZQ8","scmsg3nJkzbFRfd6EQnw3QhyDC3W42WSiJ9t2iqZ46k1Ji6tuCxjSuN"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "392d31", - "392d32", - "392d33", - "392d34", - "392d35" -] -200 OK -["scmsg3RKmNvZggo7jsdgM71HebGFG3TfY2gh3Z1t4FNPqYReqBHHnxr","scmsg34ExXXaeUBYvf6hRTGAP64S34iYSjyyC9osS5FnRyjdDMpLaPm","scmsg23fBMGvPyBaNKS35AkuZM4PpnHaup3bSrLYX8ZshhX4aZ1c4mE","scmsg3qr7fZEEBrTZxn5YZKMDgQ1hBDf5GwKecJegJXJyLGp6nxcLBA","scmsg2NnWpkUjWnZPgfE2pnCFyY7SA471dnLU8PvGD89YjuJfntfA53"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31302d31", - "31302d32", - "31302d33", - "31302d34", - "31302d35" -] -200 OK -["scmsg23W2XaqYXEuxFFmQRZwgWwXiJ972nU4Tk1Um3KGGdr3AkqGBhV","scmsg24JUWpQyRvpYVRc2tgtMUJbzMrJWNLtidsZsLEfjBGiMFNuMTK","scmsg3bfLJRgEbj7FTBCnJ6ZsuxMf8KNVLLCZ8EkpTQbiLDAVmWB3rS","scmsg3NGcoW9bSrz6A5BvXcnxk2255yAWCGsJgrGadjzE4JpKpFveZe","scmsg3eAbwnP55Vg8rGZRBQtWHeLDWmWEJhXvm62cNa2r6mj7Y8iMxH"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31312d31", - "31312d32", - "31312d33", - "31312d34", - "31312d35" -] -200 OK -["scmsg2vRX381tupMRsoWfXMYG4rVEkNiVZZxAhjSDmpdHbUjS9RUwQs","scmsg3Mph77VXyCm4m7FEDFoqyPzuevdN7W3UNqnXJttYRTtvY3vVVW","scmsg3dZBvX4ArK26LoCqR7mKhMa5DnWm9T5CEYZPfrUo8xhz6bbofd","scmsg237KVpGjKJxKPnGvYSLqkqtEURVG6ive7dNqPo2x6X4SDhsctC","scmsg2rFWrXD9jQ8UjL6XRcKRq6HJQ9fgdKgXxf4Auj5F5bxzYwqkXG"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31322d31", - "31322d32", - "31322d33", - "31322d34", - "31322d35" -] -200 OK -["scmsg2k1HPFjtZFMUJUHKFbMkaijLa5ns8UMRb5h2d8iynf1gzeFCHZ","scmsg3UdpWDaa29XQ3hYHZwe2kiLfZ24KrkcVh58TR2yzYJsAoBGVwa","scmsg2qG2uiM8p8i49D1xp8NiznNAe6e3CFPwQgb4nzty9Wmp4qspzq","scmsg3B2psrEy3hxFURDzLtYqPckSycE8NWbuB2pZwKk6LaRhPUR3jh","scmsg3ccqjHaRH7gE98cZGvFBNHj1QgnPNZiByvB5rGpQMMC7MthkR8"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31332d31", - "31332d32", - "31332d33", - "31332d34", - "31332d35" -] -200 OK -["scmsg3ifsPVXRWwo4BiBUcFJcNNpdCGhnJrcFQqH8accCscdE6Jdgys","scmsg3TsK1LMasQkWUcXhoVZBCaEJDFk8jVUxQkjEzRUi7AJU8KGXRE","scmsg3R5hqiXmVL8aQTzzTKwfiFXsoDj9dE96A3B3cd2VsUBZGdjszC","scmsg27jkAx3C8K2w8m6bPUHMsBNKqZ6y1A2XN5Ujw4nCmbVWzK6iHr","scmsg38gfhAaeaNovx4XAKCQ97D9zEGmebYXvkKioDWd5DMLdAbVCDF"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31342d31", - "31342d32", - "31342d33", - "31342d34", - "31342d35" -] -200 OK -["scmsg3SQfcD9VuNoUzUpQqGtETZXiMmDVLHUkHVxKiA87kYaYVsjDNJ","scmsg25qzqinLMRAeezYjTR4gh3srY4H6mMRpGARJeqTm31mKSKjnE7","scmsg322sHe82ordku5DRR4xQ6Di3SdxjxV8kg7CBAdE7sxAmcD8yA5","scmsg2xCTmrcSLzzxUP5aXpdGS4zLttFQiuTLzEafuRrXGmsAyDXqVg","scmsg3CjDyDbTJcNtexxdqhqUPLoWgW9bjyvgsFnpQDNbDK2MK7Ju9o"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31352d31", - "31352d32", - "31352d33", - "31352d34", - "31352d35" -] -200 OK -["scmsg1zCJDwhb18RRCCXJgXxXXeapZWzCz1zn89xqnKf1esT7kvMWUb","scmsg3idErXZUCGh2rHHUvuWqGgCXH523QLfPEdXh7JzVUGZ2acJbCC","scmsg2sfmQTX5TmmLKkAeRg4sWHXLnmWjnouYUXUNCLVsSNWPnNtLR9","scmsg2xipcKaxHRPtpk4qCZ2tB6JG8h4UPtr9GP7fyyZFxXB69NSNDi","scmsg21cRa6ffrFxAQVXQvA5MsVfNSN9NP2ku7NdYvNywfHA4U4Jp65"] - -GET http://[HOST]:[PORT]/global/block/head/hash -200 OK -"[BLOCK_HASH]" - -GET http://[HOST]:[PORT]/global/block/5/hash -200 OK -"[BLOCK_HASH]" - -GET http://[HOST]:[PORT]/global/block/finalized/level -200 OK -16 - -GET http://[HOST]:[PORT]/global/block/head/num_messages -200 OK -"8" - -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/value?key=/readonly/wasm_version -404 Not Found - -GET http://[HOST]:[PORT]/global/block/head/durable/arith/value?key=/readonly/wasm_version -404 Not Found - -GET http://[HOST]:[PORT]/global/block/head/status -200 OK -"Waiting for input message" - -GET http://[HOST]:[PORT]/global/block/head/ticks -200 OK -"28" - -GET http://[HOST]:[PORT]/global/block/head/state_hash -200 OK -"[SC_ROLLUP_PVM_STATE_HASH]" - -GET http://[HOST]:[PORT]/global/tezos_head -200 OK -"[BLOCK_HASH]" - -GET http://[HOST]:[PORT]/global/tezos_level -200 OK -18 - diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - Whitelisted staker can publish a commitment.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - Whitelisted staker can publish a commitment.out deleted file mode 100644 index ee48e034e0ba562476ccf95adf88113799eff36e..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - Whitelisted staker can publish a commitment.out +++ /dev/null @@ -1,2 +0,0 @@ - -./octez-client --wait none publish commitment from bootstrap1 for smart rollup '[SMART_ROLLUP_HASH]' with compressed state '[SC_ROLLUP_PVM_STATE_HASH]' at inbox level 2 and predecessor '[SC_ROLLUP_COMMITMENT_HASH]' and number of ticks 1 diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - boot sector is evaluated.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - boot sector is evaluated.out deleted file mode 100644 index fd5968cda06728f93d6d14992ccc283e91f0b0c1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - boot sector is evaluated.out +++ /dev/null @@ -1,92 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind arith of type string with kernel '10 10 10 + +' --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.469 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000453 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000453 - payload fees(the block proposer) ....... +ꜩ0.000453 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '8eb6ccf70902fcd3fa2040cf27dda202a71d85625516f22a0c9c67fc86057a7b' - This smart rollup origination was successfully applied - Consumed gas: 1930.436 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" - -./octez-client --wait none originate smart rollup rollup2 from bootstrap2 of kind arith of type string with kernel 31 --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.103 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000443 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000443 - payload fees(the block proposer) ....... +ꜩ0.000443 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: 'b682df8c87f218dfa8151f2eaafe20e6f8d87b243f8fe63de6d49485a8bf6eea' - This smart rollup origination was successfully applied - Consumed gas: 1930.070 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup2" - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/genesis_info' -{ "level": 2, - "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/commitment/[SC_ROLLUP_COMMITMENT_HASH]' -{ "compressed_state": - "[SC_ROLLUP_PVM_STATE_HASH]", - "inbox_level": 2, - "predecessor": "[SC_ROLLUP_COMMITMENT_HASH]", - "number_of_ticks": "0" } - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/genesis_info' -{ "level": 3, - "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } - -./octez-client rpc get '/chains/main/blocks/head/context/smart_rollups/smart_rollup/[SMART_ROLLUP_HASH]/commitment/[SC_ROLLUP_COMMITMENT_HASH]' -{ "compressed_state": - "[SC_ROLLUP_PVM_STATE_HASH]", - "inbox_level": 3, - "predecessor": "[SC_ROLLUP_COMMITMENT_HASH]", - "number_of_ticks": "0" } diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - origination of a SCORU executes without error.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - origination of a SCORU executes without error.out deleted file mode 100644 index af45c295c5d9183ee8bd052880bb7238ca2568f9..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - origination of a SCORU executes without error.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - participant of a refutation game are slashed-rewarded.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - participant of a refutation game are slashed-rewarded.out deleted file mode 100644 index dd1dc9010ea43fd66d595a85e74b29844218cf86..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - participant of a refutation game are slashed-rewarded.out +++ /dev/null @@ -1,141 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" - -./octez-client --wait none publish commitment from '[PUBLIC_KEY_HASH]' for smart rollup '[SMART_ROLLUP_HASH]' with compressed state '[SC_ROLLUP_PVM_STATE_HASH]' at inbox level 4 and predecessor '[SC_ROLLUP_COMMITMENT_HASH]' and number of ticks 1 -Node is bootstrapped. -Estimated gas: 6588.924 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000989 - Expected counter: 1 - Gas limit: 6689 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000989 - payload fees(the block proposer) ....... +ꜩ0.000989 - Smart rollup commitment publishing: - Address: [SMART_ROLLUP_HASH] - Commitment: - compressed_state: [SC_ROLLUP_PVM_STATE_HASH] - inbox_level: 4 - predecessor: [SC_ROLLUP_COMMITMENT_HASH] - number_of_ticks: 1 - This smart rollup commitment publishing was successfully applied - Consumed gas: 6588.858 - Hash of commit: [SC_ROLLUP_COMMITMENT_HASH] - Commitment published at level: 6 - Balance updates: - [PUBLIC_KEY_HASH] ...................................................... -ꜩ10000 - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... +ꜩ10000 - - -./octez-client --wait none publish commitment from '[PUBLIC_KEY_HASH]' for smart rollup '[SMART_ROLLUP_HASH]' with compressed state '[SC_ROLLUP_PVM_STATE_HASH]' at inbox level 4 and predecessor '[SC_ROLLUP_COMMITMENT_HASH]' and number of ticks 2 -Node is bootstrapped. -Estimated gas: 7287.126 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.001059 - Expected counter: 1 - Gas limit: 7388 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.001059 - payload fees(the block proposer) ....... +ꜩ0.001059 - Smart rollup commitment publishing: - Address: [SMART_ROLLUP_HASH] - Commitment: - compressed_state: [SC_ROLLUP_PVM_STATE_HASH] - inbox_level: 4 - predecessor: [SC_ROLLUP_COMMITMENT_HASH] - number_of_ticks: 2 - This smart rollup commitment publishing was successfully applied - Consumed gas: 7287.060 - Hash of commit: [SC_ROLLUP_COMMITMENT_HASH] - Commitment published at level: 7 - Balance updates: - [PUBLIC_KEY_HASH] ...................................................... -ꜩ10000 - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... +ꜩ10000 - - -./octez-client --wait none timeout dispute on smart rollup '[SMART_ROLLUP_HASH]' with '[PUBLIC_KEY_HASH]' against '[PUBLIC_KEY_HASH]' from bootstrap1 -Node is bootstrapped. -Estimated gas: 3715.433 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000668 - Expected counter: 2 - Gas limit: 3816 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000668 - payload fees(the block proposer) ....... +ꜩ0.000668 - Smart rollup refutation timeout: - Address: [SMART_ROLLUP_HASH] - First staker (Alice): [PUBLIC_KEY_HASH] - Second staker (Bob): [PUBLIC_KEY_HASH] - This smart rollup refutation timeout was successfully applied - Consumed gas: 3715.367 - Refutation game status: Game ended: [PUBLIC_KEY_HASH] lost because: timeout - Balance updates: - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... -ꜩ10000 - smart rollup refutation punishments ....................................................... +ꜩ10000 - smart rollup refutation rewards ........................................................... -ꜩ5000 - [PUBLIC_KEY_HASH] ...................................................... +ꜩ5000 - diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - recover bond of stakers.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - recover bond of stakers.out deleted file mode 100644 index 07922b00364ee00778d274bcc0d473331d8c4b3c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - recover bond of stakers.out +++ /dev/null @@ -1,195 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind arith of type string with kernel --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1930.030 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 1 - Gas limit: 2031 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Smart rollup origination: - Kind: arith - Parameter type: string - Kernel Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart rollup origination was successfully applied - Consumed gas: 1929.997 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" - -./octez-client --wait none publish commitment from '[PUBLIC_KEY_HASH]' for smart rollup '[SMART_ROLLUP_HASH]' with compressed state '[SC_ROLLUP_PVM_STATE_HASH]' at inbox level 12 and predecessor '[SC_ROLLUP_COMMITMENT_HASH]' and number of ticks 1 -Node is bootstrapped. -Estimated gas: 6588.924 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000989 - Expected counter: 2 - Gas limit: 6689 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000989 - payload fees(the block proposer) ....... +ꜩ0.000989 - Smart rollup commitment publishing: - Address: [SMART_ROLLUP_HASH] - Commitment: - compressed_state: [SC_ROLLUP_PVM_STATE_HASH] - inbox_level: 12 - predecessor: [SC_ROLLUP_COMMITMENT_HASH] - number_of_ticks: 1 - This smart rollup commitment publishing was successfully applied - Consumed gas: 6588.858 - Hash of commit: [SC_ROLLUP_COMMITMENT_HASH] - Commitment published at level: 14 - Balance updates: - [PUBLIC_KEY_HASH] ...................................................... -ꜩ10000 - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... +ꜩ10000 - - -./octez-client --wait none publish commitment from '[PUBLIC_KEY_HASH]' for smart rollup '[SMART_ROLLUP_HASH]' with compressed state '[SC_ROLLUP_PVM_STATE_HASH]' at inbox level 12 and predecessor '[SC_ROLLUP_COMMITMENT_HASH]' and number of ticks 1 -Node is bootstrapped. -Estimated gas: 6810.852 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.001012 - Expected counter: 1 - Gas limit: 6911 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.001012 - payload fees(the block proposer) ....... +ꜩ0.001012 - Smart rollup commitment publishing: - Address: [SMART_ROLLUP_HASH] - Commitment: - compressed_state: [SC_ROLLUP_PVM_STATE_HASH] - inbox_level: 12 - predecessor: [SC_ROLLUP_COMMITMENT_HASH] - number_of_ticks: 1 - This smart rollup commitment publishing was successfully applied - Consumed gas: 6810.786 - Hash of commit: [SC_ROLLUP_COMMITMENT_HASH] - Commitment published at level: 14 - Balance updates: - [PUBLIC_KEY_HASH] ...................................................... -ꜩ10000 - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... +ꜩ10000 - - -./octez-client --wait none cement commitment from bootstrap1 for smart rollup '[SMART_ROLLUP_HASH]' -Node is bootstrapped. -Estimated gas: 4839.262 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000738 - Expected counter: 3 - Gas limit: 4940 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000738 - payload fees(the block proposer) ....... +ꜩ0.000738 - Smart rollup commitment cementing: - Address: [SMART_ROLLUP_HASH] - This smart rollup commitment cementing was successfully applied - Consumed gas: 4839.196 - Inbox level: 12 - Commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - - -./octez-client --wait none recover bond of '[PUBLIC_KEY_HASH]' for smart rollup '[SMART_ROLLUP_HASH]' from '[PUBLIC_KEY_HASH]' --fee 1 -Node is bootstrapped. -Estimated gas: 3084.518 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ1 - Expected counter: 4 - Gas limit: 3185 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1 - payload fees(the block proposer) ....... +ꜩ1 - Smart rollup bond retrieval: - Address: [SMART_ROLLUP_HASH] - Staker: [PUBLIC_KEY_HASH] - This smart rollup bond retrieval was successfully applied - Balance updates: - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... -ꜩ10000 - [PUBLIC_KEY_HASH] ...................................................... +ꜩ10000 - Consumed gas: 3084.418 - - -./octez-client --wait none recover bond of '[PUBLIC_KEY_HASH]' for smart rollup '[SMART_ROLLUP_HASH]' from '[PUBLIC_KEY_HASH]' --fee 1 -Node is bootstrapped. -Estimated gas: 3084.518 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ1 - Expected counter: 5 - Gas limit: 3185 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1 - payload fees(the block proposer) ....... +ꜩ1 - Smart rollup bond retrieval: - Address: [SMART_ROLLUP_HASH] - Staker: [PUBLIC_KEY_HASH] - This smart rollup bond retrieval was successfully applied - Balance updates: - Frozen_bonds([PUBLIC_KEY_HASH],[SMART_ROLLUP_HASH]) ... -ꜩ10000 - [PUBLIC_KEY_HASH] ...................................................... +ꜩ10000 - Consumed gas: 3084.418 - diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (degraded_new).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (degraded_new).out deleted file mode 100644 index 21dd59570246db53bb9b6ee82c14493c14e841ea..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (degraded_new).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "417", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs11XB2HCGteKCrjd3RzTeJErbFbFQFbWtztckuCCTF6rgMjFxJDX", - "tick": "13" - }, - { - "state": "srs12VUVuf4HJpcGQJDzVcpb3aaFuAvjENSgV4nRztkmWBSxL5WHaF", - "tick": "26" - }, - { - "state": "srs12ZnLptmHevRWau257DcrcnM2eNnFo7bFbc2sv2foTD8ZKCXTZe", - "tick": "39" - }, - { - "state": "srs12xQANQN4eAkSsP8zmcYkPpAFK4UTpAU6TvoumjmBiYy6CkVYzC", - "tick": "52" - }, - { - "state": "srs12s3Cb9eyFoavFQUWAZNjSnSFi5HEnkYfHyapLB2P5u7eB2Dd4K", - "tick": "65" - }, - { - "state": "srs128dvNSvYvCSMJfddzr7PcbH2HVynAF4dxEwLvTeVVSejCCa3bE", - "tick": "78" - }, - { - "state": "srs12B5HfbEsm6JPLh8Mm7xrbwpz4A3YLw7r5fKkyqZjgmGns647jV", - "tick": "91" - }, - { - "state": "srs124dtumicoAkWyp3KDjdtix2bZUMmhK4E8eP3RQnJtpVWJ9gQit", - "tick": "104" - }, - { - "state": "srs121MBsHEQZF8ytUDwsP6bj4vVdhMgvD1ELph9vCQsCAj7umHK7m", - "tick": "117" - }, - { - "state": "srs13NVfKCCRucqkqBw1x84RTmf4haNGL6dPbQYzEgQ36EHJfhnC9j", - "tick": "130" - }, - { - "state": "srs11qS1sYhQJGb2ceCuRXAd4u3nyVwboRVK7Bwud73zhTXiR1rr3Z", - "tick": "143" - }, - { - "state": "srs12Q78Qxi7yt6WqycuUTkPNqfd4osFgXLtDaDFgC8TGLTzUJWSZN", - "tick": "156" - }, - { - "state": "srs12YeRf1kLpwGy41jk263uNgs7qai2m1y7XGeBancyn6NPShdAac", - "tick": "169" - }, - { - "state": "srs12ybMDhWm9Nc6nRuir2fjDXjDc55zpEttHvLihc3Uj2WnEf4FA9", - "tick": "182" - }, - { - "state": "srs13DimeJzN59Sxz36YD5XWVNg36DPwMrEBAa1MHAyqAw4MsNK3e8", - "tick": "195" - }, - { - "state": "srs11rLYvJZR3pFR7czgeyqXx9BAecKP2GX9Xob59W5VNuSPUacGtt", - "tick": "208" - }, - { - "state": "srs11in5mAETxNPfnpce9FDrcQZoe4gJtmFLHXYVs4qbn5G6SU7Zcd", - "tick": "221" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12MYeKGU7Z4FaTLv1zvVnM5LSyU4rxa8AYYcww2eFCZVKdMZuEb", - "tick": "247" - }, - { - "state": "srs137JBFZyQNJJM52n71pdejwufxfwQrQ4z41Xb2TZFi3kPxo9GVK", - "tick": "260" - }, - { - "state": "srs12EYym2XxLNcVELe52ayForgTHud15bZ4DvZPMMbkVtHfpamF96", - "tick": "273" - }, - { - "state": "srs12i9d5DFwE9mwBJ7dZ1CNBVpRkHgB5Jw3HkKzsQXFjDAjezdk3G", - "tick": "286" - }, - { - "state": "srs12vL82Rtjse9cbjRPKKm3D6CMcyCMJrnaKLAzFoksXZwtH485nS", - "tick": "299" - }, - { - "state": "srs11WShqggcBnBpSieSH5xKz2F6xKmWJpR2i7TEJpVwkhJzPPYdud", - "tick": "312" - }, - { - "state": "srs11xF2PURqwnLMV1euEAT4tAqxkQ8TXbuzX5Db9ecXzEmq4vdNVc", - "tick": "325" - }, - { - "state": "srs13Loomnt2mmeCnkeL2Aj8dCKDVHKyboHgYo1czxciX7cGTw6FBw", - "tick": "338" - }, - { - "state": "srs136CJnze7BAo2W7QfeXfTDCgPiJb1B96ZjRTwFBDPSEj4TxRAms", - "tick": "351" - }, - { - "state": "srs11mTsFKqAKVhxCpemyP7ZgRSxp6MEmsDg8TbQuFE9KR6JhLvMVt", - "tick": "364" - }, - { - "state": "srs1224yjiE2kaEwojELN5JxPqBWN1Tg2GexDyqSXR9nF8zcycdnLi", - "tick": "377" - }, - { - "state": "srs11UPJL2dsoKuoYTLaC4P4btBQpX64nAZKPP91cbcjB8EtooyxoX", - "tick": "390" - }, - { - "state": "srs11mzrfqsjbL2PqsFpMDwyF876tz4tLpVbSrZRq52kuyYJCMYCKh", - "tick": "403" - }, - { - "state": "srs12GENJ4uXAQmRdZJQuitRbD6LxNYLkKK4yysjwBLmV2mZJosroC", - "tick": "417" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "237", - "end_tick": "238", - "dissection": [ - { - "state": "srs12bo57GfkUkpNopgptNPbtz68dZfojHbyC6ubeJVgptm6vBVSns", - "tick": "237" - }, - { - "state": "srs132gM47wMyDBtD4LLHRLjJwTtThhVJZD41egGDbupcNC9C43N3K", - "tick": "238" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (degraded_ongoing).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (degraded_ongoing).out deleted file mode 100644 index 21dd59570246db53bb9b6ee82c14493c14e841ea..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (degraded_ongoing).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "417", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs11XB2HCGteKCrjd3RzTeJErbFbFQFbWtztckuCCTF6rgMjFxJDX", - "tick": "13" - }, - { - "state": "srs12VUVuf4HJpcGQJDzVcpb3aaFuAvjENSgV4nRztkmWBSxL5WHaF", - "tick": "26" - }, - { - "state": "srs12ZnLptmHevRWau257DcrcnM2eNnFo7bFbc2sv2foTD8ZKCXTZe", - "tick": "39" - }, - { - "state": "srs12xQANQN4eAkSsP8zmcYkPpAFK4UTpAU6TvoumjmBiYy6CkVYzC", - "tick": "52" - }, - { - "state": "srs12s3Cb9eyFoavFQUWAZNjSnSFi5HEnkYfHyapLB2P5u7eB2Dd4K", - "tick": "65" - }, - { - "state": "srs128dvNSvYvCSMJfddzr7PcbH2HVynAF4dxEwLvTeVVSejCCa3bE", - "tick": "78" - }, - { - "state": "srs12B5HfbEsm6JPLh8Mm7xrbwpz4A3YLw7r5fKkyqZjgmGns647jV", - "tick": "91" - }, - { - "state": "srs124dtumicoAkWyp3KDjdtix2bZUMmhK4E8eP3RQnJtpVWJ9gQit", - "tick": "104" - }, - { - "state": "srs121MBsHEQZF8ytUDwsP6bj4vVdhMgvD1ELph9vCQsCAj7umHK7m", - "tick": "117" - }, - { - "state": "srs13NVfKCCRucqkqBw1x84RTmf4haNGL6dPbQYzEgQ36EHJfhnC9j", - "tick": "130" - }, - { - "state": "srs11qS1sYhQJGb2ceCuRXAd4u3nyVwboRVK7Bwud73zhTXiR1rr3Z", - "tick": "143" - }, - { - "state": "srs12Q78Qxi7yt6WqycuUTkPNqfd4osFgXLtDaDFgC8TGLTzUJWSZN", - "tick": "156" - }, - { - "state": "srs12YeRf1kLpwGy41jk263uNgs7qai2m1y7XGeBancyn6NPShdAac", - "tick": "169" - }, - { - "state": "srs12ybMDhWm9Nc6nRuir2fjDXjDc55zpEttHvLihc3Uj2WnEf4FA9", - "tick": "182" - }, - { - "state": "srs13DimeJzN59Sxz36YD5XWVNg36DPwMrEBAa1MHAyqAw4MsNK3e8", - "tick": "195" - }, - { - "state": "srs11rLYvJZR3pFR7czgeyqXx9BAecKP2GX9Xob59W5VNuSPUacGtt", - "tick": "208" - }, - { - "state": "srs11in5mAETxNPfnpce9FDrcQZoe4gJtmFLHXYVs4qbn5G6SU7Zcd", - "tick": "221" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12MYeKGU7Z4FaTLv1zvVnM5LSyU4rxa8AYYcww2eFCZVKdMZuEb", - "tick": "247" - }, - { - "state": "srs137JBFZyQNJJM52n71pdejwufxfwQrQ4z41Xb2TZFi3kPxo9GVK", - "tick": "260" - }, - { - "state": "srs12EYym2XxLNcVELe52ayForgTHud15bZ4DvZPMMbkVtHfpamF96", - "tick": "273" - }, - { - "state": "srs12i9d5DFwE9mwBJ7dZ1CNBVpRkHgB5Jw3HkKzsQXFjDAjezdk3G", - "tick": "286" - }, - { - "state": "srs12vL82Rtjse9cbjRPKKm3D6CMcyCMJrnaKLAzFoksXZwtH485nS", - "tick": "299" - }, - { - "state": "srs11WShqggcBnBpSieSH5xKz2F6xKmWJpR2i7TEJpVwkhJzPPYdud", - "tick": "312" - }, - { - "state": "srs11xF2PURqwnLMV1euEAT4tAqxkQ8TXbuzX5Db9ecXzEmq4vdNVc", - "tick": "325" - }, - { - "state": "srs13Loomnt2mmeCnkeL2Aj8dCKDVHKyboHgYo1czxciX7cGTw6FBw", - "tick": "338" - }, - { - "state": "srs136CJnze7BAo2W7QfeXfTDCgPiJb1B96ZjRTwFBDPSEj4TxRAms", - "tick": "351" - }, - { - "state": "srs11mTsFKqAKVhxCpemyP7ZgRSxp6MEmsDg8TbQuFE9KR6JhLvMVt", - "tick": "364" - }, - { - "state": "srs1224yjiE2kaEwojELN5JxPqBWN1Tg2GexDyqSXR9nF8zcycdnLi", - "tick": "377" - }, - { - "state": "srs11UPJL2dsoKuoYTLaC4P4btBQpX64nAZKPP91cbcjB8EtooyxoX", - "tick": "390" - }, - { - "state": "srs11mzrfqsjbL2PqsFpMDwyF876tz4tLpVbSrZRq52kuyYJCMYCKh", - "tick": "403" - }, - { - "state": "srs12GENJ4uXAQmRdZJQuitRbD6LxNYLkKK4yysjwBLmV2mZJosroC", - "tick": "417" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "237", - "end_tick": "238", - "dissection": [ - { - "state": "srs12bo57GfkUkpNopgptNPbtz68dZfojHbyC6ubeJVgptm6vBVSns", - "tick": "237" - }, - { - "state": "srs132gM47wMyDBtD4LLHRLjJwTtThhVJZD41egGDbupcNC9C43N3K", - "tick": "238" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof).out deleted file mode 100644 index 818f951869434eac318701a6b6850bc2a38bd58b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof).out +++ /dev/null @@ -1,156 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "633", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs136djDFuVnqYeyDr9UbyHP2SCqQbq8dnXZY6ePsS2aThtWDr2Ai", - "tick": "19" - }, - { - "state": "srs11sqLRJh2RwZdtg71dn5VddXExoYHQByQWYr7XsvnXojVXaLaRo", - "tick": "38" - }, - { - "state": "srs12qSwJBtkq9B4VcpcSQAigEVBw5gsLTLgWoZ3h8WQm5FU5vSxpy", - "tick": "57" - }, - { - "state": "srs12SbiEtcNeAPNX1YNC83Ysm2wUToTbP14m7nAR3NUcJKTprUGfV", - "tick": "76" - }, - { - "state": "srs11TLxQ6xy4HxoT4tonedSZ4nR3wS6nPEt9k4kJgCTpCbfwATfZU", - "tick": "95" - }, - { - "state": "srs13Cy8eZRTBm5QM6BXKRJ1NPQzNibT8UBUDLKedW5RG9ojyygEja", - "tick": "114" - }, - { - "state": "srs12gYytLqonfQQp3Q1wW5kPywFxgBmR6168L6bW9TUCTdP7rimpQ", - "tick": "133" - }, - { - "state": "srs129US7aZPgijAeWY81dXLGPrvfyY5PVbH5vMdG4dLmVcgNiTpSn", - "tick": "152" - }, - { - "state": "srs13CHzURWpekmoxepmLWivVNZqUEeUrztuGuWeswokZYrRnWRR6S", - "tick": "171" - }, - { - "state": "srs12BVfJAc9r5JRVSXcJFMGTBc6e7qGrdGUmrXfdN8QUiqkDQoSUC", - "tick": "190" - }, - { - "state": "srs12k9nfFw67eGmyTtaHMBSLjRaPMkJMjvKtK2ubcdVy63wkCoBhY", - "tick": "209" - }, - { - "state": "srs12DjAvkDmSo8FSMamgMHhWitZj4KVuNTCisiCYeJkycfn5pcjjE", - "tick": "228" - }, - { - "state": "srs12MYeKGU7Z4FaTLv1zvVnM5LSyU4rxa8AYYcww2eFCZVKdMZuEb", - "tick": "247" - }, - { - "state": "srs11vntikstjho8tvq7CSEGi8STaZ3EpuKQ6mtdnKX5ymMff9zdYE", - "tick": "266" - }, - { - "state": "srs135KBowyeD3NQCtEh4ufvja4JUVStxSCNWZcTGZ7J5YRy9Ci3Sv", - "tick": "285" - }, - { - "state": "srs12oGJ623voxVYotTwCVhs1X6PkNSie61VY41FtKcoUJ92Pzjkwc", - "tick": "304" - }, - { - "state": "srs12LkRiYqgvJLTHtQ16WAKfESd1M7szoq85baWTs7q773JCPJm2o", - "tick": "323" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12oTSNspRC6jYQBC6SBbbjLGvZdwzHGB3MpH9YauX5WnG1nR3rk", - "tick": "361" - }, - { - "state": "srs11yCYcjjygmBdQBHdVJiWTu4iPrK74PvXqqTPAuvDWnWRFdt8zR", - "tick": "380" - }, - { - "state": "srs12euFuDjku1Aht4aSrt9vu92pWNWYCG2WCPfj9Unnx6Sp1gCu1H", - "tick": "399" - }, - { - "state": "srs11YiQvUc9xWrqY75PHU134RYHVYqDvnPHWdCGkYEMyMMx7H6NiZ", - "tick": "418" - }, - { - "state": "srs12AMmCyw3wsxK28Cdg8WPhzdRe4W2V1u6z6MukY52XzMoiASAv8", - "tick": "437" - }, - { - "state": "srs11dsgEhcACoZfZFioGpSYX2mTZNdtmV2E6CZRM7Ctu3jPjvvVTR", - "tick": "456" - }, - { - "state": "srs11orZFWdbyT5nb3UWV8Gp76ZUq57aUXaXhQiLYLVD9qW8VVgijJ", - "tick": "475" - }, - { - "state": "srs12zM6jTWMXtgAyJgEt4uR7ZNv8b2zjNBBNy6t2k8EyEhJ31rhBV", - "tick": "494" - }, - { - "state": "srs11nZY6GFt1bDrgANFKSb5EfzWQ1tx4ioyWY1ZkSRhKRujXG7PhM", - "tick": "513" - }, - { - "state": "srs12yo5wkoFZjL6cHgPPMqzz2HZ5Y4ThYejfhB5QUqhAzrk7UJBGW", - "tick": "532" - }, - { - "state": "srs13DpzUuwPEBhHBxr2CfRcyycJZYxRTjWJ4GBy4HfzNiNxkjW1mS", - "tick": "551" - }, - { - "state": "srs11pWX2JdSoTB4vdvEBnZFhkKujFyYHFFtnbLUKhduJnriGYWbHM", - "tick": "570" - }, - { - "tick": "589" - }, - { - "tick": "633" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "118", - "end_tick": "119", - "dissection": [ - { - "state": "srs13C1SQJWwLbx5NEAwWhXZK4R3rkYSQDu23PE2BD6GogwPAJTvN6", - "tick": "118" - }, - { - "state": "srs12tb3f8f32fybaGsYXZRwsGz3zr3N97n9VyDpDkkbEGzEn12W4J", - "tick": "119" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_at_genesis).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_at_genesis).out deleted file mode 100644 index 8cc709af826ffda018ccf7625aa47be8c7dfe568..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_at_genesis).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "582", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12fH3qaJPnV1ffBy6CmCeWNbnrRTYnBAJmpKmSijG4qAr1nF5qq", - "tick": "18" - }, - { - "state": "srs12U5Qo3eYMXF21V2WSqECogLqvuQFzFj46V8gCV44jTt9JbfPAt", - "tick": "36" - }, - { - "state": "srs11ojK4N7Jd3Yp71thpTaria7vxTqLVvJ78bq7AzBUK1Lfq19iXx", - "tick": "54" - }, - { - "state": "srs12mBVd34mTSQtHaJhCS5xBAzP4adN9RCPM6QnMnFqKCCK8AWCKB", - "tick": "72" - }, - { - "state": "srs122h7n2D1zgiE4rHLmzeoDQV1RLRJ73ha32DDbU3d54U7zaZPXc", - "tick": "90" - }, - { - "state": "srs129Wp6b9eXF9gZweXmNWeBKYTbXUDkMZY2szYgmrNzEgqk2YpDV", - "tick": "108" - }, - { - "state": "srs125AF7aoft7puAeoxtUmP1aajfLJeUKJA57LNJusncWd6zKRJjK", - "tick": "126" - }, - { - "state": "srs12kzv8cSYFt4DMUacbK32CTdReQqPRBYwMRsrKK6btByT3hbTLY", - "tick": "144" - }, - { - "state": "srs12QvEgKbjbZZ3ANqPMrqiMi3mw3tTEcsWixXgAY7X2gHABBNQNZ", - "tick": "162" - }, - { - "state": "srs11g395YpbNK3ZJopvv6cc7Gcc8H4Lv2MNhaQsCqfV7LztCUBvV1", - "tick": "180" - }, - { - "state": "srs11xVcimxB4Gb8LuzVyVXqjaB9S6YVbw2uR7rqoZr1VStr4b7QZS", - "tick": "198" - }, - { - "state": "srs11x2S5HDRwueA6tCKhipwohi2pWntjTpruhF1gmUWw3bRYW6szf", - "tick": "216" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12kh4XcDdzKZ8Pc4T7QsXm36XUqVe4cxtWJ2BxHrHwENrqEL9Ay", - "tick": "252" - }, - { - "state": "srs11hjoicX5kycSCkvbxZ7LDWwdbsV2qWEXBDurY3Sf5zwS8tUL3a", - "tick": "270" - }, - { - "state": "srs11n9qrtzJPgMSFze3erzSzvB5EAm48kTnEC9oJJYqxV6vRApyK5", - "tick": "288" - }, - { - "state": "srs1336xiQkLT9knTk1fco58u9hxKNqdHS1YPUwxGKLT2MhPzEMC7N", - "tick": "306" - }, - { - "state": "srs12CfNGraungvWxhYVdXr26w2aS1Ei6Eo5XgzDLdqn4LRDdduqom", - "tick": "324" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12ekcYu6yArjgAGuJAg5cwq6zPvKxdk6KCmnBtGYy7JP6kEBFqb", - "tick": "360" - }, - { - "state": "srs12a3AthkZ1i6H2x4RrPXN49iUmCVBSBkteWQTgEyWzQhpCzpoZD", - "tick": "378" - }, - { - "state": "srs12EXB6ARrgEz3pi71R6nzxtQ4PMY8Azwy2DYmmTJRkne8d6rW42", - "tick": "396" - }, - { - "state": "srs11fDjhakCGzwrmM7bHy4RJp8aGUgSFRN57tDDL2LzhXvDukwEJ1", - "tick": "414" - }, - { - "state": "srs1397ahAZp3GHxcSuvgvSk3MrdNaosN2nhkx8kDwuh3GF2ruEWzB", - "tick": "432" - }, - { - "state": "srs12sZ9L8e4CVC86wfn8o5KwroqUxMdGyzkjdkaVC4BM3PCeu1foW", - "tick": "450" - }, - { - "state": "srs13Jw5EzkDA1kK1ysWBT7QoQdoBWPtWLxbcg7tzhqmoQpMAzPDyr", - "tick": "468" - }, - { - "state": "srs12TjQfFTgrKzckqg65A3FUJfErZ2Eu6SXj2tWDAsi8iRf5hTcR6", - "tick": "486" - }, - { - "state": "srs12qYpCJiJoTiro1gs1y1HJNVLYv9Dp72bKDqwick9speqAPonWg", - "tick": "504" - }, - { - "state": "srs12JqZ2LaeC5RSw5xiaKDnUyW3uoH1L7qLB29fTR6tX7UH5VeXjk", - "tick": "522" - }, - { - "state": "srs13JbbzvBhzL8gjxyUGBQfZ67i4gFbab3qVQYSJoMg9xgQuovNMB", - "tick": "540" - }, - { - "state": "srs12ZGKGftAktgHZThDcahUSdoRjn214kafcq5eNqcUjb3SesLeWd", - "tick": "558" - }, - { - "state": "srs11Z7LSVYF6rBXAsR8Y5LjiQNgjPNs2eLAyUp2jWCf5QDMcSHqa6", - "tick": "582" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12RDgQ8yqwC1a1uSQjYRKEAu6LBL728S4tbiS1dwpUrpMZjmHYr", - "tick": "1" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_many_empty_leve.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_many_empty_leve.out deleted file mode 100644 index 66d4986ceb7aa7733bb4b640afbf2b66eead3d22..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_many_empty_leve.out +++ /dev/null @@ -1,155 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "468", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs11mFhGYhmnUEDp8VKKAymfL1WnHPiji8TLfK4JFSzgmwgWLuQzW", - "tick": "14" - }, - { - "state": "srs12HJZywRKWJrUNgvMaMndHKhY4abXWG1B4JBMAfky3sT6rP7Bkp", - "tick": "28" - }, - { - "state": "srs124gdB2V3E6GRPs7DvAwQ5BXqpWYtEN53WKzzsWfRPFp44mkE7X", - "tick": "42" - }, - { - "state": "srs11VND254VD9QiMcfeLGHdfriC3gTes2Sc7oo7suxbkqBxPaLkMj", - "tick": "56" - }, - { - "state": "srs11pcERsT7kE3orPMT1QF1kaquL2CtmYxeHAzxwQHVJGUCREpXUF", - "tick": "70" - }, - { - "state": "srs11i7eW3JXLDUzNVdbLoqqyQyqpZZaM5MdctK1sNXgLwr35bwXEU", - "tick": "84" - }, - { - "state": "srs128ALFziWJfj3jLMXDDiaKURdGgdF8AjBi5XRuYRPd52hdbx59o", - "tick": "98" - }, - { - "state": "srs126vZs4PRgz7TU1gJeEhg8qh8SE8KibtBuQgDphM6kKFCawJMLv", - "tick": "112" - }, - { - "state": "srs11eT18ckw8GtyQnUbetuAtyAJv3x1pWoTX3zLn4c3pYcFPhUyyy", - "tick": "126" - }, - { - "state": "srs12jiYyqL18PFUcaySmdo2xPaYPmXzTzjXAmvp96tyM8vBP1Lfbx", - "tick": "140" - }, - { - "state": "srs12kjseLn7g46w3XzCnCJDpTAzpb7z1DrLFKityV2cdmM7YfXgMN", - "tick": "154" - }, - { - "state": "srs12RSxWwwJHSKBr5aNGYVo1Aqqio9zpwZ54aoqZyvUzfVJGNQ7Ym", - "tick": "168" - }, - { - "state": "srs11eYzEcJgHdSnCnjteqGL27TNZNMTobMB92Nvu8QszLnNbdk44D", - "tick": "182" - }, - { - "state": "srs12LdMAokn4yqa7qkvqiYVUhztu1j29ECzeMtYwKgxP1XwZyky2m", - "tick": "196" - }, - { - "state": "srs11rEpPUKDg8uf6nKGyrZ9QYi5kBkR76RBCUYE32yMocjXQ9kgKy", - "tick": "210" - }, - { - "state": "srs11m354vvdXuyZxgufEqFDpRRtZK8Pq14QMAteLsrf3q9jbN3oHA", - "tick": "224" - }, - { - "state": "srs11gPQehoutgdKUc2fUzYCGKCdptPzdxZwzUzvCC5Gw9TvfDg818", - "tick": "238" - }, - { - "state": "srs12VY7x7YN6GtfPCuobVt5sccYimAQctSBPEJq3agXvpzCAVhtK1", - "tick": "252" - }, - { - "state": "srs11b8zZz9hEyQBEASLAeY9iR3vzYu7kLUibwU9MzC4DkS6FnrT2o", - "tick": "266" - }, - { - "state": "srs12RMropdVKfjBXxg4aiKnnDToYyXz7RnKYD3xqigw89zeHaagr9", - "tick": "280" - }, - { - "state": "srs11UdJmsUyPdEWjEpsqEfB9K3y7CvE5Z8AneSXkzjJZpe3fj8B45", - "tick": "294" - }, - { - "state": "srs12bntDHvCKCE8QehACD4aWbsK1YnUwus1UBKgC7Q6VgVUvyqB1r", - "tick": "308" - }, - { - "state": "srs12ruYFSeGbRcrTXzyULe53z2V4xdwdyxGXR7Jak5CpowWfFrfn5", - "tick": "322" - }, - { - "state": "srs11qQ526RFb8tgYhQygykeHFMkE9x7sTMtcKYgUHCESaQwb7UQeE", - "tick": "336" - }, - { - "state": "srs138ouCunrGSVmwgWzyzKhvD9qyjabyg8p2NGpoug4fat7DeRi4u", - "tick": "350" - }, - { - "state": "srs11YfbH7v6KD47GUYSN1uaMG1yZRzMsUfyXSGD7PYE5gVjnApDSx", - "tick": "364" - }, - { - "state": "srs13EWg6JsxZNxzrizd3qmeee57JjkTpEejJSucmiZeyCRnCvNnj6", - "tick": "378" - }, - { - "state": "srs13KS7z9UPGhPPu5W1m3c4VSKNohcvZqzDDKUFDrfLNeyePTGzta", - "tick": "392" - }, - { - "state": "srs12HPqTYu6Vc62Dqza3mvwRPjiAb14UAoFnqdSMk4AbpraXYHSji", - "tick": "406" - }, - { - "tick": "420" - }, - { - "tick": "434" - }, - { - "tick": "468" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "185", - "end_tick": "186", - "dissection": [ - { - "state": "srs123kr9jNQ7o9Cmn2TNiMjmKXzvoPJMamWWbA6xXAKAjNDpBtLFZ", - "tick": "185" - }, - { - "state": "srs11bEYDo5u6UYf66E1iDYJqUennbQJKEfD7H4AnjbkgHbvFwmxho", - "tick": "186" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_one_empty_level.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_one_empty_level.out deleted file mode 100644 index a5f7e83a0460b31918e520a8dbc1581419e2a101..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_one_empty_level.out +++ /dev/null @@ -1,155 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "578", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs13EyKmH4zHcR2VRMvChXjY2btcGgtG7ePSiwbbUH44QquvpMmXF", - "tick": "18" - }, - { - "state": "srs11ZhDcMkzrgzaUwBCyqAi2bs7ELmEnuTsAQ8szypDBsSoya37pM", - "tick": "36" - }, - { - "state": "srs11ouJa8bg85gzQzKudVstJop7RZevo9yZ45KGKWbEP4yXvXm2K8", - "tick": "54" - }, - { - "state": "srs12k7TbQdeHEnRF7iqCkVykWN3NtxoA5nPtd1TVYetjQWHnJBde5", - "tick": "72" - }, - { - "state": "srs124DcbqAa9FaQwqf25JqLk16up5FTWoPg7twNP8m5XSHLkxj5w9", - "tick": "90" - }, - { - "state": "srs11jny6Gy1YmR829G2wT2xNxquQpfZ5BLCinxftSnMpq96Y6VSAc", - "tick": "108" - }, - { - "state": "srs1344L1N7aQDwzaQQzBuvcC8Ez2zeifprgEHp7no3oKcGBeQER5J", - "tick": "126" - }, - { - "state": "srs11q2MbbRy4RN9EueRYKkf2xasoYeQWQmbrrXxAuLQL8jhUBkou8", - "tick": "144" - }, - { - "state": "srs121dsCBLn83rzcrg8HGL8hkM7tcYdP5WRGtDrMC4MrkWZSn1TAj", - "tick": "162" - }, - { - "state": "srs11umVKAFsvm1Y8L8CneYRMuhYq79SX83WPWcX3G5QGjfBeCHEEv", - "tick": "180" - }, - { - "state": "srs11yCG69eQaUzS2GH6MZq9Nu9oyhH61EZEjHyEjwnD4yteAYhESK", - "tick": "198" - }, - { - "state": "srs11YRpTrAwHofaf7oq1Fc6c9Qcj5UBJaZyVwmem21hFWZPST6f7Y", - "tick": "216" - }, - { - "state": "srs11wQVXH2En7sjb3cwPiE7yWRseSu6te879VaMuWTdQ6pUCwQCad", - "tick": "234" - }, - { - "state": "srs12ivGrKkby8YraJYiMQbLSVUzwcFfbzq3hG8nKdjSYdvL4yC8sP", - "tick": "252" - }, - { - "state": "srs12AVXc6LZpJkHJsyWyLkyL7iRv3seua8aYYwH28Yh8LtAbeKmNZ", - "tick": "270" - }, - { - "state": "srs133HeMV81Y3FcNv87tXbZGzodcH8Vy8xvj2ppYT1QfjuF6ewP9W", - "tick": "288" - }, - { - "state": "srs134ZQWewgB3Yo7VYXj8BpfGN7prLuAkWjNKqE4mGNPjoLXzK7s8", - "tick": "306" - }, - { - "state": "srs11tLF4MK95vEkAUmPWtmSVKN8G6u4WLzb8sTqz5ewNipkxByAGG", - "tick": "324" - }, - { - "state": "srs12pTUXxCuKPAZHnfjLQj6Ar2PZKnPxR5zHeF1N7C3zG7kc6dsEF", - "tick": "342" - }, - { - "state": "srs13D76KsLu376MA3U39Di7sFFUgRLfQTyXEgfWMX8GF5T44AT4kv", - "tick": "360" - }, - { - "state": "srs133PUgBtNPiTFsn7cVhKjkt9PueNa3nnE7pDhcSsYS2rXABC34q", - "tick": "378" - }, - { - "state": "srs12mUGsaCLwLFhrjy3G1Nn2pgzuAjnHB4QmBLgmAh9XUdU8a4hXR", - "tick": "396" - }, - { - "state": "srs11rTadB7UA31wwXKn5Y6rnaWNds68J1zH3DndTXMUZUZv4QPRQr", - "tick": "414" - }, - { - "state": "srs13E4CczoA6w4jYjQG9ZLxA1YmMBRduErcYct9ufaaTNtvDAVdsT", - "tick": "432" - }, - { - "state": "srs11osncmJUZDEK9x8sruFGhf97BqMyqvZXfTRKmyLPqtXAbAffmp", - "tick": "450" - }, - { - "state": "srs13LssXmYaEiNsws25RYcbvmQrbLKeLnD7kFggMMXHJKX8RuH73J", - "tick": "468" - }, - { - "state": "srs1355rgVvZFKex1HGmdSrMtEU76rn8BfGd3zbm92F8TsDfrbSpyW", - "tick": "486" - }, - { - "state": "srs12CT52vFheynRu95kdrBPdeygb1SjeZ1v7GkYSXDkVWMhJVDnmP", - "tick": "504" - }, - { - "state": "srs11fzXLQRn2cNfZZXdy25NnktU5r63WM2cWS4Md9KvGUsHzm8owU", - "tick": "522" - }, - { - "tick": "540" - }, - { - "tick": "558" - }, - { - "tick": "578" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "121", - "end_tick": "122", - "dissection": [ - { - "state": "srs12N3r3dk2XnWkNyrhCGofixAuZQHE7a8zVsnrbACQCnxARsvUY1", - "tick": "121" - }, - { - "state": "srs12adb637iB9CP9wymJcqnhwwXtqEorZ33RWnLCGEg4LDFuqFfeY", - "tick": "122" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_with_new_conten.out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_with_new_conten.out deleted file mode 100644 index 818f951869434eac318701a6b6850bc2a38bd58b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (inbox_proof_with_new_conten.out +++ /dev/null @@ -1,156 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "633", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs136djDFuVnqYeyDr9UbyHP2SCqQbq8dnXZY6ePsS2aThtWDr2Ai", - "tick": "19" - }, - { - "state": "srs11sqLRJh2RwZdtg71dn5VddXExoYHQByQWYr7XsvnXojVXaLaRo", - "tick": "38" - }, - { - "state": "srs12qSwJBtkq9B4VcpcSQAigEVBw5gsLTLgWoZ3h8WQm5FU5vSxpy", - "tick": "57" - }, - { - "state": "srs12SbiEtcNeAPNX1YNC83Ysm2wUToTbP14m7nAR3NUcJKTprUGfV", - "tick": "76" - }, - { - "state": "srs11TLxQ6xy4HxoT4tonedSZ4nR3wS6nPEt9k4kJgCTpCbfwATfZU", - "tick": "95" - }, - { - "state": "srs13Cy8eZRTBm5QM6BXKRJ1NPQzNibT8UBUDLKedW5RG9ojyygEja", - "tick": "114" - }, - { - "state": "srs12gYytLqonfQQp3Q1wW5kPywFxgBmR6168L6bW9TUCTdP7rimpQ", - "tick": "133" - }, - { - "state": "srs129US7aZPgijAeWY81dXLGPrvfyY5PVbH5vMdG4dLmVcgNiTpSn", - "tick": "152" - }, - { - "state": "srs13CHzURWpekmoxepmLWivVNZqUEeUrztuGuWeswokZYrRnWRR6S", - "tick": "171" - }, - { - "state": "srs12BVfJAc9r5JRVSXcJFMGTBc6e7qGrdGUmrXfdN8QUiqkDQoSUC", - "tick": "190" - }, - { - "state": "srs12k9nfFw67eGmyTtaHMBSLjRaPMkJMjvKtK2ubcdVy63wkCoBhY", - "tick": "209" - }, - { - "state": "srs12DjAvkDmSo8FSMamgMHhWitZj4KVuNTCisiCYeJkycfn5pcjjE", - "tick": "228" - }, - { - "state": "srs12MYeKGU7Z4FaTLv1zvVnM5LSyU4rxa8AYYcww2eFCZVKdMZuEb", - "tick": "247" - }, - { - "state": "srs11vntikstjho8tvq7CSEGi8STaZ3EpuKQ6mtdnKX5ymMff9zdYE", - "tick": "266" - }, - { - "state": "srs135KBowyeD3NQCtEh4ufvja4JUVStxSCNWZcTGZ7J5YRy9Ci3Sv", - "tick": "285" - }, - { - "state": "srs12oGJ623voxVYotTwCVhs1X6PkNSie61VY41FtKcoUJ92Pzjkwc", - "tick": "304" - }, - { - "state": "srs12LkRiYqgvJLTHtQ16WAKfESd1M7szoq85baWTs7q773JCPJm2o", - "tick": "323" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12oTSNspRC6jYQBC6SBbbjLGvZdwzHGB3MpH9YauX5WnG1nR3rk", - "tick": "361" - }, - { - "state": "srs11yCYcjjygmBdQBHdVJiWTu4iPrK74PvXqqTPAuvDWnWRFdt8zR", - "tick": "380" - }, - { - "state": "srs12euFuDjku1Aht4aSrt9vu92pWNWYCG2WCPfj9Unnx6Sp1gCu1H", - "tick": "399" - }, - { - "state": "srs11YiQvUc9xWrqY75PHU134RYHVYqDvnPHWdCGkYEMyMMx7H6NiZ", - "tick": "418" - }, - { - "state": "srs12AMmCyw3wsxK28Cdg8WPhzdRe4W2V1u6z6MukY52XzMoiASAv8", - "tick": "437" - }, - { - "state": "srs11dsgEhcACoZfZFioGpSYX2mTZNdtmV2E6CZRM7Ctu3jPjvvVTR", - "tick": "456" - }, - { - "state": "srs11orZFWdbyT5nb3UWV8Gp76ZUq57aUXaXhQiLYLVD9qW8VVgijJ", - "tick": "475" - }, - { - "state": "srs12zM6jTWMXtgAyJgEt4uR7ZNv8b2zjNBBNy6t2k8EyEhJ31rhBV", - "tick": "494" - }, - { - "state": "srs11nZY6GFt1bDrgANFKSb5EfzWQ1tx4ioyWY1ZkSRhKRujXG7PhM", - "tick": "513" - }, - { - "state": "srs12yo5wkoFZjL6cHgPPMqzz2HZ5Y4ThYejfhB5QUqhAzrk7UJBGW", - "tick": "532" - }, - { - "state": "srs13DpzUuwPEBhHBxr2CfRcyycJZYxRTjWJ4GBy4HfzNiNxkjW1mS", - "tick": "551" - }, - { - "state": "srs11pWX2JdSoTB4vdvEBnZFhkKujFyYHFFtnbLUKhduJnriGYWbHM", - "tick": "570" - }, - { - "tick": "589" - }, - { - "tick": "633" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "118", - "end_tick": "119", - "dissection": [ - { - "state": "srs13C1SQJWwLbx5NEAwWhXZK4R3rkYSQDu23PE2BD6GogwPAJTvN6", - "tick": "118" - }, - { - "state": "srs12tb3f8f32fybaGsYXZRwsGz3zr3N97n9VyDpDkkbEGzEn12W4J", - "tick": "119" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_0).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_0).out deleted file mode 100644 index 5352b3a29b3c5661cff66a242dcc12260a80900c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_0).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "582", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12fH3qaJPnV1ffBy6CmCeWNbnrRTYnBAJmpKmSijG4qAr1nF5qq", - "tick": "18" - }, - { - "state": "srs12U5Qo3eYMXF21V2WSqECogLqvuQFzFj46V8gCV44jTt9JbfPAt", - "tick": "36" - }, - { - "state": "srs11ojK4N7Jd3Yp71thpTaria7vxTqLVvJ78bq7AzBUK1Lfq19iXx", - "tick": "54" - }, - { - "state": "srs12mBVd34mTSQtHaJhCS5xBAzP4adN9RCPM6QnMnFqKCCK8AWCKB", - "tick": "72" - }, - { - "state": "srs122h7n2D1zgiE4rHLmzeoDQV1RLRJ73ha32DDbU3d54U7zaZPXc", - "tick": "90" - }, - { - "state": "srs129Wp6b9eXF9gZweXmNWeBKYTbXUDkMZY2szYgmrNzEgqk2YpDV", - "tick": "108" - }, - { - "state": "srs125AF7aoft7puAeoxtUmP1aajfLJeUKJA57LNJusncWd6zKRJjK", - "tick": "126" - }, - { - "state": "srs12kzv8cSYFt4DMUacbK32CTdReQqPRBYwMRsrKK6btByT3hbTLY", - "tick": "144" - }, - { - "state": "srs12QvEgKbjbZZ3ANqPMrqiMi3mw3tTEcsWixXgAY7X2gHABBNQNZ", - "tick": "162" - }, - { - "state": "srs11g395YpbNK3ZJopvv6cc7Gcc8H4Lv2MNhaQsCqfV7LztCUBvV1", - "tick": "180" - }, - { - "state": "srs11xVcimxB4Gb8LuzVyVXqjaB9S6YVbw2uR7rqoZr1VStr4b7QZS", - "tick": "198" - }, - { - "state": "srs11x2S5HDRwueA6tCKhipwohi2pWntjTpruhF1gmUWw3bRYW6szf", - "tick": "216" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12kh4XcDdzKZ8Pc4T7QsXm36XUqVe4cxtWJ2BxHrHwENrqEL9Ay", - "tick": "252" - }, - { - "state": "srs11hjoicX5kycSCkvbxZ7LDWwdbsV2qWEXBDurY3Sf5zwS8tUL3a", - "tick": "270" - }, - { - "state": "srs11n9qrtzJPgMSFze3erzSzvB5EAm48kTnEC9oJJYqxV6vRApyK5", - "tick": "288" - }, - { - "state": "srs1336xiQkLT9knTk1fco58u9hxKNqdHS1YPUwxGKLT2MhPzEMC7N", - "tick": "306" - }, - { - "state": "srs12CfNGraungvWxhYVdXr26w2aS1Ei6Eo5XgzDLdqn4LRDdduqom", - "tick": "324" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12ekcYu6yArjgAGuJAg5cwq6zPvKxdk6KCmnBtGYy7JP6kEBFqb", - "tick": "360" - }, - { - "state": "srs12a3AthkZ1i6H2x4RrPXN49iUmCVBSBkteWQTgEyWzQhpCzpoZD", - "tick": "378" - }, - { - "state": "srs12EXB6ARrgEz3pi71R6nzxtQ4PMY8Azwy2DYmmTJRkne8d6rW42", - "tick": "396" - }, - { - "state": "srs11fDjhakCGzwrmM7bHy4RJp8aGUgSFRN57tDDL2LzhXvDukwEJ1", - "tick": "414" - }, - { - "state": "srs1397ahAZp3GHxcSuvgvSk3MrdNaosN2nhkx8kDwuh3GF2ruEWzB", - "tick": "432" - }, - { - "state": "srs12sZ9L8e4CVC86wfn8o5KwroqUxMdGyzkjdkaVC4BM3PCeu1foW", - "tick": "450" - }, - { - "state": "srs13Jw5EzkDA1kK1ysWBT7QoQdoBWPtWLxbcg7tzhqmoQpMAzPDyr", - "tick": "468" - }, - { - "state": "srs12TjQfFTgrKzckqg65A3FUJfErZ2Eu6SXj2tWDAsi8iRf5hTcR6", - "tick": "486" - }, - { - "state": "srs12qYpCJiJoTiro1gs1y1HJNVLYv9Dp72bKDqwick9speqAPonWg", - "tick": "504" - }, - { - "state": "srs12JqZ2LaeC5RSw5xiaKDnUyW3uoH1L7qLB29fTR6tX7UH5VeXjk", - "tick": "522" - }, - { - "state": "srs13JbbzvBhzL8gjxyUGBQfZ67i4gFbab3qVQYSJoMg9xgQuovNMB", - "tick": "540" - }, - { - "state": "srs12ZGKGftAktgHZThDcahUSdoRjn214kafcq5eNqcUjb3SesLeWd", - "tick": "558" - }, - { - "state": "srs11Z7LSVYF6rBXAsR8Y5LjiQNgjPNs2eLAyUp2jWCf5QDMcSHqa6", - "tick": "582" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "121", - "end_tick": "122", - "dissection": [ - { - "state": "srs12gTMVH2Jm8MTRtBmtjCuVtQxsRdPKd6fmLgqUeizfdTCHpzb8V", - "tick": "121" - }, - { - "state": "srs12ziRy1mzsTCGdXRuzHERaB5gWs4nTByjVdGQ5chVQPucjfx7MA", - "tick": "122" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_1).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_1).out deleted file mode 100644 index 75f71d6b4d1a693e9260b48a887d490e718c0de1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_1).out +++ /dev/null @@ -1,156 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "629", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs136djDFuVnqYeyDr9UbyHP2SCqQbq8dnXZY6ePsS2aThtWDr2Ai", - "tick": "19" - }, - { - "state": "srs11sqLRJh2RwZdtg71dn5VddXExoYHQByQWYr7XsvnXojVXaLaRo", - "tick": "38" - }, - { - "state": "srs12qSwJBtkq9B4VcpcSQAigEVBw5gsLTLgWoZ3h8WQm5FU5vSxpy", - "tick": "57" - }, - { - "state": "srs12SbiEtcNeAPNX1YNC83Ysm2wUToTbP14m7nAR3NUcJKTprUGfV", - "tick": "76" - }, - { - "state": "srs11TLxQ6xy4HxoT4tonedSZ4nR3wS6nPEt9k4kJgCTpCbfwATfZU", - "tick": "95" - }, - { - "state": "srs13Cy8eZRTBm5QM6BXKRJ1NPQzNibT8UBUDLKedW5RG9ojyygEja", - "tick": "114" - }, - { - "state": "srs12gYytLqonfQQp3Q1wW5kPywFxgBmR6168L6bW9TUCTdP7rimpQ", - "tick": "133" - }, - { - "state": "srs129US7aZPgijAeWY81dXLGPrvfyY5PVbH5vMdG4dLmVcgNiTpSn", - "tick": "152" - }, - { - "state": "srs13CHzURWpekmoxepmLWivVNZqUEeUrztuGuWeswokZYrRnWRR6S", - "tick": "171" - }, - { - "state": "srs12BVfJAc9r5JRVSXcJFMGTBc6e7qGrdGUmrXfdN8QUiqkDQoSUC", - "tick": "190" - }, - { - "state": "srs12k9nfFw67eGmyTtaHMBSLjRaPMkJMjvKtK2ubcdVy63wkCoBhY", - "tick": "209" - }, - { - "state": "srs12DjAvkDmSo8FSMamgMHhWitZj4KVuNTCisiCYeJkycfn5pcjjE", - "tick": "228" - }, - { - "state": "srs12MYeKGU7Z4FaTLv1zvVnM5LSyU4rxa8AYYcww2eFCZVKdMZuEb", - "tick": "247" - }, - { - "state": "srs11vntikstjho8tvq7CSEGi8STaZ3EpuKQ6mtdnKX5ymMff9zdYE", - "tick": "266" - }, - { - "state": "srs135KBowyeD3NQCtEh4ufvja4JUVStxSCNWZcTGZ7J5YRy9Ci3Sv", - "tick": "285" - }, - { - "state": "srs12oGJ623voxVYotTwCVhs1X6PkNSie61VY41FtKcoUJ92Pzjkwc", - "tick": "304" - }, - { - "state": "srs12LkRiYqgvJLTHtQ16WAKfESd1M7szoq85baWTs7q773JCPJm2o", - "tick": "323" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12oTSNspRC6jYQBC6SBbbjLGvZdwzHGB3MpH9YauX5WnG1nR3rk", - "tick": "361" - }, - { - "state": "srs11yCYcjjygmBdQBHdVJiWTu4iPrK74PvXqqTPAuvDWnWRFdt8zR", - "tick": "380" - }, - { - "state": "srs12euFuDjku1Aht4aSrt9vu92pWNWYCG2WCPfj9Unnx6Sp1gCu1H", - "tick": "399" - }, - { - "state": "srs11YiQvUc9xWrqY75PHU134RYHVYqDvnPHWdCGkYEMyMMx7H6NiZ", - "tick": "418" - }, - { - "state": "srs12AMmCyw3wsxK28Cdg8WPhzdRe4W2V1u6z6MukY52XzMoiASAv8", - "tick": "437" - }, - { - "state": "srs11dsgEhcACoZfZFioGpSYX2mTZNdtmV2E6CZRM7Ctu3jPjvvVTR", - "tick": "456" - }, - { - "state": "srs11orZFWdbyT5nb3UWV8Gp76ZUq57aUXaXhQiLYLVD9qW8VVgijJ", - "tick": "475" - }, - { - "state": "srs12zM6jTWMXtgAyJgEt4uR7ZNv8b2zjNBBNy6t2k8EyEhJ31rhBV", - "tick": "494" - }, - { - "state": "srs11nZY6GFt1bDrgANFKSb5EfzWQ1tx4ioyWY1ZkSRhKRujXG7PhM", - "tick": "513" - }, - { - "state": "srs12yo5wkoFZjL6cHgPPMqzz2HZ5Y4ThYejfhB5QUqhAzrk7UJBGW", - "tick": "532" - }, - { - "state": "srs13DpzUuwPEBhHBxr2CfRcyycJZYxRTjWJ4GBy4HfzNiNxkjW1mS", - "tick": "551" - }, - { - "state": "srs11pWX2JdSoTB4vdvEBnZFhkKujFyYHFFtnbLUKhduJnriGYWbHM", - "tick": "570" - }, - { - "tick": "589" - }, - { - "tick": "629" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "236", - "end_tick": "237", - "dissection": [ - { - "state": "srs12hEz4xo8JgnSaaJQFGpa9JbASVeZUt5CTBtaRQZMwTawbn2H6X", - "tick": "236" - }, - { - "state": "srs12bo57GfkUkpNopgptNPbtz68dZfojHbyC6ubeJVgptm6vBVSns", - "tick": "237" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_2).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_2).out deleted file mode 100644 index 21dd59570246db53bb9b6ee82c14493c14e841ea..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_2).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "417", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs11XB2HCGteKCrjd3RzTeJErbFbFQFbWtztckuCCTF6rgMjFxJDX", - "tick": "13" - }, - { - "state": "srs12VUVuf4HJpcGQJDzVcpb3aaFuAvjENSgV4nRztkmWBSxL5WHaF", - "tick": "26" - }, - { - "state": "srs12ZnLptmHevRWau257DcrcnM2eNnFo7bFbc2sv2foTD8ZKCXTZe", - "tick": "39" - }, - { - "state": "srs12xQANQN4eAkSsP8zmcYkPpAFK4UTpAU6TvoumjmBiYy6CkVYzC", - "tick": "52" - }, - { - "state": "srs12s3Cb9eyFoavFQUWAZNjSnSFi5HEnkYfHyapLB2P5u7eB2Dd4K", - "tick": "65" - }, - { - "state": "srs128dvNSvYvCSMJfddzr7PcbH2HVynAF4dxEwLvTeVVSejCCa3bE", - "tick": "78" - }, - { - "state": "srs12B5HfbEsm6JPLh8Mm7xrbwpz4A3YLw7r5fKkyqZjgmGns647jV", - "tick": "91" - }, - { - "state": "srs124dtumicoAkWyp3KDjdtix2bZUMmhK4E8eP3RQnJtpVWJ9gQit", - "tick": "104" - }, - { - "state": "srs121MBsHEQZF8ytUDwsP6bj4vVdhMgvD1ELph9vCQsCAj7umHK7m", - "tick": "117" - }, - { - "state": "srs13NVfKCCRucqkqBw1x84RTmf4haNGL6dPbQYzEgQ36EHJfhnC9j", - "tick": "130" - }, - { - "state": "srs11qS1sYhQJGb2ceCuRXAd4u3nyVwboRVK7Bwud73zhTXiR1rr3Z", - "tick": "143" - }, - { - "state": "srs12Q78Qxi7yt6WqycuUTkPNqfd4osFgXLtDaDFgC8TGLTzUJWSZN", - "tick": "156" - }, - { - "state": "srs12YeRf1kLpwGy41jk263uNgs7qai2m1y7XGeBancyn6NPShdAac", - "tick": "169" - }, - { - "state": "srs12ybMDhWm9Nc6nRuir2fjDXjDc55zpEttHvLihc3Uj2WnEf4FA9", - "tick": "182" - }, - { - "state": "srs13DimeJzN59Sxz36YD5XWVNg36DPwMrEBAa1MHAyqAw4MsNK3e8", - "tick": "195" - }, - { - "state": "srs11rLYvJZR3pFR7czgeyqXx9BAecKP2GX9Xob59W5VNuSPUacGtt", - "tick": "208" - }, - { - "state": "srs11in5mAETxNPfnpce9FDrcQZoe4gJtmFLHXYVs4qbn5G6SU7Zcd", - "tick": "221" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12MYeKGU7Z4FaTLv1zvVnM5LSyU4rxa8AYYcww2eFCZVKdMZuEb", - "tick": "247" - }, - { - "state": "srs137JBFZyQNJJM52n71pdejwufxfwQrQ4z41Xb2TZFi3kPxo9GVK", - "tick": "260" - }, - { - "state": "srs12EYym2XxLNcVELe52ayForgTHud15bZ4DvZPMMbkVtHfpamF96", - "tick": "273" - }, - { - "state": "srs12i9d5DFwE9mwBJ7dZ1CNBVpRkHgB5Jw3HkKzsQXFjDAjezdk3G", - "tick": "286" - }, - { - "state": "srs12vL82Rtjse9cbjRPKKm3D6CMcyCMJrnaKLAzFoksXZwtH485nS", - "tick": "299" - }, - { - "state": "srs11WShqggcBnBpSieSH5xKz2F6xKmWJpR2i7TEJpVwkhJzPPYdud", - "tick": "312" - }, - { - "state": "srs11xF2PURqwnLMV1euEAT4tAqxkQ8TXbuzX5Db9ecXzEmq4vdNVc", - "tick": "325" - }, - { - "state": "srs13Loomnt2mmeCnkeL2Aj8dCKDVHKyboHgYo1czxciX7cGTw6FBw", - "tick": "338" - }, - { - "state": "srs136CJnze7BAo2W7QfeXfTDCgPiJb1B96ZjRTwFBDPSEj4TxRAms", - "tick": "351" - }, - { - "state": "srs11mTsFKqAKVhxCpemyP7ZgRSxp6MEmsDg8TbQuFE9KR6JhLvMVt", - "tick": "364" - }, - { - "state": "srs1224yjiE2kaEwojELN5JxPqBWN1Tg2GexDyqSXR9nF8zcycdnLi", - "tick": "377" - }, - { - "state": "srs11UPJL2dsoKuoYTLaC4P4btBQpX64nAZKPP91cbcjB8EtooyxoX", - "tick": "390" - }, - { - "state": "srs11mzrfqsjbL2PqsFpMDwyF876tz4tLpVbSrZRq52kuyYJCMYCKh", - "tick": "403" - }, - { - "state": "srs12GENJ4uXAQmRdZJQuitRbD6LxNYLkKK4yysjwBLmV2mZJosroC", - "tick": "417" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "237", - "end_tick": "238", - "dissection": [ - { - "state": "srs12bo57GfkUkpNopgptNPbtz68dZfojHbyC6ubeJVgptm6vBVSns", - "tick": "237" - }, - { - "state": "srs132gM47wMyDBtD4LLHRLjJwTtThhVJZD41egGDbupcNC9C43N3K", - "tick": "238" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_3).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_3).out deleted file mode 100644 index ab7d995e3c0289a9a6d8ea4fb74c428b13a2ccf5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_3).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "417", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs11XB2HCGteKCrjd3RzTeJErbFbFQFbWtztckuCCTF6rgMjFxJDX", - "tick": "13" - }, - { - "state": "srs12VUVuf4HJpcGQJDzVcpb3aaFuAvjENSgV4nRztkmWBSxL5WHaF", - "tick": "26" - }, - { - "state": "srs12ZnLptmHevRWau257DcrcnM2eNnFo7bFbc2sv2foTD8ZKCXTZe", - "tick": "39" - }, - { - "state": "srs12xQANQN4eAkSsP8zmcYkPpAFK4UTpAU6TvoumjmBiYy6CkVYzC", - "tick": "52" - }, - { - "state": "srs12s3Cb9eyFoavFQUWAZNjSnSFi5HEnkYfHyapLB2P5u7eB2Dd4K", - "tick": "65" - }, - { - "state": "srs128dvNSvYvCSMJfddzr7PcbH2HVynAF4dxEwLvTeVVSejCCa3bE", - "tick": "78" - }, - { - "state": "srs12B5HfbEsm6JPLh8Mm7xrbwpz4A3YLw7r5fKkyqZjgmGns647jV", - "tick": "91" - }, - { - "state": "srs124dtumicoAkWyp3KDjdtix2bZUMmhK4E8eP3RQnJtpVWJ9gQit", - "tick": "104" - }, - { - "state": "srs121MBsHEQZF8ytUDwsP6bj4vVdhMgvD1ELph9vCQsCAj7umHK7m", - "tick": "117" - }, - { - "state": "srs11xQXKBqDraMGaxd2KJcawk1FouRsPyKANyf3QGNUeScS7NJahG", - "tick": "130" - }, - { - "state": "srs11cndqBbKjH7Xmsjvhaow4LVt8ibXsG58AJmLjmMQejtwwKFfhW", - "tick": "143" - }, - { - "state": "srs12S2b3SUbzSDJvzDmoygzjJ5zBuHprmNqeiYGPam8CFk4v1Ghz1", - "tick": "156" - }, - { - "state": "srs13LwAVsaLGot8CXwdQCoZZCSJd5caDqY5cvAcG1Gg5wgE4vjj6k", - "tick": "169" - }, - { - "state": "srs129XpNKeM5bAwjT7smpJd4K7dqGN1pcHWk8n4LfDY86a9u85HWr", - "tick": "182" - }, - { - "state": "srs11moWhUJU4ANmfg26qh91hUdGPm5pMc8BTAQo4hybNF71FfiVfb", - "tick": "195" - }, - { - "state": "srs121GoPbVJJKJwngTEnkVTzEVsrTuS856NYwA2YjVWmjjgDA1U9Y", - "tick": "208" - }, - { - "state": "srs12faQL2Xt2m6fzH3d6AjVwgnSze1GNJv3S1tncKr7EpBqTvfJU2", - "tick": "221" - }, - { - "state": "srs12eZrvFpE7j8A3xXJu15EJ8VFyq69bVUGp1DsbKgGrsAZARDNqB", - "tick": "234" - }, - { - "state": "srs12jmJnW9fa73wBYAQceaMmujABFWLURi8CiVM1xnBf8uykSRG7H", - "tick": "247" - }, - { - "state": "srs12QSMPk5F5rCzxPg5nVBS1vvUsspVxvtuX5t1st6d1JfaozdPzN", - "tick": "260" - }, - { - "state": "srs122mV7vNce5JFQpwix4XSBZefeEXGg54BGJxexqw3UzVE4Brsnb", - "tick": "273" - }, - { - "state": "srs11dxSMagQkdfkwMHaqZuswLzJG8SE1MfDw8a5gqAMsCS5ACVbLA", - "tick": "286" - }, - { - "state": "srs12neAD3iYrggK49kju4z8AZVoT1bLGzSRhj1jQngU6fnMtNieNn", - "tick": "299" - }, - { - "state": "srs12xM3ZTkkgYAhhuRV5qFW9Kyf9ELSy45GyQKUCwSKj9Wijvb5pL", - "tick": "312" - }, - { - "state": "srs11rs9hwHdT1p5FEkW21PnVzDPE9Sue3z6Au34r4LDdDfmikoAmy", - "tick": "325" - }, - { - "state": "srs12sT431BouvRHfhRuJpsi1cPF74TUiEPTixMecxgK7tmjEL15dq", - "tick": "338" - }, - { - "state": "srs13DAT2ZZrJ995TDj88ThE3TMrfQTBizHGMiJDeTuBNuttRC6LeF", - "tick": "351" - }, - { - "state": "srs12fPSMpTt3k3FucTppe77oF5j5Kk8TiPiuAppzj9zv8NMz7ZKZz", - "tick": "364" - }, - { - "state": "srs12p6Ze96RAE9QjukEQ2smiajtHfjRBb7VnZAPLCt7yNoi2y8hBX", - "tick": "377" - }, - { - "state": "srs12M2fwC2tPUA7ExgsrwhRh3w9UvAZspgo6KkewqDHe17m62Fx8G", - "tick": "390" - }, - { - "state": "srs12QHYT16yvsvTHKKrKpJBCUQfxXy2hKYatoNsCCwpBq4YwPpeEi", - "tick": "403" - }, - { - "state": "srs12EBKTPBis6K4XgSZGAjFcnFjQ33dycG7WFvHAhEYxYJMqamnKk", - "tick": "417" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "243", - "end_tick": "244", - "dissection": [ - { - "state": "srs11pZwAag5f2fQLx99SqjwqN7172c44C2ToUadFEHh4hzhkrA8gF", - "tick": "243" - }, - { - "state": "srs12W4hj2ixtk9mM9Etb1AuYizhvkft1RPsaZvfnTdUt56BHYtrHP", - "tick": "244" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_at_genesis).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_at_genesis).out deleted file mode 100644 index 8cc709af826ffda018ccf7625aa47be8c7dfe568..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_at_genesis).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "582", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12fH3qaJPnV1ffBy6CmCeWNbnrRTYnBAJmpKmSijG4qAr1nF5qq", - "tick": "18" - }, - { - "state": "srs12U5Qo3eYMXF21V2WSqECogLqvuQFzFj46V8gCV44jTt9JbfPAt", - "tick": "36" - }, - { - "state": "srs11ojK4N7Jd3Yp71thpTaria7vxTqLVvJ78bq7AzBUK1Lfq19iXx", - "tick": "54" - }, - { - "state": "srs12mBVd34mTSQtHaJhCS5xBAzP4adN9RCPM6QnMnFqKCCK8AWCKB", - "tick": "72" - }, - { - "state": "srs122h7n2D1zgiE4rHLmzeoDQV1RLRJ73ha32DDbU3d54U7zaZPXc", - "tick": "90" - }, - { - "state": "srs129Wp6b9eXF9gZweXmNWeBKYTbXUDkMZY2szYgmrNzEgqk2YpDV", - "tick": "108" - }, - { - "state": "srs125AF7aoft7puAeoxtUmP1aajfLJeUKJA57LNJusncWd6zKRJjK", - "tick": "126" - }, - { - "state": "srs12kzv8cSYFt4DMUacbK32CTdReQqPRBYwMRsrKK6btByT3hbTLY", - "tick": "144" - }, - { - "state": "srs12QvEgKbjbZZ3ANqPMrqiMi3mw3tTEcsWixXgAY7X2gHABBNQNZ", - "tick": "162" - }, - { - "state": "srs11g395YpbNK3ZJopvv6cc7Gcc8H4Lv2MNhaQsCqfV7LztCUBvV1", - "tick": "180" - }, - { - "state": "srs11xVcimxB4Gb8LuzVyVXqjaB9S6YVbw2uR7rqoZr1VStr4b7QZS", - "tick": "198" - }, - { - "state": "srs11x2S5HDRwueA6tCKhipwohi2pWntjTpruhF1gmUWw3bRYW6szf", - "tick": "216" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12kh4XcDdzKZ8Pc4T7QsXm36XUqVe4cxtWJ2BxHrHwENrqEL9Ay", - "tick": "252" - }, - { - "state": "srs11hjoicX5kycSCkvbxZ7LDWwdbsV2qWEXBDurY3Sf5zwS8tUL3a", - "tick": "270" - }, - { - "state": "srs11n9qrtzJPgMSFze3erzSzvB5EAm48kTnEC9oJJYqxV6vRApyK5", - "tick": "288" - }, - { - "state": "srs1336xiQkLT9knTk1fco58u9hxKNqdHS1YPUwxGKLT2MhPzEMC7N", - "tick": "306" - }, - { - "state": "srs12CfNGraungvWxhYVdXr26w2aS1Ei6Eo5XgzDLdqn4LRDdduqom", - "tick": "324" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12ekcYu6yArjgAGuJAg5cwq6zPvKxdk6KCmnBtGYy7JP6kEBFqb", - "tick": "360" - }, - { - "state": "srs12a3AthkZ1i6H2x4RrPXN49iUmCVBSBkteWQTgEyWzQhpCzpoZD", - "tick": "378" - }, - { - "state": "srs12EXB6ARrgEz3pi71R6nzxtQ4PMY8Azwy2DYmmTJRkne8d6rW42", - "tick": "396" - }, - { - "state": "srs11fDjhakCGzwrmM7bHy4RJp8aGUgSFRN57tDDL2LzhXvDukwEJ1", - "tick": "414" - }, - { - "state": "srs1397ahAZp3GHxcSuvgvSk3MrdNaosN2nhkx8kDwuh3GF2ruEWzB", - "tick": "432" - }, - { - "state": "srs12sZ9L8e4CVC86wfn8o5KwroqUxMdGyzkjdkaVC4BM3PCeu1foW", - "tick": "450" - }, - { - "state": "srs13Jw5EzkDA1kK1ysWBT7QoQdoBWPtWLxbcg7tzhqmoQpMAzPDyr", - "tick": "468" - }, - { - "state": "srs12TjQfFTgrKzckqg65A3FUJfErZ2Eu6SXj2tWDAsi8iRf5hTcR6", - "tick": "486" - }, - { - "state": "srs12qYpCJiJoTiro1gs1y1HJNVLYv9Dp72bKDqwick9speqAPonWg", - "tick": "504" - }, - { - "state": "srs12JqZ2LaeC5RSw5xiaKDnUyW3uoH1L7qLB29fTR6tX7UH5VeXjk", - "tick": "522" - }, - { - "state": "srs13JbbzvBhzL8gjxyUGBQfZ67i4gFbab3qVQYSJoMg9xgQuovNMB", - "tick": "540" - }, - { - "state": "srs12ZGKGftAktgHZThDcahUSdoRjn214kafcq5eNqcUjb3SesLeWd", - "tick": "558" - }, - { - "state": "srs11Z7LSVYF6rBXAsR8Y5LjiQNgjPNs2eLAyUp2jWCf5QDMcSHqa6", - "tick": "582" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12RDgQ8yqwC1a1uSQjYRKEAu6LBL728S4tbiS1dwpUrpMZjmHYr", - "tick": "1" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_second_period).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_second_period).out deleted file mode 100644 index 9549e08f384343922acb7d39d93e697ef5427af5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (pvm_proof_second_period).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "470", - "dissection": [ - { - "state": "srs11Z7LSVYF6rBXAsR8Y5LjiQNgjPNs2eLAyUp2jWCf5QDMcSHqa6", - "tick": "0" - }, - { - "state": "srs11mzbaQWFusRK8rbJtacVn8WxamepxA4BoH9naZE8cCTuzb9BKE", - "tick": "14" - }, - { - "state": "srs12VqPjB9rfqNFqmpPG7cB3vtn4jfxsYGP7oG9VBMCXauwwf7bnr", - "tick": "28" - }, - { - "state": "srs11bWN7mUqA8uyLcNbnxKPaiNDwc41PCKiz3AbSoraWF62VGuHmU", - "tick": "42" - }, - { - "state": "srs13B8p9BJmB2Zz6pXMHE69xzBaEpFrSpqh4tginHwPGdMeJh6QU6", - "tick": "56" - }, - { - "state": "srs136RdoogwdcCNhKdWWhB4Ys95VNXLNdxGGhDJawLjnnw7PEZ6Yw", - "tick": "70" - }, - { - "state": "srs12b9sAAK6XmKtFqSeA8GQrb3covrgf1pR4PBjq6rcoLNjRuvAcm", - "tick": "84" - }, - { - "state": "srs133VwCBqTHxwdkAvztrk3H3SCzCEE1F8PDrZd5fX52p9Y6Vr7Qe", - "tick": "98" - }, - { - "state": "srs129dtcW2V8FLC25QSFCdGeS7g1XvMQuNE99MVJnqa43gJfLtq38", - "tick": "112" - }, - { - "state": "srs11Zo7zUQC6NF8sbKo5pddKU4AhdvGaNqto6crFE3ByoYm3VEdHe", - "tick": "126" - }, - { - "state": "srs131hDMypk565mvwZkt8Ljd7jb9BPRWG29MdJzu3s8VkMPPNuZ8r", - "tick": "140" - }, - { - "state": "srs12xzLvQsABjiWFTSZ828pmTznGsUL2VVJM3JYBr3B4v7g3Srxpc", - "tick": "154" - }, - { - "state": "srs13FCPMFoBB93ejJoL2GWdjCfdcfPSgJDvVFCY8fGAiD33nvp3F3", - "tick": "168" - }, - { - "state": "srs11vhjsGYSuuM1fbFTJH4z4C67YBW9NNxqwPiUcazokuzPkmGgFq", - "tick": "182" - }, - { - "state": "srs13D8cnxRYs6B39Ta7H9XA65T7i9xPoGxHqg13rQ2EBWWJAYBVVQ", - "tick": "196" - }, - { - "state": "srs11kQs7LDJ3ZMFL4NYZ3DJkfHG6xDnxvMRRjD3naPo2Xs6ZmigRF", - "tick": "210" - }, - { - "state": "srs12u6kEegZxHWhtRgSZ9HCLMoQeEK53wS9LcVgSXhYaprMUW3tBZ", - "tick": "224" - }, - { - "state": "srs12sfrzHVxk3tXXZytHVxAVwZzjwZ1ZT6ebwepMXysrhSTtTVWNi", - "tick": "238" - }, - { - "state": "srs12KcUYabDR7L4Rf4ZM5hov3dR9rbg4fHXUnrUXjHzRwBwpEEugY", - "tick": "252" - }, - { - "state": "srs13MNAo1FK7smhue4vC58fxrQBKSy6NXnj82Wqo8rjHwxyLe2QfV", - "tick": "266" - }, - { - "state": "srs11kE9hTfTZKfbsucZebkSsM3hk9w8RLkA5UrHMnpF1sEacv1Raj", - "tick": "280" - }, - { - "state": "srs127nTh6bthHQFFzGPePWRdKKU9HKzGWYTh77PrVTFqTk6r55UzE", - "tick": "294" - }, - { - "state": "srs12Pk3ewtevqFts13bpYkvysXw7SMggkoqqEGqESytgpve9qHQ29", - "tick": "308" - }, - { - "state": "srs12EoJD2NGAeViyru7oxMx1NFEFQjUBJ14k3YmWbrjf1GeqJHHSa", - "tick": "322" - }, - { - "state": "srs11YWBfiRncwtt7mjZNmjQJzAQZt89qkZrY9TmH78Jc3ZYqiCETL", - "tick": "336" - }, - { - "state": "srs125iNMYAZQq5mu2jSWaqMYowaRvk7TjUKH7Z6EEQZCqJtWBT6sh", - "tick": "350" - }, - { - "state": "srs12nBhLg2eFKoq3yvnV1qtwCpB5SRqyYi8YbeNoDopcRAhhZjujh", - "tick": "364" - }, - { - "state": "srs138b2LtYoLRpYp4JonVesFU28NccbdUbN3JdXWWtayEjLj4WYp9", - "tick": "378" - }, - { - "state": "srs12HGP7mhqmxF4LMmfF8uwSnwPcNphVrPw1oWJ5BDmpQuBHaeEBy", - "tick": "392" - }, - { - "state": "srs12BmKjVNdoTCyd7GQXjZMcsqYRbdFCRbEAiPhZNiMhmWcYmzV2S", - "tick": "406" - }, - { - "state": "srs12YvWguefwCazMmDoqTxdYSsPC9Sfbi5f2fJ8sAZVH38Q17ngno", - "tick": "420" - }, - { - "state": "srs11vzwocNM9VB24nv2f1Pv11FvWx1WbuRQZFNiKkVKckM2R22s5d", - "tick": "434" - }, - { - "state": "srs11zQFAbwSNjG9G9JG5zdYa9fsjSAaGEPeaYxxswKye9Fsk2tHCZ", - "tick": "470" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "119", - "end_tick": "120", - "dissection": [ - { - "state": "srs11ZgNf6wN1qpfYuv1jGgTaRcyZ2hAXtiXSjzx8zZ3YApMXzm72N", - "tick": "119" - }, - { - "state": "srs133GWsCMg74kubRZ2Gsm9Brca1GG8rMHr2jtBsgAXVdteRZmLNK", - "tick": "120" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (reset_honest_during_game).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (reset_honest_during_game).out deleted file mode 100644 index 5352b3a29b3c5661cff66a242dcc12260a80900c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (reset_honest_during_game).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "582", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12fH3qaJPnV1ffBy6CmCeWNbnrRTYnBAJmpKmSijG4qAr1nF5qq", - "tick": "18" - }, - { - "state": "srs12U5Qo3eYMXF21V2WSqECogLqvuQFzFj46V8gCV44jTt9JbfPAt", - "tick": "36" - }, - { - "state": "srs11ojK4N7Jd3Yp71thpTaria7vxTqLVvJ78bq7AzBUK1Lfq19iXx", - "tick": "54" - }, - { - "state": "srs12mBVd34mTSQtHaJhCS5xBAzP4adN9RCPM6QnMnFqKCCK8AWCKB", - "tick": "72" - }, - { - "state": "srs122h7n2D1zgiE4rHLmzeoDQV1RLRJ73ha32DDbU3d54U7zaZPXc", - "tick": "90" - }, - { - "state": "srs129Wp6b9eXF9gZweXmNWeBKYTbXUDkMZY2szYgmrNzEgqk2YpDV", - "tick": "108" - }, - { - "state": "srs125AF7aoft7puAeoxtUmP1aajfLJeUKJA57LNJusncWd6zKRJjK", - "tick": "126" - }, - { - "state": "srs12kzv8cSYFt4DMUacbK32CTdReQqPRBYwMRsrKK6btByT3hbTLY", - "tick": "144" - }, - { - "state": "srs12QvEgKbjbZZ3ANqPMrqiMi3mw3tTEcsWixXgAY7X2gHABBNQNZ", - "tick": "162" - }, - { - "state": "srs11g395YpbNK3ZJopvv6cc7Gcc8H4Lv2MNhaQsCqfV7LztCUBvV1", - "tick": "180" - }, - { - "state": "srs11xVcimxB4Gb8LuzVyVXqjaB9S6YVbw2uR7rqoZr1VStr4b7QZS", - "tick": "198" - }, - { - "state": "srs11x2S5HDRwueA6tCKhipwohi2pWntjTpruhF1gmUWw3bRYW6szf", - "tick": "216" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12kh4XcDdzKZ8Pc4T7QsXm36XUqVe4cxtWJ2BxHrHwENrqEL9Ay", - "tick": "252" - }, - { - "state": "srs11hjoicX5kycSCkvbxZ7LDWwdbsV2qWEXBDurY3Sf5zwS8tUL3a", - "tick": "270" - }, - { - "state": "srs11n9qrtzJPgMSFze3erzSzvB5EAm48kTnEC9oJJYqxV6vRApyK5", - "tick": "288" - }, - { - "state": "srs1336xiQkLT9knTk1fco58u9hxKNqdHS1YPUwxGKLT2MhPzEMC7N", - "tick": "306" - }, - { - "state": "srs12CfNGraungvWxhYVdXr26w2aS1Ei6Eo5XgzDLdqn4LRDdduqom", - "tick": "324" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12ekcYu6yArjgAGuJAg5cwq6zPvKxdk6KCmnBtGYy7JP6kEBFqb", - "tick": "360" - }, - { - "state": "srs12a3AthkZ1i6H2x4RrPXN49iUmCVBSBkteWQTgEyWzQhpCzpoZD", - "tick": "378" - }, - { - "state": "srs12EXB6ARrgEz3pi71R6nzxtQ4PMY8Azwy2DYmmTJRkne8d6rW42", - "tick": "396" - }, - { - "state": "srs11fDjhakCGzwrmM7bHy4RJp8aGUgSFRN57tDDL2LzhXvDukwEJ1", - "tick": "414" - }, - { - "state": "srs1397ahAZp3GHxcSuvgvSk3MrdNaosN2nhkx8kDwuh3GF2ruEWzB", - "tick": "432" - }, - { - "state": "srs12sZ9L8e4CVC86wfn8o5KwroqUxMdGyzkjdkaVC4BM3PCeu1foW", - "tick": "450" - }, - { - "state": "srs13Jw5EzkDA1kK1ysWBT7QoQdoBWPtWLxbcg7tzhqmoQpMAzPDyr", - "tick": "468" - }, - { - "state": "srs12TjQfFTgrKzckqg65A3FUJfErZ2Eu6SXj2tWDAsi8iRf5hTcR6", - "tick": "486" - }, - { - "state": "srs12qYpCJiJoTiro1gs1y1HJNVLYv9Dp72bKDqwick9speqAPonWg", - "tick": "504" - }, - { - "state": "srs12JqZ2LaeC5RSw5xiaKDnUyW3uoH1L7qLB29fTR6tX7UH5VeXjk", - "tick": "522" - }, - { - "state": "srs13JbbzvBhzL8gjxyUGBQfZ67i4gFbab3qVQYSJoMg9xgQuovNMB", - "tick": "540" - }, - { - "state": "srs12ZGKGftAktgHZThDcahUSdoRjn214kafcq5eNqcUjb3SesLeWd", - "tick": "558" - }, - { - "state": "srs11Z7LSVYF6rBXAsR8Y5LjiQNgjPNs2eLAyUp2jWCf5QDMcSHqa6", - "tick": "582" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "121", - "end_tick": "122", - "dissection": [ - { - "state": "srs12gTMVH2Jm8MTRtBmtjCuVtQxsRdPKd6fmLgqUeizfdTCHpzb8V", - "tick": "121" - }, - { - "state": "srs12ziRy1mzsTCGdXRuzHERaB5gWs4nTByjVdGQ5chVQPucjfx7MA", - "tick": "122" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (timeout).out b/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (timeout).out deleted file mode 100644 index 5352b3a29b3c5661cff66a242dcc12260a80900c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- arith - refutation games winning strategies (timeout).out +++ /dev/null @@ -1,158 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "582", - "dissection": [ - { - "state": "srs136U2KJweAXf7Excw61Zeu5R5L7mi2TCb1WKkowQJ6UdHJ2VZWS", - "tick": "0" - }, - { - "state": "srs12fH3qaJPnV1ffBy6CmCeWNbnrRTYnBAJmpKmSijG4qAr1nF5qq", - "tick": "18" - }, - { - "state": "srs12U5Qo3eYMXF21V2WSqECogLqvuQFzFj46V8gCV44jTt9JbfPAt", - "tick": "36" - }, - { - "state": "srs11ojK4N7Jd3Yp71thpTaria7vxTqLVvJ78bq7AzBUK1Lfq19iXx", - "tick": "54" - }, - { - "state": "srs12mBVd34mTSQtHaJhCS5xBAzP4adN9RCPM6QnMnFqKCCK8AWCKB", - "tick": "72" - }, - { - "state": "srs122h7n2D1zgiE4rHLmzeoDQV1RLRJ73ha32DDbU3d54U7zaZPXc", - "tick": "90" - }, - { - "state": "srs129Wp6b9eXF9gZweXmNWeBKYTbXUDkMZY2szYgmrNzEgqk2YpDV", - "tick": "108" - }, - { - "state": "srs125AF7aoft7puAeoxtUmP1aajfLJeUKJA57LNJusncWd6zKRJjK", - "tick": "126" - }, - { - "state": "srs12kzv8cSYFt4DMUacbK32CTdReQqPRBYwMRsrKK6btByT3hbTLY", - "tick": "144" - }, - { - "state": "srs12QvEgKbjbZZ3ANqPMrqiMi3mw3tTEcsWixXgAY7X2gHABBNQNZ", - "tick": "162" - }, - { - "state": "srs11g395YpbNK3ZJopvv6cc7Gcc8H4Lv2MNhaQsCqfV7LztCUBvV1", - "tick": "180" - }, - { - "state": "srs11xVcimxB4Gb8LuzVyVXqjaB9S6YVbw2uR7rqoZr1VStr4b7QZS", - "tick": "198" - }, - { - "state": "srs11x2S5HDRwueA6tCKhipwohi2pWntjTpruhF1gmUWw3bRYW6szf", - "tick": "216" - }, - { - "state": "srs11tG4LUtdPmQocurJWscsZqWGELkynfDYq9hYfP9Z3yv4KQ1B2w", - "tick": "234" - }, - { - "state": "srs12kh4XcDdzKZ8Pc4T7QsXm36XUqVe4cxtWJ2BxHrHwENrqEL9Ay", - "tick": "252" - }, - { - "state": "srs11hjoicX5kycSCkvbxZ7LDWwdbsV2qWEXBDurY3Sf5zwS8tUL3a", - "tick": "270" - }, - { - "state": "srs11n9qrtzJPgMSFze3erzSzvB5EAm48kTnEC9oJJYqxV6vRApyK5", - "tick": "288" - }, - { - "state": "srs1336xiQkLT9knTk1fco58u9hxKNqdHS1YPUwxGKLT2MhPzEMC7N", - "tick": "306" - }, - { - "state": "srs12CfNGraungvWxhYVdXr26w2aS1Ei6Eo5XgzDLdqn4LRDdduqom", - "tick": "324" - }, - { - "state": "srs12BwLvVrWQv531zELu8TrCymUS1Gm9Naafz3PX6miVBYcZycJjr", - "tick": "342" - }, - { - "state": "srs12ekcYu6yArjgAGuJAg5cwq6zPvKxdk6KCmnBtGYy7JP6kEBFqb", - "tick": "360" - }, - { - "state": "srs12a3AthkZ1i6H2x4RrPXN49iUmCVBSBkteWQTgEyWzQhpCzpoZD", - "tick": "378" - }, - { - "state": "srs12EXB6ARrgEz3pi71R6nzxtQ4PMY8Azwy2DYmmTJRkne8d6rW42", - "tick": "396" - }, - { - "state": "srs11fDjhakCGzwrmM7bHy4RJp8aGUgSFRN57tDDL2LzhXvDukwEJ1", - "tick": "414" - }, - { - "state": "srs1397ahAZp3GHxcSuvgvSk3MrdNaosN2nhkx8kDwuh3GF2ruEWzB", - "tick": "432" - }, - { - "state": "srs12sZ9L8e4CVC86wfn8o5KwroqUxMdGyzkjdkaVC4BM3PCeu1foW", - "tick": "450" - }, - { - "state": "srs13Jw5EzkDA1kK1ysWBT7QoQdoBWPtWLxbcg7tzhqmoQpMAzPDyr", - "tick": "468" - }, - { - "state": "srs12TjQfFTgrKzckqg65A3FUJfErZ2Eu6SXj2tWDAsi8iRf5hTcR6", - "tick": "486" - }, - { - "state": "srs12qYpCJiJoTiro1gs1y1HJNVLYv9Dp72bKDqwick9speqAPonWg", - "tick": "504" - }, - { - "state": "srs12JqZ2LaeC5RSw5xiaKDnUyW3uoH1L7qLB29fTR6tX7UH5VeXjk", - "tick": "522" - }, - { - "state": "srs13JbbzvBhzL8gjxyUGBQfZ67i4gFbab3qVQYSJoMg9xgQuovNMB", - "tick": "540" - }, - { - "state": "srs12ZGKGftAktgHZThDcahUSdoRjn214kafcq5eNqcUjb3SesLeWd", - "tick": "558" - }, - { - "state": "srs11Z7LSVYF6rBXAsR8Y5LjiQNgjPNs2eLAyUp2jWCf5QDMcSHqa6", - "tick": "582" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "121", - "end_tick": "122", - "dissection": [ - { - "state": "srs12gTMVH2Jm8MTRtBmtjCuVtQxsRdPKd6fmLgqUeizfdTCHpzb8V", - "tick": "121" - }, - { - "state": "srs12ziRy1mzsTCGdXRuzHERaB5gWs4nTByjVdGQ5chVQPucjfx7MA", - "tick": "122" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - RPC API should work and be stable.out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - RPC API should work and be stable.out deleted file mode 100644 index ad76087db2e852fe3ffc37f6901d11164f2de176..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - RPC API should work and be stable.out +++ /dev/null @@ -1,275 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind wasm_2_0_0 of type string with kernel 0061736d0100000001280760037f7f7f017f60027f7f017f60057f7f7f7f7f017f60017f0060017f017f60027f7f0060000002610311736d6172745f726f6c6c75705f636f72650a726561645f696e707574000011736d6172745f726f6c6c75705f636f72650c77726974655f6f7574707574000111736d6172745f726f6c6c75705f636f72650b73746f72655f77726974650002030504030405060503010001071402036d656d02000a6b65726e656c5f72756e00060aa401042a01027f41fa002f0100210120002f010021022001200247044041e4004112410041e400410010021a0b0b0800200041c4006b0b5001057f41fe002d0000210341fc002f0100210220002d0000210420002f0100210520011004210620042003460440200041016a200141016b10011a0520052002460440200041076a200610011a0b0b0b1d01017f41dc0141840241901c100021004184022000100541840210030b0b38050041e4000b122f6b65726e656c2f656e762f7265626f6f740041f8000b0200010041fa000b0200020041fc000b0200000041fe000b0101 --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1944.973 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00085 - Expected counter: 1 - Gas limit: 2045 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00085 - payload fees(the block proposer) ....... +ꜩ0.00085 - Smart rollup origination: - Kind: wasm_2_0_0 - Parameter type: string - Kernel Blake2B hash: '24df9e3c520dd9a9c49b447766e8a604d31138c1aacb4a67532499c6a8b348cc' - This smart rollup origination was successfully applied - Consumed gas: 1944.940 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" -GET http://[HOST]:[PORT]/global/smart_rollup_address -200 OK -"[SMART_ROLLUP_HASH]" - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "312d31", - "312d32", - "312d33", - "312d34", - "312d35" -] -200 OK -["scmsg2rwuPwGBrYsQHFuusVq5DAZFfJ4iGcAJ6Ttvyobd6b1V1oSpUk","scmsg3WtaZfwmQQzbHobfzcZw3JFy7eYAAJs9RZsGGrnzwEAnzPP5We","scmsg2VDC22BtmBrJD2vGKdjeNBMv7W6uw1uRVvJmW7jRv2z9yiQTcM","scmsg25K99LfhZYmLRgiyFGPswB3YiNoH6Lw97AuPeZEaC1cKpdNaiN","scmsg3j2jViLpky6CbTuQWUguz3HxuvUL3XZYppP8euHHuWeDdW6QZy"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "322d31", - "322d32", - "322d33", - "322d34", - "322d35" -] -200 OK -["scmsg2Q8u9Ufd95zmF2DmjyhgaHyDNud45t5MXWh4BTdnnVabCT7hFc","scmsg3eoXpnbxkuUcg5DPWLxbLxRaewCjpLnB3GUoT8fa3NdEV1zTj1","scmsg2CcNmHmfTshLkupfyLMsDRQC5bWEVUYJKAY4hWD1QkjeBzqQuU","scmsg2bwoquA7WfWQCmvEpmWV2HNJw6pXX8gojemMhNTdMJuaQvovwt","scmsg2jUikwFvAacRFXSsFiohz8Ac1FzFxUMMDjj2FRn4wwbEue9GE1"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "332d31", - "332d32", - "332d33", - "332d34", - "332d35" -] -200 OK -["scmsg3dpi4Ju7FjurV5ygFfchk7AzEs4fkQwP5osyEC7KPwmpShKQsd","scmsg3U7d1dZ6fZnGSkcQaSgQGmCA59fM9HdfaAxn6iUyhMjJ7tzPvg","scmsg2ybFzC2zNxSiU3JGDQXpUFBaMSyruCrTNxncJGaAJWpKGoSwVD","scmsg3JAvYLWsukJD9qdzj71rMsUSVJiM1sgMfRtu9CYmJWL3unEmdw","scmsg2KGintqwnFJ2DpEqPzQ2wwKrqE4aWXePHaac6Wk4dZ2zYDzxq4"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "342d31", - "342d32", - "342d33", - "342d34", - "342d35" -] -200 OK -["scmsg3ig6Tfoiqy7J4pvCA69Xq5YGYwazYFwsiUYwjdKKBmVEiM7Bra","scmsg3DuDpF1odPhoS6mVEYT1FFyrmUJWEdqqAL768KE3rV3yWBwEMo","scmsg2M9XdPeq2rrhH9wCVw9EuaUmhvwdkSHMUfBbCKx3TBoV2j8Zzk","scmsg3BwQX5BJdaTdYf9UcqV3G6CwyxJjY5YaTTwSZKmZJi35GCTRk7","scmsg3ZLrgvvQaWKJgHB3nyQPoR5n7HDHbGp6nX2SeB1So3Fv1zVqdR"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "352d31", - "352d32", - "352d33", - "352d34", - "352d35" -] -200 OK -["scmsg32tLLi3b6P9nffRaxRYevU9nFKTPLRcdGGDGMuBYxoNp49h9fU","scmsg2WrjiWD88fiebhAnoZokDocz9XF2MqPp15hpJT5xGKG7jvBnph","scmsg3TWeiN93kzSuDei1T7PiBoxjVUxdqvMnDZ1x1bW7deVakpCBaH","scmsg238Qn5sQPP83DUtBamFgXEy3M74Zb23Cd2AuaQNiKWrhhoCMRZ","scmsg2fcex43ebcuDHXPaTFn4gaPsBoUtcZLZ4LatPvEppoxX8USaKb"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "362d31", - "362d32", - "362d33", - "362d34", - "362d35" -] -200 OK -["scmsg33ufVokVubNNkPvhVC2xVA6YQjePMV9KYHk3suh4aUmZLkxDUJ","scmsg2Veu8WVquo3WghLBoabaFsxJvQmrgRSR3J94RDEp18oecM9jwE","scmsg3UB9prgoMs2tgEE9avT1FMTiUUT6Ub67fHdFsCGFqs3XXTUraS","scmsg2ppDMPFbXGEhnkASETkvG4AdmigQzPjDPZPmAU63nJrXtBG9FD","scmsg3BonQUZ9SLxwfDKKefrJWnkAF4A9cVmaDAKSxnq2dBoX7vmXRp"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "372d31", - "372d32", - "372d33", - "372d34", - "372d35" -] -200 OK -["scmsg3b7y5ysxfjzRiSQHWygRQ37bf8fVtum2rfk7YuXLQQzyt9bsU5","scmsg3NrtDG5ynFbdEXewroyCm1rcFNHYRWQvBj3ooG1kg1JWB5gSUd","scmsg3CS5J6TrAvHKZ31PLBmLtzciH5xH8rRLsR8tY6kmm7TdkHFbKk","scmsg3i6pSyMeUewYGSEbPX2skk552iKmiq9RPsHCeG8WMJfBGMenXy","scmsg3GbNbAxSSFpnYneMLBRnL4h6byyJpkTCpc5GwzyAEtS2xxpSCB"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "382d31", - "382d32", - "382d33", - "382d34", - "382d35" -] -200 OK -["scmsg2jSC9soMxLqf9EkgtoZioZbg9q25LBeBKmkwsmGD2a8E9FaZtx","scmsg3tcqypPLNPYVC6Rtx62jZyT6Tqmua6JeSvfqLMg4ENmC78R6VT","scmsg2y9Lzxk9vmPzdijxtV1cisN9GTfWfZYfsShGiaTNqUc15xqGfm","scmsg2pHbd5gcWS41nzKcfhtzQXaC7T1PkZpEqmGrY6LCjBLJzkqZQ8","scmsg3nJkzbFRfd6EQnw3QhyDC3W42WSiJ9t2iqZ46k1Ji6tuCxjSuN"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "392d31", - "392d32", - "392d33", - "392d34", - "392d35" -] -200 OK -["scmsg3RKmNvZggo7jsdgM71HebGFG3TfY2gh3Z1t4FNPqYReqBHHnxr","scmsg34ExXXaeUBYvf6hRTGAP64S34iYSjyyC9osS5FnRyjdDMpLaPm","scmsg23fBMGvPyBaNKS35AkuZM4PpnHaup3bSrLYX8ZshhX4aZ1c4mE","scmsg3qr7fZEEBrTZxn5YZKMDgQ1hBDf5GwKecJegJXJyLGp6nxcLBA","scmsg2NnWpkUjWnZPgfE2pnCFyY7SA471dnLU8PvGD89YjuJfntfA53"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31302d31", - "31302d32", - "31302d33", - "31302d34", - "31302d35" -] -200 OK -["scmsg23W2XaqYXEuxFFmQRZwgWwXiJ972nU4Tk1Um3KGGdr3AkqGBhV","scmsg24JUWpQyRvpYVRc2tgtMUJbzMrJWNLtidsZsLEfjBGiMFNuMTK","scmsg3bfLJRgEbj7FTBCnJ6ZsuxMf8KNVLLCZ8EkpTQbiLDAVmWB3rS","scmsg3NGcoW9bSrz6A5BvXcnxk2255yAWCGsJgrGadjzE4JpKpFveZe","scmsg3eAbwnP55Vg8rGZRBQtWHeLDWmWEJhXvm62cNa2r6mj7Y8iMxH"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31312d31", - "31312d32", - "31312d33", - "31312d34", - "31312d35" -] -200 OK -["scmsg2vRX381tupMRsoWfXMYG4rVEkNiVZZxAhjSDmpdHbUjS9RUwQs","scmsg3Mph77VXyCm4m7FEDFoqyPzuevdN7W3UNqnXJttYRTtvY3vVVW","scmsg3dZBvX4ArK26LoCqR7mKhMa5DnWm9T5CEYZPfrUo8xhz6bbofd","scmsg237KVpGjKJxKPnGvYSLqkqtEURVG6ive7dNqPo2x6X4SDhsctC","scmsg2rFWrXD9jQ8UjL6XRcKRq6HJQ9fgdKgXxf4Auj5F5bxzYwqkXG"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31322d31", - "31322d32", - "31322d33", - "31322d34", - "31322d35" -] -200 OK -["scmsg2k1HPFjtZFMUJUHKFbMkaijLa5ns8UMRb5h2d8iynf1gzeFCHZ","scmsg3UdpWDaa29XQ3hYHZwe2kiLfZ24KrkcVh58TR2yzYJsAoBGVwa","scmsg2qG2uiM8p8i49D1xp8NiznNAe6e3CFPwQgb4nzty9Wmp4qspzq","scmsg3B2psrEy3hxFURDzLtYqPckSycE8NWbuB2pZwKk6LaRhPUR3jh","scmsg3ccqjHaRH7gE98cZGvFBNHj1QgnPNZiByvB5rGpQMMC7MthkR8"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31332d31", - "31332d32", - "31332d33", - "31332d34", - "31332d35" -] -200 OK -["scmsg3ifsPVXRWwo4BiBUcFJcNNpdCGhnJrcFQqH8accCscdE6Jdgys","scmsg3TsK1LMasQkWUcXhoVZBCaEJDFk8jVUxQkjEzRUi7AJU8KGXRE","scmsg3R5hqiXmVL8aQTzzTKwfiFXsoDj9dE96A3B3cd2VsUBZGdjszC","scmsg27jkAx3C8K2w8m6bPUHMsBNKqZ6y1A2XN5Ujw4nCmbVWzK6iHr","scmsg38gfhAaeaNovx4XAKCQ97D9zEGmebYXvkKioDWd5DMLdAbVCDF"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31342d31", - "31342d32", - "31342d33", - "31342d34", - "31342d35" -] -200 OK -["scmsg3SQfcD9VuNoUzUpQqGtETZXiMmDVLHUkHVxKiA87kYaYVsjDNJ","scmsg25qzqinLMRAeezYjTR4gh3srY4H6mMRpGARJeqTm31mKSKjnE7","scmsg322sHe82ordku5DRR4xQ6Di3SdxjxV8kg7CBAdE7sxAmcD8yA5","scmsg2xCTmrcSLzzxUP5aXpdGS4zLttFQiuTLzEafuRrXGmsAyDXqVg","scmsg3CjDyDbTJcNtexxdqhqUPLoWgW9bjyvgsFnpQDNbDK2MK7Ju9o"] - -POST http://[HOST]:[PORT]/local/batcher/injection -Content-type: application/json -[ - "31352d31", - "31352d32", - "31352d33", - "31352d34", - "31352d35" -] -200 OK -["scmsg1zCJDwhb18RRCCXJgXxXXeapZWzCz1zn89xqnKf1esT7kvMWUb","scmsg3idErXZUCGh2rHHUvuWqGgCXH523QLfPEdXh7JzVUGZ2acJbCC","scmsg2sfmQTX5TmmLKkAeRg4sWHXLnmWjnouYUXUNCLVsSNWPnNtLR9","scmsg2xipcKaxHRPtpk4qCZ2tB6JG8h4UPtr9GP7fyyZFxXB69NSNDi","scmsg21cRa6ffrFxAQVXQvA5MsVfNSN9NP2ku7NdYvNywfHA4U4Jp65"] - -GET http://[HOST]:[PORT]/global/block/head/hash -200 OK -"[BLOCK_HASH]" - -GET http://[HOST]:[PORT]/global/block/5/hash -200 OK -"[BLOCK_HASH]" - -GET http://[HOST]:[PORT]/global/block/finalized/level -200 OK -16 - -GET http://[HOST]:[PORT]/global/block/head/num_messages -200 OK -"8" - -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/value?key=/kernel/boot.wasm -200 OK -"0061736d0100000001280760037f7f7f017f60027f7f017f60057f7f7f7f7f017f60017f0060017f017f60027f7f0060000002610311736d6172745f726f6c6c75705f636f72650a726561645f696e707574000011736d6172745f726f6c6c75705f636f72650c77726974655f6f7574707574000111736d6172745f726f6c6c75705f636f72650b73746f72655f77726974650002030504030405060503010001071402036d656d02000a6b65726e656c5f72756e00060aa401042a01027f41fa002f0100210120002f010021022001200247044041e4004112410041e400410010021a0b0b0800200041c4006b0b5001057f41fe002d0000210341fc002f0100210220002d0000210420002f0100210520011004210620042003460440200041016a200141016b10011a0520052002460440200041076a200610011a0b0b0b1d01017f41dc0141840241901c100021004184022000100541840210030b0b38050041e4000b122f6b65726e656c2f656e762f7265626f6f740041f8000b0200010041fa000b0200020041fc000b0200000041fe000b0101" - -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/value?key=/kernel/boot.wasm2 -200 OK -null - -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/value?key=/readonly/wasm_version -200 OK -"322e302e302d7234" - -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/length?key=/readonly/wasm_version -200 OK -"8" - -GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/subkeys?key=/readonly/kernel -200 OK -["boot.wasm","env"] - -GET http://[HOST]:[PORT]/global/block/head/status -200 OK -"Waiting for input message" - -GET http://[HOST]:[PORT]/global/block/head/ticks -200 OK -"450000000000000" - -GET http://[HOST]:[PORT]/global/block/head/state_hash -200 OK -"[SC_ROLLUP_PVM_STATE_HASH]" - -GET http://[HOST]:[PORT]/global/tezos_head -200 OK -"[BLOCK_HASH]" - -GET http://[HOST]:[PORT]/global/tezos_level -200 OK -18 - diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - origination of a SCORU executes without error.out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - origination of a SCORU executes without error.out deleted file mode 100644 index 70c6e0d5c7b030bf8ea2d0e15c4caf39c928cce8..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - origination of a SCORU executes without error.out +++ /dev/null @@ -1,35 +0,0 @@ - -./octez-client --wait none originate smart rollup rollup from bootstrap1 of kind wasm_2_0_0 of type string with kernel 0061736d0100000001280760037f7f7f017f60027f7f017f60057f7f7f7f7f017f60017f0060017f017f60027f7f0060000002610311736d6172745f726f6c6c75705f636f72650a726561645f696e707574000011736d6172745f726f6c6c75705f636f72650c77726974655f6f7574707574000111736d6172745f726f6c6c75705f636f72650b73746f72655f77726974650002030504030405060503010001071402036d656d02000a6b65726e656c5f72756e00060aa401042a01027f41fa002f0100210120002f010021022001200247044041e4004112410041e400410010021a0b0b0800200041c4006b0b5001057f41fe002d0000210341fc002f0100210220002d0000210420002f0100210520011004210620042003460440200041016a200141016b10011a0520052002460440200041076a200610011a0b0b0b1d01017f41dc0141840241901c100021004184022000100541840210030b0b38050041e4000b122f6b65726e656c2f656e762f7265626f6f740041f8000b0200010041fa000b0200020041fc000b0200000041fe000b0101 --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 1944.973 units (will add 100 for safety) -Estimated storage: 6552 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00085 - Expected counter: 1 - Gas limit: 2045 - Storage limit: 6572 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00085 - payload fees(the block proposer) ....... +ꜩ0.00085 - Smart rollup origination: - Kind: wasm_2_0_0 - Parameter type: string - Kernel Blake2B hash: '24df9e3c520dd9a9c49b447766e8a604d31138c1aacb4a67532499c6a8b348cc' - This smart rollup origination was successfully applied - Consumed gas: 1944.940 - Storage size: 6552 bytes - Address: [SMART_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.638 - storage fees ........................... +ꜩ1.638 - -Smart rollup [SMART_ROLLUP_HASH] memorized as "rollup" diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (inbox_proof_0).out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (inbox_proof_0).out deleted file mode 100644 index 1d8fa6b419dc4054257435c953a526cef60da8d2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (inbox_proof_0).out +++ /dev/null @@ -1,501 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "100000000000000", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "50000000000000" - }, - { - "tick": "100000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1562500000000", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "48828125000" - }, - { - "tick": "97656250000" - }, - { - "tick": "146484375000" - }, - { - "tick": "195312500000" - }, - { - "tick": "244140625000" - }, - { - "tick": "292968750000" - }, - { - "tick": "341796875000" - }, - { - "tick": "390625000000" - }, - { - "tick": "439453125000" - }, - { - "tick": "488281250000" - }, - { - "tick": "537109375000" - }, - { - "tick": "585937500000" - }, - { - "tick": "634765625000" - }, - { - "tick": "683593750000" - }, - { - "tick": "732421875000" - }, - { - "tick": "781250000000" - }, - { - "tick": "830078125000" - }, - { - "tick": "878906250000" - }, - { - "tick": "927734375000" - }, - { - "tick": "976562500000" - }, - { - "tick": "1025390625000" - }, - { - "tick": "1074218750000" - }, - { - "tick": "1123046875000" - }, - { - "tick": "1171875000000" - }, - { - "tick": "1220703125000" - }, - { - "tick": "1269531250000" - }, - { - "tick": "1318359375000" - }, - { - "tick": "1367187500000" - }, - { - "tick": "1416015625000" - }, - { - "tick": "1464843750000" - }, - { - "tick": "1513671875000" - }, - { - "tick": "1562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1525878906", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "47683715" - }, - { - "tick": "95367430" - }, - { - "tick": "143051145" - }, - { - "tick": "190734860" - }, - { - "tick": "238418575" - }, - { - "tick": "286102290" - }, - { - "tick": "333786005" - }, - { - "tick": "381469720" - }, - { - "tick": "429153435" - }, - { - "tick": "476837150" - }, - { - "tick": "524520865" - }, - { - "tick": "572204580" - }, - { - "tick": "619888295" - }, - { - "tick": "667572010" - }, - { - "tick": "715255725" - }, - { - "tick": "762939440" - }, - { - "tick": "810623155" - }, - { - "tick": "858306870" - }, - { - "tick": "905990585" - }, - { - "tick": "953674300" - }, - { - "tick": "1001358015" - }, - { - "tick": "1049041730" - }, - { - "tick": "1096725445" - }, - { - "tick": "1144409160" - }, - { - "tick": "1192092875" - }, - { - "tick": "1239776590" - }, - { - "tick": "1287460305" - }, - { - "tick": "1335144020" - }, - { - "tick": "1382827735" - }, - { - "tick": "1430511450" - }, - { - "tick": "1478195165" - }, - { - "tick": "1525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1490116", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "46566" - }, - { - "tick": "93132" - }, - { - "tick": "139698" - }, - { - "tick": "186264" - }, - { - "tick": "232830" - }, - { - "tick": "279396" - }, - { - "tick": "325962" - }, - { - "tick": "372528" - }, - { - "tick": "419094" - }, - { - "tick": "465660" - }, - { - "tick": "512226" - }, - { - "tick": "558792" - }, - { - "tick": "605358" - }, - { - "tick": "651924" - }, - { - "tick": "698490" - }, - { - "tick": "745056" - }, - { - "tick": "791622" - }, - { - "tick": "838188" - }, - { - "tick": "884754" - }, - { - "tick": "931320" - }, - { - "tick": "977886" - }, - { - "tick": "1024452" - }, - { - "tick": "1071018" - }, - { - "tick": "1117584" - }, - { - "tick": "1164150" - }, - { - "tick": "1210716" - }, - { - "tick": "1257282" - }, - { - "tick": "1303848" - }, - { - "tick": "1350414" - }, - { - "tick": "1396980" - }, - { - "tick": "1443546" - }, - { - "tick": "1490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1455", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "45" - }, - { - "tick": "90" - }, - { - "tick": "135" - }, - { - "tick": "180" - }, - { - "tick": "225" - }, - { - "tick": "270" - }, - { - "tick": "315" - }, - { - "tick": "360" - }, - { - "tick": "405" - }, - { - "tick": "450" - }, - { - "tick": "495" - }, - { - "tick": "540" - }, - { - "tick": "585" - }, - { - "tick": "630" - }, - { - "tick": "675" - }, - { - "tick": "720" - }, - { - "tick": "765" - }, - { - "tick": "810" - }, - { - "tick": "855" - }, - { - "tick": "900" - }, - { - "tick": "945" - }, - { - "tick": "990" - }, - { - "tick": "1035" - }, - { - "tick": "1080" - }, - { - "tick": "1125" - }, - { - "tick": "1170" - }, - { - "tick": "1215" - }, - { - "tick": "1260" - }, - { - "tick": "1305" - }, - { - "tick": "1350" - }, - { - "tick": "1395" - }, - { - "tick": "1455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "13", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "1" - }, - { - "tick": "2" - }, - { - "tick": "3" - }, - { - "tick": "4" - }, - { - "tick": "5" - }, - { - "tick": "6" - }, - { - "tick": "7" - }, - { - "tick": "8" - }, - { - "tick": "9" - }, - { - "tick": "10" - }, - { - "tick": "11" - }, - { - "tick": "12" - }, - { - "tick": "13" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (inbox_proof_1).out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (inbox_proof_1).out deleted file mode 100644 index 1d8fa6b419dc4054257435c953a526cef60da8d2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (inbox_proof_1).out +++ /dev/null @@ -1,501 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "100000000000000", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "50000000000000" - }, - { - "tick": "100000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1562500000000", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "48828125000" - }, - { - "tick": "97656250000" - }, - { - "tick": "146484375000" - }, - { - "tick": "195312500000" - }, - { - "tick": "244140625000" - }, - { - "tick": "292968750000" - }, - { - "tick": "341796875000" - }, - { - "tick": "390625000000" - }, - { - "tick": "439453125000" - }, - { - "tick": "488281250000" - }, - { - "tick": "537109375000" - }, - { - "tick": "585937500000" - }, - { - "tick": "634765625000" - }, - { - "tick": "683593750000" - }, - { - "tick": "732421875000" - }, - { - "tick": "781250000000" - }, - { - "tick": "830078125000" - }, - { - "tick": "878906250000" - }, - { - "tick": "927734375000" - }, - { - "tick": "976562500000" - }, - { - "tick": "1025390625000" - }, - { - "tick": "1074218750000" - }, - { - "tick": "1123046875000" - }, - { - "tick": "1171875000000" - }, - { - "tick": "1220703125000" - }, - { - "tick": "1269531250000" - }, - { - "tick": "1318359375000" - }, - { - "tick": "1367187500000" - }, - { - "tick": "1416015625000" - }, - { - "tick": "1464843750000" - }, - { - "tick": "1513671875000" - }, - { - "tick": "1562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1525878906", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "47683715" - }, - { - "tick": "95367430" - }, - { - "tick": "143051145" - }, - { - "tick": "190734860" - }, - { - "tick": "238418575" - }, - { - "tick": "286102290" - }, - { - "tick": "333786005" - }, - { - "tick": "381469720" - }, - { - "tick": "429153435" - }, - { - "tick": "476837150" - }, - { - "tick": "524520865" - }, - { - "tick": "572204580" - }, - { - "tick": "619888295" - }, - { - "tick": "667572010" - }, - { - "tick": "715255725" - }, - { - "tick": "762939440" - }, - { - "tick": "810623155" - }, - { - "tick": "858306870" - }, - { - "tick": "905990585" - }, - { - "tick": "953674300" - }, - { - "tick": "1001358015" - }, - { - "tick": "1049041730" - }, - { - "tick": "1096725445" - }, - { - "tick": "1144409160" - }, - { - "tick": "1192092875" - }, - { - "tick": "1239776590" - }, - { - "tick": "1287460305" - }, - { - "tick": "1335144020" - }, - { - "tick": "1382827735" - }, - { - "tick": "1430511450" - }, - { - "tick": "1478195165" - }, - { - "tick": "1525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1490116", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "46566" - }, - { - "tick": "93132" - }, - { - "tick": "139698" - }, - { - "tick": "186264" - }, - { - "tick": "232830" - }, - { - "tick": "279396" - }, - { - "tick": "325962" - }, - { - "tick": "372528" - }, - { - "tick": "419094" - }, - { - "tick": "465660" - }, - { - "tick": "512226" - }, - { - "tick": "558792" - }, - { - "tick": "605358" - }, - { - "tick": "651924" - }, - { - "tick": "698490" - }, - { - "tick": "745056" - }, - { - "tick": "791622" - }, - { - "tick": "838188" - }, - { - "tick": "884754" - }, - { - "tick": "931320" - }, - { - "tick": "977886" - }, - { - "tick": "1024452" - }, - { - "tick": "1071018" - }, - { - "tick": "1117584" - }, - { - "tick": "1164150" - }, - { - "tick": "1210716" - }, - { - "tick": "1257282" - }, - { - "tick": "1303848" - }, - { - "tick": "1350414" - }, - { - "tick": "1396980" - }, - { - "tick": "1443546" - }, - { - "tick": "1490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "1455", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "45" - }, - { - "tick": "90" - }, - { - "tick": "135" - }, - { - "tick": "180" - }, - { - "tick": "225" - }, - { - "tick": "270" - }, - { - "tick": "315" - }, - { - "tick": "360" - }, - { - "tick": "405" - }, - { - "tick": "450" - }, - { - "tick": "495" - }, - { - "tick": "540" - }, - { - "tick": "585" - }, - { - "tick": "630" - }, - { - "tick": "675" - }, - { - "tick": "720" - }, - { - "tick": "765" - }, - { - "tick": "810" - }, - { - "tick": "855" - }, - { - "tick": "900" - }, - { - "tick": "945" - }, - { - "tick": "990" - }, - { - "tick": "1035" - }, - { - "tick": "1080" - }, - { - "tick": "1125" - }, - { - "tick": "1170" - }, - { - "tick": "1215" - }, - { - "tick": "1260" - }, - { - "tick": "1305" - }, - { - "tick": "1350" - }, - { - "tick": "1395" - }, - { - "tick": "1455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "0", - "end_tick": "13", - "dissection": [ - { - "tick": "0" - }, - { - "tick": "1" - }, - { - "tick": "2" - }, - { - "tick": "3" - }, - { - "tick": "4" - }, - { - "tick": "5" - }, - { - "tick": "6" - }, - { - "tick": "7" - }, - { - "tick": "8" - }, - { - "tick": "9" - }, - { - "tick": "10" - }, - { - "tick": "11" - }, - { - "tick": "12" - }, - { - "tick": "13" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_0).out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_0).out deleted file mode 100644 index 886e587ad6c421a796033b143c9f2524d35f0a11..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_0).out +++ /dev/null @@ -1,504 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "1050000000000000", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "950000000000000" - }, - { - "tick": "1000000000000000" - }, - { - "tick": "1050000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "901562500000000", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900048828125000" - }, - { - "tick": "900097656250000" - }, - { - "tick": "900146484375000" - }, - { - "tick": "900195312500000" - }, - { - "tick": "900244140625000" - }, - { - "tick": "900292968750000" - }, - { - "tick": "900341796875000" - }, - { - "tick": "900390625000000" - }, - { - "tick": "900439453125000" - }, - { - "tick": "900488281250000" - }, - { - "tick": "900537109375000" - }, - { - "tick": "900585937500000" - }, - { - "tick": "900634765625000" - }, - { - "tick": "900683593750000" - }, - { - "tick": "900732421875000" - }, - { - "tick": "900781250000000" - }, - { - "tick": "900830078125000" - }, - { - "tick": "900878906250000" - }, - { - "tick": "900927734375000" - }, - { - "tick": "900976562500000" - }, - { - "tick": "901025390625000" - }, - { - "tick": "901074218750000" - }, - { - "tick": "901123046875000" - }, - { - "tick": "901171875000000" - }, - { - "tick": "901220703125000" - }, - { - "tick": "901269531250000" - }, - { - "tick": "901318359375000" - }, - { - "tick": "901367187500000" - }, - { - "tick": "901416015625000" - }, - { - "tick": "901464843750000" - }, - { - "tick": "901513671875000" - }, - { - "tick": "901562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900001525878906", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000047683715" - }, - { - "tick": "900000095367430" - }, - { - "tick": "900000143051145" - }, - { - "tick": "900000190734860" - }, - { - "tick": "900000238418575" - }, - { - "tick": "900000286102290" - }, - { - "tick": "900000333786005" - }, - { - "tick": "900000381469720" - }, - { - "tick": "900000429153435" - }, - { - "tick": "900000476837150" - }, - { - "tick": "900000524520865" - }, - { - "tick": "900000572204580" - }, - { - "tick": "900000619888295" - }, - { - "tick": "900000667572010" - }, - { - "tick": "900000715255725" - }, - { - "tick": "900000762939440" - }, - { - "tick": "900000810623155" - }, - { - "tick": "900000858306870" - }, - { - "tick": "900000905990585" - }, - { - "tick": "900000953674300" - }, - { - "tick": "900001001358015" - }, - { - "tick": "900001049041730" - }, - { - "tick": "900001096725445" - }, - { - "tick": "900001144409160" - }, - { - "tick": "900001192092875" - }, - { - "tick": "900001239776590" - }, - { - "tick": "900001287460305" - }, - { - "tick": "900001335144020" - }, - { - "tick": "900001382827735" - }, - { - "tick": "900001430511450" - }, - { - "tick": "900001478195165" - }, - { - "tick": "900001525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900000001490116", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000000046566" - }, - { - "tick": "900000000093132" - }, - { - "tick": "900000000139698" - }, - { - "tick": "900000000186264" - }, - { - "tick": "900000000232830" - }, - { - "tick": "900000000279396" - }, - { - "tick": "900000000325962" - }, - { - "tick": "900000000372528" - }, - { - "tick": "900000000419094" - }, - { - "tick": "900000000465660" - }, - { - "tick": "900000000512226" - }, - { - "tick": "900000000558792" - }, - { - "tick": "900000000605358" - }, - { - "tick": "900000000651924" - }, - { - "tick": "900000000698490" - }, - { - "tick": "900000000745056" - }, - { - "tick": "900000000791622" - }, - { - "tick": "900000000838188" - }, - { - "tick": "900000000884754" - }, - { - "tick": "900000000931320" - }, - { - "tick": "900000000977886" - }, - { - "tick": "900000001024452" - }, - { - "tick": "900000001071018" - }, - { - "tick": "900000001117584" - }, - { - "tick": "900000001164150" - }, - { - "tick": "900000001210716" - }, - { - "tick": "900000001257282" - }, - { - "tick": "900000001303848" - }, - { - "tick": "900000001350414" - }, - { - "tick": "900000001396980" - }, - { - "tick": "900000001443546" - }, - { - "tick": "900000001490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900000000001455", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000000000045" - }, - { - "tick": "900000000000090" - }, - { - "tick": "900000000000135" - }, - { - "tick": "900000000000180" - }, - { - "tick": "900000000000225" - }, - { - "tick": "900000000000270" - }, - { - "tick": "900000000000315" - }, - { - "tick": "900000000000360" - }, - { - "tick": "900000000000405" - }, - { - "tick": "900000000000450" - }, - { - "tick": "900000000000495" - }, - { - "tick": "900000000000540" - }, - { - "tick": "900000000000585" - }, - { - "tick": "900000000000630" - }, - { - "tick": "900000000000675" - }, - { - "tick": "900000000000720" - }, - { - "tick": "900000000000765" - }, - { - "tick": "900000000000810" - }, - { - "tick": "900000000000855" - }, - { - "tick": "900000000000900" - }, - { - "tick": "900000000000945" - }, - { - "tick": "900000000000990" - }, - { - "tick": "900000000001035" - }, - { - "tick": "900000000001080" - }, - { - "tick": "900000000001125" - }, - { - "tick": "900000000001170" - }, - { - "tick": "900000000001215" - }, - { - "tick": "900000000001260" - }, - { - "tick": "900000000001305" - }, - { - "tick": "900000000001350" - }, - { - "tick": "900000000001395" - }, - { - "tick": "900000000001455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900000000000013", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000000000001" - }, - { - "tick": "900000000000002" - }, - { - "tick": "900000000000003" - }, - { - "tick": "900000000000004" - }, - { - "tick": "900000000000005" - }, - { - "tick": "900000000000006" - }, - { - "tick": "900000000000007" - }, - { - "tick": "900000000000008" - }, - { - "tick": "900000000000009" - }, - { - "tick": "900000000000010" - }, - { - "tick": "900000000000011" - }, - { - "tick": "900000000000012" - }, - { - "tick": "900000000000013" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_1).out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_1).out deleted file mode 100644 index 26f068148582497db3f8e30edeb91cbc65cf446b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_1).out +++ /dev/null @@ -1,504 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1950000000000000", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1850000000000000" - }, - { - "tick": "1900000000000000" - }, - { - "tick": "1950000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1801562500000000", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800048828125000" - }, - { - "tick": "1800097656250000" - }, - { - "tick": "1800146484375000" - }, - { - "tick": "1800195312500000" - }, - { - "tick": "1800244140625000" - }, - { - "tick": "1800292968750000" - }, - { - "tick": "1800341796875000" - }, - { - "tick": "1800390625000000" - }, - { - "tick": "1800439453125000" - }, - { - "tick": "1800488281250000" - }, - { - "tick": "1800537109375000" - }, - { - "tick": "1800585937500000" - }, - { - "tick": "1800634765625000" - }, - { - "tick": "1800683593750000" - }, - { - "tick": "1800732421875000" - }, - { - "tick": "1800781250000000" - }, - { - "tick": "1800830078125000" - }, - { - "tick": "1800878906250000" - }, - { - "tick": "1800927734375000" - }, - { - "tick": "1800976562500000" - }, - { - "tick": "1801025390625000" - }, - { - "tick": "1801074218750000" - }, - { - "tick": "1801123046875000" - }, - { - "tick": "1801171875000000" - }, - { - "tick": "1801220703125000" - }, - { - "tick": "1801269531250000" - }, - { - "tick": "1801318359375000" - }, - { - "tick": "1801367187500000" - }, - { - "tick": "1801416015625000" - }, - { - "tick": "1801464843750000" - }, - { - "tick": "1801513671875000" - }, - { - "tick": "1801562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800001525878906", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000047683715" - }, - { - "tick": "1800000095367430" - }, - { - "tick": "1800000143051145" - }, - { - "tick": "1800000190734860" - }, - { - "tick": "1800000238418575" - }, - { - "tick": "1800000286102290" - }, - { - "tick": "1800000333786005" - }, - { - "tick": "1800000381469720" - }, - { - "tick": "1800000429153435" - }, - { - "tick": "1800000476837150" - }, - { - "tick": "1800000524520865" - }, - { - "tick": "1800000572204580" - }, - { - "tick": "1800000619888295" - }, - { - "tick": "1800000667572010" - }, - { - "tick": "1800000715255725" - }, - { - "tick": "1800000762939440" - }, - { - "tick": "1800000810623155" - }, - { - "tick": "1800000858306870" - }, - { - "tick": "1800000905990585" - }, - { - "tick": "1800000953674300" - }, - { - "tick": "1800001001358015" - }, - { - "tick": "1800001049041730" - }, - { - "tick": "1800001096725445" - }, - { - "tick": "1800001144409160" - }, - { - "tick": "1800001192092875" - }, - { - "tick": "1800001239776590" - }, - { - "tick": "1800001287460305" - }, - { - "tick": "1800001335144020" - }, - { - "tick": "1800001382827735" - }, - { - "tick": "1800001430511450" - }, - { - "tick": "1800001478195165" - }, - { - "tick": "1800001525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000001490116", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000046566" - }, - { - "tick": "1800000000093132" - }, - { - "tick": "1800000000139698" - }, - { - "tick": "1800000000186264" - }, - { - "tick": "1800000000232830" - }, - { - "tick": "1800000000279396" - }, - { - "tick": "1800000000325962" - }, - { - "tick": "1800000000372528" - }, - { - "tick": "1800000000419094" - }, - { - "tick": "1800000000465660" - }, - { - "tick": "1800000000512226" - }, - { - "tick": "1800000000558792" - }, - { - "tick": "1800000000605358" - }, - { - "tick": "1800000000651924" - }, - { - "tick": "1800000000698490" - }, - { - "tick": "1800000000745056" - }, - { - "tick": "1800000000791622" - }, - { - "tick": "1800000000838188" - }, - { - "tick": "1800000000884754" - }, - { - "tick": "1800000000931320" - }, - { - "tick": "1800000000977886" - }, - { - "tick": "1800000001024452" - }, - { - "tick": "1800000001071018" - }, - { - "tick": "1800000001117584" - }, - { - "tick": "1800000001164150" - }, - { - "tick": "1800000001210716" - }, - { - "tick": "1800000001257282" - }, - { - "tick": "1800000001303848" - }, - { - "tick": "1800000001350414" - }, - { - "tick": "1800000001396980" - }, - { - "tick": "1800000001443546" - }, - { - "tick": "1800000001490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000000001455", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000000045" - }, - { - "tick": "1800000000000090" - }, - { - "tick": "1800000000000135" - }, - { - "tick": "1800000000000180" - }, - { - "tick": "1800000000000225" - }, - { - "tick": "1800000000000270" - }, - { - "tick": "1800000000000315" - }, - { - "tick": "1800000000000360" - }, - { - "tick": "1800000000000405" - }, - { - "tick": "1800000000000450" - }, - { - "tick": "1800000000000495" - }, - { - "tick": "1800000000000540" - }, - { - "tick": "1800000000000585" - }, - { - "tick": "1800000000000630" - }, - { - "tick": "1800000000000675" - }, - { - "tick": "1800000000000720" - }, - { - "tick": "1800000000000765" - }, - { - "tick": "1800000000000810" - }, - { - "tick": "1800000000000855" - }, - { - "tick": "1800000000000900" - }, - { - "tick": "1800000000000945" - }, - { - "tick": "1800000000000990" - }, - { - "tick": "1800000000001035" - }, - { - "tick": "1800000000001080" - }, - { - "tick": "1800000000001125" - }, - { - "tick": "1800000000001170" - }, - { - "tick": "1800000000001215" - }, - { - "tick": "1800000000001260" - }, - { - "tick": "1800000000001305" - }, - { - "tick": "1800000000001350" - }, - { - "tick": "1800000000001395" - }, - { - "tick": "1800000000001455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000000000013", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000000001" - }, - { - "tick": "1800000000000002" - }, - { - "tick": "1800000000000003" - }, - { - "tick": "1800000000000004" - }, - { - "tick": "1800000000000005" - }, - { - "tick": "1800000000000006" - }, - { - "tick": "1800000000000007" - }, - { - "tick": "1800000000000008" - }, - { - "tick": "1800000000000009" - }, - { - "tick": "1800000000000010" - }, - { - "tick": "1800000000000011" - }, - { - "tick": "1800000000000012" - }, - { - "tick": "1800000000000013" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_2).out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_2).out deleted file mode 100644 index 26f068148582497db3f8e30edeb91cbc65cf446b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_2).out +++ /dev/null @@ -1,504 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1950000000000000", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1850000000000000" - }, - { - "tick": "1900000000000000" - }, - { - "tick": "1950000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1801562500000000", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800048828125000" - }, - { - "tick": "1800097656250000" - }, - { - "tick": "1800146484375000" - }, - { - "tick": "1800195312500000" - }, - { - "tick": "1800244140625000" - }, - { - "tick": "1800292968750000" - }, - { - "tick": "1800341796875000" - }, - { - "tick": "1800390625000000" - }, - { - "tick": "1800439453125000" - }, - { - "tick": "1800488281250000" - }, - { - "tick": "1800537109375000" - }, - { - "tick": "1800585937500000" - }, - { - "tick": "1800634765625000" - }, - { - "tick": "1800683593750000" - }, - { - "tick": "1800732421875000" - }, - { - "tick": "1800781250000000" - }, - { - "tick": "1800830078125000" - }, - { - "tick": "1800878906250000" - }, - { - "tick": "1800927734375000" - }, - { - "tick": "1800976562500000" - }, - { - "tick": "1801025390625000" - }, - { - "tick": "1801074218750000" - }, - { - "tick": "1801123046875000" - }, - { - "tick": "1801171875000000" - }, - { - "tick": "1801220703125000" - }, - { - "tick": "1801269531250000" - }, - { - "tick": "1801318359375000" - }, - { - "tick": "1801367187500000" - }, - { - "tick": "1801416015625000" - }, - { - "tick": "1801464843750000" - }, - { - "tick": "1801513671875000" - }, - { - "tick": "1801562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800001525878906", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000047683715" - }, - { - "tick": "1800000095367430" - }, - { - "tick": "1800000143051145" - }, - { - "tick": "1800000190734860" - }, - { - "tick": "1800000238418575" - }, - { - "tick": "1800000286102290" - }, - { - "tick": "1800000333786005" - }, - { - "tick": "1800000381469720" - }, - { - "tick": "1800000429153435" - }, - { - "tick": "1800000476837150" - }, - { - "tick": "1800000524520865" - }, - { - "tick": "1800000572204580" - }, - { - "tick": "1800000619888295" - }, - { - "tick": "1800000667572010" - }, - { - "tick": "1800000715255725" - }, - { - "tick": "1800000762939440" - }, - { - "tick": "1800000810623155" - }, - { - "tick": "1800000858306870" - }, - { - "tick": "1800000905990585" - }, - { - "tick": "1800000953674300" - }, - { - "tick": "1800001001358015" - }, - { - "tick": "1800001049041730" - }, - { - "tick": "1800001096725445" - }, - { - "tick": "1800001144409160" - }, - { - "tick": "1800001192092875" - }, - { - "tick": "1800001239776590" - }, - { - "tick": "1800001287460305" - }, - { - "tick": "1800001335144020" - }, - { - "tick": "1800001382827735" - }, - { - "tick": "1800001430511450" - }, - { - "tick": "1800001478195165" - }, - { - "tick": "1800001525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000001490116", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000046566" - }, - { - "tick": "1800000000093132" - }, - { - "tick": "1800000000139698" - }, - { - "tick": "1800000000186264" - }, - { - "tick": "1800000000232830" - }, - { - "tick": "1800000000279396" - }, - { - "tick": "1800000000325962" - }, - { - "tick": "1800000000372528" - }, - { - "tick": "1800000000419094" - }, - { - "tick": "1800000000465660" - }, - { - "tick": "1800000000512226" - }, - { - "tick": "1800000000558792" - }, - { - "tick": "1800000000605358" - }, - { - "tick": "1800000000651924" - }, - { - "tick": "1800000000698490" - }, - { - "tick": "1800000000745056" - }, - { - "tick": "1800000000791622" - }, - { - "tick": "1800000000838188" - }, - { - "tick": "1800000000884754" - }, - { - "tick": "1800000000931320" - }, - { - "tick": "1800000000977886" - }, - { - "tick": "1800000001024452" - }, - { - "tick": "1800000001071018" - }, - { - "tick": "1800000001117584" - }, - { - "tick": "1800000001164150" - }, - { - "tick": "1800000001210716" - }, - { - "tick": "1800000001257282" - }, - { - "tick": "1800000001303848" - }, - { - "tick": "1800000001350414" - }, - { - "tick": "1800000001396980" - }, - { - "tick": "1800000001443546" - }, - { - "tick": "1800000001490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000000001455", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000000045" - }, - { - "tick": "1800000000000090" - }, - { - "tick": "1800000000000135" - }, - { - "tick": "1800000000000180" - }, - { - "tick": "1800000000000225" - }, - { - "tick": "1800000000000270" - }, - { - "tick": "1800000000000315" - }, - { - "tick": "1800000000000360" - }, - { - "tick": "1800000000000405" - }, - { - "tick": "1800000000000450" - }, - { - "tick": "1800000000000495" - }, - { - "tick": "1800000000000540" - }, - { - "tick": "1800000000000585" - }, - { - "tick": "1800000000000630" - }, - { - "tick": "1800000000000675" - }, - { - "tick": "1800000000000720" - }, - { - "tick": "1800000000000765" - }, - { - "tick": "1800000000000810" - }, - { - "tick": "1800000000000855" - }, - { - "tick": "1800000000000900" - }, - { - "tick": "1800000000000945" - }, - { - "tick": "1800000000000990" - }, - { - "tick": "1800000000001035" - }, - { - "tick": "1800000000001080" - }, - { - "tick": "1800000000001125" - }, - { - "tick": "1800000000001170" - }, - { - "tick": "1800000000001215" - }, - { - "tick": "1800000000001260" - }, - { - "tick": "1800000000001305" - }, - { - "tick": "1800000000001350" - }, - { - "tick": "1800000000001395" - }, - { - "tick": "1800000000001455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000000000013", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000000001" - }, - { - "tick": "1800000000000002" - }, - { - "tick": "1800000000000003" - }, - { - "tick": "1800000000000004" - }, - { - "tick": "1800000000000005" - }, - { - "tick": "1800000000000006" - }, - { - "tick": "1800000000000007" - }, - { - "tick": "1800000000000008" - }, - { - "tick": "1800000000000009" - }, - { - "tick": "1800000000000010" - }, - { - "tick": "1800000000000011" - }, - { - "tick": "1800000000000012" - }, - { - "tick": "1800000000000013" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_3).out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_3).out deleted file mode 100644 index 26f068148582497db3f8e30edeb91cbc65cf446b..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_3).out +++ /dev/null @@ -1,504 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1950000000000000", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1850000000000000" - }, - { - "tick": "1900000000000000" - }, - { - "tick": "1950000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1801562500000000", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800048828125000" - }, - { - "tick": "1800097656250000" - }, - { - "tick": "1800146484375000" - }, - { - "tick": "1800195312500000" - }, - { - "tick": "1800244140625000" - }, - { - "tick": "1800292968750000" - }, - { - "tick": "1800341796875000" - }, - { - "tick": "1800390625000000" - }, - { - "tick": "1800439453125000" - }, - { - "tick": "1800488281250000" - }, - { - "tick": "1800537109375000" - }, - { - "tick": "1800585937500000" - }, - { - "tick": "1800634765625000" - }, - { - "tick": "1800683593750000" - }, - { - "tick": "1800732421875000" - }, - { - "tick": "1800781250000000" - }, - { - "tick": "1800830078125000" - }, - { - "tick": "1800878906250000" - }, - { - "tick": "1800927734375000" - }, - { - "tick": "1800976562500000" - }, - { - "tick": "1801025390625000" - }, - { - "tick": "1801074218750000" - }, - { - "tick": "1801123046875000" - }, - { - "tick": "1801171875000000" - }, - { - "tick": "1801220703125000" - }, - { - "tick": "1801269531250000" - }, - { - "tick": "1801318359375000" - }, - { - "tick": "1801367187500000" - }, - { - "tick": "1801416015625000" - }, - { - "tick": "1801464843750000" - }, - { - "tick": "1801513671875000" - }, - { - "tick": "1801562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800001525878906", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000047683715" - }, - { - "tick": "1800000095367430" - }, - { - "tick": "1800000143051145" - }, - { - "tick": "1800000190734860" - }, - { - "tick": "1800000238418575" - }, - { - "tick": "1800000286102290" - }, - { - "tick": "1800000333786005" - }, - { - "tick": "1800000381469720" - }, - { - "tick": "1800000429153435" - }, - { - "tick": "1800000476837150" - }, - { - "tick": "1800000524520865" - }, - { - "tick": "1800000572204580" - }, - { - "tick": "1800000619888295" - }, - { - "tick": "1800000667572010" - }, - { - "tick": "1800000715255725" - }, - { - "tick": "1800000762939440" - }, - { - "tick": "1800000810623155" - }, - { - "tick": "1800000858306870" - }, - { - "tick": "1800000905990585" - }, - { - "tick": "1800000953674300" - }, - { - "tick": "1800001001358015" - }, - { - "tick": "1800001049041730" - }, - { - "tick": "1800001096725445" - }, - { - "tick": "1800001144409160" - }, - { - "tick": "1800001192092875" - }, - { - "tick": "1800001239776590" - }, - { - "tick": "1800001287460305" - }, - { - "tick": "1800001335144020" - }, - { - "tick": "1800001382827735" - }, - { - "tick": "1800001430511450" - }, - { - "tick": "1800001478195165" - }, - { - "tick": "1800001525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000001490116", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000046566" - }, - { - "tick": "1800000000093132" - }, - { - "tick": "1800000000139698" - }, - { - "tick": "1800000000186264" - }, - { - "tick": "1800000000232830" - }, - { - "tick": "1800000000279396" - }, - { - "tick": "1800000000325962" - }, - { - "tick": "1800000000372528" - }, - { - "tick": "1800000000419094" - }, - { - "tick": "1800000000465660" - }, - { - "tick": "1800000000512226" - }, - { - "tick": "1800000000558792" - }, - { - "tick": "1800000000605358" - }, - { - "tick": "1800000000651924" - }, - { - "tick": "1800000000698490" - }, - { - "tick": "1800000000745056" - }, - { - "tick": "1800000000791622" - }, - { - "tick": "1800000000838188" - }, - { - "tick": "1800000000884754" - }, - { - "tick": "1800000000931320" - }, - { - "tick": "1800000000977886" - }, - { - "tick": "1800000001024452" - }, - { - "tick": "1800000001071018" - }, - { - "tick": "1800000001117584" - }, - { - "tick": "1800000001164150" - }, - { - "tick": "1800000001210716" - }, - { - "tick": "1800000001257282" - }, - { - "tick": "1800000001303848" - }, - { - "tick": "1800000001350414" - }, - { - "tick": "1800000001396980" - }, - { - "tick": "1800000001443546" - }, - { - "tick": "1800000001490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000000001455", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000000045" - }, - { - "tick": "1800000000000090" - }, - { - "tick": "1800000000000135" - }, - { - "tick": "1800000000000180" - }, - { - "tick": "1800000000000225" - }, - { - "tick": "1800000000000270" - }, - { - "tick": "1800000000000315" - }, - { - "tick": "1800000000000360" - }, - { - "tick": "1800000000000405" - }, - { - "tick": "1800000000000450" - }, - { - "tick": "1800000000000495" - }, - { - "tick": "1800000000000540" - }, - { - "tick": "1800000000000585" - }, - { - "tick": "1800000000000630" - }, - { - "tick": "1800000000000675" - }, - { - "tick": "1800000000000720" - }, - { - "tick": "1800000000000765" - }, - { - "tick": "1800000000000810" - }, - { - "tick": "1800000000000855" - }, - { - "tick": "1800000000000900" - }, - { - "tick": "1800000000000945" - }, - { - "tick": "1800000000000990" - }, - { - "tick": "1800000000001035" - }, - { - "tick": "1800000000001080" - }, - { - "tick": "1800000000001125" - }, - { - "tick": "1800000000001170" - }, - { - "tick": "1800000000001215" - }, - { - "tick": "1800000000001260" - }, - { - "tick": "1800000000001305" - }, - { - "tick": "1800000000001350" - }, - { - "tick": "1800000000001395" - }, - { - "tick": "1800000000001455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "1800000000000000", - "end_tick": "1800000000000013", - "dissection": [ - { - "tick": "1800000000000000" - }, - { - "tick": "1800000000000001" - }, - { - "tick": "1800000000000002" - }, - { - "tick": "1800000000000003" - }, - { - "tick": "1800000000000004" - }, - { - "tick": "1800000000000005" - }, - { - "tick": "1800000000000006" - }, - { - "tick": "1800000000000007" - }, - { - "tick": "1800000000000008" - }, - { - "tick": "1800000000000009" - }, - { - "tick": "1800000000000010" - }, - { - "tick": "1800000000000011" - }, - { - "tick": "1800000000000012" - }, - { - "tick": "1800000000000013" - } - ] -} diff --git a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_second_perio.out b/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_second_perio.out deleted file mode 100644 index 7f4e245ad8c1ac71b121d294f36c415be9434809..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/sc_rollup.ml/Parisb- wasm_2_0_0 - refutation games winning strategies (pvm_proof_second_perio.out +++ /dev/null @@ -1,501 +0,0 @@ - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "1000000000000000", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "950000000000000" - }, - { - "tick": "1000000000000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "901562500000000", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900048828125000" - }, - { - "tick": "900097656250000" - }, - { - "tick": "900146484375000" - }, - { - "tick": "900195312500000" - }, - { - "tick": "900244140625000" - }, - { - "tick": "900292968750000" - }, - { - "tick": "900341796875000" - }, - { - "tick": "900390625000000" - }, - { - "tick": "900439453125000" - }, - { - "tick": "900488281250000" - }, - { - "tick": "900537109375000" - }, - { - "tick": "900585937500000" - }, - { - "tick": "900634765625000" - }, - { - "tick": "900683593750000" - }, - { - "tick": "900732421875000" - }, - { - "tick": "900781250000000" - }, - { - "tick": "900830078125000" - }, - { - "tick": "900878906250000" - }, - { - "tick": "900927734375000" - }, - { - "tick": "900976562500000" - }, - { - "tick": "901025390625000" - }, - { - "tick": "901074218750000" - }, - { - "tick": "901123046875000" - }, - { - "tick": "901171875000000" - }, - { - "tick": "901220703125000" - }, - { - "tick": "901269531250000" - }, - { - "tick": "901318359375000" - }, - { - "tick": "901367187500000" - }, - { - "tick": "901416015625000" - }, - { - "tick": "901464843750000" - }, - { - "tick": "901513671875000" - }, - { - "tick": "901562500000000" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900001525878906", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000047683715" - }, - { - "tick": "900000095367430" - }, - { - "tick": "900000143051145" - }, - { - "tick": "900000190734860" - }, - { - "tick": "900000238418575" - }, - { - "tick": "900000286102290" - }, - { - "tick": "900000333786005" - }, - { - "tick": "900000381469720" - }, - { - "tick": "900000429153435" - }, - { - "tick": "900000476837150" - }, - { - "tick": "900000524520865" - }, - { - "tick": "900000572204580" - }, - { - "tick": "900000619888295" - }, - { - "tick": "900000667572010" - }, - { - "tick": "900000715255725" - }, - { - "tick": "900000762939440" - }, - { - "tick": "900000810623155" - }, - { - "tick": "900000858306870" - }, - { - "tick": "900000905990585" - }, - { - "tick": "900000953674300" - }, - { - "tick": "900001001358015" - }, - { - "tick": "900001049041730" - }, - { - "tick": "900001096725445" - }, - { - "tick": "900001144409160" - }, - { - "tick": "900001192092875" - }, - { - "tick": "900001239776590" - }, - { - "tick": "900001287460305" - }, - { - "tick": "900001335144020" - }, - { - "tick": "900001382827735" - }, - { - "tick": "900001430511450" - }, - { - "tick": "900001478195165" - }, - { - "tick": "900001525878906" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900000001490116", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000000046566" - }, - { - "tick": "900000000093132" - }, - { - "tick": "900000000139698" - }, - { - "tick": "900000000186264" - }, - { - "tick": "900000000232830" - }, - { - "tick": "900000000279396" - }, - { - "tick": "900000000325962" - }, - { - "tick": "900000000372528" - }, - { - "tick": "900000000419094" - }, - { - "tick": "900000000465660" - }, - { - "tick": "900000000512226" - }, - { - "tick": "900000000558792" - }, - { - "tick": "900000000605358" - }, - { - "tick": "900000000651924" - }, - { - "tick": "900000000698490" - }, - { - "tick": "900000000745056" - }, - { - "tick": "900000000791622" - }, - { - "tick": "900000000838188" - }, - { - "tick": "900000000884754" - }, - { - "tick": "900000000931320" - }, - { - "tick": "900000000977886" - }, - { - "tick": "900000001024452" - }, - { - "tick": "900000001071018" - }, - { - "tick": "900000001117584" - }, - { - "tick": "900000001164150" - }, - { - "tick": "900000001210716" - }, - { - "tick": "900000001257282" - }, - { - "tick": "900000001303848" - }, - { - "tick": "900000001350414" - }, - { - "tick": "900000001396980" - }, - { - "tick": "900000001443546" - }, - { - "tick": "900000001490116" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900000000001455", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000000000045" - }, - { - "tick": "900000000000090" - }, - { - "tick": "900000000000135" - }, - { - "tick": "900000000000180" - }, - { - "tick": "900000000000225" - }, - { - "tick": "900000000000270" - }, - { - "tick": "900000000000315" - }, - { - "tick": "900000000000360" - }, - { - "tick": "900000000000405" - }, - { - "tick": "900000000000450" - }, - { - "tick": "900000000000495" - }, - { - "tick": "900000000000540" - }, - { - "tick": "900000000000585" - }, - { - "tick": "900000000000630" - }, - { - "tick": "900000000000675" - }, - { - "tick": "900000000000720" - }, - { - "tick": "900000000000765" - }, - { - "tick": "900000000000810" - }, - { - "tick": "900000000000855" - }, - { - "tick": "900000000000900" - }, - { - "tick": "900000000000945" - }, - { - "tick": "900000000000990" - }, - { - "tick": "900000000001035" - }, - { - "tick": "900000000001080" - }, - { - "tick": "900000000001125" - }, - { - "tick": "900000000001170" - }, - { - "tick": "900000000001215" - }, - { - "tick": "900000000001260" - }, - { - "tick": "900000000001305" - }, - { - "tick": "900000000001350" - }, - { - "tick": "900000000001395" - }, - { - "tick": "900000000001455" - } - ] -} - - -{ - "opponent": "tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN", - "start_tick": "900000000000000", - "end_tick": "900000000000013", - "dissection": [ - { - "tick": "900000000000000" - }, - { - "tick": "900000000000001" - }, - { - "tick": "900000000000002" - }, - { - "tick": "900000000000003" - }, - { - "tick": "900000000000004" - }, - { - "tick": "900000000000005" - }, - { - "tick": "900000000000006" - }, - { - "tick": "900000000000007" - }, - { - "tick": "900000000000008" - }, - { - "tick": "900000000000009" - }, - { - "tick": "900000000000010" - }, - { - "tick": "900000000000011" - }, - { - "tick": "900000000000012" - }, - { - "tick": "900000000000013" - } - ] -} diff --git a/tezt/tests/expected/script_hash_regression.ml/Parisb- Test script hash regression.out b/tezt/tests/expected/script_hash_regression.ml/Parisb- Test script hash regression.out deleted file mode 100644 index e16fe16b92d103920e58ed680a62c5f9527494cb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/script_hash_regression.ml/Parisb- Test script hash regression.out +++ /dev/null @@ -1,445 +0,0 @@ -exprvFK4dJmFGinHHBe92WR4kA7L8WSBQQYDigmyVCyKpiQHCXe9fk michelson_test_scripts/attic/accounts.tz -expruucsMyaSmmP5gmkFWjJfv4a52FQV5EGaf3XpHoeXHQgyJgMJfF michelson_test_scripts/attic/add1.tz -exprvEM4Lvihz6jFYszxazuQQPsHjxA4J54tfLeowwDkY1jjTi8Qft michelson_test_scripts/attic/add1_list.tz -exprta1x6QtexpFktejHoB1KwuMQRXePhgre9rDiJ3GDSZCqb3vtqL michelson_test_scripts/attic/after_strategy.tz -expruEosJCXYteRXxfbAVJ5XythgpVQPMdiu3kbbZj3VAVSVjk8ud7 michelson_test_scripts/attic/always.tz -exprvR9m6PaVeLfPHZjA3A929bbfjonzMJs1Kzcmj8baoEvLct9Ry9 michelson_test_scripts/attic/append.tz -exprvQh7vw7vYfp2qdiyYPCFgd6jVkxqYZimmqoYCGZbqaoMgfLifS michelson_test_scripts/attic/at_least.tz -exprtyZC9vL831BnATCkdrP585F4cEzQQQp1ZqnZSqvCDLqp7S33V1 michelson_test_scripts/attic/auction.tz -expruZ4wjBCm3DQNhEf69L27tqaqAJa1TF34728yyPJ9BUg3sEwcxB michelson_test_scripts/attic/bad_lockup.tz -expruazd13u4uPHS7oFWFeZ5nodWR5QC6nQwgy5LGoUTAR3KXsYPXg michelson_test_scripts/attic/big_map_union.tz -exprv7aEg823PTvrEG5bXr4QGk3XCsEkodhUxWCaMBBSq44ZuAxnNf michelson_test_scripts/attic/cadr_annotation.tz -expruwmej4r1RSMDEmmU4SjWUbrzpURnAwybrSwBaMkHpxVobLkWAe michelson_test_scripts/attic/concat.tz -exprte328K2NmgWrmHLbFrGVjvoZKZNFB7577Vt7cWQa8KdvWbfxYk michelson_test_scripts/attic/conditionals.tz -exprvRVXhJFcFjGMkatDwgaLRcJq4TctY979bjniTqwACgXtC3mWko michelson_test_scripts/attic/cons_twice.tz -exprtcnAL38pt7fyZdCiqd97qcYeESWQStPR6sbN2SxMCfbPJhVjau michelson_test_scripts/attic/cps_fact.tz -exprv9BquR6NXVwKMwD4MS5vdWqqvMzjvWumrBf6NsGQXSfgm2Rtqk michelson_test_scripts/attic/create_add1_lists.tz -exprv4cq5g9hsxWU65zCp8dfUi3RtBzu9rGXZ7otetL23tj1zSkNQ2 michelson_test_scripts/attic/data_publisher.tz -expruavAC89RfrZxSrYwdoA6Wr5ghwdUSns8SNaHcng1JRcqR1dwpR michelson_test_scripts/attic/dispatch.tz -expruat2BS4KCwn9kbopeX1ZwxtrtJbyFhpnpnG6A5KdCBCwHNsdod michelson_test_scripts/attic/empty.tz -exprubD7VQHa8qeqRsFByes3ANZ24mvUnqW3qKAsKVUCncjxYEXtGp michelson_test_scripts/attic/fail_amount.tz -expruYCfXuFoyakdWc3C6Np5ojQrGLDMMN6btVbVEAc97MJzpQYVrm michelson_test_scripts/attic/faucet.tz -expruuvYJkV5YndLNMHFg54yDF1HG6AP4zMsui7RgQBLr6vCZVBVYt michelson_test_scripts/attic/forward.tz -exprv8K6ceBpFH5SFjQm4BRYSLJCHQBFeQU6BFTdvQSRPaPkzdLyAL michelson_test_scripts/attic/id.tz -exprujqMuqia1zKuReMgjumpsn8XAJ5N6RWaoz3kZpLNRUyyQXwrtY michelson_test_scripts/attic/infinite_loop.tz -exprtoE9fvqNeHngkFPopZv412GoqoZ57HgaCi2XFR7YxkwPpvHXBZ michelson_test_scripts/attic/insertion_sort.tz -exprux8tMeArJNXUekbuHqLb6epu2eWXJy85f8Yts5oHASHyWp6bva michelson_test_scripts/attic/int_publisher.tz -expruosSkGQbRDc3NUt5oEqSkt3dqxymQDKDeNxcjRgFNLxARG414v michelson_test_scripts/attic/king_of_tez.tz -exprtZcF9NutGBwyuXTqEi4SyL3bZdAWqzkDc782wxNhYT7LtdY4Lb michelson_test_scripts/attic/list_of_transactions.tz -expruDiMLqyYi67RbkDfNyEjBDgJqQLiCGVx2xLUiWujSkwr7rVyRD michelson_test_scripts/attic/queue.tz -exprtZYeWyxANtdrSANECgXdeakcP9fJm7ecJhpeuGR55a8gDTSXWe michelson_test_scripts/attic/reduce_map.tz -exprvMneQMtBQzcPKboFsEV7R4BAuoF8QLUDMWB62iYLmKz9tztNdJ michelson_test_scripts/attic/reentrancy.tz -exprueaa65wkL9ennP6vZoUP6yCkzz6Wc4cF3w11q8bGXguokXAEvK michelson_test_scripts/attic/reservoir.tz -exprtwrNpVRUJaVTBs5vXFLbt4v6Fb8LRySwc1Ap8ZWZh4JbLfgJ6P michelson_test_scripts/attic/scrutable_reservoir.tz -expruwtkYFMkNLVjKD8hypuDc53SHLQQ65g6VPGiHFXbY5hHwmb552 michelson_test_scripts/attic/spawn_identities.tz -exprtjdvZr5J7WfN4SyNgKueLnxX4fALUYJ4cmi675EHJdUu5yyg2n michelson_test_scripts/entrypoints/big_map_entrypoints.tz -expruwheT76ehrMrKiyNw8pQEEUfQ1t184BMXGqhaMEuJUCKHNytMj michelson_test_scripts/entrypoints/delegatable_target.tz -exprv2AhXPjk56KeNgWmzN15v8f9SoLHMQhNmDAgt6SpAMFmYRCQjx michelson_test_scripts/entrypoints/manager.tz -exprv2SsGeZ6PiC2CXiSePHYQhn88XWmsKVGgG8ZGyNo8p9CNPrRXj michelson_test_scripts/entrypoints/no_default_target.tz -exprvFzfTFqHSFZuDHh91nrupqpULYorBNZRgLEEiPkUhkNVyskyTz michelson_test_scripts/entrypoints/no_entrypoint_target.tz -exprtw1GsUzdCfFR6bHsdF78uTbejEJ4iTdXn7YTYRU5C7XS89dyxU michelson_test_scripts/entrypoints/rooted_target.tz -exprtaqrrvZzcS8wKS8u6RcVqRJhnu2Qbex9jRUZHQxJJeqhhfhtXJ michelson_test_scripts/entrypoints/simple_entrypoints.tz -exprv8K6ceBpFH5SFjQm4BRYSLJCHQBFeQU6BFTdvQSRPaPkzdLyAL michelson_test_scripts/ill_typed/badly_indented.tz -expruN224mpoNLwPiVuGuaJ22QZjMuK6sKjGFAeSyQY8PQoBC7Hoim michelson_test_scripts/ill_typed/big_dip.tz -exprtnvncrJA5Fo5iyGnhyXhHXyWJuwvzWHP6Rbokbr7HsSqxQ7QLC michelson_test_scripts/ill_typed/big_drop.tz -expruBzaC26c6mckE8g8wLBH7t1JnFi8Uyn7WjdWKGT6sJftboCFTJ michelson_test_scripts/ill_typed/big_map_arity.tz -expruMk21qTMDDKvFNjTNLab33QEbdnG3kP7M1WEWcXhpPLkCAA21X michelson_test_scripts/ill_typed/chain_id_arity.tz -exprtrJKmsNVineQxEPp8Eq7FcC7edZHbJEdrn56WpqxW61QCpjacm michelson_test_scripts/ill_typed/comb0.tz -expruQsBtw9Fg9gmZSiCPUDD8FjqzDvQDTG5FSFbSJsr7j64DLbwjE michelson_test_scripts/ill_typed/comb1.tz -expruDceVcE3mACUGZhntGk2BMQNNn8UaFZhd8BnRfyWWzdFav7VyP michelson_test_scripts/ill_typed/contract_annotation_default.tz -exprv8no3WSXCsf89WYazUNurLm8hwZRwTWYBQrzihscQcR6M1uKEu michelson_test_scripts/ill_typed/create_contract_rootname.tz -exprtxuT8vf615qpJ9ycmVu7XUGBB8pZZjnPKnZhFhBMfdUpw2JarU michelson_test_scripts/ill_typed/dip_failwith.tz -expruUrLEKFhakNNzTRBigYqnGi2DkvS64m52omEYizdjmscmgF2AQ michelson_test_scripts/ill_typed/dup0.tz -expruUbLS1knNLEJMoE8c7oTbNo3EXiEgagPewKZLFUukFpQZJ7zce michelson_test_scripts/ill_typed/failwith_big_map.tz -expruk5YNGKzCkCMbLhr3euh9xQWZcmtZkGV891LMhNHbxpe1P5QTW michelson_test_scripts/ill_typed/invalid_self_entrypoint.tz -exprtX6MmAqAQ37LRgnkdv525PKHiGdGXyKT33M1NASahAMSCt43VS michelson_test_scripts/ill_typed/map_failwith.tz -expru9tAzQAm6c8Uv4oU6EpkJR6wWXZ8b7MUfyQMorpR8j3HKb2xQM michelson_test_scripts/ill_typed/missing_only_code_field.tz -expru1TjqXpC2u8BLGP5Ps6DPyXLvRY7arR187zjhTJsT3ovrbyqSm michelson_test_scripts/ill_typed/missing_only_parameter_field.tz -exprtnqtHEs13CBddyrcWuvRzsBqgk4vFqdaYTGp2UzY4Z8ahAW6Ej michelson_test_scripts/ill_typed/missing_only_storage_field.tz -expruyMAkvFzMm9ANKFgnpX5cfTVufBcrEn47wYGmnD1hocSbHJLxp michelson_test_scripts/ill_typed/missing_parameter_and_storage_fields.tz -expruRoBeRu3HBshceKrBikpiJWgz9pET8UC6QH7xvM33wPtxJ5cxL michelson_test_scripts/ill_typed/multiple_code_field.tz -exprvLL1MBfbBRMb3R4cy6bJ6KgoMuzNmL6u2y6NaT1hhbCmkprDi1 michelson_test_scripts/ill_typed/multiple_parameter_field.tz -exprudNsSikUJ8etsu55GFBJY33H2x9tzT7v2k1w5m5gLJBb8vU2B9 michelson_test_scripts/ill_typed/multiple_storage_and_code_fields.tz -expruLyv1V3fshbeb9HzsodyQFGDihmbt9wZD8UdP3NJEXzBvkaUL8 michelson_test_scripts/ill_typed/multiple_storage_field.tz -expruvbJCzBYasMCg3DcjmYK9FodRbLokBpWNxZpJDyyunsQK6gWCF michelson_test_scripts/ill_typed/never_literal.tz -exprvBkft3ii7B5gjvqFJKsEGq1z9VhnRHW5JAdPNGWPvMdkMRKjTA michelson_test_scripts/ill_typed/pack_big_map.tz -exprutSqwcaXa6tmF2D4asfxkb6QN5CDn128U4ntCgRG5JKUPan7i2 michelson_test_scripts/ill_typed/pack_operation.tz -expru6yXKqKsiikqZe4hgfbACNDFiGtSSoRsuEtcJy5iYwkwDCG9T4 michelson_test_scripts/ill_typed/pack_sapling_state.tz -exprvQzTcT6STxdp9CJi4mtrY9fvv6VvmfRjEqoQwUqYwEK85mjw5H michelson_test_scripts/ill_typed/push_big_map_with_id_with_parens.tz -exprvMz8TqvLs55NtZzBJ2quCwCB7FqxhVuAiMtEZGK8MWxQw6H9Xx michelson_test_scripts/ill_typed/push_big_map_with_id_without_parens.tz -expruW1dZrFKoyXWLXr3Yeqhmivj9qqqnDyWSc3NzyVHudEANGYjVW michelson_test_scripts/ill_typed/sapling_build_empty_state_with_int_parameter.tz -exprv7mqCULEgnAUKoU4foKVKZeuM6uMSkCCgoMeE1oGYMXGebu5L7 michelson_test_scripts/ill_typed/set_update_non_comparable.tz -expruVMMR2tyqqRqpVQzhLXF47658GNFQB2gLaemhrV8gRm9yZt1x4 michelson_test_scripts/ill_typed/stack_bottom_undig2able.tz -expruxH5WZ4TkhVCUq767J2fHG2yuqL13fWjcKK8azQmy2N9ud11RG michelson_test_scripts/ill_typed/stack_bottom_undigable.tz -expruVvGWPSfsZCtSGEm3qMmCgyveYXhVLQhhxpYBv7GTqaDL91kLf michelson_test_scripts/ill_typed/stack_bottom_undip2able.tz -exprtYhZdG4uP6y2pq4ewHDahRQP4fZ2iBMEYRgpq1hqMFQmMRZuWR michelson_test_scripts/ill_typed/stack_bottom_undipable.tz -exprttbYRZnFJLumEAvLpyH6R1A1GjcwuP39EZTqwNWYyceAAWFKoK michelson_test_scripts/ill_typed/stack_bottom_undropable.tz -expruRbdhi81mKdvamEnP2LoCNVVz6ewvyWhezKqZGxjrVFt7hpcq2 michelson_test_scripts/ill_typed/stack_bottom_undug2able.tz -exprtgLFbB3vNCxh9hHfH2rQdS2Vnqqucwqa2PGZScv6f64agKeay3 michelson_test_scripts/ill_typed/stack_bottom_undugable.tz -exprvQjZYDufKeuRxvKsMEPFMyuZYWYVUSe2GZJw8eXRXYSD73buTB michelson_test_scripts/ill_typed/stack_bottom_undup2able.tz -exprtz1gy2jW3mpiJxgquMA68mjWh8s61HDQJzVp5hhUQnVsP9xR5L michelson_test_scripts/ill_typed/stack_bottom_unfailwithable.tz -exprvDK14kRaERXV4ygtEJTgd5UQikyupAMdTWbZFTULAFPzARqAdQ michelson_test_scripts/ill_typed/stack_bottom_ungetable.tz -exprtydB8VD3snEKSXYgV2SphRE8bZvPJd3o1QEU6GPqZm8cHc1iTR michelson_test_scripts/ill_typed/stack_bottom_unleftable.tz -expruKgcBzkj11KzkbRKYAsWrngu4rBuqNmhPdGWudV4KeePSJGoEk michelson_test_scripts/ill_typed/stack_bottom_unpairable.tz -expruFLiTmNwLXuXVaPGquovMCYjgCeJzKKV27DK14NQAG7z4nGxvQ michelson_test_scripts/ill_typed/stack_bottom_unpopable.tz -expruQAEgAnhPLZuaywyGgJGqcRFWn2rEDprqNHvRDxirdShLwc26c michelson_test_scripts/ill_typed/stack_bottom_unpopable_in_lambda.tz -expruGDfhqvw6oH6cA6Vvvjdn8FyEmJ7SUizhNFCYNSfG2ikmBr5ea michelson_test_scripts/ill_typed/stack_bottom_unrightable.tz -exprunAg8DteXhBhjmmEPasSRe5u18oN5UdwJUyz7crzktR1n7aj7g michelson_test_scripts/ill_typed/ticket_apply.tz -exprtv5Yt3ihwrqvfZm2CZdHkJk544CdepaQ5g6jTF5UhfvK3y1PAc michelson_test_scripts/ill_typed/ticket_dup.tz -expruQfVM57mGxNiY7XpV3Rex8xhqLwRyXvvSEBEZuHKvoVgo8sfsU michelson_test_scripts/ill_typed/ticket_in_ticket.tz -exprtw4id4R45wkzJz7g5GBiRStuREcD515mjMvECP2Nsjt1GCDQSb michelson_test_scripts/ill_typed/ticket_unpack.tz -exprtsPNzBdoHNqsiGGzD83vzY4QhRGFgj2aBhVkRjryg8UCzgB7rm michelson_test_scripts/ill_typed/timelock.tz -expruWHcaUVqG6kmYxQF1Mxx5hmB2SYUeNVWNkVrprgax67e9sLATa michelson_test_scripts/ill_typed/uncomb0.tz -exprtrL9J2534bFgoBvVC1YaNVXDsE1c2FXWxgyDhDHtUz5zghortN michelson_test_scripts/ill_typed/uncomb1.tz -exprujrucGLAmdmT3k2iRC2imquB7sUbcvSg6zVrvAxcvbrrkodSRb michelson_test_scripts/ill_typed/unpack_sapling_state.tz -expru2vU5zmzGh2HRrwNeSnysgcVLMbPb1tkGoFTrNg6YiNMqm2dxD michelson_test_scripts/ill_typed/view_op_bad_name_invalid_char_set.tz -exprufbbZ4jHZ6PJJT614zAJU4ZdSEEmjTpxM9YMnEMSLLR85tKe97 michelson_test_scripts/ill_typed/view_op_bad_name_invalid_type.tz -exprtZFiFcS8quUpTKd6cdop8WKZ9km6X18pF8gWngrTarAiVWWuxv michelson_test_scripts/ill_typed/view_op_bad_name_non_printable_char.tz -exprtn9rV6YNYRDCKtShnzAeKaYh8jqTNKjGxVYo1twk7hrAhPaLrT michelson_test_scripts/ill_typed/view_op_bad_name_too_long.tz -expruBC7TwAKWgKbY8dpuDR7cuvxjFM6nCd935jCcWq9rSJNw1aA75 michelson_test_scripts/ill_typed/view_op_bad_return_type.tz -expruoFRmDZuVddy7VmkV2QBcLgSStqpEDMDacTWsFzqTxZXdWdZfC michelson_test_scripts/ill_typed/view_op_dupable_type.tz -expruxYAxsENuXbe9kyhfUaWWAjBfWkbuQy8irkyJkevrfLBsWt7xc michelson_test_scripts/ill_typed/view_op_invalid_arity.tz -exprvPFLSH8Yzs7khoVZkEz4sYWbh6b8ekM6iHrGY5Ds1BjUm763QM michelson_test_scripts/ill_typed/view_op_lazy_storage.tz -exprvPFLSH8Yzs7khoVZkEz4sYWbh6b8ekM6iHrGY5Ds1BjUm763QM michelson_test_scripts/ill_typed/view_op_lazy_storage_type.tz -expruUdCLKAbj9Ww3JkAZ4W2UuTiJ7ugE7kg9DVe4AUfXKE8Q1iPVQ michelson_test_scripts/ill_typed/view_toplevel_bad_input_type.tz -expruWvd91ycMrLFH8jF534BhTWjnHxaHrEubeRNeodafNWfjqqBXC michelson_test_scripts/ill_typed/view_toplevel_bad_name_invalid_char_set.tz -expruethdzDpBvRtq9UQPdXGwRZqkWnqs6CrcNagNVhDU9vCwsMdzA michelson_test_scripts/ill_typed/view_toplevel_bad_name_invalid_type.tz -exprtnn8xxH2nr6UErb9DNv9Z9xngpSzpYnNk6hwBTbye4x5uacMeQ michelson_test_scripts/ill_typed/view_toplevel_bad_name_non_printable_char.tz -exprunFKRQPF9Hobtkqx32WyQ6ikygyLkL7DCBMNuMoG95NqzVF6si michelson_test_scripts/ill_typed/view_toplevel_bad_name_too_long.tz -exprvMAXDRZuAVGhFHJwnWVoZ411MwmQ9EdVh2JuRnw5qcdz6MjQC1 michelson_test_scripts/ill_typed/view_toplevel_bad_return_type.tz -exprv56pnBNv6EsEHTHjWhJ3tdv5qptVpQGw4ShYC4ojPMxk7Nkxok michelson_test_scripts/ill_typed/view_toplevel_bad_type.tz -exprvAA9gioYUserBNWfg3dM3tpUkeJpEvQBhdCYo6Zkbj8cDciEHE michelson_test_scripts/ill_typed/view_toplevel_dupable_type_input.tz -expru63YpYAZBw9UnRy2pmB9uMQRH4EJXF1BcRAV5xeq3tBdtKtt1F michelson_test_scripts/ill_typed/view_toplevel_dupable_type_output.tz -expruhHAADYeL1YyPJJ6JJDVG1uZMtUChzTRY7wUqjqDJv42WF9iuM michelson_test_scripts/ill_typed/view_toplevel_duplicated_name.tz -exprugDV6TiQP1tmA2JMGXiuF29EKmqacQeF3q7rWkfwzVrw5Qgksd michelson_test_scripts/ill_typed/view_toplevel_invalid_arity.tz -exprum4MVnmugWSpeJysnzAkDFshNeuWboGS3qsgCi3eo9GCxGWZC1 michelson_test_scripts/ill_typed/view_toplevel_lazy_storage_input.tz -expruT8foeFBSvHXuiN9UvAxj6d3ZhidwFteyE4pNHNe3zxcC1LKNv michelson_test_scripts/ill_typed/view_toplevel_lazy_storage_output.tz -exprtf4cGFGDne118G4RFZkHFXFdZMNgAtm1h3zXohFS4n6mzEe4Bp michelson_test_scripts/legacy/create_account.tz -exprtcuNLyAhcZ7Zt6K8pH3KzVyU9YELeSXkJsMPG1h3FyKebyzBz9 michelson_test_scripts/legacy/create_contract.tz -exprutTcX1BwgaPug446zmc16pnipd59ytpVmA6JxAAEyUwJbD47Qv michelson_test_scripts/legacy/create_contract_flags.tz -expruypHz1N6PhereVyiB349tQbrYJhBDr6pJBck1BAUudKRMvMH77 michelson_test_scripts/legacy/create_contract_rootname.tz -exprvPF2hwUEU3GeucamVx6wnv9VWH39QsJVtQW3uUWwXc4aQWJVEw michelson_test_scripts/legacy/originator.tz -expruyPygjWK6gmUgsRZgv7Df2rnqpQUMj65ApbCqmHXNbS2o6QAMk michelson_test_scripts/legacy/steps_to_quota.tz -expruiDvGyQG5GzKzcBP7d5Z5doUcdxTmUcM6vL1jCTyTmxLrekmP7 michelson_test_scripts/macros/assert.tz -expruMKaaLoPjYfDaKymizi9fnFY7hSDyPj2NfJFxSuAoEVknDxSM6 michelson_test_scripts/macros/assert_cmpeq.tz -exprtqiRJEnWeqF5KKBRPjamJGoi2oQvekfnRwsdZNRy8w8wkbroKJ michelson_test_scripts/macros/assert_cmpge.tz -exprtZWviL38eegiNAN55KfEtAHhAqUWoadkbxyFCGs3vDnDRzueft michelson_test_scripts/macros/assert_cmpgt.tz -exprvBWTmSLBAGgcuBFSToCQPqH5J1F5R2vf8iJMiPVdZjG3B7hWq7 michelson_test_scripts/macros/assert_cmple.tz -expruuDzygKxAaQ348e6BcRSk8A2Chq4WinaTUCTvg5YEVnGpptBg3 michelson_test_scripts/macros/assert_cmplt.tz -expruxeuWRoEFHhzv7tG1rwderXePZzxtpL9BRQ9N7ZhoFXS6RPy9a michelson_test_scripts/macros/assert_cmpneq.tz -expruaqEBPqAjaUawnFTSbGZXXr1HemnecV8GuLGD15nQvtxaXiH3z michelson_test_scripts/macros/assert_eq.tz -expru9etUCKvNXZyDCx1x55QfZzyGxmgsteFNBoWAZeh6F5FHEHy3m michelson_test_scripts/macros/assert_ge.tz -exprvP9aPgepXY1C4hVPWPMoDGhvSjNvH5sJvB25qcMMPFHurVyH9c michelson_test_scripts/macros/assert_gt.tz -exprtbLVpjXVnhdMUyDM53MXHH2HBNSMxdnXsVTNtFFMHHVn18yUuZ michelson_test_scripts/macros/assert_le.tz -exprtx7nibNobG8Y7asBYktu2NdPv3k3No29rM4nP1WSbricymunvc michelson_test_scripts/macros/assert_lt.tz -exprvQM6Ukz3TKVSo4dqNDYmMvNG5rs3U7WGXpvjSVsM2oQj6SbdLM michelson_test_scripts/macros/assert_neq.tz -exprueGaPWpG6szfmTAccNH5MaoqxovN7JCbx4CDsmpvnhBAUrAizc michelson_test_scripts/macros/big_map_get_add.tz -exprvFc9HFkvwNGZVrJkU2KpXuXieVKCJ9VXbTo51LRWBMAB6oEbWq michelson_test_scripts/macros/big_map_mem.tz -exprv7Gwz5KP32zP9FYPSng9mPqLYbxwttDZin5QPnqzsUM3MZBvLK michelson_test_scripts/macros/build_list.tz -exprvNqdnnqWgrrZYgnkuFeXrboqQYnYiRLSb7wV4E27bdZcbrU5GK michelson_test_scripts/macros/carn_and_cdrn.tz -exprtknptGzyx8quFM8gHyGcpyX5xYeUxUpoVPhZeBkRqz5hUHfuq7 michelson_test_scripts/macros/compare.tz -exprussGZ9wiqKqGkCsFJrfvr5DXxqZiLuHATJuvr3D8ar3KCeNaCz michelson_test_scripts/macros/compare_bytes.tz -expru4Mmhu46yLQj4Q767jgVgvbaNe7B6EwvYvWA9KCrfzCxwBnzCQ michelson_test_scripts/macros/fail.tz -exprtyJ1YYdejX7jRUh8FDjbbwrbAFwZYKPjdEZMNUUWdncqEwvuyr michelson_test_scripts/macros/guestbook.tz -exprvMCL9Ti9C12EZUiFR1YtSp7nYjPN4DoyJPQiyVDYCZsSsheTeV michelson_test_scripts/macros/macro_annotations.tz -expruq2AH96hXvqFqphuMKhJUY8mGMmdHuiHWHjkZqooZoEusTNNRf michelson_test_scripts/macros/map_caddaadr.tz -exprueEkWTdWS8F25vnUP8gWd75MCfxk3vMhETn5dUYtrifV6FU8x5 michelson_test_scripts/macros/max_in_list.tz -expruGfNErSHzpWnoNpgvZ3MRc52jiCHu8YTDUvh2T643QABr7NDZN michelson_test_scripts/macros/min.tz -exprtw4kigYCiREgky6KBKryS7JkaGih6ju8jkjaXtpdcWYrYukRKX michelson_test_scripts/macros/pair_macro.tz -exprtxutG1Nu8d198ebiCraNuQ8a6iYYqJYfGXq19aykNPB1uECc8w michelson_test_scripts/macros/set_caddaadr.tz -exprvCE6JDXrzEfZuxTQzSgxWXtxX5GoNxvidL84CN2TAm6Hk3kuK6 michelson_test_scripts/macros/take_my_money.tz -exprunGqZLZZwm9mY31NFGbBemCgXGevYqLRKdeRKQArPf824Npnni michelson_test_scripts/macros/unpair_macro.tz -expru6Roa34xofgoK2pnwz1gUNUiPX8qugbPeXn9Lyh8kD3zJNYvim michelson_test_scripts/mini_scenarios/999_constant.tz -expruwYQvEdTgNzbm3228Xp6srt9FbG2v7w2F8yVH7BCK1P2NJTJUi michelson_test_scripts/mini_scenarios/add_clear_tickets_015.tz -expruz2R676Zvnc8cnu3nF28w8mc2gwGbCdNDmyLc2BfpsgaVQHteF michelson_test_scripts/mini_scenarios/always_fails.tz -exprufRUAYF6r5QHQvK8CzWkKQcdvYkPx5fjEYzWPXc35Dry77KDT1 michelson_test_scripts/mini_scenarios/authentication.tz -exprtqebvyM9AjhRMT2WRMo1yiuScCwMf4VLjBdhJFig1ERW7knouj michelson_test_scripts/mini_scenarios/big_map_all.tz -exprtjdvZr5J7WfN4SyNgKueLnxX4fALUYJ4cmi675EHJdUu5yyg2n michelson_test_scripts/mini_scenarios/big_map_entrypoints.tz -exprtfWRfK4RoY8CF9VXvcHeBxizfjMMPAkLojfUTuoZkMSyiPKoyK michelson_test_scripts/mini_scenarios/big_map_magic.tz -expruRE8G1Qc1dU8ZeQCTA48D69uPv8hpZYtDiKKHbfiy1mQLno8nx michelson_test_scripts/mini_scenarios/big_map_read.tz -exprtotUpA2o34SHPX7ZQHD69WvJyEykTvPJ8T3RFErKAq4TQHFAgP michelson_test_scripts/mini_scenarios/big_map_store.tz -exprtbeKR4fc2tqCWahuCeXAb42Hpye5dwmq8sj2guSztorTFJnh1J michelson_test_scripts/mini_scenarios/big_map_write.tz -exprvMZ59ZHwL8JHywsDMt51uUNCJub3nrhgciCyCh57FgZRVAHUCk michelson_test_scripts/mini_scenarios/cache_consistency.tz -exprtywgtRD1K7PCc7Bgvo3BhdbnStcdQd5JVk8r1BKBsH6ULXcwN1 michelson_test_scripts/mini_scenarios/check_signature.tz -expruQ3eniBy4BdEnCBNeTB9qQApVnBNnfqpnVw9iWgSBAHpBqaFqV michelson_test_scripts/mini_scenarios/constant_entrypoints.tz -expruaYHJwQ2NNRV8iUu9iXZ4AhE4conKnkwkaEYtX8BhngWkgLuqW michelson_test_scripts/mini_scenarios/constant_unit.tz -exprvTRcwMZnUPdSeRG8DdiC2xH3DrfMbp8qCwg76Av4pqbX5k4tHw michelson_test_scripts/mini_scenarios/create_contract.tz -exprubRYeqf14u8CU4cEri2RWBrx26gkxyGe5wGeVAf4PDjKdsNhLK michelson_test_scripts/mini_scenarios/create_contract_simple.tz -exprvLDpqaNLp1Cb8hbCqRU6tyU53n9PQkixgcBwFdSLJWsUdwhCQU michelson_test_scripts/mini_scenarios/default_account.tz -exprunMD4kfFx3QbgjyS3VHm6Sy63Km4P4XZiJz3PtZkaZNe2zcmd9 michelson_test_scripts/mini_scenarios/emit_events.tz -expruaNoYRNTQxG5yujhHLetzS68ppQ38MFyi2ZhzNs5WNFv3wBAHG michelson_test_scripts/mini_scenarios/execution_order_appender.tz -exprv6GXw7FheWdWKfY5oxtkB1AcqWkpKQDq4w7rxYFvwypZQijymK michelson_test_scripts/mini_scenarios/execution_order_caller.tz -exprvSqfUw3oLZmQDwys8V5Qn9K1RAgMDGxdUUxzx1wpnyif3uSZG8 michelson_test_scripts/mini_scenarios/execution_order_storer.tz -expruhMQvp6kKepaVGL8EEMPPk6zY1uyyW22Ugrr4ty21dtjDcVdbq michelson_test_scripts/mini_scenarios/fa12_reference.tz -exprutp2rbqbAjUxgneVRzRxv7ppTEvKdA6tNAeDDnGN1zsftskUQQ michelson_test_scripts/mini_scenarios/fail_on_false.tz -exprub9UzpxmhedNQnsv1J1DazWGJnj1dLhtG1fxkUoWSdFLBGLqJ4 michelson_test_scripts/mini_scenarios/generic_multisig.tz -exprvTVuhJ2wNH8LHYEUiNC6ugx264rdfka1HkGfdVxV5632GjqgNv michelson_test_scripts/mini_scenarios/groth16.tz -expru1u3Ta2uCGgcz6Z86K2mA5ierGB9RMaSwSppzVFxeuiXpBFZrf michelson_test_scripts/mini_scenarios/hardlimit.tz -expruYCY8RiqSCiWarxVgha3fCWqbZTzMVtf4cFSrvB7J6kxZW3DAH michelson_test_scripts/mini_scenarios/large_error.tz -expru362itxUvgRTAaaRaZiRsB2jMV7sv4WzcGPQtzp7z44rp7AdZe michelson_test_scripts/mini_scenarios/large_flat_contract.tz -expru23Uo5EJQEDVWx2JViKwosQ2Ri9ysY9CkftfB8X5D9qh3KRRPJ michelson_test_scripts/mini_scenarios/large_str_id.tz -exprutz4BVGJ3Qms6qjmqvUF8sEk27H1cfqhRT17qpTdhEs5hEjbWm michelson_test_scripts/mini_scenarios/legacy_multisig.tz -exprvRy1WUs7SQaNJm478UQHzz8uJAQoWT3bR5TXSnmbxWAcpZdGKu michelson_test_scripts/mini_scenarios/lockup.tz -exprtaZK3uo7KJ5WK96o6vR9atAPqFGnq6ew23Jwve6VFYy3kAmiDQ michelson_test_scripts/mini_scenarios/loop.tz -exprufAK15C2FCbxGLCEVXFe26p3eQdYuwZRk1morJUwy9NBUmEZVB michelson_test_scripts/mini_scenarios/lqt_fa12.mligo.tz -expruBi6wgss7SRmpBCseBzcu3L283Jfx2CpUjgfuT2MgsozUsvBwt michelson_test_scripts/mini_scenarios/multiple_en2.tz -exprtgxcdQP1EVvEYN2BHjbqTvwzywuYAdCmnfVgeP9zcgkxUrmScN michelson_test_scripts/mini_scenarios/multiple_entrypoints_counter.tz -exprtw9v7A9CwKaNKQFVYuwtYbSkcnMWHeV2T4bMY71P31pgrf7v7M michelson_test_scripts/mini_scenarios/multisig_dest_entrypoint.tz -exprusoefPk2e7L24cikJeYJPb6EfMKwcmHXWRYmUDZ38s9FRjyQUt michelson_test_scripts/mini_scenarios/multisig_dest_entrypoint_arg.tz -exprtqmA1RUirUeuGYz9aUFyg161DjfMXPjxtrA6Jrq2dTs59j3Ft4 michelson_test_scripts/mini_scenarios/nat_id.tz -exprui72n1Jur5Px5ESXgxiF9Uw86DsoXPt1edGDpSv4CvnuPCtBPR michelson_test_scripts/mini_scenarios/noop_bytes.tz -exprtzYM9ERr612k6ZBwGFJYHYcFbrG44y3KsanKg6Rz5VtEV7vUZK michelson_test_scripts/mini_scenarios/originate_contract.tz -exprucgYdABPRbbq2yy2rpyt4Z8fv7PN4yhkch3QYZ5QQ5ehbtNA4K michelson_test_scripts/mini_scenarios/parameterized_multisig.tz -exprvEkEGDttTD4uzRXGtJ9Usq98M9Y27B8wjrSD4YkhsZ17kgEtyu michelson_test_scripts/mini_scenarios/parsable_contract.tz -expruyXnWo3aJfqo9Z6ycLDjyJygYCeH5JUrchAfFHZcvU1ebtDBXx michelson_test_scripts/mini_scenarios/receive_tickets_in_big_map.tz -exprvJ8zXaBkyXMhJ2eKtPwdwbg5NLrggvW8MEpVK3hk3nAe215PQ6 michelson_test_scripts/mini_scenarios/replay.tz -exprtuiYUMjM6d8XxPda1yfKeN61ko6riom35PzybC31NKXkVhgBQy michelson_test_scripts/mini_scenarios/reveal_signed_preimage.tz -exprvHREG4G45HEucJxKDgc97zKvtHSHH19EJNGJdTvTjPD4xVW64f michelson_test_scripts/mini_scenarios/sc_rollup_forward.tz -exprtjCFzmoU7Z5DAfA2NX69CdWG68wmgLUKgsNY4THyjBU4kofTF8 michelson_test_scripts/mini_scenarios/sc_rollup_mint_and_forward.tz -expruB4maBvk1y4JaeSLpDXWC3zKiXK5QFYv4B3R5KfdGEt4B5VvTT michelson_test_scripts/mini_scenarios/self_address_receiver.tz -exprvTG7hjtWXeogStj3pzM1MCVcNg1q6KnivqNVzQjviUrJvsjfQn michelson_test_scripts/mini_scenarios/self_address_sender.tz -exprtahxrrP8ovDPykXLtbNsHGKTA8BwAvcwKCZR9LZtomdEfMaRDP michelson_test_scripts/mini_scenarios/send_ticket_list_016.tz -expruPp2RQZWq4HoEZ8UzSeMc2C8WDFpd5KzwgvPYNubSjbGui7bHX michelson_test_scripts/mini_scenarios/send_ticket_list_multiple_016.tz -exprvLTHbFX1yKGLikbkxpUuXzu3zoKTh3Hveg1uFg9YBauQWWY8Ts michelson_test_scripts/mini_scenarios/send_tickets_from_storage_016.tz -expru6tUaVWpaR7D5invwY7inJnPZGPXTcDqFvirrHPMRxSeHki5Fz michelson_test_scripts/mini_scenarios/send_tickets_in_big_map_015.tz -expruZQmVUQpyeX1RJbTjGswm4L3xjH93Pbo1bwAgH3yqMCfPeb9BG michelson_test_scripts/mini_scenarios/smart_rollup_mint_and_deposit_ticket_016.tz -expruSijXeDKWECoCNHi9UBxX4HJ2UwdoRVKKeryux64D6hajHw555 michelson_test_scripts/mini_scenarios/smart_rollup_receive_tickets_016.tz -exprtZPsTsBtNf9hjv7Yfda2EV4Sz3iaHpk4NkYHcKteXbsyQ9d6pH michelson_test_scripts/mini_scenarios/str_id.tz -expruaFvFLsin2MWRuDkLRfe56pdPTUQ8RK9k1ks1rUTjBnwryPyPx michelson_test_scripts/mini_scenarios/ticket_builder_fungible.tz -expruMFhigCZpXrGaL5sMyjGw5k7CanAa7XRkHFemCoCwMfJFJjDuD michelson_test_scripts/mini_scenarios/ticket_builder_non_fungible.tz -exprthFU1n1xhXLi4D2G4andPJsLcem1g1UtKiKJjXkCfVHztC393b michelson_test_scripts/mini_scenarios/ticket_wallet_fungible.tz -expruoGtEJH3sXXm2ruNG6DGTFE3GM6fjAS6fzDZKtdaMnRzHvi3Xd michelson_test_scripts/mini_scenarios/ticket_wallet_non_fungible.tz -exprufmCT3yVRjmsPS9f8eX3ZAbbUhdmUccDMWgdtSNA1QRx1i1U2s michelson_test_scripts/mini_scenarios/tickets_015.tz -expruzkvr4K2JgDWJqjwT9B1epNG1aDDjmvh6UN2kmecs3d6yHPPAN michelson_test_scripts/mini_scenarios/tickets_bag_016.tz -exprteapARTC3TcgQgBLVei9HoTq28M5xLbaEjmBaiUt46ipgP2TEq michelson_test_scripts/mini_scenarios/tickets_bag_implicit_016.tz -exprthATKGK2oc4oVbEDM4TYgJ9wHRsgbP4QwdpgwaNbjvswCeP3iT michelson_test_scripts/mini_scenarios/tickets_blackhole_016.tz -expru3BvEZn3LQEeUGjADWtNsRomSDi7LumwBDZEPnqo7j6iTnC5G1 michelson_test_scripts/mini_scenarios/tickets_create_and_send_015.tz -exprutzAruVCL3YX7JEwZf6bJ9Tq4bj19vWR9S3wofjNFXga1LzQSd michelson_test_scripts/mini_scenarios/tickets_list_blackhole_016.tz -exprvRyB18cUg5GmD5fzdkozmBMJyRm6my9hCFMMXQA4UgEGF6rdcH michelson_test_scripts/mini_scenarios/tickets_mint_and_store_complex_param.tz -expruhv4oofRVia4jt9hoTcYyohmNPiFqHTGTAyquyWu6R24eRdbEu michelson_test_scripts/mini_scenarios/tickets_receive_and_store.tz -exprtfF4hinrA2UJXB12eDnXV2ZjGAXX5ADneq5ezkuVi3PJvVFwnN michelson_test_scripts/mini_scenarios/tickets_send_016.tz -expruTjbiyNePk21v9BsharZPaT7xLkTzwTU5aSeHya4pXqn2DTBz5 michelson_test_scripts/mini_scenarios/tickets_send_with_tez_016.tz -exprvRXkn5p6qw3T7mjBud9XCDsgDGmyZZzMRscNAkaG6F1CitPYgz michelson_test_scripts/mini_scenarios/tickets_store_fst_and_rely_snd.tz -exprtnBz8poqNTrK4rzTXZFKQx7HWpx4WidHB5wxcM2oTS8NcrkAUt michelson_test_scripts/mini_scenarios/tzip4_view.tz -exprvG3gj2DnewiiqoLMpo9g5bHLtbk9NgqinPgGezHnpfK8jqGsm3 michelson_test_scripts/mini_scenarios/very_small.tz -expruws94oEpYqUjzea9obsa9j5tF4wtccbAPnRaLHRkL7G2gWa6Y1 michelson_test_scripts/mini_scenarios/view_check_caller.tz -expruFec7jRXa5z5sdoYyr6RUK4Uw8xwgXHYQhDF39mciEdoyVgcX2 michelson_test_scripts/mini_scenarios/view_registers_callers.tz -expruBgdNVqgPu4YL7fzivE9BYu7vQvbuoe8V9XwqVbWj7p6M5egCj michelson_test_scripts/mini_scenarios/viewable.tz -exprugya6ngixBfjyxV28ffnC8jmJPi4vbJdqD1aVUx82YLhzbH8Tn michelson_test_scripts/mini_scenarios/vote_for_delegate.tz -expruaKedvXmhg6wbV361DHykomz5dPqLi473KxBwJwyicEnKMhpb9 michelson_test_scripts/mini_scenarios/weather_insurance.tz -exprv9PvyjnsPjPCg5f13WtBiuD3o6idDAVWU6QfPtdWMjCLGRpwTh michelson_test_scripts/mini_scenarios/xcat.tz -exprvKm5t6a6LL2d3HjvRiJumGrGei24aRXscJk3zB1hs516Ju4oMZ michelson_test_scripts/mini_scenarios/xcat_dapp.tz -exprucvy7NUDPu2yTWEA6WVsusEZgGRmU1WpVzrFnNZV7m2H8BVysF michelson_test_scripts/non_regression/262_bug.tz -exprumT8doqCpoTqPAuJa8dsnrC7giaz6aGnMkJDF9kg8j8mBEafAC michelson_test_scripts/non_regression/843_bug.tz -exprtyJrKmrcvMroXNvbNSJr4hrWcLqa6QHmKSSJLMNqe1nueq1MSt michelson_test_scripts/non_regression/bad_annot_contract.tz -exprv3FvpUYzomvhmzxsQyuR1katpswNnicQZB4jA5uec3MERXk1cB michelson_test_scripts/non_regression/pairk_annot.tz -exprujPzkrPVucSvhHc1d9xm6kcs7oggkQyJXN8L2Rj3fteEABAkTe michelson_test_scripts/opcodes/abs.tz -expruNtqq51Lm75X61pxUx7P2FyR2uyUKLsZNHMXWx6X5rsyJ5M6WX michelson_test_scripts/opcodes/add.tz -exprupWD554EpqFBjo4KUpTqrfQcJAHqr3ijKmv5cmLRJ93Q1SgwGX michelson_test_scripts/opcodes/add_bls12_381_fr.tz -exprugu3H5MPrpWJRZMPMGDM3Dbvykaa1fHejEvYr7ePKaLtahjQV5 michelson_test_scripts/opcodes/add_bls12_381_g1.tz -expru41eYPF7gPvBRAtantBxbFU75RqBEwHPZ7UeX2EgHmExRoA4dh michelson_test_scripts/opcodes/add_bls12_381_g2.tz -exprtcPYR7TZHxzcpmZWjjLgMWp6CeRWAxQ5Bt2bgpUK5uKjmNAdzL michelson_test_scripts/opcodes/add_delta_timestamp.tz -expruLFQ1mcR5sg9sqyFHThknANoBeL4C5HFGgH55MqwPBEb1TUxLt michelson_test_scripts/opcodes/add_timestamp_delta.tz -exprtz1uUW5sVUVaKNLhPaKGjA7jK9JmzWBCQu5Xn1MC3aS1FjTUmK michelson_test_scripts/opcodes/address.tz -expruskF2nSeJeBaVHZsp45yN7mer9a4f8fAUBYvU3oRzbmpm5cVmt michelson_test_scripts/opcodes/amount_after_fib_view.tz -exprucSgNGh1wkijmUcjLdifceE7GeMdLnxL3JZKpbxAmzF41ALo91 michelson_test_scripts/opcodes/amount_after_nonexistent_view.tz -expruUQ1z6YqZM1baKofNLYhK9nocp9puAXCo4MYzEkQPbQcXTnajq michelson_test_scripts/opcodes/amount_after_view.tz -exprvJ4NRS33cboLuTx58f3sbYpXf1m7Cq2ou9gpCh1k8foaCZAoas michelson_test_scripts/opcodes/and.tz -expru5BXwmdpWQ3WDKA24g6gYGwLxPc868wKkdeAaGh899nD77Uxwn michelson_test_scripts/opcodes/and_binary.tz -expruthG9mteYkv8qKgRq13VjZTvbjtJYt1HmQg8HktkvjCvKZgdhR michelson_test_scripts/opcodes/and_bytes_016.tz -expruL6aKRTXN2hWb9EXLuJASu7nuBGJxL7VyT1oEjX9b2s3u6Y5Ff michelson_test_scripts/opcodes/and_logical_1.tz -exprtpYYuLewZWKCK1aPb9gfYSiPWSaeXRM4P2e4rpa6UktVueB1uf michelson_test_scripts/opcodes/balance.tz -expruWVQymVzetzkRaBYh4thmdWCvzWZNqdGrCTinGxLn58rPXDkgC michelson_test_scripts/opcodes/balance_after_fib_view.tz -exprukgm7LHJiEywzSseHXp23nXM5Y9GfJ61ULij58BgRQ4nt3bYYT michelson_test_scripts/opcodes/balance_after_nonexistent_view.tz -expruggCnM7PeEcUr2BapBmFMhD1QGvEoM4dUfyxp2u64ic1fM9SYN michelson_test_scripts/opcodes/balance_after_view.tz -exprtZRAy4QHqpF8c3CusD6e1kxWA3KAUrmgeXndfQYSEGArDmkWUm michelson_test_scripts/opcodes/big_map_mem_nat.tz -exprugsT35M51mCw6Fim3ysNKpCh8JyW9m7CYW65QQ7XUEDmspqz2i michelson_test_scripts/opcodes/big_map_mem_string.tz -exprvN3tk4o5YPYJB6aYAxEx8KU93yNSaw4K6mbEZZh9RQayua6odv michelson_test_scripts/opcodes/big_map_to_self.tz -exprv712JoEC7RRhoP7gbTUiVgLbtAgHmenwa5TqhVykDZ3e538MGU michelson_test_scripts/opcodes/bls12_381_fr_push_bytes_not_padded.tz -exprufF1yaR5QHdy8iECBLjhBtDZVLiEjZRuJntSkXjsrJRYozXLmW michelson_test_scripts/opcodes/bls12_381_fr_push_nat.tz -expruSVRATSSsbfHowLHGs5XHms95RuqBWSdDJoUKdns3fWbwasU1p michelson_test_scripts/opcodes/bls12_381_fr_to_int.tz -exprvTBYxSJ7d1z1aZvvAgPrdZUXHzoFxkwBC7McES5BS56xvqkGXg michelson_test_scripts/opcodes/bls12_381_fr_to_mutez.tz -expruTppbXBm1YHSCB4uYv9MQs6zxqRWqbkwGWoiKfF5Sjj5n2TpJx michelson_test_scripts/opcodes/bls12_381_fr_z_int.tz -exprv5Si29PfXErNuJdEvJWQhWRJ3qPETygaWzRE3ctmCU4s6y2V9v michelson_test_scripts/opcodes/bls12_381_fr_z_nat.tz -expruRsYz6JopAFGU95WfFU61SE3RbMGn3XPR9PFiTfLbgQr2kzu7u michelson_test_scripts/opcodes/bls12_381_z_fr_int.tz -expruyE3E3o8EAptRBZtQAB5Kv3sxUZGv7DK6CpJ2YdotQj9gqW5wN michelson_test_scripts/opcodes/bls12_381_z_fr_nat.tz -exprui72n1Jur5Px5ESXgxiF9Uw86DsoXPt1edGDpSv4CvnuPCtBPR michelson_test_scripts/opcodes/bytes.tz -expruxed4mBnPkdz81bZmzgQ6wFEEdKZqFazTkD9cTGWAuHAB2HTfA michelson_test_scripts/opcodes/bytes_of_int_016.tz -exprue485QnZ1W1ctgYRzPCy3pAcQmUAkAGGp6StowguHVCqMCVo7E michelson_test_scripts/opcodes/bytes_of_nat_016.tz -exprtvRRYmpToi9y67ZzNmgjtdrgNkwVduSnBi7GZVrsmgDna8TSjB michelson_test_scripts/opcodes/car.tz -expru5dDnxp1rhgXGmKigbLJ9ASaVHbkpkL6gLggtk9krgYC3jusc8 michelson_test_scripts/opcodes/cdr.tz -expruxH6gEuBmNzg5nWEM4tv3jMBbknbEtTHKTPMeC4EBdFdujbRph michelson_test_scripts/opcodes/chain_id.tz -expruGhHABGLz2wxAyyx3RpfyKHa8HE9voC19vLiAKYWYMMsUUTFdd michelson_test_scripts/opcodes/chain_id_store.tz -exprtjDuLEzh8dcjpCcJiiuKXDdG3XusjuuURVCh3JWKBgjJGsVsMs michelson_test_scripts/opcodes/check_signature.tz -expruHKTiWeY6mty7RokwdyZdwdzHQbu7udbbZbpu3C8h9n6jXnp4v michelson_test_scripts/opcodes/comb-get.tz -exprtsyJo5ceZQM76zpAUeTren1YnBxw2MNDKmx8k11Ejai8T296Sg michelson_test_scripts/opcodes/comb-literals.tz -exprv733yfMh1C9uyuAJJP66WPQDXAjjfcTcSfHhbboJnz6DUCEh41 michelson_test_scripts/opcodes/comb-set-2.tz -exprvHamsTHMJKF6ohaSAwdgp2Sv33LGgYnjase3LUcwXKnJfh53wn michelson_test_scripts/opcodes/comb-set.tz -expruufsxtik2vxyQfL3QKNWWH9TnJZgGx1ELi3AR5L3LM71uqxiP4 michelson_test_scripts/opcodes/comb.tz -expruKknV6VYzPHkSxc3EFb488JPBfUX1UHsJUzceaGFafdnbgsKw2 michelson_test_scripts/opcodes/compare.tz -exprvGXTYwatNh32w78r83SuLAW1YQefufYN1Bcu9AZ1BLDUU77dKR michelson_test_scripts/opcodes/compare_big_type.tz -expruR3ZCLJTuojpTuS2sR3SGxqait52kXQNKfy8bipv69b2XJZG8A michelson_test_scripts/opcodes/compare_big_type2.tz -expruUDL3EP43hFhcdCZD7K1xvfPtiNWfkU2Nyq8jmr9XgZuXqWXc5 michelson_test_scripts/opcodes/comparisons.tz -exprtjqEmEBnmG7yiDXn224ER9bt4qh18LF4LzFSfoeuo1cbJpNBPy michelson_test_scripts/opcodes/concat_hello.tz -exprtqd5qPLeh5Fi52YdkgWuvRXctgUoxU1Q4JDB2VseRk6DAEpMvd michelson_test_scripts/opcodes/concat_hello_bytes.tz -expruv8MHvRmp3ipXYRyyP4aEE4iFHWsNZjNQSaCWUt7fwbgLeFBXY michelson_test_scripts/opcodes/concat_list.tz -expruYk7GXYQ7bKbUcqcHDKs97USVBrxAkzSo2Bkj5AXVjSawDkNAS michelson_test_scripts/opcodes/cons.tz -expruMW9W9kkb2JaQWzKVThky4ULQ6ckgLzE2xD49XUp5E1iwWfUbe michelson_test_scripts/opcodes/contains_all.tz -exprvDvotLP1G2qjPJiqz2RvVUm8wJ2cEuFvKtm7YUNW3w6krDponF michelson_test_scripts/opcodes/contract.tz -exprvNrgGoLvfEaXw6QmjQrkXESpWo72JHR4G4mhTJy7Y266YXa3fe michelson_test_scripts/opcodes/create_contract.tz -exprttdxhC3YwJ9SGJNTDMQRpyWX1KwqAUuPbkQHX3uMPHNt3GKkZK michelson_test_scripts/opcodes/create_contract_rootname.tz -exprttdxhC3YwJ9SGJNTDMQRpyWX1KwqAUuPbkQHX3uMPHNt3GKkZK michelson_test_scripts/opcodes/create_contract_rootname_alt.tz -expruxUAUoijmC6A4rZK9XHcQL4WmgreJwT17hrgpuYkg1VeELBdbF michelson_test_scripts/opcodes/create_contract_with_view.tz -exprteqmco8PDGH1PnTGgF5jPjBPCYyZfyvER2ULtv2y3MRgGdcP8T michelson_test_scripts/opcodes/diff_timestamps.tz -exprtt6joHWnYr4AAW3uem8nzbxYgLcSpEJtaUT66qWchoKPS8sFXx michelson_test_scripts/opcodes/dig_eq.tz -exprvKBfwAg4hVHrTtq3UV8AunaqUKxAkvx35TScbZDARNSgH737Ck michelson_test_scripts/opcodes/dign.tz -exprv8t3ZfoBs6B7LMeFNN6U4PRpE1M6MhdtKPT5keNZT4je3RBadj michelson_test_scripts/opcodes/dip.tz -expruncwh1qqNqSwq6kHYXfwhQyjpuJjbernTsyHAMnaLjU5h3qjxr michelson_test_scripts/opcodes/dipn.tz -exprv62zo2ACMdseAu1HKzDDLSjBrYr2nZzi36PCTVJqcBwSdvt4yU michelson_test_scripts/opcodes/dropn.tz -exprujbvaRkoroj5eVgboUyeP3578oJgScTQ78eBYMgfdLVaGWPPTW michelson_test_scripts/opcodes/dugn.tz -exprur99uFkrwM63FXSTqSTypHcfEmzb5KQ9EypTRqZWDY5NP6tCHL michelson_test_scripts/opcodes/dup-n.tz -exprtarW6tiguR7YAo6SxhCUDs1pLDhx9xJEG78h6GnXLAWpt3H1pT michelson_test_scripts/opcodes/ediv.tz -exprvQhRaLYxiWN3QsJgT6VKf6DmGVuXR8DxeU63P9A8iNWA4TVQfs michelson_test_scripts/opcodes/ediv_mutez.tz -exprtuM993oiKiYWoztZwpAaUuvDDcx9xDX31Q88kpuo7owk6Q8JeR michelson_test_scripts/opcodes/emit.tz -exprv8Sy3DsiKMm3ZQPmi46kZGn9ctTigpLB2t6xYFdYkkeVHMXy6z michelson_test_scripts/opcodes/empty_map.tz -exprufqf2G8PoZN768K2YGex6M7zmz7bYHE5LF5QHJBVvFtAFLi6qr michelson_test_scripts/opcodes/exec_concat.tz -exprucYyrHMR3wgJLwFq1o6GPuByry7sroRiBPrt58fz3dRSRSzC3S michelson_test_scripts/opcodes/fact.tz -exprut53jocMPdPP8FXrKRDYSoRaxk1FXqCt7o46ak2wQaocjsSwwx michelson_test_scripts/opcodes/first.tz -expru5fjTGWP1BXZz3BbbEFyDFkyZGJKHcZ2Y6jDT3CdHHp81n6G1r michelson_test_scripts/opcodes/get_and_update_big_map.tz -exprua5oh3PDJEPQbEsnbHYCz6L7bY6kNvpyhEt7Cg9sPsrx82UmHQ michelson_test_scripts/opcodes/get_and_update_map.tz -exprtgnkjSH6Tdw5C1BMKr8kCJjEnxCfMiaAxHTVLnEcyCQ6WmJ1jr michelson_test_scripts/opcodes/get_big_map_value.tz -expruv8JdHeURNpuLHao37SGJauDPwB9yxFXUaL6hNCdXGzbHSqCZN michelson_test_scripts/opcodes/get_map_value.tz -exprvHC1MDkeqCNL8yrN74nmqk5qrZCvR42qoVUxYCB4ALpgDfmhbL michelson_test_scripts/opcodes/hash_consistency_checker.tz -expruzeve85eDLTpQ1EbgrQQcEUft7AGauZBwtK1ibuvJpwmZt9AE8 michelson_test_scripts/opcodes/hash_key.tz -expruycqvZn4ufKjVQmYXcCfAfm7C81zN3BAqxuYVVfnpFibSKsahG michelson_test_scripts/opcodes/hash_string.tz -expru34ooMhYSarFg7vZCe1Y23jwfxfHiDqwaE1wGXC48yjB21PLi1 michelson_test_scripts/opcodes/if.tz -exprtmbKAmbV2XioTbmpJQpg9QDAxXkTBXmKRWdC8zbk8CWAtVXwAc michelson_test_scripts/opcodes/if_some.tz -expruTGRZeiojz3Rrr45KUcwtpJuJYu6U8pxi4DBZpL2kGavVxxM4H michelson_test_scripts/opcodes/int.tz -exprtu4Xbe67UZyTubEtKx83bMyQGXDwBibcdgLF5hftZYTEL2kSst michelson_test_scripts/opcodes/iter_fail.tz -exprudLYgw6yWSrTHpXYsg9NcZxGGpCxdNFbNv7ksr6Ss8rNmh2fgT michelson_test_scripts/opcodes/keccak.tz -exprusrBf5Sakr6dRngzuPmwsP28X6W56nVqCXqG1Jcfrd1SYwPRuU michelson_test_scripts/opcodes/left_right.tz -exprvHZpmtBKjjsUZmchx2RTLmFAZnYKCnHSKXaKUdP5EUpiPYwsp2 michelson_test_scripts/opcodes/level.tz -exprtkasRZbYRQg7WKnoXwJnRwXkvmjZEY4yPYXKGAQQFUupt5VAmt michelson_test_scripts/opcodes/list_concat.tz -expru32VE4LnqAqhbpUFCdgEdRSHjLQipkXTjn624fL41yk3a4H5Q3 michelson_test_scripts/opcodes/list_concat_bytes.tz -exprvCkexzSQFgEWkFvrkrQ8wATasfkbKCyeXYSM4qZft3g3UuoTBi michelson_test_scripts/opcodes/list_id.tz -exprtbHaLLF4cUTh4VCjtnH32EAA2AFwvPBsCzUTgrrdofbotKMyr7 michelson_test_scripts/opcodes/list_id_map.tz -expruAxpePKSFaGkjukWx4HEZAvXaWvyfyGyxCfhvK9tZjkPNSpZ1m michelson_test_scripts/opcodes/list_iter.tz -exprvSCwmQGBkxgu2Tg5rYUXbyv33SpUskCJS7sPF4LN7e5pQ1fn7z michelson_test_scripts/opcodes/list_map_block.tz -expruu6vcnLhDhSkSo8NNNJWQL99VCFr6iArtKrmavJWSNkQwDJsKC michelson_test_scripts/opcodes/list_size.tz -expru8Et3hTjxKQpydKSThjR6fXSmPEmZDjBTNhTAbuyNjcPYoUQUL michelson_test_scripts/opcodes/loop_failwith.tz -exprv15pFChKhH3QKoJn5BCT1bP4R7DjnXWtTDsSfwf2eVonZNxzZs michelson_test_scripts/opcodes/loop_left.tz -expruAKUrHWCxb3qtVQ1a8qDzrS19HnTm7bS146AztFHekvpqbehaU michelson_test_scripts/opcodes/loop_left_failwith.tz -exprtch5jHa718ipv2f28nbAQzQxk5LneyayirKxTBf8Q4gtS1XNGo michelson_test_scripts/opcodes/lsl_bytes_016.tz -expruaRKkzMwKE6uDBPyUZ2u9nfKo1HenCVQLkBvevtteAxh7ey3w2 michelson_test_scripts/opcodes/lsr_bytes_016.tz -exprubosuA8peKBt4EEo1RsYjxSxK7HXytSkBFAjns5Zg7ncicPWrC michelson_test_scripts/opcodes/map_car.tz -expruqCpEBS2R8FqpBfDNUNrPhXZr39CBL6zKpyMogJR94sve62iv9 michelson_test_scripts/opcodes/map_id.tz -exprtb1QBmNfCYjce9FnvKdikbtgqcN5o2VdVwZZP2Fmy8C3TJjA7q michelson_test_scripts/opcodes/map_iter.tz -exprtuspLRSrYnp2FyqNcLfsBrBBFD8nnFog2Em3p7tfG4DcGujS3f michelson_test_scripts/opcodes/map_map.tz -exprtipeMFcMFwYRAmzZBMoUjrtPYDk5ZyhMSyuhSgfiJV5UNAcLGp michelson_test_scripts/opcodes/map_map_sideeffect.tz -exprtc9HPyzpfc71TE4a8UbRPxfdm4WGRPNQhfB5fHiWwkh1aA8uzm michelson_test_scripts/opcodes/map_mem_nat.tz -exprtrkfCSUckShrEP5TmC5Y4CdeU35FFL7R8kyJHQUFZ4DNdJZasD michelson_test_scripts/opcodes/map_mem_string.tz -expruqncptpX6oXeX88mAkVHh9DnzWb6vPwT6LvuND9yobgcH5Gd2x michelson_test_scripts/opcodes/map_size.tz -expruZ7Tb7uhcAu3MhiDJFWrJiYseWyagZYEnzjEdpjSei8i73hsfG michelson_test_scripts/opcodes/merge_comparable_pairs.tz -exprvNxEfUTwaryUzets4qyTbHAfNPb5ARQsMsxbm8CnGNHDedqxgy michelson_test_scripts/opcodes/mul.tz -exprtYi1xHmB1AY6j4e3XTPvXpmuWnM4b4o78yVihYt1i2yNjrQqhY michelson_test_scripts/opcodes/mul_bls12_381_fr.tz -expruFTKqYqMmWSakzE1gjs2p8kWtcRWTaddkYL5p2Z8wpcCfe5ei1 michelson_test_scripts/opcodes/mul_bls12_381_g1.tz -exprvBDM3kep2f7bRkhRa2XWt9sdPGJ79sq6TdWNNnM4yydTQ88TaH michelson_test_scripts/opcodes/mul_bls12_381_g2.tz -exprujbPsZAUa1tzgWNgeHEQ22JXDfNhkgx6sCCxbWjYoNWPbTvwhy michelson_test_scripts/opcodes/mul_overflow.tz -exprth31LKm5FDFGxcXg1Rv9z9YeAQ8eu2oYTh2zZ7kJas3f5CWkZm michelson_test_scripts/opcodes/munch.tz -expruP5gECQdRLkmuYg8xqvEAdE4oRGFjDVG3ZkWxtCyxve1jviw6k michelson_test_scripts/opcodes/mutez_to_bls12_381_fr.tz -exprtw9PgkJCxyqdLjuA4dEdRjQXY7Ge4a7jjd2UoU6Q6KrvhFgciM michelson_test_scripts/opcodes/neg.tz -expru5fYi1tAG8a9j2dYT561dXaox8wYjsZDZP18xPa5JN3bUNfHWS michelson_test_scripts/opcodes/neg_bls12_381_fr.tz -expruY94PxNhmT8BeyGrFurRF6gC7XfgsBY9Vjh6hJyiDPaR8nFmri michelson_test_scripts/opcodes/neg_bls12_381_g1.tz -exprv9bM4xnqjA33RkvUzz8ZppJXT32KdNXoYqY2NSh7whBcFPn2QS michelson_test_scripts/opcodes/neg_bls12_381_g2.tz -expruZzA96Rh5o6HBboygY3iD97dgQcepXd45WBBD4DYZ2qcn8cxyY michelson_test_scripts/opcodes/none.tz -expruat2BS4KCwn9kbopeX1ZwxtrtJbyFhpnpnG6A5KdCBCwHNsdod michelson_test_scripts/opcodes/noop.tz -expruMUpBKBPGde4GfNLM8NgMq9nL6KsQXGA3LPt4C6wtMTxcUnE9A michelson_test_scripts/opcodes/not.tz -exprtnpHGyp2TurQb2YzbXBKTipXnrUQ4RrZwPxWfa1yMXS7oi49jV michelson_test_scripts/opcodes/not_binary.tz -exprtr3AhRfBVUibP5MtbenGDTEasfxSJAFsuYgkjmLqfpHnDahfWz michelson_test_scripts/opcodes/not_bytes_016.tz -exprusKUuYeoKXUAYtUhtknryT9MpbPZVZtbfUNCdRpXUbdzEzbwmN michelson_test_scripts/opcodes/or.tz -exprvG84juZWwLHTrhtvWFWBs8D2wZw6rfpoAbXp2pkekuCMAaPbAn michelson_test_scripts/opcodes/or_binary.tz -exprvN5DmSbMk2JQ9nNSEakbicPj4vfGP4N4iWo3yabNAFvqNxCAkq michelson_test_scripts/opcodes/or_bytes_016.tz -exprv39cZxxm6fTcFSbLcwpBbAPW56FPqjdf6aGm21KqGA6DQtwn6u michelson_test_scripts/opcodes/originate_big_map.tz -exprunveMvzjDskHYCvYJzDfRR9aGwwvXkVUMqTwSxJJbEjeq63c2D michelson_test_scripts/opcodes/packunpack.tz -expruKkmmajE1UFXRHXtntLZU8VvnLfFKwYPd4azsAdcrDMaq5zu9H michelson_test_scripts/opcodes/packunpack_rev.tz -exprtk9p4ur3KZK2w8ziFoZVHPABxQWZXeSNowcJuTauL3zTxr1zcH michelson_test_scripts/opcodes/packunpack_rev_cty.tz -expruSamDrL2Dh4zp92cVgfV7ETT7VcnqACDVcvnafi3qgBZq9v3PL michelson_test_scripts/opcodes/pair_id.tz -expru3WFEX5bVjBUkZzuWspLG18hy5jTzbr2WtKEYpfPHGpDFvcqhd michelson_test_scripts/opcodes/pairing_check.tz -expru2U5Bi7ehgkQvP7Qmij4c8gkSFUBNtiCyXMX3WwGjEdRRZc5x1 michelson_test_scripts/opcodes/pexec.tz -expruPr8QtATywJFqPjDhF7gyqdF15L6J7pxgpypzorEvtubdJN8U2 michelson_test_scripts/opcodes/pexec_2.tz -exprvBUenyTMJKwERZ1ULzMVrJ1owqymBF32f627arqtFUzMpaMvbC michelson_test_scripts/opcodes/proxy.tz -exprvPaPcYHvKmnyBMaYXtp6ZuaSEHWr5y92bcroKKppAZvF4RvcWE michelson_test_scripts/opcodes/ret_int.tz -expru8MKLXqiNRYnPccUN4if3VnWfthDy24K4zuJrFh2JaMmmh6Rii michelson_test_scripts/opcodes/reverse.tz -expruta4Bjo3FggDcvZDzEVwzeTcdZptzkJZyFEkdB8suFGbMVtT2Z michelson_test_scripts/opcodes/reverse_loop.tz -exprueR2MPCHUFtPjMZXE57X3EsysuWJXGRz8ZgcPJj21UySLqULV1 michelson_test_scripts/opcodes/sapling_empty_state.tz -exprvSNMswzVUk47vqs4wTGipDb3qDKVUwNBDwXtGzjCprEYx4nWPo michelson_test_scripts/opcodes/self.tz -exprtzokY2FHvPvB9YHSi8MM5YUbPdUPLi7tEKkp8BKongPb2zrZch michelson_test_scripts/opcodes/self_address.tz -exprukm3NvsYbS9ymX3MuXh6LciuF8ef2qt8ktTGaXtyFxCpisMBdD michelson_test_scripts/opcodes/self_address_after_fib_view.tz -expruV4HCC6sRdEL5HyXVC9gTkMZbh8BnxXsKZDTydtztRhDUT3qxa michelson_test_scripts/opcodes/self_address_after_nonexistent_view.tz -expruUWxiqrD566farETUi3VChWNZ5teemC3q4G8tf83xhjTwRSEws michelson_test_scripts/opcodes/self_address_after_view.tz -exprvQ8rhMFcCrwNSLZERQSQ9TMR1Tsnyj7R1jS8J2UESKXUoJuLTV michelson_test_scripts/opcodes/self_after_fib_view.tz -exprvKoMUnUmthGpVmQfYkLa8F6GRwmU36D9jYXNG8j8QbQYNWUoAC michelson_test_scripts/opcodes/self_after_nonexistent_view.tz -exprtXqpN6sqTKUVNissE3rkzKGSBuW2gTh8pRb3XyHZ4dpaAqLnhL michelson_test_scripts/opcodes/self_after_view.tz -exprvDVUQXNsfs9FiHkMSofonWCWcBfYbfxeQy9DRaa5Tnbw1XM18Y michelson_test_scripts/opcodes/self_with_default_entrypoint.tz -expruXGf2YpXKkr74mcv83fQ6bztVD1RBoFXaEnAd9bidnRXcfD3Nj michelson_test_scripts/opcodes/self_with_entrypoint.tz -exprudmJ37Q8ZASPbZSSBfy5UezxLhniszTVkLAB8QKvxkav4gVVYr michelson_test_scripts/opcodes/sender.tz -exprtufbuVP6RKm1PGPUQnZy6dqwxCha1jbafqyVGpCUNWeUVpcBhc michelson_test_scripts/opcodes/sender_after_fib_view.tz -exprug4Jd1WdLqrZWiG8PsGDETN1ahpX5PycBrdNWadM96M5SjvLae michelson_test_scripts/opcodes/sender_after_nonexistent_view.tz -exprvR3pRxvwuwM1c4Jk1zRfuDabRPwLnazpSsySQkzymatANufH9h michelson_test_scripts/opcodes/sender_after_view.tz -exprurSxmHBRCHUxtXcqNkPA8UE6gaFeJa19bBhq1CarZ3CZuAzShs michelson_test_scripts/opcodes/set_car.tz -expruogQk6tG5W7CtZrcMzsRtJ1f9moG9y5Qg5j29NATiaSywvQCcS michelson_test_scripts/opcodes/set_cdr.tz -exprvCt5LtbC3mLLWHdvyxGcX3ND21Ym5GayCvePEHHGXAtgWu32sJ michelson_test_scripts/opcodes/set_delegate.tz -expru133Wm63xA1qs5ymovjbP3N3iwPoTMcdUsbUqqbTf896jU78WR michelson_test_scripts/opcodes/set_id.tz -expru151wgMY5reA7WVbnvkHrh9MVnfYFbCDaiE2aTGmkKACu2ZbJA michelson_test_scripts/opcodes/set_iter.tz -expru13v2dm35MgMgTbwDJ4nEwNjRTau8mqztAyxGxXVbHNmskAA2q michelson_test_scripts/opcodes/set_member.tz -expruE8c9EzG6kYQdp5RQXrAt2CekSFXVtKUzNDUnpVTDygEBP7VvF michelson_test_scripts/opcodes/set_size.tz -exprtzSBcPatLYnGe5xtsSNGVjNBLMmHefxsQ7Q2QNjDMGmADKdWUC michelson_test_scripts/opcodes/sets.tz -exprteVcB53uqnwQsZMTsBojwez6tkgRqj1qWCQTLgaQWxQGiNWXEE michelson_test_scripts/opcodes/sha3.tz -exprvPbB5NtiV87RARduqoXtMoRjjy6jX8WYrfiu3RDjQrTKxPQnoe michelson_test_scripts/opcodes/shifts.tz -exprtnS2EjwJ3MdSWS7R6UbZMqFoUHj1JpUhhtJacXdfmmzRNHL33W michelson_test_scripts/opcodes/slice.tz -exprugZMQtZN7safMU7hV5QpM7nh7Vi5ur9sGjeWsmGRkW1ETox8uR michelson_test_scripts/opcodes/slice_bytes.tz -exprvCqvDAp66YnPaZDdaAkCNafoGtw1fEuWaLxMFeMnX6oqrb93nP michelson_test_scripts/opcodes/slices.tz -exprtzW4jh4MgY6iXgiCXft5q3Mig5XXANHn9CmcL8ApTrdnQgWzAm michelson_test_scripts/opcodes/source.tz -exprvD9HJMfLEUdamfH9U8ozBaxA7hYVRMbK7At6sUqFMmhZ6UorWv michelson_test_scripts/opcodes/split_bytes.tz -exprvJcmHwozD2DTtagjJJfyPgoCvBx5bMzXAkrsteYVvxeMr9SWm3 michelson_test_scripts/opcodes/split_string.tz -expruDY992zB37mWpZwFQCrfDbkwmrCmjSHD4fzQcW1z1AeWeW8M3r michelson_test_scripts/opcodes/store_bls12_381_fr.tz -expruZAkBxtwSXuMp6ZDNp41mJ6uZ4bw7RF9HNzJS9EnzTLxVhQ4SB michelson_test_scripts/opcodes/store_bls12_381_g1.tz -expruZfFC7WkBQhK4Ksg5k5WxBamF4PvH2NGCxcd4DHUkKfeqQEBUe michelson_test_scripts/opcodes/store_bls12_381_g2.tz -exprv8K6ceBpFH5SFjQm4BRYSLJCHQBFeQU6BFTdvQSRPaPkzdLyAL michelson_test_scripts/opcodes/store_input.tz -exprvStWRo24QuETruMmMqkmLme6UAMHuTRNNq9Lq65oFgUvQmJGPV michelson_test_scripts/opcodes/store_now.tz -exprtZPsTsBtNf9hjv7Yfda2EV4Sz3iaHpk4NkYHcKteXbsyQ9d6pH michelson_test_scripts/opcodes/str_id.tz -exprv4UZUuBDCZZjtW5kaezZjaKqpi1GN6vxHsvQNNkFktnaEbDb1M michelson_test_scripts/opcodes/sub_timestamp_delta.tz -expruVuXhQmoBMzZjPeY7VQSuJxefBBTuPyNR7PGnYhwouo9zKg3T1 michelson_test_scripts/opcodes/subset.tz -exprtz2jbsXuMMPAXYAGJZqjuBp8iF38XadE3YuZoC2W5NkyhhHMuq michelson_test_scripts/opcodes/tez_add_sub.tz -exprugbVFDGWcSSozyN3EK3AcdwtPeES3ao45HNogWc5V8fsJ8NsSP michelson_test_scripts/opcodes/ticket_bad.tz -expruwtzPEyCm4Vaq42Fct7QG5eD1MzXzkJbRqm6EVQH6YSV2QLkr1 michelson_test_scripts/opcodes/ticket_big_store.tz -expruqx789AMcKUYwDeeeRvSnwdCw8gMVvWA6vuzPzBQwBM2qcDXJB michelson_test_scripts/opcodes/ticket_join.tz -exprvMp1LX8aeyEq9NiMXGyD34J4offZDANGRwFTxoEWXumEsDdAP8 michelson_test_scripts/opcodes/ticket_read.tz -exprtvtEFi6v3awAwbHivJkjki6mDNivewiCBeJDJT78PqWtq7VyUD michelson_test_scripts/opcodes/ticket_split.tz -exprtifPFaLqHvR9uGWbeLj5r3YVBnKaawt12q3BMhM9wsUdM9dFNy michelson_test_scripts/opcodes/ticket_store-2.tz -exprvJGjz1EDdnAPWZQ7ZngDNDDDXnxA2VY6SHdHKu8LxqcVHd3E6z michelson_test_scripts/opcodes/ticket_store.tz -exprvDjqte3hX8aieidgPA2qyPWA5eYuVrvb3KKZ8aYkeDotovgkQ4 michelson_test_scripts/opcodes/ticketer-2.tz -exprvSU3oSiKqMLpWgBhwJZbEMDnvKiNW57MYQ8YG787N7jocXMEuR michelson_test_scripts/opcodes/ticketer.tz -expruhV9RSEPAtKAUhBbdTw5gPFdjcKk8zr7cVLSsGtmJuH3o7VXXo michelson_test_scripts/opcodes/transfer_amount.tz -expru3MSjYZRmQi3yiN6gYa4X6rs88XLWH4H8ivzrCvxs8z8cJfu4Z michelson_test_scripts/opcodes/transfer_tokens.tz -exprtbACDcFtDfEwsBA5LAG13uMRAjnQsFjzNELMS7jQ87bcqgdE6r michelson_test_scripts/opcodes/uncomb.tz -exprufJpS3BWpgv4QBaBEMucbn1jsVpdqEGLLMfXjDuKGPRGCpZUkj michelson_test_scripts/opcodes/unpair.tz -exprtqjpmEs9GUjSEzJYSnN3skiCb8js2bY48R9Lhxk9JW1CKnm6VP michelson_test_scripts/opcodes/unpair_field_annotation_mismatch.tz -exprv4ACaZe4aECCfG93NGVVHbQBNQ5Atxtju5vWASZSEp5sLECcjg michelson_test_scripts/opcodes/update_big_map.tz -expruWzM36ATA3fAee4WHDS4vvMeewkwhya1fZaa6HFPbjwt9vvGpg michelson_test_scripts/opcodes/utxo_read.tz -expruNCoB4n3KQTeXbDJWLwynT32T6dz2Nxw5f7SwaqRNkQSBog79A michelson_test_scripts/opcodes/utxor.tz -expruJxgC2Q8Ubt8tPyQbZ41j6w4b8yw5f6bxjrMMM81TmMC9x5Lrc michelson_test_scripts/opcodes/view_fib.tz -expru9EavkgPCUAwHccJf9j1t4aTTssPKoBkCqC4YNr12kxXSwqFqD michelson_test_scripts/opcodes/view_mutual_recursion.tz -exprv4QXQuZtQE7CpKyecjrXJ8U2ovU1qjUKtw37J6kAEmu3fAKyN5 michelson_test_scripts/opcodes/view_op_add.tz -exprugGjNh2tTsofJyhkNMrQVJnkyLydJywNVMAXL9rW3nhnCmRd3F michelson_test_scripts/opcodes/view_op_constant.tz -exprtn56ZZ3mXHoz9GMS9HGMfmgayukvVXub8zXeDKbE4U7L5L8dXX michelson_test_scripts/opcodes/view_op_id.tz -exprtaNDFRcdw8SB4Bz1a6CKARxZaoxpc6G2hnJYedp1iZgJqEwMNV michelson_test_scripts/opcodes/view_op_nonexistent_addr.tz -exprtmA9Auh8GAHpvKP2qkVhiaRCtokWcw7qg31CaxbouJW1g8yYK7 michelson_test_scripts/opcodes/view_op_nonexistent_func.tz -exprubMFU6xrnHREoXUZinEeV3PuZBjSw35M6gti7tyQ83S6LTKja1 michelson_test_scripts/opcodes/view_op_test_step_contants.tz -exprtj9pixxS7UHchhthZa8zdU2GAjvW7oA7QEMA3PHgf88vmAEjFb michelson_test_scripts/opcodes/view_op_toplevel_inconsistent_input_type.tz -exprurrbjDgnipRBhqb7pPLQFAgtPm5jrpwJjJL5ZvQyFJZzGvqteY michelson_test_scripts/opcodes/view_op_toplevel_inconsistent_output_type.tz -exprvSPcq1w7iTMA3LjQcHegnRUQ621sqQLRJm1Zh4tjHCkmeZV268 michelson_test_scripts/opcodes/view_rec.tz -exprv1LkSMvSyZSBrg9Tf2PdcoiWDYPz2npmYb7rH6bWx2sYMAHMgg michelson_test_scripts/opcodes/view_toplevel_lib.tz -expruF13NKWWyF51seiYv4tsb55dZHYViNWDKTmhLq9b1LXXenwaB2 michelson_test_scripts/opcodes/voting_power.tz -exprvSZMaiMSbKgRYm1W4rcoBGN21bPu8NMQuYBH9ujhXGeHhdtVGk michelson_test_scripts/opcodes/xor.tz -expruDwpzxhBEyYY2Tqt9HE9iL18wWJEUJtF9WnkfAyHg1mqkRqs91 michelson_test_scripts/opcodes/xor_bytes_016.tz diff --git a/tezt/tests/expected/self_address_transfer.ml/Parisb- Self address transfer.out b/tezt/tests/expected/self_address_transfer.ml/Parisb- Self address transfer.out deleted file mode 100644 index 4592b107141d85fb8eafc3e773c54b42e106f588..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/self_address_transfer.ml/Parisb- Self address transfer.out +++ /dev/null @@ -1,141 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract self_address_sender transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/self_address_sender.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 592.496 units (will add 100 for safety) -Estimated storage: 339 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000379 - Expected counter: 1 - Gas limit: 693 - Storage limit: 359 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000379 - payload fees(the block proposer) ....... +ꜩ0.000379 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (contract (lambda unit address)) ; - storage unit ; - code { CAR ; - BALANCE ; - LAMBDA unit address { DROP ; SELF_ADDRESS } ; - TRANSFER_TOKENS ; - DIP { UNIT ; NIL operation } ; - CONS ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 82 bytes - Paid storage size diff: 82 bytes - Consumed gas: 592.463 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0205 - storage fees ........................... +ꜩ0.0205 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as self_address_sender. - -./octez-client --mode mockup --wait none originate contract self_address_receiver transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/self_address_receiver.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 592.927 units (will add 100 for safety) -Estimated storage: 340 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00038 - Expected counter: 2 - Gas limit: 693 - Storage limit: 360 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00038 - payload fees(the block proposer) ....... +ꜩ0.00038 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (lambda unit address) ; - storage unit ; - code { UNPAIR ; - UNIT ; - EXEC ; - SELF_ADDRESS ; - ASSERT_CMPEQ ; - NIL operation ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 83 bytes - Paid storage size diff: 83 bytes - Consumed gas: 592.894 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.02075 - storage fees ........................... +ꜩ0.02075 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as self_address_receiver. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 2961.427 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000601 - Expected counter: 1 - Gas limit: 3062 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000601 - payload fees(the block proposer) ....... +ꜩ0.000601 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 82 bytes - Consumed gas: 1745.840 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Parameter: { DROP ; SELF_ADDRESS } - This transaction was successfully applied - Updated storage: Unit - Storage size: 83 bytes - Consumed gas: 1216.725 - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr bytes parameters more than 32 bytes.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr bytes parameters more than 32 bytes.out deleted file mode 100644 index d1cd3eec32c79b6012fdd3e735386bef5f997130..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr bytes parameters more than 32 bytes.out +++ /dev/null @@ -1,8 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/groth16.tz on storage 0 and input 0xf7ef66f95c90b2f953eb0555af65f22095d4f54b40ea8c6dcc2014740e8662c16bb8786723 -Ill typed data: 1: 0 is not an expression of type unit -At line 1 characters 0 to 1, value 0 is invalid for type unit. -At line 1 characters 0 to 1, unexpected int, only a primitive -can be used here. -Fatal error: - error running script diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- add.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- add.out deleted file mode 100644 index 1eea408b826853d6c1ee2a587f42241c52c8dee1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- add.out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0200000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xa8b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0xfbf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x38beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x989b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x2648fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0xe568301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x5b2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x2a3a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x711a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x2b2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xa8b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0x4e61c1b9739b09c6136d03f10db4f1fe66368104f9dfb4a1ff2e147dc3209a5c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0xa1a688aadbbdba2965131e014d737cb8d52567301e3941d940e4617d0eb1534a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0xde6e9039874c89906a3f0161ad49e4e02e4bf18a44fcdd8f30ad1493e4b7c544) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x3e4c6416c64ad3c5e36efe949318a6d9b1724e3a40432d12eeff653428ae0f33) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0xccf8dd7732f3a043893d84d12bd5af746b567dce7751ebbb4ea2cae149105c3a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x8a1911fb6130ada278495eaaf297b06cc32b72924e177910e6a953b50eeb1826) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x01dc41c11307df45df4e95d942c61da257af08aa1c61ff67f7a3b8765d716e72) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0xcfea7e1e6ba3b0c89d32738c659c4efd5509edaf7e64b45af13d91d19d4a1526) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x16cb481085742002a06e43e19ba8f1a36064493d2437fc2cff621722e9db6513) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0xd1d327c5ea7170b5f9039c203e898b36ad288eaddfa69deb6025523a4663884d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xfbf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xa1a688aadbbdba2965131e014d737cb8d52567301e3941d940e4617d0eb1534a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0xf4eb4f9b43e06b8db6b938118c32077244154d5c4392cd108299af7d59410d38) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x31b4572aef6e3af4bbe51b71ec086f9a9d3ad7b669556ac7716262932f487f32) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x91912b072e6d8429351519a5d2d7309320623466659cb9492fb5b334733ec920) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x1f3ea5689a1552a7dae39ee16a943a2eda4563fa9caa77f38f5718e294a01528) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0xdd5ed8ebc9525e06caef78ba31573b26321b58be73700548275fa1b5597bd213) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x542109b27b2990a930f5afe98185a85bc69eeed541ba8b9f38590677a8012860) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x2230460fd3c5612cefd88d9ca45bd9b6c4f8d2dba3bd409232f3ded1e8dace13) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x69101001ed96d165f1145ef1da677c5dcf532f694990886440186522346c1f01) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x2419efb5529421194baab6307d4816f01b1874d904002a23a2da9f3a91f3413b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x38beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xde6e9039874c89906a3f0161ad49e4e02e4bf18a44fcdd8f30ad1493e4b7c544) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x31b4572aef6e3af4bbe51b71ec086f9a9d3ad7b669556ac7716262932f487f32) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x6e7c5fb99afd085bc111ffd04cdfd6c2f65f61119018077e612b15a9054ff12c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0xce593396d9fb52903a41fc0433ae98bb7987bec08b5f56001f7e664a49453b1b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x5c06adf745a4200ee00f8241cb6aa256336bed54c36d14aa7f20cbf76aa78722) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x1a27e07a75e12c6dcf1b5c1a922da34e8b40e2189a33a2fe162854cb2f82440e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x91e9104127b85e1036219349e25b10841fc47830687d28562822b98c7e089a5a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x5ff84d9e7e543093f40471fc043241df1d1e5d36ca80dd4822bc91e7bee1400e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0xa7d817909725a0ccf59c3f513ee2a1d92d515bcd772b5f4e785eb5615d1a7f6f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x61e1f644fe22f07f50d69990dd1e7e18753dfe332bc3c6d991a3525067fab335) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x989b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0x3e4c6416c64ad3c5e36efe949318a6d9b1724e3a40432d12eeff653428ae0f33) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x91912b072e6d8429351519a5d2d7309320623466659cb9492fb5b334733ec920) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0xce593396d9fb52903a41fc0433ae98bb7987bec08b5f56001f7e664a49453b1b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x2e37077318fa9cc5b370f938197d5ab4fcae1b7087a6a582dcd0b7eb8c3b8509) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0xbce380d484a26a43593f7f75b139644fb6924a04bfb4632c3d731c99ae9dd110) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x7b04b457b3df76a247a7574e7ba0229b1340e1d19d522bb41cf84296c61f7c70) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0xf1c6e41d66b6a845af50907dc82ad27ca2ebd5df63c477d8e5740a2ec2fee348) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0xc0d5217bbc527ac86c906c30eea4c02ba61d5cefcd9f66fe278c80b2557f7870) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x07b6eb6cd623ea016fcc3c8524b163d2b078b87c7372aed035b10603a110c95d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0xc1beca213d213ab5c90597c4c3ed3f11f8645be3260a165c4ff6a3f1aaf0fd23) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2648fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xccf8dd7732f3a043893d84d12bd5af746b567dce7751ebbb4ea2cae149105c3a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x1f3ea5689a1552a7dae39ee16a943a2eda4563fa9caa77f38f5718e294a01528) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x5c06adf745a4200ee00f8241cb6aa256336bed54c36d14aa7f20cbf76aa78722) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0xbce380d484a26a43593f7f75b139644fb6924a04bfb4632c3d731c99ae9dd110) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x4a90fa35f14a38c1fe0d05b249f66dea6f767998f6c221d69d158146d0ff1d18) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x08b12db920884420ee19df8a10b96ee2c74b6e5ccd88af2a351d0a1a95dada03) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x7f735e7fd25e76c3541f16ba60e7db175ccf04749bd2358246176fdbe3603050) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x4d829bdc29fb47461303f46c83bd0c735a29e979fdd5ea7440b14736243ad703) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x956265ce42ccb77f149bc2c1bc6d6d6d6a5ce710ab806c7a96536bb0c2721565) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x4f6b4483a9c907336fd41c015caa49acb1488a775e18d405b098089fcc524a2b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xe568301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0x8a1911fb6130ada278495eaaf297b06cc32b72924e177910e6a953b50eeb1826) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0xdd5ed8ebc9525e06caef78ba31573b26321b58be73700548275fa1b5597bd213) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x1a27e07a75e12c6dcf1b5c1a922da34e8b40e2189a33a2fe162854cb2f82440e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x7b04b457b3df76a247a7574e7ba0229b1340e1d19d522bb41cf84296c61f7c70) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x08b12db920884420ee19df8a10b96ee2c74b6e5ccd88af2a351d0a1a95dada03) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0xc7d1603c4fc5507fdc81b763da1f2d2e25f9042aac2677b214a23017ad5c8563) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x3d949102029c8222442bf09227aadc0fb4a4f9377298c3d6dd1ef8aea83bed3b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x0ca3ce5f583854a5016bcc454d24cbbeb7d67f47dc73b2fc1f366e333cbc8163) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x538398517209c4de03a79c9a83306e65c231dcd48146face2d5bf483874dd250) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x0d8c7706d90614925ee0f6d9226d4aa4091e7f3b35de615a47a09172912d0717) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x5b2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0x01dc41c11307df45df4e95d942c61da257af08aa1c61ff67f7a3b8765d716e72) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x542109b27b2990a930f5afe98185a85bc69eeed541ba8b9f38590677a8012860) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x91e9104127b85e1036219349e25b10841fc47830687d28562822b98c7e089a5a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0xf1c6e41d66b6a845af50907dc82ad27ca2ebd5df63c477d8e5740a2ec2fee348) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x7f735e7fd25e76c3541f16ba60e7db175ccf04749bd2358246176fdbe3603050) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x3d949102029c8222442bf09227aadc0fb4a4f9377298c3d6dd1ef8aea83bed3b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0xb356c2c8b472b4c5abd428c274348cf14250ee45380a10fba69bbf46a41a5514) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x8265ff250b0f8648691405759aae7aa046827455a2e5fe20e9b235cb379be93b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0xc945c91725e0f5816b50d5c9d0ba1d4751ddd0e247b846f3f6d7bb1b832c3a29) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x844ea8cc8add4535c5e52d09739bb7d99da115530328e8b1589af633e0b35c63) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2a3a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xcfea7e1e6ba3b0c89d32738c659c4efd5509edaf7e64b45af13d91d19d4a1526) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x2230460fd3c5612cefd88d9ca45bd9b6c4f8d2dba3bd409232f3ded1e8dace13) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x5ff84d9e7e543093f40471fc043241df1d1e5d36ca80dd4822bc91e7bee1400e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0xc0d5217bbc527ac86c906c30eea4c02ba61d5cefcd9f66fe278c80b2557f7870) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x4d829bdc29fb47461303f46c83bd0c735a29e979fdd5ea7440b14736243ad703) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x0ca3ce5f583854a5016bcc454d24cbbeb7d67f47dc73b2fc1f366e333cbc8163) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x8265ff250b0f8648691405759aae7aa046827455a2e5fe20e9b235cb379be93b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x51743c8361ab57cb2654e127c028694f4ab4fa640cc1ed462bcaab4fcb1b7e63) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x985406757b7cc7042990b17cf6340cf6540f57f2b193351939ef31a016adce50) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x525de529e27917b883c90bbc9571e8349cfbf958652b9da45234cf8e208d0317) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x711a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0x16cb481085742002a06e43e19ba8f1a36064493d2437fc2cff621722e9db6513) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x69101001ed96d165f1145ef1da677c5dcf532f694990886440186522346c1f01) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0xa7d817909725a0ccf59c3f513ee2a1d92d515bcd772b5f4e785eb5615d1a7f6f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0x07b6eb6cd623ea016fcc3c8524b163d2b078b87c7372aed035b10603a110c95d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x956265ce42ccb77f149bc2c1bc6d6d6d6a5ce710ab806c7a96536bb0c2721565) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x538398517209c4de03a79c9a83306e65c231dcd48146face2d5bf483874dd250) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0xc945c91725e0f5816b50d5c9d0ba1d4751ddd0e247b846f3f6d7bb1b832c3a29) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x985406757b7cc7042990b17cf6340cf6540f57f2b193351939ef31a016adce50) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0xdf34d066954d373e2bcc81d12c41af9c5f6ab37f57667deb4614b8f0613e1f3e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x993daf1bfc4a87f18505dc10cc7d8bdba65656e60afee476605955df6b1e5404) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2b2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e' -storage - (Some 0xd1d327c5ea7170b5f9039c203e898b36ad288eaddfa69deb6025523a4663884d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c' -storage - (Some 0x2419efb5529421194baab6307d4816f01b1874d904002a23a2da9f3a91f3413b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816' -storage - (Some 0x61e1f644fe22f07f50d69990dd1e7e18753dfe332bc3c6d991a3525067fab335) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204' -storage - (Some 0xc1beca213d213ab5c90597c4c3ed3f11f8645be3260a165c4ff6a3f1aaf0fd23) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c' -storage - (Some 0x4f6b4483a9c907336fd41c015caa49acb1488a775e18d405b098089fcc524a2b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b' -storage - (Some 0x0d8c7706d90614925ee0f6d9226d4aa4091e7f3b35de615a47a09172912d0717) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144' -storage - (Some 0x844ea8cc8add4535c5e52d09739bb7d99da115530328e8b1589af633e0b35c63) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b' -storage - (Some 0x525de529e27917b883c90bbc9571e8349cfbf958652b9da45234cf8e208d0317) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659' -storage - (Some 0x993daf1bfc4a87f18505dc10cc7d8bdba65656e60afee476605955df6b1e5404) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f' -storage - (Some 0x54468ed06148d7a4df9a34506e5e256ef31a9b56c66d8635c21b90f7c8a5763e) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- mul.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- mul.out deleted file mode 100644 index 5e75603e14bb51ac2c4ff6057bdbf6136f269694..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- mul.out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0100000000000000000000000000000000000000000000000000000000000000 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x0000000000000000000000000000000000000000000000000000000000000000 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x87a25b280438cfc7b350b0e2d8b21f5f8408e9bdf090571dd3094b319ae86868) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0xa6c9f4c0d4cdce57a0b62ce3e72cec52eae0a3fcfa76c36bd21c7c86e99fc83d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x25804ebabb2d9780d1407a55d30de32e9f2b7adf3c8ea0f75ca1de81460d474d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0xb40894438c8e2fe116dcf7359f9749ae3acb10ebb4d32c6a728872c2a4d2b26d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0xf49b419a11a70e24e0e5709d6076ca94423feb999d85ff80225f17b013b27d50) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x9320b3135e9af05cf18d6bf877c5c1d23fdc0359698e1afbe695b158eac21368) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x55ab878b91343d6afd97062bd3fbe33773bb9c73959cbbfffdaa809407480b0e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x8183fcdd8c98e009e3f37fa8b5522e39c304c2879bceee0561d0cde46b28c373) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x3563756c4ff5c12b913114017799af8428e6e8a4ac9e58566539217602169452) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0xc1b67ece270e04902acf261eb093ace0a7d5e31767d8a7e8f5b0e9fa27738250) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x3e32303d8a7d5461cf652bdb31bfbcd57b9dac493154494636d13e39b42a7f17) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x768c7286874cc5348f7c3d0f3688525ce62cb31417b167d84447957f3933be33) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0xa926135de1582acd8aa4cbcafbe9fc2311984981900ab7efe694131f567e7a61) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x43069535a17a72feb7170f2fc0ed42662d866518a44dea0d1928b05a05d0f30a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x270733ecc8ad2646ebd078f69c26e86a8a11aa2911f358b2cfaec47c09898871) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x572ea10d39037776f9c830677be3cd209a53045f1736150964af2726d79ce93f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x6739e14eed742687df9c9072284495d7670da73fa6df7f71d55f1c085751b61f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0xdc456cc8b4d389dd1ce937982176a0db91214868e20559fb72cedf4cb535442b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x4a1e1fed85421caf61a7454d4527cf88cc4b2ec77256e7876777951dd6728d6e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0xb8cb27f9926d77d681bb886a65a91631e7305a08f4f2bc646d703b0dbd07d639) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0xf81b4b288001fe1541f5ecec5e70dfb268e6ec4a5d29afddc38cb5a05b01ee03) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x3b06b22f06e8cc99e262d8128c6473114e46f835628b01f70a2516ec32ee1246) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x943bfd1b7156b3183bc62e89627f23403a3980105e40259f663a6c88b570b818) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0xcdae0ee9d2e80ea223e22e74a42b17a3fda65d2a83f12f177fd4f3f15965b721) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x6f5de32417068ac83a058d76c42ead4aa0f2a772844b89c383fe8cafd8c23e42) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x4c64333f14e58d1f18840e610bf95b6ffd029eb7e9626a7de1317de07bc06b70) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x3071e1921ec27beee7c56aec7489cd72721ee17d27310f655a1b13fca7758704) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x6439143ec011e4b75ddaa6a9111a31522b31d3b4318f2a3e02c157184a8d990f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x95a1515b3a6a7fba11021b63139d0b1f6b5b3ea32c4f77a7e82d8b5c9206e900) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x6f1f62eabe0a4784ef32d940736b82946dfc5658a2b8d1e0c09bcd01945bed26) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x0fb5c6cdcec66d9e61822adf622581a3c3c2326aa15452022f85c6301ab6431e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x870fbf317f37e2ebbdf3e4a0cd821319eb3b8c159d42e7cafc360bfe42918959) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x5935c1ef5cded751a700599df9b247dfd66c2cdd9bd0dece969af31dd4db3e52) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0xa15e4850ea8a5be5f8d11cb8dcdd74076a13bb3887162a48c43f95e665800f53) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x18d4795bc198725f61c8ddeb04907180c369c39dae5deb6e02012f948f05c062) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x4d13486d53e43e63d4b05414379253c2d9fb2c3084737eb4295aacebcc9a9856) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x8ae6ee958f2c40886ea97f724f4d59f23d9afc69043024380d75c7a52c3e8314) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0xcb9c0565e3195b9bd7880cf92039af354648c93943fc9c597c7bdd6adba50f60) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0xcc314f9f215f1b0e511f3cadbc16fbc9a8be2957996768314e9667609176aa3b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x6b11aa1e88300282fc067020fc71e355158db40e2a65170370ea7267175ca307) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x3c9fd860f69f0338ef5e4bb1f561085ba3c6755e7c4d28624fe7d6473ff3f920) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x272721157452654bf0ae566d51db5229bf277791e42899530390c002035d0d1d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0xffc690cab4a872c0f0af7536f9af84c7a4a6012dfe777467635a0aac48e0763c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0xda5d746519732d2b289ab841d41708ef65e43ab1c9fd52b39146ad044f6b2a73) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x748bc12266cd016dfb56d8b976465e2595865a65cd220e54e868356ebc23594a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x0049d565766ae2384b2fd097c810ff5a52b49bf22b77b28cf8cc4ae94e23a625) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x808b140f1d708376ea5fda3d808467bd3fe6f6b749012270a9b9c0046165c72d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x8745aa87036abec609d26ca4d70d9fb6db78e151d9f20c6bc8aa579533e9662d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x44edfb33fc4ac9ef521419c823b6af02e53428e692542ebb7efa351b4fed096a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x1a215ae0252140eb36d367e414c74e848fa04008dbddacc4daecde4148a2231b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x89b312941fb46bf3ed66a5815ac5068f471d0ae7f18a3b0659c09bcbf9697f0b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x9acbe51d20ae85fd3bc40684f42fe7a0c7a5d95bb9836fa31439e7e14b26f416) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x6118124c521ebca6de31388b9fa83fcb4138a5a6087b7f94550efb86e61b2605) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x0da33e534705d29aec1569b0533fc84a9065e78cded913aa6b4fcb8e6dc78457) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x8ea43020b125a8cf25d56541757707f44756a34c48d2c1b1dd01568744eaa746) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x2309a557bf125239f17b1bf039eaeb2aa35fb86cd130d4a8e526499dfe5ac84e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x14feabe62d03bf84e49ca4bcf4f32ec9e69b647f65561c75e40ab3bcb5e8a24f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x564309a3de0fe9bd097f6ef5786e799966e2722a61cdae1378ce1842ae56d46a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0xfcfd6b65ccfc1ca0f76aa65149f89c8a37e9cf46d11273cc2e5a6a683afae51b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x411fadf092e7a3dc0a95926b58eee20dbb90761598fcffd4cf9cf67c4394dc0d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x1f11f44683fa6f887a4ee25769ada17ee34442ca28717d465850b37a12f4304d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0xbcc1b73b410363d82a7067cd12d0ddfda6f1d8450ca39fd5d466eaac2df42f09) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x76e440c59f34bc987a7808f66bac37b0ceec0723447ecf97193df5e0d5531b04) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x6dc4feb2b650db171d026794151af66ca5de3932a93012aa415f6ddb76428d70) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x3ca3d9a981d4692f396717a8ad3b439df75f71c084dd77bf061a400a7a8ecf36) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x495b461df06822ca749b43f1b9c7cfa94d997bdfc486c15b6a163ca84df0cc72) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x15245e97997fb4d7f77c958fb584b5437a70138cb25050d205d3e7ea7adf742b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x2d9334cf8067eac72250f2f542b210143fdba091e3284552f65ef9c529d5c050) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0x909b9aa234ca8c415fc271be5efa6580ac08fa507dfebc3b0fba8303c54d5215) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0xbbab3f2a73ec15c1524192c00727c746deffddc1f96a2475e2d30cc94882e82b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x6806200732f39ae9263a93d4770846aeb6984fb3043d7564ecd1a29fc572e33b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0xa4eb13e8a97e2b5c0923e38d20e42d5fcdef5f0fbe4794e89ad0f4cbab071c15) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0xcccfd0286d9796efd1c3a3152050358b8e385198ef3d8cafc4a702ebc925bc41) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x5573629a59f3745c4e37746f40ffce48f5d262b6b9f977e9a082a51da639f20a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x1a55a49219259dfcc5f43f108c2f378f91dfab8b0eacb39a4c7d5faf5d28dd3c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0xfb794df3d54d535862c33dc4c9fd44e7dcaf63947c9222ba149edb9c5e80590f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0xe362cd13cbc3aea9117bc1e5133b29b044a81d4594daeab05a8ad910e9674c06) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0xa7d4fb01e871e9696ac6b4352942fe7f0e4b82285a5a4340834fb8cf1d16bf6b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0xe8e9a92d243462323ddc3fac7ea8f620be1f4ea5cdfcc28c4cb2f3e944000e72) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x5c5931083e04dff412544ee5c8f2eae5dfb6f85327a348c1840be1f2228aae4a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x3cab64084c5cf930ee67515efaa9a4ff3652d83b50c21f84b4b18cecc82cd727) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0x3664d4c448a9c4bf1ca65a6e6f559f9514007c2496261bc4edcacbb53abe7c70) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0x5dac7534752b142ad0a4454ff17b06aae01d001e71968cfd270a6ca7eeb6986d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0xf7976f089a7b8fa570d983e54563734c47d584f4699c4ed4b70b4e0a7b278772) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0x415fca05fe5f8a5f1f8d1b0f98e2ea3d825fc1c6355365df9b45c4c39d8e8c33) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0x5f093c21f58d3b872011c9af9e916b2f7c8b78719388029fe2c0a184671b3023) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0xf512cb0c62dd2247fac6318a8e77c5adfe40724320517d325213ca5742263148) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x34d90ed392f4abad17b679356ae63f6a55084b530c18a3a88fd75365548c8c25) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0xdc3888e1ec70f104d18c09e63bb13c341738fbc20a416a8b68a3710878ec2c45) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0xd2c3ef335391513f05b8882585542773818fcd7db3b34f031f8ed422627c3d44) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x4dbff329ffb7cf3daf857a397ab121e80d1064f1bf07279c0715ce04eb8af625' -storage - (Some 0x8122686c678dcbc0a302f9d75197643108207fd79d8e911452f22383af064a64) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xb0c5816556729f95aaa68be2fb34eb2edfd3c9ac98669596ca9f262572963829' -storage - (Some 0xf46d74afcfe9036a2dc59ade3e33ab2e0fdeca7108527907f9a87fe17dbcef48) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x4da504775fa6efb66a94b0c74b5b9c80920483c32bf016807dae87c705d0b805' -storage - (Some 0xcad3c31ac0d68830faa65f55a7e812f2cf8ae2eba8f15e94d51f859d46320815) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x719eeeee8ade493ac3a0a3a742a9cee423c2f6790f8e8e448ba4618bf4d5b80f' -storage - (Some 0x5c9a4dc7dfaa30973a60bb1792b062bcd93ba8715d50b350185d957af0852300) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xa058f1d8283834dfcc9e6f76d5f58172faddc3a51a16e5c92823da4fca890742' -storage - (Some 0xfbf6f4100924d0f64653cfb859bf036268dd678fd5360e67140194ba8e90ba4f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x03b0af5909feab04f285e4470dbae4a19e9a23c9438e2a57538433326d7cce27' -storage - (Some 0xeff6a7ab1bcf078ddadd2a4f5dcc847951f475852a30c585e53e02a8919eac47) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xf49df98960a59c8d937bada91f7226fedbb5a02771fcce56780d6a0168186e01' -storage - (Some 0x44ac9ab247ed628c8e96daffc075f7cb3925effd568e78a7f691629fef28df3a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xbeb56d8150689b21e164f70cdbfd81e72e0071b6d005033aa30dad5b3656f924' -storage - (Some 0x05fb8adcfb2026e2c9609c7edcbfbd33f4df44cb80a2274bc8fdd1a58cd4690e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0x3867092164442c26405ab5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532c' -storage - (Some 0xa2681666d2a92b8b4268bf287e81e274ef196cf93de96c25dd3541e61c5cc364) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_fr.tz on storage None and input 'Pair 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f 0xd008362943c1237f5b297f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f6126' -storage - (Some 0x45d081e131a285730dc55f7e347a56cf6f07236ba44bc93af9423db057227560) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- negate.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- negate.out deleted file mode 100644 index 596d0837a3e2a54137b3f920e9a5fba046637977..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- negate.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x0100000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x00000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x0000000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e -storage - (Some 0x5a4f1f234532fb1c75a57c07fcc944d4d13c61870b685f62c865136bf196a045) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c -storage - (Some 0x070a5832dd0f4ab923ff61f7bc0aba1a634d7b5be60ed32a87b0c56aa606e757) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 -storage - (Some 0xca4150a331817b521ed37e975c3452f20928f100c04b367497e71255d0ff745d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 -storage - (Some 0x6a647cc6f282311da5a38163766590f986009451c404e7f1d994c1b38c092b6f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c -storage - (Some 0xdcb7026586da639fffd4fb26dea8865ecd1c65bd8cf6284879f25c066ba7de67) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b -storage - (Some 0x1d97cfe1579d5740116d234e1442c812706fceefad5861c0996d360953253408) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 -storage - (Some 0xa7d49e1ba5c6259da9c3ea1ec7b71831e1c3d9e1e7e6149cd0f06e715746cc2f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b -storage - (Some 0xd8c561be4e2a541aec830e6ca13d2a82dd9153d27d0b26768ed9f8ecc3c53708) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 -storage - (Some 0x91e597cc3459e4e0e9473e176b3187dbd236f744d838dea380b4729c7834e71a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_fr.tz on storage None and input 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f -storage - (Some 0xd7dcb817ce5b942d8f0ee4d7cbf4aa9c8b4a54de24a17618676fd5ad6e54b254) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- store.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- store.out deleted file mode 100644 index 1c5640386dd0972254a870722a2813a1e349d084..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- fr- store.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x0100000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x0100000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x0000000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x0000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e -storage - (Some 0xa7b0e0dcb9cd04e389b681f806da787f339b4082fc6fdad07f178abe61104d2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c -storage - (Some 0xfaf5a7cd21f0b546db5c9c0846990339a28a26ae21c96608c1ccd7beaca0061c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816 -storage - (Some 0x37beaf5ccd7e84ade0887f68a66f6b61fbafb008488c03bfb0958ad482a77816) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204 -storage - (Some 0x979b83390c7dcee259b87c9c8c3e2d5a7ed70db843d352416ee8db75c69dc204) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c -storage - (Some 0x2548fd9a78259c60ff8602d924fb36f537bb3c4c7be110ebce8a4023e8ff0e0c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b -storage - (Some 0xe468301ea762a8bfedeedab1ee61f5409568d3195a7fd872ae0f67200082b96b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144 -storage - (Some 0x5a2b61e45939da62559813e13beca4222414c82720f12497778c2eb8fb602144) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b -storage - (Some 0x293a9e41b0d5abe512d8ef93616693d127464e378acc13bdb9a3a43c8fe1b56b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659 -storage - (Some 0x701a6833caa61b1f1514c0e89772367832a1aac42f9f5b8fc7c82a8dda720659) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_fr.tz on storage None and input 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f -storage - (Some 0x2a2347e830a46bd26f4d1a2837af12b7798d4d2be336c31ae10dc87be4523b1f) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- add.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- add.out deleted file mode 100644 index a2c91722fa80319eb3d39c09542cee9a58fcda6c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- add.out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x0572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x02bbe75ccfac8903cfb203d8aabe7973cf45c4dbb9505242cdf0db5ef5510661bd9fe29e45108a2ede89b6f91698313c038e354ee839e5b3d4e4cf89a5415c578395396a0fb3e170d5ebfe8443920ce5a237f317a7fde9750aeeaa6d995cec23) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x0b0076d6ef76e28344833ea759697fdd353b754a7207ae0c0c3ae5465150daa84bd888116b05ae14e922b469cbcda95106c1843e97627707d4ca3502fac07ca61de50f24118714ba6114f66bd7a2a3eb83f98bc92d88b6d9607159a57e8de5e4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x1928666d52b29e0355aba253192611a77283b6f028fe4b6d49fa88ad47237fad9228de9acd50c3f2b9f4885efc08673406a8e7278f95030bc2a1804fabb589643cfa58dbeec752c516c799e108c66b879d60ffabfd9fbf4f05c5e4974dd05de9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x16fde910b5f003049c80e1dc46475b65bcf2604b25344c6808b57ec25fd4352ee64b5bf5197ab9d8ec274cea8096d93b01c03ca9cf4a78b818ca4a08393963d9f86dfbac64e3881d1220241ecc7036d0906004a56841cc0336e24d9bec59a569) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x158edd43e9464a9e18497aca8ff36e247c1e155dc5eb233da377d2b908ad3a7bb60a30845c21f16b0d4965c301dc8c1e125faf41e0c80a9e5ebd98e0d88c3d6d0ac897dc6d37942a239ef970dcb4b455b1ce0471c047427fc46ef53ab061a96c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x0c3901b112af7f9797fc9cf71cfa90a7951c250b5dcfa235d2d6cfd9c416b1496d461d5e08645aae731d1759e255e72f0434edbfb503c50dbd75a13a6f50f35a653d6971335e4767cff0bf5a9f0e554253d821c6b0cf96a299f7d7f781586208) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x144e5918959eb7c28dc9117210e11ed52b7fe1aaec4655a9b41b87188595c2636c33adb7ee156a63ce1f40c7cbf4cf8712216b40366ebc2a1c5a284a5bff3804f9dc698756d92e10f5d72bb51150ab2dfe3a5ef09eb9cc699a8cc87d4534da85) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x04e38621e3c1a335f0a6b75b28fbb79fe08970315a5abf13a23d7670c0ea5c323f3d329ffddc197a9a5ec2bec93512a20687806bad5967587ece2bc63e23f29adb5902660a559ee706a3a6d587d035d184504a4b9e8a1dde7106e6d179d4b441) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x0e69e0dab929d1f5ead3cebba16e0370f3ef18a72b80e2704dcff600d8e6c11b84d01c66ff7cec576ffaefc49a74aff00cb9d3d2a771815120ed332d888d444155234d0047af62b278ac6494b80753de716ecdabd4e77f8364feb65035545c6a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x174b443090acd24b63f00bd9ccfa4ca4f07c82ab80b3d02c8436e2bffdc6c8f6f058735ca48187fec910d53f3207c3d0050187821dd662d4f7680ce6eea608cb10164d3267ce217027dbdab08821e5905bbbbd30077a2812247ec251f61815f1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x02bbe75ccfac8903cfb203d8aabe7973cf45c4dbb9505242cdf0db5ef5510661bd9fe29e45108a2ede89b6f91698313c038e354ee839e5b3d4e4cf89a5415c578395396a0fb3e170d5ebfe8443920ce5a237f317a7fde9750aeeaa6d995cec23) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x0c29e29764d169fa7434f1cbe450f275cbafa5624a925093b56db64c5eb780993f74181407e521bcacf6c403966667aa11b9d76b42e519d2b094b1236875e1264354a7ba27ea590093b8cde9bce0835d84c98fb554d46590bb9ddbdaa3896d35) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x16fceeacbaa0201169b7cce9644b848249bd24e73d59df92315af1308718e771fa54708cab5c4509ee59c2688766039c091485a68d271b94f59014e25178102ca52416b4ebc9252f935b4dbadc44ec0858e3d6f20898b9fbfece25153c961163) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x19777d66b554119010e98ebe0a474ab68c58420f1d23f7b940e0b2d394c04f2655da207651543e883a8d545de911225f0af3262fc02c93b8fbebb5a04b5c1794e725c208ea53c96e51b42be25af28868c6951b267e699413afc30835d97a7891) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x09a09f7ba0b93860f16afc7f41a24eaf6f04be5c537a77acb31b2d1321ef90a3aafae9e3e4beaf9f9c3a8ea9b59204201105c73f6ca2b7414aae29417988c3862bb445ca8b7635d336c7caf560c58e42d76f99694bf8d2b3f9ec4004e2edee77) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x06d42ca0cf11ff62839ab18ca3df1170ab4029a1249c618ecc34f7856c549139d10e4242a85aa8c53679e35095d5c1c20a1d007b8cb6cc308834f9c953b18c62ff1709f12471893794145272930cba5ab4188f6950110dcce78b7aa11a77be9f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x05e73bd48731387f18857ac832af5b42779c0e8ee325af3637c28d311db1c208f46ccea104ab0d6d591f5430e8bd646c093718124d92beda4254f02a750b92f87af634e79983e893d3b931a27896a223fc6353a529226e87866eec80f4777666) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x05e5bd713e2b43295e9b50784b2416dc7431f057155560b6b260fc164676f5b3a2bfe84061a12ce5c31069aca695f1790354f267c52a1c3ba6601390e4436fd369194abeeb5f30cab899107cc830179480aff5d138d327a9fc1006a31837b0d8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x03773e554ec120b47b48e37dab64fa0efc22d6a3320ca9aa75a9e0d2d52a4f15599fecd4c9e6a7615ef14647720defb516d0ba1fffb303896ceeb44111b78d64b966326f12cf69692f54796701c13dcd605c278cddc15289c9f9e4bec142b167) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x075d7888f555f9e7eac62ee7b07aa7f8ae5118ea5cbccbfe9a116ddb9ec21c7dad3c29a8c4ab1bc765652d96f171ef5103ca9d795022086b1faad91136592663b8fecb6ca32610c91dc4ef5b594d4e66e3fd737ab8091d917ca240ca4c5f14cf) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x189c9031a7c9fa23f5d733b19353bc60559c75d3008eeeb635d72225e6c3ab8a4e6adf19353f41eebb2fbd3b9aa6ebea18a9fcee2568b75d6c47fced67a88749f512592dd0b3490b31c8a9c6f8c3a89e66bb2436ecd30a4454659304b382bc16) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x0b0076d6ef76e28344833ea759697fdd353b754a7207ae0c0c3ae5465150daa84bd888116b05ae14e922b469cbcda95106c1843e97627707d4ca3502fac07ca61de50f24118714ba6114f66bd7a2a3eb83f98bc92d88b6d9607159a57e8de5e4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x16fceeacbaa0201169b7cce9644b848249bd24e73d59df92315af1308718e771fa54708cab5c4509ee59c2688766039c091485a68d271b94f59014e25178102ca52416b4ebc9252f935b4dbadc44ec0858e3d6f20898b9fbfece25153c961163) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x12daec20770efc59b6dfff9596fadbaceea1e53480256a98cdc5901222631a861a35681dc13e872aaaef3427cc1b9ca3011f543680da504e4aef1a948afe8f616429ac93d4ab594f52ab8ac894fb12bfd68c04592bb6b479966857c503ee9800) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x13009650f609243bda63f99d6b239e1867a1e97881f1a12006c7c40fa6e72ac84395968ac04374a781f916d9d7115f4a0e8baa9d7e11075cba1eb4fa63070f9f6f001424055f6fc107d4dc0d4b7add882281d5a6ae0a7d903927b79376de813f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x01010ce9f58f4893b1a4cc99ac6409e521864ac0c4c8fbef07864df6badb7bdee4bca2cda802a056337a327db27acceb0211256aa48401dd761706de9b9155515d170d93d400d9bc9753d042fd9aee4fa41fd060e9dc8d491f54acb34ebe8fec) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x084dd4489fa10e3470501ff825805ab41c7a889c1c4aa6acbe66795cb5b628a5c05065ca29fd6b8bfa04d62a0fe0b8170881da608bdc6089b8ae9de6fb4b996d68487476eeb8dad2606ef55ead4008548213c276c88fd1c7aff23cdbd69379f3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x0e3314e3aaeece65f3a6d864ea763494a71df97b65606e347552a338b899011f3531173b4c0a37d215d5452eda39915117c0f4e520fb6dd38000e4b8cd19986e2af235409e25be2df2bd8024beff25499f4c90478eb8491346ee13afe078388b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x0a049b6b2bf86d778d6666ed819c3147f0aaaa28315e7b1e1b904bc12f4a8db4f50690d68bf2250c019449e15d126b9a080f2870588412063535032672fe879daa966e6e40294e9d29a6ce4a6b0be3f26b0a1d032d762a7762622bbe749726d8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x0ea4ab0585e9d531d5a2affbb6e9d14da85dbea5e5ab78835961c699f5d4d1de5cb761d1cd07771cd8e56dcb977db07507ada85f8bab0a7aeedd85a61bd84bb505ed3c136c9f116cca8ca77a164502493599b00f3d0ad722a72c931f81ebedf1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x03269e2de673af093ae911c6ca36338d121a06034ae305569b43878a533206d713a15bfe25f2f69a356f023415799ed805669e11c9509a68fa752847a2691e8b66a8cd2acef8e9f8a421d56985fbc5610f625a926a3db22aa2f3b9598e3a5d4f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x07a125ff7730fbbb0a0b009ce801ceb5af3b26a398f92d666a6ba086589401d5c9757abaac52da844bca04ff1a06a6370192af3fd6f36c1da7ca65c3bbab1d7f94976041eda19e5c796a11118c7c53fa73829b1128d5ba0824e29deb6183c530) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x1928666d52b29e0355aba253192611a77283b6f028fe4b6d49fa88ad47237fad9228de9acd50c3f2b9f4885efc08673406a8e7278f95030bc2a1804fabb589643cfa58dbeec752c516c799e108c66b879d60ffabfd9fbf4f05c5e4974dd05de9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x19777d66b554119010e98ebe0a474ab68c58420f1d23f7b940e0b2d394c04f2655da207651543e883a8d545de911225f0af3262fc02c93b8fbebb5a04b5c1794e725c208ea53c96e51b42be25af28868c6951b267e699413afc30835d97a7891) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x13009650f609243bda63f99d6b239e1867a1e97881f1a12006c7c40fa6e72ac84395968ac04374a781f916d9d7115f4a0e8baa9d7e11075cba1eb4fa63070f9f6f001424055f6fc107d4dc0d4b7add882281d5a6ae0a7d903927b79376de813f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x060b5432626c3318aa1658c51be62d04f06c1f26184b384756644651c0a1c31a60c4b6de726b2fce757d3bda50b1225a0cdd5db334f75033fb58116c38d15005f1bdf988de6d3a9837e683623c5c1b751740158f44ab900d9ec227b9fc901f11) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x02bff2e129aae3d00ba3ba6906707816043e2ffec02acd47304b933713e545a350bbda8b54bd00960d804e0bdf6413b8181220b684d56b805cc6d5fa67b38d7b13618b813b0c9ed0d381101e4a02bc4268fe048f46c533217992169d8d6c6948) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x1821a5229b04055ca0a65a61fe9c5b62e2919fe89bad68f3521f82f2ece7d08481c1da0d3f3b78c7c38d16aeca5460690ec2fe6d1631f266187d7e252e9c1933cef416cfdf2fe353c19f3adfd5b175de090efe941bc6c7d31a92601a6c9762ee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x05811adb3715612be05d3fec660098749e265527678f91ade2d28d74736f2d74c9e83634853749b43c0412b5c41f5512145396cb258907d9177c1c6618810e309015bc55dd1047589fe34b4bc54bae1b3745c5ea6466c11c611041934d62d91a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x07499c01c066da94c70ae0c883d59339098e2ae1c265020508486a04c17cdd59b6789dca1134297a2458307737cc65eb02bf943d425cc75ecce827e2953cda3bea4c96d87a2c4ae6f385024c824a24793bc644ead2a77179075b51db951d8692) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x18f82e4740dc20cc275cf1cc7160b13c62a4c757df9ad698e7f5df5fbc4a1118a9e453c92dd67472c3e5c61a3d19a5aa102691e5125cb9ddbfe8d13f9975c5299612e534f2a83c35aa7ceba964573fe371195e741d270392c2be713bd5329e30) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x145c9be227113316ac8e8512128619b41c45a63ab20edf62f53daa3d3ace9240174bbe9f46cbda102bef7b897568c0fa00f54d7771e7fb5e93c8c75b4576849fc1172351336db0dbe89a4cc1eec6847542ca8b1ce0da4e86d2f3e5d830674bf1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x04fb7ad2c096670cf3375d148b32c85ab1a6c4c6ebd35abd5ad2ae0a8d8d35561ca4a5d4b3fdd72f3184a25b1769058b0f4b9f0e50c0c70e2d0733ec6be54f7754fd134054d13aa67b5bb86a935b64d29b994340a5c8c2c34fcb6cd5ac3f2b80) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x16fde910b5f003049c80e1dc46475b65bcf2604b25344c6808b57ec25fd4352ee64b5bf5197ab9d8ec274cea8096d93b01c03ca9cf4a78b818ca4a08393963d9f86dfbac64e3881d1220241ecc7036d0906004a56841cc0336e24d9bec59a569) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x09a09f7ba0b93860f16afc7f41a24eaf6f04be5c537a77acb31b2d1321ef90a3aafae9e3e4beaf9f9c3a8ea9b59204201105c73f6ca2b7414aae29417988c3862bb445ca8b7635d336c7caf560c58e42d76f99694bf8d2b3f9ec4004e2edee77) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x01010ce9f58f4893b1a4cc99ac6409e521864ac0c4c8fbef07864df6badb7bdee4bca2cda802a056337a327db27acceb0211256aa48401dd761706de9b9155515d170d93d400d9bc9753d042fd9aee4fa41fd060e9dc8d491f54acb34ebe8fec) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x02bff2e129aae3d00ba3ba6906707816043e2ffec02acd47304b933713e545a350bbda8b54bd00960d804e0bdf6413b8181220b684d56b805cc6d5fa67b38d7b13618b813b0c9ed0d381101e4a02bc4268fe048f46c533217992169d8d6c6948) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x171dcc4142881ccba470029989ae3958da0be0249ba098f4118c512c219e9f1c6fe1b4e33b6a27cc0b9ca676747d469b06395941ba7dc2d3c5be2c0d785d13f60330cf06f0711091ec0409f6bbf0125efb70a2f67f4a4b51b2b32f1b6e5c7a0b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x0fa9c7b81257390a7476d09ecfdbb7e30d6950be653969b30dcfd7bf6e2bac21906292564a60aae113c1588e7021e0520d472fdac10ae6568cb57809b4412a181e9cc19eb48ab35ef2bdf738e682360d3f97e2c94229da4fea9a2f4eb0662de8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x02273bacef69b570c2cda2f45662739444e0e77d8fb8034af3fdb178e91f337b5972d6a4878cb9e02750313ce832f24502ecfca2d38e0190fe68fef1e7a45aa97f5f3e3e1404de411faa1cfa0b7debc435e2a3c3db0d047431ab49381af5c681) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x1233e8755ad7ef8c6fe37abd8322e15a34270e84a1931af3225f8ee1ed0761fbb9059662c3f86fd91f4fa3b0aea7e67e063ffb0d3ec9593365c7c16a3f1589a56de59200128f0f031a51165a6484f35a49dc8b9189bba6976079ce19e5e35404) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x0a86684fc72a4e2dee49a5ea383178e3a795bda53cd2af4cd428374c62ed64d403dd2d8b90a9739d682edf37b26f1021047a441cde9b6b3c1839f4b8f9c07a443ca35d44e878a04609dedb71eb056ae840862fe9e933fce4b894a96906aab066) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x029aaccc4cc78866eadd686825a2b48bf98b59f9c827c84d6a7663c20254f564c9bcd84bcad0ff1f6d0dcd96fa59ea0b0e47259745ba95228a9813f05942cbbc2186012eb63e23de41bbea46bc1cab64f80b9e1041de98f49c119df14f001522) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x0b68fb08cb23c2087951474646488c4b8cc53e8b2355243955ba35ee10a154a41893978a43e25ebd19aa279b2374d0c10c15cb33448a95c9fcf9ed8171ebcbba030ac7d07ec5e391a937f3b0bd6f469175de8c13a964667d85cf6031ebe94b56) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x158edd43e9464a9e18497aca8ff36e247c1e155dc5eb233da377d2b908ad3a7bb60a30845c21f16b0d4965c301dc8c1e125faf41e0c80a9e5ebd98e0d88c3d6d0ac897dc6d37942a239ef970dcb4b455b1ce0471c047427fc46ef53ab061a96c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x06d42ca0cf11ff62839ab18ca3df1170ab4029a1249c618ecc34f7856c549139d10e4242a85aa8c53679e35095d5c1c20a1d007b8cb6cc308834f9c953b18c62ff1709f12471893794145272930cba5ab4188f6950110dcce78b7aa11a77be9f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x084dd4489fa10e3470501ff825805ab41c7a889c1c4aa6acbe66795cb5b628a5c05065ca29fd6b8bfa04d62a0fe0b8170881da608bdc6089b8ae9de6fb4b996d68487476eeb8dad2606ef55ead4008548213c276c88fd1c7aff23cdbd69379f3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x1821a5229b04055ca0a65a61fe9c5b62e2919fe89bad68f3521f82f2ece7d08481c1da0d3f3b78c7c38d16aeca5460690ec2fe6d1631f266187d7e252e9c1933cef416cfdf2fe353c19f3adfd5b175de090efe941bc6c7d31a92601a6c9762ee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x0fa9c7b81257390a7476d09ecfdbb7e30d6950be653969b30dcfd7bf6e2bac21906292564a60aae113c1588e7021e0520d472fdac10ae6568cb57809b4412a181e9cc19eb48ab35ef2bdf738e682360d3f97e2c94229da4fea9a2f4eb0662de8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x046a2790add475f1fe065066d88b478ea5d288ec4175776bffc94a2ed41d749678d54ac91b6e152e207d03eefabd0569029f74862ff0c85d4e7871b32e7b08701e4f0961e4ab0cffffa52895ade51062358e8ab8f78137631eeb17d52a3d1787) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x01efa5d893d4df2decb69d582a64b701736f942670ee214bcd798c2ace462d3423c4cc5668575beb0348ed27e904740f12c381599e9b0c38e56e97dadf861ca1e298d230a059365b30df2e49903131b1176a914a793c5a957675acd9b5abec9a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x047b382113356f5bf7585f739104668f89d0cdedb89266c151aed5367a8f322c6e9912ff8aa653574c1e406dcaebe5bd0f6bb00734420c448042fb5c13051159614919578383329ff0696ac565562fdb9dc5854122ef0036561f67721b3c0ed3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x0ffc615d86d835dddfce2847aefa2b9356560d0c13df0ca80902fd3000a2ed6857f784b26143d2e425d959801346633b0a9e1097650528b9cf99d91adeb41957560426cc7adab6e45db39d5791c35c6373aa333772943efc9363661abc2c8315) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x0f2239a8444b783758f3e5d7873f05b3c939315918986421a02241a2ba2fb8e7de4c193483f9bb9989e328f3e4aa026f0a1f359cba3e91c5978b66e4c0ca02e5c6966e5173aeb942211351ea8ab59b73b9da7e49b9ff602299e3553d2e6024f3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x045dba3dc8f9e481ce42fce5a8f07501d1faada257439f987273acabc0d3aed00e4cc3948fae082ed24cba5b12b54e5f0d55da0aec1136a24464a5f8f1ac8d58eb893ba95131f2fce03bcb35fcff40993f48b5aad6a80aabeaf0b9d8d7d957ae) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x0c3901b112af7f9797fc9cf71cfa90a7951c250b5dcfa235d2d6cfd9c416b1496d461d5e08645aae731d1759e255e72f0434edbfb503c50dbd75a13a6f50f35a653d6971335e4767cff0bf5a9f0e554253d821c6b0cf96a299f7d7f781586208) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x05e73bd48731387f18857ac832af5b42779c0e8ee325af3637c28d311db1c208f46ccea104ab0d6d591f5430e8bd646c093718124d92beda4254f02a750b92f87af634e79983e893d3b931a27896a223fc6353a529226e87866eec80f4777666) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x0e3314e3aaeece65f3a6d864ea763494a71df97b65606e347552a338b899011f3531173b4c0a37d215d5452eda39915117c0f4e520fb6dd38000e4b8cd19986e2af235409e25be2df2bd8024beff25499f4c90478eb8491346ee13afe078388b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x05811adb3715612be05d3fec660098749e265527678f91ade2d28d74736f2d74c9e83634853749b43c0412b5c41f5512145396cb258907d9177c1c6618810e309015bc55dd1047589fe34b4bc54bae1b3745c5ea6466c11c611041934d62d91a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x02273bacef69b570c2cda2f45662739444e0e77d8fb8034af3fdb178e91f337b5972d6a4878cb9e02750313ce832f24502ecfca2d38e0190fe68fef1e7a45aa97f5f3e3e1404de411faa1cfa0b7debc435e2a3c3db0d047431ab49381af5c681) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x01efa5d893d4df2decb69d582a64b701736f942670ee214bcd798c2ace462d3423c4cc5668575beb0348ed27e904740f12c381599e9b0c38e56e97dadf861ca1e298d230a059365b30df2e49903131b1176a914a793c5a957675acd9b5abec9a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x052472b1ea65d3e7936a4bb032cbd9e5119def59e5e84225746f45353f63cb6192e03d5891704672cbe064b03934f01e19ada310f6ad2b47103929fb6220bd22fd183ab58234505f8deed6f282b2a0570fa2361524048acf6c9291af0826c827) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x063129a2aaec9991ae5bf8324bb697ca1c490ce4fdfcd167a760e3088156379b4a9cfbb422707c52d6cc091501f082ab0e106951f452f0302bfcee0158da135ab5e5bd773910b0202d6d062ce92577dbe978603c574afbf462b196350a6b194a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x1025135f27293afbf772034aca006b89058660521923695d76a4ff1e5b3d54e0f7bde8b9b21900351cfc8e713492dbac124b0736330a323f446cce047efbc42cf5d46dc9b6dfded90161667b69b14f33b42eaacce04e03a1597e890aa29feb9e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x171b12075ea694d62f6100b26b0f22d72ace085eceee2d60e449d18f57e639e73c950b04c995ee9abec90184062071a60d3603eca9e4e216de19d91786ece6ec2669242ee9178b4cef7c0bafb14f16f2a78323f1cc51b91a9eade8cefaf59ffc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x0bacdbd680fd96840607b2df89d3ee01def1d51b91a106a99d106b1538b37f62c6c8333919fb00df82cfba4c6469201905010561f08cbc732763f300a4c461b6938224870fc97eb1bebbdbb63f3969cd5fb4b4bc1fc300203749433e5ba71850) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x144e5918959eb7c28dc9117210e11ed52b7fe1aaec4655a9b41b87188595c2636c33adb7ee156a63ce1f40c7cbf4cf8712216b40366ebc2a1c5a284a5bff3804f9dc698756d92e10f5d72bb51150ab2dfe3a5ef09eb9cc699a8cc87d4534da85) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x05e5bd713e2b43295e9b50784b2416dc7431f057155560b6b260fc164676f5b3a2bfe84061a12ce5c31069aca695f1790354f267c52a1c3ba6601390e4436fd369194abeeb5f30cab899107cc830179480aff5d138d327a9fc1006a31837b0d8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x0a049b6b2bf86d778d6666ed819c3147f0aaaa28315e7b1e1b904bc12f4a8db4f50690d68bf2250c019449e15d126b9a080f2870588412063535032672fe879daa966e6e40294e9d29a6ce4a6b0be3f26b0a1d032d762a7762622bbe749726d8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x07499c01c066da94c70ae0c883d59339098e2ae1c265020508486a04c17cdd59b6789dca1134297a2458307737cc65eb02bf943d425cc75ecce827e2953cda3bea4c96d87a2c4ae6f385024c824a24793bc644ead2a77179075b51db951d8692) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x1233e8755ad7ef8c6fe37abd8322e15a34270e84a1931af3225f8ee1ed0761fbb9059662c3f86fd91f4fa3b0aea7e67e063ffb0d3ec9593365c7c16a3f1589a56de59200128f0f031a51165a6484f35a49dc8b9189bba6976079ce19e5e35404) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x047b382113356f5bf7585f739104668f89d0cdedb89266c151aed5367a8f322c6e9912ff8aa653574c1e406dcaebe5bd0f6bb00734420c448042fb5c13051159614919578383329ff0696ac565562fdb9dc5854122ef0036561f67721b3c0ed3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x063129a2aaec9991ae5bf8324bb697ca1c490ce4fdfcd167a760e3088156379b4a9cfbb422707c52d6cc091501f082ab0e106951f452f0302bfcee0158da135ab5e5bd773910b0202d6d062ce92577dbe978603c574afbf462b196350a6b194a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x156836c5f3a270fbfc71786441a470a2737aab92b3b6b3027607865cefa3d10c2a5ee366ec1db598e563eca041ebec621412a99776342cd4defb3673f2b5fa0d3064255d74146c7455e55d9a6e14198125b95c4cf7cc0dfbff77c39889c610f1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x176f5f1f57288e4b133cbff5611b8028b46460f2084e004ea6bf1c3e33911cd2c020e1f7389a99e8f4db30e881d8f5e00773aadfff8429fd161c285977090b5005e136748f27b465ae89e26295906df33227395fad4d99b466c7141e94e8c293) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x02c7a78eb4807b538c0014ec5ba44d58780d6e700ea54ae45b3866dff8c4aa668f845ad91f6a16720d865032b5c71add19843b1f0169a987c279f4f3e3955b4c4349227d33981748b28f604a8aed9471fd91272a157b55b7ee71ec23ce6db02d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x0153465b9dc8227efd8f18adce0ba1eabc17cffd7ed627456c537a582fead8463806ac459981a96bd1cb99ba58c2ebec1835a685a9a27928162d57f51e2b52c166c640bb9bd2e72c9a0033d4e2cb016d041b1b1304ed40cdcad66b3d963e5aeb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x04e38621e3c1a335f0a6b75b28fbb79fe08970315a5abf13a23d7670c0ea5c323f3d329ffddc197a9a5ec2bec93512a20687806bad5967587ece2bc63e23f29adb5902660a559ee706a3a6d587d035d184504a4b9e8a1dde7106e6d179d4b441) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x03773e554ec120b47b48e37dab64fa0efc22d6a3320ca9aa75a9e0d2d52a4f15599fecd4c9e6a7615ef14647720defb516d0ba1fffb303896ceeb44111b78d64b966326f12cf69692f54796701c13dcd605c278cddc15289c9f9e4bec142b167) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x0ea4ab0585e9d531d5a2affbb6e9d14da85dbea5e5ab78835961c699f5d4d1de5cb761d1cd07771cd8e56dcb977db07507ada85f8bab0a7aeedd85a61bd84bb505ed3c136c9f116cca8ca77a164502493599b00f3d0ad722a72c931f81ebedf1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x18f82e4740dc20cc275cf1cc7160b13c62a4c757df9ad698e7f5df5fbc4a1118a9e453c92dd67472c3e5c61a3d19a5aa102691e5125cb9ddbfe8d13f9975c5299612e534f2a83c35aa7ceba964573fe371195e741d270392c2be713bd5329e30) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x0a86684fc72a4e2dee49a5ea383178e3a795bda53cd2af4cd428374c62ed64d403dd2d8b90a9739d682edf37b26f1021047a441cde9b6b3c1839f4b8f9c07a443ca35d44e878a04609dedb71eb056ae840862fe9e933fce4b894a96906aab066) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x0ffc615d86d835dddfce2847aefa2b9356560d0c13df0ca80902fd3000a2ed6857f784b26143d2e425d959801346633b0a9e1097650528b9cf99d91adeb41957560426cc7adab6e45db39d5791c35c6373aa333772943efc9363661abc2c8315) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x1025135f27293afbf772034aca006b89058660521923695d76a4ff1e5b3d54e0f7bde8b9b21900351cfc8e713492dbac124b0736330a323f446cce047efbc42cf5d46dc9b6dfded90161667b69b14f33b42eaacce04e03a1597e890aa29feb9e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x176f5f1f57288e4b133cbff5611b8028b46460f2084e004ea6bf1c3e33911cd2c020e1f7389a99e8f4db30e881d8f5e00773aadfff8429fd161c285977090b5005e136748f27b465ae89e26295906df33227395fad4d99b466c7141e94e8c293) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x04c868cda881721aa9476ef08b428e4c9cb3167d54dbcb34313df677ede9d7632a4dc56616f2b4d7283e6004972dcaa11957f89ed9bceeac2e9db5e2ca282e342086214f54d7faf2c3bd7d198ffd98bd95f2e713d6f95d2bbea40404312020ac) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x0a0406a6dfca19affbf8daf605873eddab784824015f9e4689e73fa86daa39771d3a4610f9df95fa322f55b322344e930dbf2d00f047bad0aa8d3054bbd000cc5ebef0a2843e3f5ff555042c232463f2dbd888f5c113b89fd378445b57f3a898) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x0903f27e56361a1bd0e8e4badd679acaac4af9fa036129e8a8091a2e897bb2ed4d5de5100a52eca069f124be2ea964ec01bd4d07f84e5faf4fcc6fb055082041b6f82c416a4d469f9ce5b4a8d51b85365d871f967e221dfcb32bdb703175c2df) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x0e69e0dab929d1f5ead3cebba16e0370f3ef18a72b80e2704dcff600d8e6c11b84d01c66ff7cec576ffaefc49a74aff00cb9d3d2a771815120ed332d888d444155234d0047af62b278ac6494b80753de716ecdabd4e77f8364feb65035545c6a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x075d7888f555f9e7eac62ee7b07aa7f8ae5118ea5cbccbfe9a116ddb9ec21c7dad3c29a8c4ab1bc765652d96f171ef5103ca9d795022086b1faad91136592663b8fecb6ca32610c91dc4ef5b594d4e66e3fd737ab8091d917ca240ca4c5f14cf) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x03269e2de673af093ae911c6ca36338d121a06034ae305569b43878a533206d713a15bfe25f2f69a356f023415799ed805669e11c9509a68fa752847a2691e8b66a8cd2acef8e9f8a421d56985fbc5610f625a926a3db22aa2f3b9598e3a5d4f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x145c9be227113316ac8e8512128619b41c45a63ab20edf62f53daa3d3ace9240174bbe9f46cbda102bef7b897568c0fa00f54d7771e7fb5e93c8c75b4576849fc1172351336db0dbe89a4cc1eec6847542ca8b1ce0da4e86d2f3e5d830674bf1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x029aaccc4cc78866eadd686825a2b48bf98b59f9c827c84d6a7663c20254f564c9bcd84bcad0ff1f6d0dcd96fa59ea0b0e47259745ba95228a9813f05942cbbc2186012eb63e23de41bbea46bc1cab64f80b9e1041de98f49c119df14f001522) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x0f2239a8444b783758f3e5d7873f05b3c939315918986421a02241a2ba2fb8e7de4c193483f9bb9989e328f3e4aa026f0a1f359cba3e91c5978b66e4c0ca02e5c6966e5173aeb942211351ea8ab59b73b9da7e49b9ff602299e3553d2e6024f3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x171b12075ea694d62f6100b26b0f22d72ace085eceee2d60e449d18f57e639e73c950b04c995ee9abec90184062071a60d3603eca9e4e216de19d91786ece6ec2669242ee9178b4cef7c0bafb14f16f2a78323f1cc51b91a9eade8cefaf59ffc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x02c7a78eb4807b538c0014ec5ba44d58780d6e700ea54ae45b3866dff8c4aa668f845ad91f6a16720d865032b5c71add19843b1f0169a987c279f4f3e3955b4c4349227d33981748b28f604a8aed9471fd91272a157b55b7ee71ec23ce6db02d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x0a0406a6dfca19affbf8daf605873eddab784824015f9e4689e73fa86daa39771d3a4610f9df95fa322f55b322344e930dbf2d00f047bad0aa8d3054bbd000cc5ebef0a2843e3f5ff555042c232463f2dbd888f5c113b89fd378445b57f3a898) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x0e0d8dc48ca8e5eb401a1e77dac46466f9795354ec6ae59119b8fb561c5e8c80031bf66404c16d370ae263eee2bfffb80ad0e49c0deffe979877451138d54d4846c363c62391da88c37e4cc4304e8f00bc75b0a50d5d4f2d19c129570d4cd709) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x0ff16e5c2228f7d1ba79342eb5ce926a1c9172516c29618bf5067d9babe822c649f5d0af16dde7f58856f79fe8c0642c0276e6f9e29896828296e8084cdcf9520d766c96c985351cc692c5a680cb3f2bdbd798830bd059a9a40ca35b2bc42bcc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1' -storage - (Some 0x174b443090acd24b63f00bd9ccfa4ca4f07c82ab80b3d02c8436e2bffdc6c8f6f058735ca48187fec910d53f3207c3d0050187821dd662d4f7680ce6eea608cb10164d3267ce217027dbdab08821e5905bbbbd30077a2812247ec251f61815f1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab' -storage - (Some 0x189c9031a7c9fa23f5d733b19353bc60559c75d3008eeeb635d72225e6c3ab8a4e6adf19353f41eebb2fbd3b9aa6ebea18a9fcee2568b75d6c47fced67a88749f512592dd0b3490b31c8a9c6f8c3a89e66bb2436ecd30a4454659304b382bc16) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87' -storage - (Some 0x07a125ff7730fbbb0a0b009ce801ceb5af3b26a398f92d666a6ba086589401d5c9757abaac52da844bca04ff1a06a6370192af3fd6f36c1da7ca65c3bbab1d7f94976041eda19e5c796a11118c7c53fa73829b1128d5ba0824e29deb6183c530) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9' -storage - (Some 0x04fb7ad2c096670cf3375d148b32c85ab1a6c4c6ebd35abd5ad2ae0a8d8d35561ca4a5d4b3fdd72f3184a25b1769058b0f4b9f0e50c0c70e2d0733ec6be54f7754fd134054d13aa67b5bb86a935b64d29b994340a5c8c2c34fcb6cd5ac3f2b80) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4' -storage - (Some 0x0b68fb08cb23c2087951474646488c4b8cc53e8b2355243955ba35ee10a154a41893978a43e25ebd19aa279b2374d0c10c15cb33448a95c9fcf9ed8171ebcbba030ac7d07ec5e391a937f3b0bd6f469175de8c13a964667d85cf6031ebe94b56) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89' -storage - (Some 0x045dba3dc8f9e481ce42fce5a8f07501d1faada257439f987273acabc0d3aed00e4cc3948fae082ed24cba5b12b54e5f0d55da0aec1136a24464a5f8f1ac8d58eb893ba95131f2fce03bcb35fcff40993f48b5aad6a80aabeaf0b9d8d7d957ae) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5' -storage - (Some 0x0bacdbd680fd96840607b2df89d3ee01def1d51b91a106a99d106b1538b37f62c6c8333919fb00df82cfba4c6469201905010561f08cbc732763f300a4c461b6938224870fc97eb1bebbdbb63f3969cd5fb4b4bc1fc300203749433e5ba71850) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42' -storage - (Some 0x0153465b9dc8227efd8f18adce0ba1eabc17cffd7ed627456c537a582fead8463806ac459981a96bd1cb99ba58c2ebec1835a685a9a27928162d57f51e2b52c166c640bb9bd2e72c9a0033d4e2cb016d041b1b1304ed40cdcad66b3d963e5aeb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60' -storage - (Some 0x0903f27e56361a1bd0e8e4badd679acaac4af9fa036129e8a8091a2e897bb2ed4d5de5100a52eca069f124be2ea964ec01bd4d07f84e5faf4fcc6fb055082041b6f82c416a4d469f9ce5b4a8d51b85365d871f967e221dfcb32bdb703175c2df) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c' -storage - (Some 0x0ff16e5c2228f7d1ba79342eb5ce926a1c9172516c29618bf5067d9babe822c649f5d0af16dde7f58856f79fe8c0642c0276e6f9e29896828296e8084cdcf9520d766c96c985351cc692c5a680cb3f2bdbd798830bd059a9a40ca35b2bc42bcc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb' -storage - (Some 0x0b0e66847e9e898a1ce59e952e7432cc12ec35a2c2f833564f60a005d213e32f93ae2049240d9ea4cf35b57f3226be0f052607166cb214d9cdb837fccc2e1c5f0b6dad8e6d8e2dd17128b3689aa3121dd455cdf228898f9570a82f6773574a79) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- mul.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- mul.out deleted file mode 100644 index 57ca0eae08ae8214f57fb8a500355eb721b139ae..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- mul.out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0d6e26a792fa06ca00d9b8de7b764194a035b75f8e55da4fe2c7c8df6c732e61f1cd4a5453ff19f48eaf7d8d35945a8a01153bf80f1924e3419b5b5426d56f18de4ee561b53b83a548550db77a6110bcef17edca9bb63473611bc77fc7a5d5eb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x17fe2df3460e58f64423b86a85f51080ddda61f77fa98a4205faae453f9752d45a8d8cdd3e2c2b55975e1907c7ad32bc0922f1eb6c45c9d7520ccde588959b79eaaf70b393d780698cde0a6fdf6ca048cebe0f0fbc5f5ab801f13e8cee452c64) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x0b214a8a80d9907dc8673387c7ce8580236b7dba1acc6dac23397df4086ac627fcd9e1e6dc6d0f35005a254d2d5e596316793aa0ce436a371fe4e2ba29b8030c589334a580ef0b64a4b62b894105486b12b2a2ebd3e12e834157b6eb766a1a46) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x043f37fa78a29f961f94ec41b7106e72c8bd964d987fe98e3b923af78e82eae131cc1384cc1ab5b1297050e4c8f5981918ceb0c411187ec8dac82ac65d5f857b806025be878d67c68a3f7f577a6d67ba86a97f46af156302159623eb943d88dd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x080a6002efcceeb454fefba8de269a0dcddaf1a31277b9401c394c27bf93f6cee5c3a61aa51249366df85e142691cc360222dff9b4cc37bb26bda84a0b07f57a87ff916a1684fe21aedf35361c2e2d4027438eaf5124cf0a65316b311fb9daa7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x08754c98e4c7db757b21e834f4796d2cdbc5e4def2b810b61950c8de91c952ebef5b4fc24c24eaaba16e905acc610f360cba7430aea81354d2b199de002bff0505483967c4d89119e58a417374e80253a09b64dd8e5866a39310d5c6c458f8b8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x04b65648dd092c99073e6de155f71684a774baad9dac389386532de497f215a58ac1fe2f6a47ee9be3b7487eec32b98807a5369fd1c9c9f562cd815174cc29ddf313dd016d29e33e8e4fbb99c6090eb487c7a4a09bd2d68262f517fefd89feab) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x0ee94578ebc9106e3e193d6d43803d53206baf8467a9c387a122d67364c06e6b386bd3d4a519e436811dea5335f001ae03b0ca8045c3e9877f522f6c72669b7a5dce3954941dfcde3ad65add4b32ed285bc7762dc81cb4aa8dd30466e8e58cdd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x058d3f9138e02d209f1558c2dfe2461ea55dd3173cb680befe0b27c6ec0809393e5625d5d10edc54f8765d657fd960cd0a511c9ec52fd74f583dae9a45b19bedd2f0c9ce75315622cee29357bccd2bdfc986603691117c9d724ce0205389303c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x0c972ba34b8c6ef2ec4773c0514d51da1e434b56b137895aec2903dbd39e1f46795578a8761474852689ef734d963a3a0c1f7a974a05641e95fb07a64105c403fca42032a04a0e86595f28093322f0452c11b683a0d86f1189414fd8422bb7f2) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x01209e158bc71f282c096757285359a9978c143b02d0a29675168d2b86b3229a8eb9c213c59793fe85d861df05eedbe001526419a19110e7d15fd47e6065534566cebdc72a737d67d6e10773383541d1f30cdf07c00b3eedaaf4648896ed9321) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x0efdbcf90456b6111b67d48bb66c384eae0e3ecf9ba0d9a232d26b7615bb3bb97e14d4476a46e34f34de2325094e61e805cdd9f46928c868b92c0f7e8b1bee1f026d311363e7bd8cd52aed9c5fd94049bc515a9fc689a60b3c603bdcacbc2757) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x16bfe181c59d68df36da9ecb00873116b68564b6dc4bb85f9de517ce67200edcbf4d702750a9f1922c006499fcd101b103e690bbaf48b60a6c2ccd745e2218f1378d11a9b05bc8cbab4e9ebce6efdf4a1f01e7a83c40ae65d5c0688fb4c5f929) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x0cd9ee919f76512305edd0dc3a4e8b6836d128f4d057a6ad043eb1009d8363e4d3d114f91722441871bb03b4436b9db30a6435fe87a9a201d395a339e09d5aeaf7343023d897828c54d1c6f523b17e11a0b7225960886fe0a72ae28ac542b826) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x10d5f9be440dbab37077bd4a47eac753a08b0e7259378586c5a767e9f60db07ad0377e4303b765c1264de0d920c9e1c60203123943e2292b7fd772d97b6bfc87f13b3118f23e5a73eee0c013af220293c5672487d8a420dad371425778ab77f5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x0bd654c304dcef58af952ca2facb26a6edd39299c8e6e84c2183dccd1983d54c42527e0775bdf0c41a2692f7ee2956ff1414dcc51826e1a30784e97dc2a6c22fa5a4613018675367f94ec38f5c0918b1a3497496257d8498c9d059dd78ea0f25) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x0063c796eff234d7868560f197512cfe7573c699e56dee2e45cc8cb066764879390f45fb629ebf867b050c0533c3c78604377f82dc13589f87a5b50e386c24e0a43ea56ce66f18482ed99b36c4b19751907d3388f9868d9bc7df0a505c4eb717) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x0af79cae8576b4995da38e6a8df9227f5415802db3f8aa4c3974030454bcce23328c0a5a255a6276b5fa60fd14757673153047aaf80c925bb11d252ee92d3336b610e12a1a9c5501cd3371d9f7d686c984b22c87b85567983d742b2675fbadd3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x19c0b6b19c11fa412a86d88eca2816ba25670d893c135e0ee5989656522af100691986f0060b64d0fbaad9638679de5b107ebc992deef3e31f34b16eb3e44c110d224ede95a2917b70fef143105b5ad7f938c0b97921b2e118aaf36021d709d9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x05d46d0fe823a21ad3b92c3deddc6cee80b776999e443a87849cab0431d66c092b64555ccdad0be84c59c7750136bae1193ec841f45f830f5bab5bc5d5014480c769499886a248b96fc8c9f52069b7541b8325d54a673c1dcdaf987cc76c2986) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0581a60e8bd8b0f1afa867dbe6d131da6b717b349cecfbdeef91389c897fd516e48dfde89a3c27e411dc0648a684ee0705d00bc33d960ac54d895e80131633ec084a47ada7c3dc1e67b6bd67156facc995680292c2a3f941c36fb9bfe61feb35) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x16358e52d519a86b053da1fe72a1e883c5fccea9c4664ce7c0328f6a7026a8111707dcf0e88ee80b2cca22d411a7332812ba25b327c899540069136c45f2682fc27e5b1554b93a52c1740a154e93d7fc70f736515cb88c825f4cf7d2faa278ae) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x109f769c6c1db02368152922c9a6a8485c87bb9caf77b6100a4f1f5793d3c5e626b8c55ab3893c1022916ed59f401a39033697f5dd1db013bbc7ccd6e03298e87e2875951fcf420ee945b6079f8436f9f244f57f546a0e5f7778a9b6cbe00f22) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x191154d5a2eb393270aac8e4b85f6b28d6e2d0e8a714f36415192387826c7792a1f852cf268c811c65826120901a9196083f3e305a0fa97e67ce8ddad76603ee1ff8a8aaba6eff4058ec4e848860321818cbf190f52f4dddef254cf0c9e3f9d9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x02cf1bdcfc6d26f1fed78c7fae531e43de9e623c13d418114dd9725607d642f5f26fadbf9d355ca47128fee32a82eb2c092382870014bd64bfea089f0f6223a85086f87732c01d38d0421be72da85c72568e4fd7f8e7fcc349acceac725d767e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x093578079471563622bc948bf363cba956e331d785c606fdf76ff09c8720befa99e7a6dd2b01133ca1107845aa9ecb4912166e035e664963740f46c3568e611801a8e5819881f4bda8790da9c69dcd02254f669973c9fd67802ef6ed07d232a3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x0825703afe4debd2b09208272077e0b301d3a2f10cf436657107ee668d481a441c037d1ba3f1301bc6477433c0079784037d217fc5ebd4f315c615716d6845c2c91002c3170b55f8c20616d6bdc310fd2936f2e50da93fe880eeeca93ea86d2f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x03cb48d18e9adb6b3d3dc449110dbea4629d40523e6200d4c9332f092cc594bd6591cfcf71ff88e7ad722d60656e56e60f8c17788b46d9fd6bc6105115896170d7741b5fe14805325e1561693ee2a4784d48db858e0aafcee62b921f385abb2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x0157d419405ecca995ed95d32f371bdb386bf3058f71fc6b950175274dfacc2538ba0fd8b0fb0424911cc5963fcd4001144eb623857acef3621b1e6ec0f5a8eb165b699c8d8b9e3e6f38fa6da6b3be44c9b5c741e1969a70703292aca20516f0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x04c34b7695ba3c6a364c0f966808f0fbbd8bdeee360dbaa0edba5f7669bc680d002fea0c7ca791bd9c993ba068bb9d2410dd522d6afe1938b9bf0deabf7df30c4e30f7bf1b2691e062a8636f0cb61cbc7f666429785d59119c5c41df18613ecd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0412203264d756bf628d76d1b477493facc1c90068d318fbf33949903de2eca11f6ed5cb3203faebef94cfff11f357471815e371eb8552dee3f38fab27c7aa0e88dbedc8bb7319c02d155686ba73ecb905440508b5fc7889c755e85bcbce36b3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x09fa323fe1c580c8d71525094cf8cb8f7b55a73e0368b9c969e11e2a134c2ad7105b9372fe54748f090f2d9699a08bd80ec04e61d1f6e61d7e4db2a71fb882d9021b377842b7c23ae501b812df1a0ebe39727b98027da5c911574f34492a9502) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x0815e357c2bc69e70d4c07c46a2e9d193e5ae458f756106b8c47b9d300838918377c592bec0589a76095f3147ac669f00df6c2ba7d1e05626802726a8ccb0be4f1a824ae5ace601ee827fbfb2f01cc476129928b42fa98a6a417de56dc66cba0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x12b3f0225229b39345c7be73973387f2d2f2ca09fe46365b01da1d37e67c8bd90e652fa5bdc155fe9689396f1a4186030484ba1bdcbf27188ceca03bdd300deb000c0b1babc7f598c724678742d7ec38fbe0a8919fa370515db41ab306dcffed) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x06e459cb9410459386c79b2fbc3629937e84c031c6204987b75736a05069a1f7740ea59ecd874a44903d151bd2f101080bcde69f48c6fcde9d38070fabc3ad3d9f6b66397fc5c59e2906e4d5a987f19391ba1a5b612ce442bc33fd141ffbce2e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x13a643311835dab38e1324b293645b7f5c02d65851d818e869fc82dee998a28ee22b24c96355c4d957dde9b86814d0ed17dad0a4a74fb5cf26bd18e409dbf78c83edabe84ce7cfbef4b1f626f31ef0458e3e1a36e3cdebe0c09e102a4b24a644) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x06ed9541af33151e350f48b4935c5337561511bd4d6cbef143d81233df830d2df6d2397cb926ece52ba657a25c4eaeb00d7c8a9ae83d4cc786369a5c9ae73c0521f21f424563977f78b9de39aba60d8ab6420247227c5ae374ec100076543878) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x0842d0104ec53b7923bb1a74207f4a11d989dc8fc6c466961e94f9ac0fd5a2cdf69a637ca8e425115d9963ca7d66938500ea145353b6382fbbbe69ae3d09f25e907bf58d892211ab0bd2713cb68a1a3ec72ad8e54daf893ca8646a8745142fb7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x007fb59ca921180a904ef6b65a48ea3a04344dc5bff73323bd10fb3c7dea69ed5525be5812986ca025ac3e11c96dc4a1198790659672a962d70bd1996efb7769f36fbe4ed9cf55d071427666f2c5d73655f193f20be7801cbe2ef168d497a58c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x02cb9272e282673ccdf8a17e77f9e62919e40670f9844f0a85e7169a431f16341fcca482d26b0bb4b3dd92815c2e725f13f36f55336203e46335e2645f80fe8d9cde1bf5004757ea94baf2a97f548bf851433c0ede5f6354d26d7dfaecf791b1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0ac32d3741b3c21b18ecfede1bc11830df9091e06dc97e01a81c423b26b092dfcaefafe329ae3e372953f977c43c47d6022dedceea66a9b7ddf2b97f271840295d7847fa32e2c71b4a49efc82a474dc7684e7ef2880cbb5f9256e9ef03606562) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x0036c4d013887bc6a143e179677ff8f26bcb79ba0988e12f24846ecf188b65c5718e11c8de2b6226d008d4624284cc3b151c0e5c1e1d54ef2dc56370c82f6b849938b47609f1816ff3a3cf798f8eeb0d00b43539f8d280cbe79f3ecdf33eb0a3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x19c226a9dcbe4364ff0e70814ce83d1babf4cb0425a6d483717fae66859e0341e856a09a14c6bad075d3b523bce47666133aac0bd2ea22d48294764c254b7b4812c11044138e958cc050789b12255a0f28ef5d4a0990d57006d48448e6b9b6a2) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x0f703f711e1d82ba20be14d2f38c2e7c16986c917bcfdd733781e84b0f4acec21ac735420f07d57afb19c815f700395b0699f961928f57ff8f1ee79612ec447f0a67df0b12a73bc7c5c99d8fadb59dd2e46dbf24853b2d2b697ca02da94616e3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x0e49831f67b497f143e2084ba6e1c2f68f959e8d39201a5779b6549cb96487f9ecdd21fe21f11202ca419472b526f14e0d45f58a0c3a81a2c549ba7753898f080c3c763d72421189403742c4ed6c4ab588672bdb6f491b4b16538196a6869f01) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x0e929417f5b4f243f601edef1957f6376188c0e79d4948b3f3b3f8364ca1666f34fcc51d8be3661eb6e835abe8b1896d19d3e29517f6da19cf29ee2655da501d1427a3e4a2ca30a291faae2610a0467c7de31fd16c197e8458f7cc5047a0a385) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x08781f6ddc3dce9c405c283c560ad4ca580fdd754c0041e226272084d4f1d99b54e70c9a31706e0f5af360a4bcfb261c05fe250228db136c26ae15e5037cbd6016398e0a6e06e1494d37fff31bde2e7613c3a68f487a2d2af80cd65d9a4aa984) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x115c25600a2070d2427243bcdb7dd830e71cdf857fc9e5cbe1d68c953cb958313525764e7dc8066b68eca6733f1a883a18c59e9c634c3b96c9f2bf7fee37d051921a581f5e3df22a1342b67c312c7d65c17b2fa9fc108a80624b0b43358335f5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x1003a80b03182c8f2818ad1afbb6d6b96d6e54c2caccc065270c9f47ce5d31776356404a9fcdd8f9a7231facfada2ad00e543844307834564371126b701746614751a3d16f5accb4c95c888ff1978a12f3572afe2240367e36c1dce9ea63cac9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x06bf7ffa94226e2153205e53651de677bee80c436071611d20f1a9693f73449b97b72536a0e268e3173a24817232ab8806ebe9cace12d9b6151133b6d0808cd53ae57465159b0b2960a59e38080ca1ba23971455b87f7c8fb85e801baa3a31c6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0ddbdcd86ccec51f96b0a57375d75ca04645c81ac28d1bce2527163b8cac1a61741a733af4760e79cc22b243d4537ad919cbaf2df20a4b2855fba6a11385ac6592ad2b75688fbf954a32987654d2c73726a3fe43f850517c6a84ad32376ca9d0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x002730ca798014e3dc1841536b8dcae73326802527e040f9f97766b78187bdeea1177575d979b182ee2442b2e4e053ab0932dbaac27d3b426086be8159e7c7fea786fc923e7905cadaab3e2217a2a6a163e51820f9aa19edd4f4c13ef411fc0e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x0d66a57e1f124899bfc14806aef8910ced55dc5e2207c4db61be383e9dacb5e3a5900870c9decb10119a7a9b3a4be9ba0ee8889a386b696ceaa9b14c2e2043a5096ef886fe3e9d3dcefe3c98d486e33a82567aaca5e92f9f1876a1465f3fd88f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x1420f06251a40c38488d2dd5ff497730bab5ebdf34a95fa11bfa318469dbdd4c02a9312e88cbf7a017aca8ddcf752b9a0c28b1bad0bb96b057cbc269b5ab9ac27bbe70d12811531b9bd005a64a3a84678449186d6bcc2ce3e48a8e883f173b3b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x113974887d62d5b9377648bed8adff649685b7ead814cc196ddbd7518e7678dbfa86bc8bdd9575d42611dbfcf152cf43032c9ec93e81df8289914fb15e78d78bcbb4343525eb6af5e49fcb98c6586e044f464e3b8692418ef0b28358cfdb124f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x1402c2b145c9b76dffd86446dbfb776937ee10f568aa405e08bd5e6a0f7ee4b21f29b9bd159445198b602756c81ed58e005b2fc7db8095d4917ab0485cde75b2a75268859940859ccb53805a5885ec012ff6bb3ab063275f27044eed49b1665e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x19f7e1fc95fff4e88bbafbb8dcfe23ea621bc1f769b5d3d1dc349d2d14f74c88fd11f02bbe4659d47b8eadcfc31531850aac73a54e023a918b9c50d24f887898180db4146b99d3d667e6c05e827ed75c1a7e7d0255a83a77abe3b02a0807cb14) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x07e1c14775179b867f6ebfa1e4eac7d0bc2d53a90007715d7b841634f2fd78484e86ff9a17c5c4c698754d7fc3c5a2e7112e6d8df62a83f58cb270c130f947905eab0fb97a0af59268b09e0decf6dd18922b296adb0e49e6905b49fb9e6313bf) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x0ed6a47e24e4ce134d1988c1c8c9e0d3afd8ea39e8134f3d6d37cb73e1041a4608ff056224eb1d257091c74ed44945591149d34d74e2e2e81af2587e3a217ffdbb51ab66f490735bd737facb7b959c9d2699a9d7f11c167e58f3af452f597156) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x0cdd5304ddc0d9753d36e5201dd0b951d01f6f9f5ba818479f6331228567afb672a9f4d34befecd51f371a1a3b2c11920d14ddba2c46ef3f55b93e6d4b6769456f1150e60ab802f573eb10f35d98b96290c8c58de3b10669289bd08ca8eccb5d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0108f6c0ddb42d060a3af5bc726bcb432453c3d3e1d1d8ccd795cc6701335cad137dff61b45e03bcea976a2cd67feadc130a706a407be7237a9d6de914854007291abbd730afcf597670d92b38e6403d509bf1d0848b495d7a4d8d9b3d446d65) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x18232e6e86cc51cbe6070a17bfb510b5e3a708750520bd532fe6c58bc6cac63c9f581234db968a4625d1d4ab90f08d9e12df5cd600e9c63123d4afddb4cdc57e13571aa7b8ed21fb2f54a4a988de14128847718fee4c6c5c3d4c9173d48f4a33) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x05975c859134c5632bb4b246f039b0a45f43dd3d31488760420d40bb52938c9aae329d7ed1fd6c4871b088942a3f50c517b282a2e4f8206249ba05d50a5851b0c03e9ba0a6b0c829755a5b6d31f098a9e7e4adcea5c27f6fe4a4e0c6e4b1e56c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x0d76931ca7049490da586a0c79a51ff76c0e475d9fd1ad034f6fa5eb882b6b8dbcbb3eeefc37d13f6a3272ff9bc858b014e2a3325172bdfea48b616a6b21972f5d4768959efe3e77b3f96b9183d8e93b46712ab1629beea8e03007f4a17ff1ea) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x08f10601fa25e24bf52035d5a8216294ae54378d4b2b6df3e348cdf76a61ceeae5a31777af8b9199ba42f24639b533510d6e9f7cec3a5470e47b04d3acf416d748806890f315636a5d3daded30829dedb795f0b88afd73cd82a2211a5eb1a4f5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x0c9df80bf292db274c0867f8e9de81ffeaba73674cbe0b05f7ccd224e44da54beeab50134c0470963b1f2f02b1a31f851612ff8717619409552b3a086726e3a5d4476694fe82443a78b782e28140e9c904e3db65a9449579185cf6ddee835829) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x00063d556853e5f82a53d6462d6b19f98a7bbce98df79bd82519016e6ab1be0daf3999ff024520c58d54c21133b579ed039afa406025f3afa2424b18e5aae85cf6f8fc5cacfdf72c44848e6f60bd2f2e9884989a324fb6375d2d27ce9c3c55da) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x080f3639bd29544160205620d52f07cb7c35e35b67336205d9f02bd7e7712457be7ed6e7dfd1674c976cb373a4dfc5bf0c4b4cba46235dc16f818d5337477fbc127d78aaeb514cb40142f93aee241122e0585e2bd5ceeb54cf0ff85e028d215c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x066d91ea0514e7d94e8ee2ecd8a3039d37fba6f263e725d3699ec8bfa29f866356cb6d104879bc562771baeae49a299c073998eccb434785bc205388a03dfab4af27249771397863249f0bbd8f78b15c8335e20c2ef6f53f48447c20d196951f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x18bd3b1e442351d3101d3c0eb50649714fb574beb4871a8b41a590a57ed2fa1e84e52714eb6f523ad7d3cbab0234449d07929ebd8ed819624cb2e7730142a8cc3e30d5a743d2504ae1ab766fba5ee2f0f1ad2e70ba765660f5879d8f2391587b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x189ad044ab536b008692b149d1d08678bd1682a2401a2837f41aba45c49210c393334e48bd7027423f5d33a0ab20a4991224e075b527700847a22ddf2163348477aa808f6811541d10b118929458a15a6760b5a3c3841c005fe5860970abe46a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x118d259c4d1924621fe0430c9b0eee252ebe9bbaee91e3f30abff7197c14d5f28afb2e1897631a8f3faf8d59223c32601306cc1c52ac7b090aef9078128030b373e251e8e77d16e5ac6f76e31a2e70a52bf7572ac824f21ae978fb7896da7552) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x1517b8ccca640e4a5bba4324187b4c793032e998abf5dde5f1c908bfe6043804288dde3b2510217d2cc900696a65e855037aea02c6a1a13b13c735121c167c29597007fcbefa359fe6f0ce27faa64db3675bae0d07cad071bf2fa00bc5e9e5ee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x0f6d8a8af238867f7ad996376328fba94cc45661a9064ba1a701870e88100e95223bba125538f55efbc7c6bcf75024ce0a6d758b2b6d5a7a85422a58f8a821b455e6c094194c23f3bf600e7117de4b35763007ed28d488865381940c9df65a74) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x17320a69a37a272eec8fe76a288e0bbf3c79c08b7f09de8c704cbafa8c01f4b65a915cf83cad499d870db8458a46136d10c2d589959194d422090e94075559923f02977fcd2ee8f5d168a1c59ae61c918e6d9bdbcc4e3cc4b7689a79481bf650) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x1449666cef3bc8e2cfad84a51db42fe78614f22c33b4dbf365e7be085a3d707e743f9e2d137cd8ff8dbea833426064141433ef319622fb2aa9ce5cb60341bdccc6b7cec550f09e12dcda0ec0fe48b119e5099a4a8d6e799902abd9b2eacea393) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x175e97f7345149ab9b0e843282989beabf92101f4012d9f99497d6711dd60683509f6e17f05ca7f080651b76ff9b78e00f9ea76aaf96e93eac161355a82ccd1a23660085e206ba21b17469c7c3f1d640218813abd606747a06021b1bb3f7a2f4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x14aa58c52ade1687daa89a62ab46a877b37feb8522613b9ac6ba3f38b696cf881ef5dcf25ffaf6e0309464918a18c5250f08f16eff0c3cd0bb3fb8c55407c7e3e416b4734c20064d234ff741f2820d157d9f4ccd7a9dd4b6d23f2a27f7427314) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x148f63418b0ddb0c4743651c6746e9c733cce23249be1d022738bf3a7f612e5116e974e62af35e54211a59b2be1e6a2f0ac062a73c2cf73e28241f0d452fafcfcae114e95e6e19f8cd01e0c21b48787000e05dc5142ffd2aba7ba8f35cd5f170) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x15525131010da41c91eaa0099c5143c6fc4d6597b3c0318082131909e0df3b08444a5bb77811f7ecde47174852315cd8000953ecd2c4a72db6f0188c009c947f71f2b5ace4c86d6c5b95839ce3eba6ebc206a6f85a098f7ad49e44678f5c8da5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0cbd79a3830a6b2426ed71675d6d1b0cdeaca9e1540d4c70b123c4ad2ce788ff606bd378545252019ee79023c8179521196f036818ca95956b2098a8363c3aeb7a12dc77cfded4000f1907ca3ddf5cf925e09dd4fde73e59a7554fda13e11f15) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x171a5c0b4b68cf054fb95797b0d61a45ad209c5e503454d04a4edb66bdb785934e25ae9988e7e7510b4a01287c2427a21483f23dec1fae160dca9356aeb9f599e5ab81eb3338c61e11a55f601fabb6ec4a92375006d10ae3042efd5732be60b9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x0334eac1963514cfb283bbf838658dd3ec5440768b95653431a20776b2ff56a38f4f216362fda81c7881b8fea94810ed09777d7e9b5717389c18ff0418f4db95d1464920cb48777547c9397e41664b508e244f67b3f9c336c1a0e184862a09f0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x1974a9648d96b93664d816bee78c023b8c758caa70b98f4e84d81c10c7e860115c610d2749b68682126d6f750cb2f00d13b560fdf12370aa290bbbe875f957bc1128e7a5ed06474aa6dee111f844dd4930ed7e2313c0fbea8c062c114462ec51) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x1602aef64d7582574a15c5dbfaa55f541c4b1936313a1522bf099d0fb55fa3a092d4ef4f0fa79d3c7d71fad0537e0b2200184aad8e371521b5a632a8b8b499339a917907ee5678994c48a78c29c0e5e481d2b8d9cd882dd306fc54670e1ed0e2) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x0b3d98f7917b7640a724a4508f2b45a658ec5f96f74732bdb7f5478eb02e974b8b2c212efa5f8511a133037cd7dc493007f58a141712efd80287130b4f93743402eb9d7c9258966a5e469d12346d9e85f0f9d5af40549b8687c4b189b610c819) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x079c490c224a88cc5def7af24ce353e7785a1bcb613f8075dd207eda8f21b07e90cf4f8b7d87494a4d5b8f35942007170dff789955eee9e6435ae0688c57951054f878c75002aec6c1a9fe0c4f9d647439d2f02aaf0c497ac5bd47b5a32bbd69) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x057c1db35cfe8938b57b7e647b725a11ce7f31f9ca96eb3020acdc3541bda8526d7cdc0577beb2b719dd389225216ae004b845bddbd5a08e807b2a27ddfd46403840ff0ec45d7529e5c3fedab297ddd7e6c5c0affea25e0b562105caebeddf2d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x0a81b0aab24a7b0818e030bcd0110394650021563ccfab84bda3bd1455d3ec6be9adf7e213ad2a4e47208c51330aeb2e0b1f80333a3ebe0871048d81aa7d736dd9ad2221a72efa4e3b7a3623977d14889049a6ad2cb368e06ef6d3fda4c9039c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x1456ab1fd1f34aa2387a150a3c4229d526c80ab1cd56bd61504ce666d6161c94301056a23bd5b55fb12a5296a4f236fe0a5b131c5374c0abb76124a09c3371be456df830c80e1484ea78ce7ef7d20242ca73a731a099ceb09af4b56ec4b22409) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x064311e4e9bf3e56333869669b283512059634911fbb882df4ff7d4dd9004044ec1ffc6ec41fe31e7e9bf802155130c2001edd64cf3e67f510c17bf47a6e18927f97f7bfd5f7933c355d5dcf2614fddd0806ce173ba5277af7cf991ac5ec0866) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x08596f9d4caea620acd7243a48bd1d678ca07fcc132c7ade82b931548c35b116fff0571f71f0b5baa3834cac4b4a3ed5008b312a1908fd68c173e54f9aa1aa1a35d04d3556aa47cdebce73ec3223ca4b38bbcbe558effdc75f3df8d7331c0539) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x19d5bbe4281667553492e19d31591a2b9b530f49f3e8d0aee5582b3b6aaff8ce3cdae86bd8da3ad78f98db54db0500ec151aa7063def967cc3f8742d6bfcc1a5effe2756c92c25227d37df0b96fffbbf8cbf6f8b9065dd7d26e915de23dbec28) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x06177116e0540177982e98464577ed3321eeb44bc08fed0f62e43c2dcbc5e05c8b9fb25b35ed7167cd09e5200a2e4e010d2757207ae5fdbd134b08b151e58982290a84274b00f1318f39145a8b430ee1bb9ea5ccfe61ac5e4f283d48e9115413) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x1081dba4d09a91baa0569ba390942a1e377531c6ae25b6d31c936c5822ae5dcb9341ca731f6506b24e920310e0f4e6af00bed415d9d23c9b88b1399e205905ec323f5867480033eae354d564fcaad70e859f1496a832ae426e4a708425ac16f9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x08952dc3ad990d8f0af38dee050dc45c89cee78148a19af6e105f13642dc2a8dc567050dfc0554ac42d26d8b5ace72e7018a0d8f7c2779e4638bea9c4661b20a6282bd478d4ce97af506c0d63a7e3b7bd3a9db1da9dc295cbbb1edb2e1009725) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x164d40ffad176068800c32f27a21f3dca1994594aa3d766d04c356fedc943773d91140070c43addff98e79b865767dc716a161db3f99faac3ba20f811113a17c93f6e4165a3c98a20e59e314e9efef31b521d3d0d44e2bb22ce05a11e5522bc9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x149224a246e2b14dd1a514a388cc7fca3aaccdfc9d1f0c82d00771504fd47b004a64f81b686d1cea66fff7e90a455081046f826d4dbd43ca19ee87e1e66798d076eb6e4b89caa7b14903fe0214010776398eb0a0d0509363f8b657b59e521e40) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x018994a13ed6f527adb7f1445660fede5989b265e2024dacf27629bce8d22ced09f117d16ec5cf8cf55fb2d36ef4f38d05e441d58eeaf085771de245da3b27f6d39ee3116cb29e0e19a25e5ad1a2ad38a7d91aaebb5dddb50025f13a44ac996e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x030b980ad2ee471c29d8200469d18494fee7c3d58fe446dd2ad67b6d5225dc6dfca718f73bdc078c63f15a9fac67b1550f90d4def4daddfdbc940db5b95bdce08137d87b9d3da7ed4c5c9616a724e9ca982f63d1703ae2f0c0ab3e2d395b0b1f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0xf796c9eea8195bd57ca5f3c27f7219bf2c250bd3f49fbeb56d8150689b21e164' -storage - (Some 0x0aa35e2f582a1caf2cf03ae43bf081685ee86a508e6a6506314f44eacd405b6175640619e163c018871995aba27577040988f2c73259d14c374b1089876718b8af7bc927acb1cd061bfa3f5baf1b7862ce5a9bf3a6f8a9d5a84377d079c6af82) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0xf70cdbfd81e72e0071b6d005033aa30dad5b3656f9243867092164442c26405a' -storage - (Some 0x0ab5f26308387a5e5300c4391c57fca5d04990778972c7bd3a5091c7cb678fbea728820d2baf234c4f10bed1af582458015004f283d08dba4d34a36a1f05a93dfb7395e027d24cdb024d50d0dcb5515721d506d467146fa599fd14edbf95e5c1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0xb5cdc0e76348bc94f2d9c9f1cb4eb21adf8fcc87532cd008362943c1237f5b29' -storage - (Some 0x0bb7053566cf001d96d47c8ef75df36dfa0338934e152f23dc9b92a38e1fd11bc47d0153ed7703a0ea464d3c650c651b07720e06d0057d16782b8e713a5bb38c072bad6dff6cdae4f61e9f5b72f6198800461ef016a98a7da161721d354636e0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x7f95ef6e6962a0ae1bec3aca77ef83ecaf40d97f612665e9fb07ab8edb13aa6b' -storage - (Some 0x086144f6a05a43805c6931d2028199a9240a02b5e280f0cdd909c0eda2caccd515822156e3b5117cba6bf8bfd471dd4c0dbabcfd3520461beae5f9db727d7aad699914a23b387662f7800f266363e84ff54a1bad79adb589bea30c2e1aaad25d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0xb29805353b39c32a593129948561c75c4cfd2665d6b6df1a4382852cabdd5a17' -storage - (Some 0x0406a55686efda6979432c9341b85e43ad67737300c96dfb62db75b848e63ecc93646b1e592b635817482963c984cfc70d3597fa84773c5e3500d61b407dcf0a932698a8a2de4285c81a8587452ea5c9a9996ffb625f81c0cbe0b9e8c8b7b76f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0xbf259528122a2e60641781c7383d4fcd6d63e18680131a0a8ae9a5d5eb34664c' -storage - (Some 0x0185cab6fd147f77b35d6fe0f1770a9859127bae94ecbd402b1ac2b1f65c27d0c83ad8da963be1b9635176b2e5c5a1d3072c47311cf5aae7a9c621b06bb154a4b89a65e73d311a75f1007c3e9606f366b05d6be349bd825694d1b7e48238cd12) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0xc412aa942ebc1384282ebdd5afc0ff0049e03fb26e2cee36193e010a6199b442' -storage - (Some 0x0e9736e5772bc8a33aef6d9a8ced43e9ffbbed29ba572e5597bca97806b64982f29b79d9958f4501bf4a74629cbf9253068d0105f3f16d8b03e3e7f7e73a67f98e1f2a20cb6f2d7467403b1b8f69cff726256becda08d187cdd5fc263165b21b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x22386f55e46149a2a3b86941da0b19cedbe3845a505b89df4fb8a99d3ad2cf5a' -storage - (Some 0x00ceb4de98ec92f7a3b6eadff0f3dd41830e20d5bf83b70123f70021ef22b7fcdeae86bcdecbfff4f61f77a015372a4e0ecfe1ca78dd49a39c9eeb36719e6b18d8be54f55fe3c18e0749a81af4a7b3019c8ffec71970631d76d2ad03b62e1436) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x692617953b3cc0fd9b98e44b381803f9138e78c9ec3c3e78ed10e430402a041e' -storage - (Some 0x0b663e6c5376162a968f41f23ba1c2ede975995078be3ed850442845d1fc6ebc91ecc591b58db1e568c2ca9e9e91b40b15c602104a060a08ebfd31e8aadef51b40357003f24223020553876767b83b1f51afef6a5d2756e0f26036eb6ee24aaa) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g1.tz on storage None and input 'Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x1713902a27c37a85f4c6233f52f3ebc6a85718185b9efbdb190bf5025113a962' -storage - (Some 0x0d9b1e3f917ef949642a2a30da1031096abf49145bd66efeb52e52ff0bd517e77a740d7bfe08a44d57f1f216c7b952c40b1a84788e90b7a37dd66b7ff6fe4b188670445003753f48235abf5f1e1d6d193f8182e5608d3ffdd2e2877e4d1a9214) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- negate.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- negate.out deleted file mode 100644 index 1690636618f324a469189fe3e0026b1f13704a16..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- negate.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 -storage - (Some 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab -storage - (Some 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 -storage - (Some 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 -storage - (Some 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 -storage - (Some 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 -storage - (Some 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 -storage - (Some 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 -storage - (Some 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 -storage - (Some 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c -storage - (Some 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g1.tz on storage None and input 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb -storage - (Some 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- store.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- store.out deleted file mode 100644 index c07599583ab23cc575a00b6ee07437c2262285e0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g1- store.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 -storage - (Some 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab -storage - (Some 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 -storage - (Some 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 -storage - (Some 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 -storage - (Some 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 -storage - (Some 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 -storage - (Some 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 -storage - (Some 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 -storage - (Some 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c -storage - (Some 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g1.tz on storage None and input 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb -storage - (Some 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- add.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- add.out deleted file mode 100644 index b6cc71745773ed4a8f6dbf338f60b579fc9fd1f0..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- add.out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x0fa220d57ef6e4195bef1c15c25d36d303589da95432ecf1231872d322dd6d1aa9195e14521269f60906b929f5e511c616ad91b95913e6d5f03c7144ea9a8ac2cbca74d4e4661a744c1c31e666a3b9e229d19f0f4a0849dabf8d42a999429688153a350f527d5b45b66f4fb7362472a9a14ac2e5be7fc7a1c07735b62fa366eb7d6b938dea2b3476c4efee97211ab51513312efd116de802599d7fe3406ecc09d9cd128fb6f6ec92cf4fc92ba02d9ecd623a7124f9936ae05810095b07daf50e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x046035dfa9f3f77c402f467c98c79d31cdaa04b517ca830495fd211bd96007d9e86e77f52b563a678a283a93e990b1cd0e920c1b17a7c522a1cf06d9eae11fe7a83ad560e264ca83539f129ec7781b2aab6aea834c7cf3790ea8bbf36bc8047f06fd35fac95c31470220839b5067d8324b8bc7cdc64cd02483d08fcac9d0ae2803ceeedb4ca0491c8d01543d57c0773a0b356cc1179eef81b6db0e5cf4a82eb452c038f2d84e3c523165c7bcee56984b43c78ebceefa58e75071cfc4298d8ffb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x0c915014aed040179e85ac98cebaa76ed11a7de7d2a9b50b8c595ddb660a7ba20352d34d3a1a682e416488d51c627db50d3ce8ddcc38ce2c0c44527d45e540a38dbff1324324b8cab15a89c00d18198277e22a48e959bb88f87d81f22207a03712a5b4e4d758741d995ec296cf72903ea3af86a3615df586334a0bfe787af1c9efcd97fad13afe8fbcdd60aa87744a1e0dbf2340c9e8edd52954ce815e3559ce021dd0676af7e82d1f26457ad4e64effd3ba90b2101aea30fee2aad64c779417) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x048e783c39590796da9ce919b19a7179fbf7ca422986428d9ca4c00afeb3da88f78e4f85ee312910119a31ac675803c703e8f3560833feab146988683e7c192154c6741f449f711ceb0b5c732ad8f488fe57cd5fe3e5b1eac5b1d43af705ac4d1298b37bce78a4bb17b138b420efcceae18f300c8cfdc6417bdb84ecad21ecf6dda75d040401061e07e19a114dcd059f0354cdb917a218179ed3c1cee43a2dd932ae73cde416730172e886321c2f828cf2fd2c03fc522f3df06f571685eacafd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x0dc42d2bf532bcce973671bc74419a7d43b504f66667356c00b68126501cdd69edc6dfea8ca9bf757f9286c30aafb31d07cceafd4ea4ec714a310648ea80180e439a6ccfdc6ddf62b9876bd5aef725b4cf999f25006635d7cff2ec0b70abb92e12cc523377fcbb5dfd41cc087fbd675b1309f700513d5ea90d2a3b08cf005377cb34f64242fbd775ba63d5368ea6a2bf0d3487eb537b7a8ccdf230728b71e41056ef93b27e5476df0cc4246bca3640b37c1cdf1af59910a7a474148d55901b95) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x0d211843d3116fe2962e44424d5e1bdda2bc55b0c07a4eec8c0d417d3597faeb202e986cb03711e879f3286c8574615f14e779485d1389631195cce6b413184128352544968c0c48df886eb7284361d514dc38999f77dbf5d743add4bbecd4301288339cffd03d1098cc0bed90dcd583bec892c5f3c6922831d21cb8b7150c76ac4612ea5489c7476c1bcba216eba61b0a7447b1fd3d5383f5b2acd06c322ddfea84fadba0fcd995ec5ee701a34b9846e93974dd3cdcc5754bc7f21705b0b58a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x013e98c54426b5c356a094af259f5a6c3e3a16dee1b4699157dcd7b4b3dccfab401dbf1b628b60293512b5ba8060c7b80f3360d8b7afc977b5ed76e640ede1cd785d0c021a0478d6be0f43288ad75dce019551110ab5d251bc6c789b8a4d9c74078c767bad0eb06bb1447818304a37280ffefdfd862b137572fc3e2131d03cdc89f2637227e7303e7ab685f87d5f386e00102910864b02ff09d9ef9b534486c11b9ff933e8d2445137fc01e0505986e28b0c4b1608e5cd646a8c5a63b4febd77) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x170489c51747e88f11af77fe2d5a8e3615e99924a106963d8c34a966f643a7eb66bbad37c2c333cce34a9971f2ca87a8115b884e4f6c964127d3741fb6fe8b19a81108fb38135498dc4e582bfec87981bb814294c8a5e09dc7fd06097d253c950045ebff141ac9afd3d848fe89b37373978bf030afd38ad713caaa28ff9138d0bd0f6c4a323cc96864e1b1b6aefe1b850feec0b7f1b911f2c320f30411c33737251637803ba4ff4ef1fd480b9b98305a5a5f9ab4faa92b169eda541879af36be) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x1242ac850b78779a40f548b2ec3e5dde33bf432def2c6790a8099096ad6933e2c7faa78bde8a4d4e2b586d6a4d1f4225062fdff88df3cb0df8d5e2097e53ce61b17e211c63579aa95dc63df0a1824ee36852af030034bc218b9b1ce229cb9c8c149807239b0e175e864c704ef55ae2cc2ec33c71186461caee8e7771c5ca4d2eda4388d8fdc15090e026b3654d049957114812fdd6b7f9fe01b98c1c03eca0b7fd62e0113d902ef37f3bc5191182c983251af153b36f478c3eac4d967a5820ee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x18b4558b569b0e5b227388c9d844dc37bc0ad40ee5d5098871d396e09b7f85db50b78b2b33fbf656d02e83b45d04962e0ac8336661fd1bee9f074f35f3413c81d22825c469c70afcbfc724ff25750b7598493ea501e5ee79e0fb2d1e8fb5ee9f0b95aa27a6f20c52438ef3daa6f03c8bc41db48fb24fe73921425b1b4906bc60ab7e4b4c290f3c5aeef9a40f094e3dbe0a031822e3366d77078f5e93a80f8035f6f2941593f4f30481399f91431ec85dfc81ce11b824e9b7c08da1634b8e9c83) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x0fa220d57ef6e4195bef1c15c25d36d303589da95432ecf1231872d322dd6d1aa9195e14521269f60906b929f5e511c616ad91b95913e6d5f03c7144ea9a8ac2cbca74d4e4661a744c1c31e666a3b9e229d19f0f4a0849dabf8d42a999429688153a350f527d5b45b66f4fb7362472a9a14ac2e5be7fc7a1c07735b62fa366eb7d6b938dea2b3476c4efee97211ab51513312efd116de802599d7fe3406ecc09d9cd128fb6f6ec92cf4fc92ba02d9ecd623a7124f9936ae05810095b07daf50e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x12e844776dcc54686e33e5e2f76e4ee1cd3bb53a8b93be65342715478baf39038bfa376032a3c73e0b289139afde6c88140c4f3f0eedab77bda5d94b53f0842596fa673c1a8646a6aa8dd91ee72e1d508d0269d14efc106eab6f51e6f08c7a210c77db6748c89b678b3bca8e2ab6156a21f019bae19948d7e183c36cbb3d6faa7cef0ab8756645b52c97ad26569d71c80305f8cc81292b5fd14aa32933d3356ba5de2a9df2f216e5d01d18be8f4191f5a8012b786f34330a6142e73625fe7f2d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x0794c08576b1ca634646815a4dbee1be812a844e0e66d2e36ac1c1f03d30c290eaba39c1c330aebfe118fdaf3b5fa50216b2fa022e510d8502979b189c7d2ea12cabf1971636fee9c9288bcd3c3f9e5d525d44668234ec816ff6ce5bb29a0e0016736353f2200e00ebe389d5d6471f41d00d0d110396e2b6557476ce46586b8f42a569e2035f6407638d7a501fc99f89053d356e9f23575f131f51114e51a7d5cd3924d233828a18da262983f87adc6931aba26054b692f3fce47dea8d588ddb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x0a6aac5634ec9d9ec7ae20368fa1cd242fd56df6e470b2bac3c7087404724c11d0cea1aad848098d71ddb9d2708cef460abe0e2f2a7c29dd718ef4007fc9c872ef9fcf53656db14560d5e94638ee9baeae92e76b99889e650f1361d73d0b85a304168544ff972b9973313266cf84d5b2dadbd40a76d741d45dc75379765708dc2384a161702dba5a2bbd8bdcb1bbef7d02a3eb80499e7a428d48fe2fa99c6f3ea3c729db0176b3ac1cd48b8ff81d279c133078d6417efbf884c7fac39071ecf4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x1719f1a04b75f8dfdffa75695dd406b35d899d91325401355d2f3fc17abe20e6c04bf95cf265989050ea6be5285aea1708f5efaa1b197d90861811d8497844bf6b8e3cac9fb729bdbceb7d78bf324ceac87035afed4eff6b87efdea86974751e0d9ee16eb55482e287e2bdbf80d63dd5c83a1b16336b4ad078e2d09ce1255cf614209dd7a16228f242ef65c4b79fd2a71276c7a79747f69344c28692384b91b38f85c7bc10ae3f9ea3df0d8ffde7374d3a20f2ab662019b8770853bd39e21573) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x0655de0cf51271c9490062e29b8da70ee4c82939b26218118519aaf6298f2ef60721ffa7daa6a37133077b0dabd296830949eff2b5b24843c956b09c9417f2fa4820fd35ae9a01d5f0430329795f5e39abe6fd35ef8e9fccd43af92246207a5d0b37866f86062eb555caffeae739def30bbc454f2c8bfb1a2480e2f91926cd12b53f85691710c75802cf921b8a5b0fc016f834c60d5e79ce20b3172b777dfffae9046d09e52aa188e45be26b0e3e8e77b8328530a6446fb441a3e145535367bd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x0e9448fd828b81168cbaa65496078edf4690017ef6628e6cc5687082f255a16a9ad51bf31cd780cd03fd7946ce0b14460bdfcb61fa233217a63a372380068585f7fadc6978213e87c1cec52e52c5e84010446b4197e5e15ea7712f0603627eab0076cc785550ef9de1693c46481719f089d33d320fb58eb5e68c63f7dd3a4a511268506fe949ea89b320848d7c5ecf1a03ca948df7b1fa4905fc129a50b0b6e61faf0b05912f0c3eb397089a9752a228cb881331f7d6d9b1e44bfbf3f9090f49) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x097aaa14ee186c44f4781526acfa3a83929f5e39c65ff1266b0133e18d4c6ad549087a2aff86235eb6080f2c6f4fe2d1046748aa1dbfa1ae72dd3116fb4ace512d11a4df272bf34fbddb6c8020791cfdfd29eb4508e8bfd54a1d8b7e16535f7904eb63f70a94be19eb06f2a337006b4583267b9d8ba72e8eec424a445b423118a68a0ea992345c8ef4a13cb68e8ad80b108e284b312f574cfa7afc3ab6d9598cb342807b7686c2326d4d7a257d73ed383a420287d2e3c38eb321bdbd2aa861e3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x1583640fa782fb3c949c9a89b95e52818fae6fa7f130ffc5a8304ab7f78fc4d0050b0061a8e90b29f334fc7168084f4810486574b450bc33691aca553a6aad3123844d39c265ff52e5dc66f0d797a80cba141db073ba767a1021c654eb1a316b0193bd94baca5c7c0fcd370532502b6ac4eb19b3d10a3f4a48bda5858a888c5df42dc9153e70cdddd7393fe381aa1c6416e2203e42a66b43189b3789270d20ff285e3279667e01f18f686caed2c0a252d306afc2598a17ed518acac4e8b1b7ed) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x16e6319ec68d88c4ec5d017df123af94e924963d7e62cff44ac709e22282dc904f8367e30de2cb40af8a237a9641e82f00a18451fe0e97eb1c88b8a05aacf8fd3756c4703cae982bf8b9af0f864a0afbe62feb1a532aa8f8b332168b6c298055179319c180a36ea2b55096b645e8c42f31cfae50884cb06263ffe11b0a210d7f3bdb1ebf2acfeefda47cbfb717487e870255e5ac63c4ec740e2a3aec2e5134c6ce8afd43a1c793c42abd87fe0fa93c578dfd6e5d604510e1a8109b4b35b172d5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x050db0ea21b45502d1672a82bca3e6305f8a37689460f225920f4de664a9b3df4912f035314ec9b35d972ba67a522b8d11031b259adaaab72858a94000b15200254698fce139fe4f647a3a38e759144d7c7a12fe263194e3443b95f0e863c9f804ab9bf6e3eb7dc3515644dd29e5572f1ba34a18feebd12da678d35fffeb65071d18bb2dde6b6e70fbb14458e5adee12113aa6dcc7d3f7c25b84031fef1ce34e8b7eb8921b9ccb08d7a49f4c54e0e2cafe9eb9a009d86f2d118c784848c67db9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x046035dfa9f3f77c402f467c98c79d31cdaa04b517ca830495fd211bd96007d9e86e77f52b563a678a283a93e990b1cd0e920c1b17a7c522a1cf06d9eae11fe7a83ad560e264ca83539f129ec7781b2aab6aea834c7cf3790ea8bbf36bc8047f06fd35fac95c31470220839b5067d8324b8bc7cdc64cd02483d08fcac9d0ae2803ceeedb4ca0491c8d01543d57c0773a0b356cc1179eef81b6db0e5cf4a82eb452c038f2d84e3c523165c7bcee56984b43c78ebceefa58e75071cfc4298d8ffb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x0794c08576b1ca634646815a4dbee1be812a844e0e66d2e36ac1c1f03d30c290eaba39c1c330aebfe118fdaf3b5fa50216b2fa022e510d8502979b189c7d2ea12cabf1971636fee9c9288bcd3c3f9e5d525d44668234ec816ff6ce5bb29a0e0016736353f2200e00ebe389d5d6471f41d00d0d110396e2b6557476ce46586b8f42a569e2035f6407638d7a501fc99f89053d356e9f23575f131f51114e51a7d5cd3924d233828a18da262983f87adc6931aba26054b692f3fce47dea8d588ddb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x13de93d2f82a4593a29d234fb227db03f16f89b393f015623a52b05fb36813a3fcbbf21e29b95d78978025d9d5a6396a0ff1f395ee54e4cbfb57d3dc2ed0fea341f0c6e38266fd3d6e81cf9797f59e14d1f8a0d2ff53addc076cdffd23f997810c9767ee2f3f1c842f453cd4aefeb8adf07688d4811da35414c1a7433fbe5d6f59fa8c0574cef2a2d7e703c1954c19e411ba2316640e231ab6428cfb8d1d25f6a7bbe3ce0d8842d45151099ff9e845cd1eb75fd8d5c4494a2de389a0e9350ee6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x18bf19fa45d0936ad736e8f0ba44e75b71e263a5f0b64dd4338a33d98243c13b34125b9f49bc8653437e45de9d30a93a17ebef17433f244d7a64c0fb2b6667fc3f5bd0b11752b11ca48db539506cc87d1255ea878c9476f12fa76baced1e1dc40d2c7a1a772abe14400a371e2dc53b0e30139c173c4b63af51e0a8f098f779652ab6a7366ece6e726d0db36d4d869c1f15b760f663abfab268d9282848751fb6bf37b73d45a499a5b13d944177be3c183ea90a22c707bb1102c802c7ee72beda) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x040a521e7f62b87f49a3f96b3c33b3f92db0f6bb0e708b6929eb59829bfddee5005e98176447c65e2054703be2fd10df0cca3815ceb23335da24867b07563b6d4696b27e3da1cb00a120bdb1f506113c0df675c1923a791523d83b45a13102c101ff42b0097527d2b1d88646b1e68513b7f61533bce07fef8bbd17a592f3d7dc5e148a165633337607495e614eba86b410ae2cb3d04d352036f95c34417364368b862a29199668bab9ff5261f94fb6e5a00f8eef9d0a3906e57720dd315f7921) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x05b81eb847ac46ba0a7dd65998e59571ecd7ef546b7683388f631777015fa72f4e2463b4d193b8ab575b0aa8d077cbf105d25ba702f7c774572a60719894156141940a0a39e7ab838cb55524617826775b9ae494ad11213834dd86b1f02fbb5e12a932312f159aa63ff0817f8e4e478092fdfab946e5db0c05a0021374716d167cff0164ff823dfc39ec1f871233dbda0110bb37e8d5b4764fc40d6c7c62bddda525765a53385ead794d6442cf5b79fe14e2bf4a74874da68aab1507be8b31bc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x090024be3e658d797ea05cdcf404ba80847cd69c3585217310973fbdd59b3ccdf9bec4437325f24816beefae2c2986b6073d93a3d5f5d2758dd6dafeed80c6e730a512471c227036b0cba91369f2c1043e8722c1d87de3ba901780a0824ad90204a467083e873a87884ddb1b6455d36314ac953c47dc86f01221c97b2c70a62f24b852c291d49845744c1812b85a2ebf15ab172859a93dd93be43b59d784079bedf952b6596ec6926a22ce8511f503805914b72752b022bb32faf521764cb268) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x1390ef409a99796aef7b741837f04ac5b0971436b71987ed2164e89950b9834257d50b1e1595e7d423b70abbe9ab5d33110ba5f262ee8cd728c8d20116827832198aa304fea6bf519d767260f947027f544903b9ec4ad73b0404f705ad1bb7e70b8f4bb943637d1830d31f24383f251ba5d64281472d5230fb974afdc27014af81689d5f830f17b76d4fe61b6bbe4a21128c6036642b9f636ab3215921545b3d886df46475f9a11a4ae9a173069675a4a02560a7dd717f7d204427a5b33563f9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x0bd2a8921e426f811f8ca3820348cff6dc8efc095010d4068717724a3a076a565e609be3f1c78c4b37a61dda5259a3750e70265a91f14d71b38ab1df6f14ffc11f8ff8c552401dc1ec2a70862905724a928888ab5000cab2c206f147f49a9e01019581dfea445b53898ad37d69dcd97f00db2023fa4049a3a3fe3158275aab62cc16f14f766dd9df07852f7c5df27b2111dc81ab19b80f5842c7763b036090e3a8368b6db669d80e74c0231073a46835f7dcb34aab2bbb79faad55940977dead) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x0d6af0671af039e4046dfa84fc7aef856495f732e95a24e0958b9729ca4b87ccf8b115ed6d1b60265b838116f5c56c8e0e1732e3dcaaa2c0a44c5f58a3e2cba84005b2aaf4fa70b995d8c30f5d0c25c0a9f3b6388ac91da8f7c4c9fd084917e80c1152762adcb783bc96ae1e2c37d6870a174b5cbdb1adf5adbda7d88671247471b36c9d5573ecebbd068087f45dee5d16925acf0e18b5adeeb1d4659f2f8df4e8af39da572e425c796f486ba67e05f3b7c15747f35781294128e32cc66ab87f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x0a300f596c740d3a332118e868fb8a0ea04688ebb394489785ecebf2739443b346b324e3fd9246050d0aa1d3aea9f1ce0ad93338ac85b6a66c0f3fa35c81ade175275570facec6395631a1d5a977afbfdd44dcd174d2d782105a1503d25e9baa1717a6f3d40df12d5003fbef8dd4e176fdafd6c1bf5e62908aa160ecfabbc1a9d608c32417a1221d589f70f5335603200c9e15e9288f7fb90cf7101301dbfde0ee2051b698310f855b1d876cddc553d4ac3a88f8de8a99d7645595b4ee64d3cc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x0c915014aed040179e85ac98cebaa76ed11a7de7d2a9b50b8c595ddb660a7ba20352d34d3a1a682e416488d51c627db50d3ce8ddcc38ce2c0c44527d45e540a38dbff1324324b8cab15a89c00d18198277e22a48e959bb88f87d81f22207a03712a5b4e4d758741d995ec296cf72903ea3af86a3615df586334a0bfe787af1c9efcd97fad13afe8fbcdd60aa87744a1e0dbf2340c9e8edd52954ce815e3559ce021dd0676af7e82d1f26457ad4e64effd3ba90b2101aea30fee2aad64c779417) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x0a6aac5634ec9d9ec7ae20368fa1cd242fd56df6e470b2bac3c7087404724c11d0cea1aad848098d71ddb9d2708cef460abe0e2f2a7c29dd718ef4007fc9c872ef9fcf53656db14560d5e94638ee9baeae92e76b99889e650f1361d73d0b85a304168544ff972b9973313266cf84d5b2dadbd40a76d741d45dc75379765708dc2384a161702dba5a2bbd8bdcb1bbef7d02a3eb80499e7a428d48fe2fa99c6f3ea3c729db0176b3ac1cd48b8ff81d279c133078d6417efbf884c7fac39071ecf4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x18bf19fa45d0936ad736e8f0ba44e75b71e263a5f0b64dd4338a33d98243c13b34125b9f49bc8653437e45de9d30a93a17ebef17433f244d7a64c0fb2b6667fc3f5bd0b11752b11ca48db539506cc87d1255ea878c9476f12fa76baced1e1dc40d2c7a1a772abe14400a371e2dc53b0e30139c173c4b63af51e0a8f098f779652ab6a7366ece6e726d0db36d4d869c1f15b760f663abfab268d9282848751fb6bf37b73d45a499a5b13d944177be3c183ea90a22c707bb1102c802c7ee72beda) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x0913a51db9080ea2c98f0d39ca48c1a13c1da70e31dc19881aebc8e8372bd01a9a20f7b537aac8d3a7ca04560a2203050a89da45917cbde7ce124eb1f1a71ad99360787e3c9dcef63b49293e00939619cfd2772c9016dc58ec561b9fc896f0a10a2072b1e73a5c45e8d9eedb0f51aac1c6eb9205f4f22633c3e4188f702bffcc9c47bb7e4dbf24323021c4b5502f96b703a37de84b8d408a8da127fc3ca3b73d44ffc766c9009d46ea7dbcb0239ed853ab779e59fad95a2bc1a385a5299b84e9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x0f07a4dba873d6a94e491900c012798c4fabc655b547246881b8f32dc445a1c4b526f6df1c44147e840e5e19afe0b6961294f805495eed4fe60a9f7598bd74222ae3499b74266c75cf28c6f60710fc03900f6932086a56e746b0ee345c5f3bf1009058242c0583a7457a2e4453dd3b9a27f73d5880273338aad994a9fa6f7920e103611dec931e2bdebfa181a129bd130e002aafdcd6e3adcd33ec7381b4e1ee4ea00eb5d9aa23dabab75904097fb85580786a923121512aa6e3c2c2fea6c2c6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x007a9f1614d062b255a27b83458a3aff3c81866153982a9ce763dcd10e908c44656c2edd264a1b61396efade79d80499058cae9125376748389dbdbad55088d1509c1a6614c57dcfd3e1cc47395ffd9ed195ebb60dab36cf6b6083ca10b49b791363970cdbd6072ae4e6ca782f508abf0a2d7ebd87c3eeaf07fb0c6158a16a807e1371e1802fa090ffb3813049f22e02054688c54a9d803f46fcc3f9576ccfcaa0c7f90b766330aaab3a4ae32134dba9e48fd6830b503687fba4c8053fa6a93b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x17a51f0dc1e6bf2aa154ae6d97fdbf0f9549b8a8257fcf4a90229f0a001715515c6fa8ac0a97537cd0c87c5722014358147d464e2d080e68d648a9b9e85ae4b1e5d6001f08dd6e0fcdfd20c6932534de458127c9c39322227546d1d2b898b613072f7375c55fbb46a4e122a7e1c45de6d6319fa2c487cfbc5547c6dbf82b38c81e8bb765144e997fab37da639a14a8f018a22c427db84499cd2bba0c736bd9da03cd183568c27741b589f94ad59ae372a6833b2caafdd088fea7eeb2fdc6790d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x10f1197dcb5335bbc9fd9b0ee96ed160c1d8cf7cd5a2c23550f75c7d41014328934594c87d0fc79690575e3bcad723ae094a72493ff86d36163129d59cff970820a9ea2a9ff57bba76aeecfc378e14941030b91bdfd0710d2d531e368b1959ef035d6b262ecfbbe0277c7c09758fcba6fe5b3f35f6d3e2e35b45f22beb6873b4e4a3b4293e58230ad4318313c3c6ef5c11e4fa223503b33cb6bde56d611716631b55c3307946a72b7090f12b6f04695f2432836516d65cf70e76dfecd47f3eba) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x0d81babfefbd132108cd4e247204997823727cd2267020d505821c2ae0d5a73103d40fb8c876492ce84fa43b7c97352202344ed091fcb8a4173325899b70122da54d00e67f3265676204f06d952b21d92605a7d70e1a9fb7019201873755239f06730064af9a494bd52ecb00250c317bf067df6a6eda21bc92c9adfe746b056e65dfc4badd22b832060092b018cee22a096f0f6bd5fb0218e1b3a5ca8119e6c40bef5a6dc9cc74f34517d3a8997b1e0cb36479ccd6e46b3d9fe2de3159d0e8c0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x178fd42698e846ab09f28e4b945bf51a573a5f67b01a50e7de386e0c2cfbd4d436ca77d0586aebfd3ebcf0cb03d247d600f2b025bc852bd51eeb61f0394f3fe553a2353272f8673a1a1720bc472181d16f884dd78bb17b080f693bf1ceb139430d2786584df371d15ab7529aec1fb1890818961979210babfe275729d11678117629b50b6971a5734844c856f1ad4cf909f85560e3a5dd049dc357e6806b2ccc8661032eb206cd718e27fa266f7e2f86240e655f72538936185697a94c122f7d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x10875427dc85c110b01f3bb782936f27a8cd5466fa0f0cf5917befb74c467104bf0a2fa605d465d902e1ce414f571a000468b7ccdef205be10db5fcf6c3d935f273a2f3bac6329c30c1d5493d77ab1068a93f5f3a93de9a96e57a77ccec573f413c396a7d9e079253c98302ca3e10dde046279848c9ae49e24b14158f9091e84bbcd61e13f09b57cb310a4c6a973acff0836fa3e258df34ad0c89e7b280e92f00acfc220eeb5bf8647a30d3971f08987f7191983a45396d68454d552c903cd13) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x048e783c39590796da9ce919b19a7179fbf7ca422986428d9ca4c00afeb3da88f78e4f85ee312910119a31ac675803c703e8f3560833feab146988683e7c192154c6741f449f711ceb0b5c732ad8f488fe57cd5fe3e5b1eac5b1d43af705ac4d1298b37bce78a4bb17b138b420efcceae18f300c8cfdc6417bdb84ecad21ecf6dda75d040401061e07e19a114dcd059f0354cdb917a218179ed3c1cee43a2dd932ae73cde416730172e886321c2f828cf2fd2c03fc522f3df06f571685eacafd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x1719f1a04b75f8dfdffa75695dd406b35d899d91325401355d2f3fc17abe20e6c04bf95cf265989050ea6be5285aea1708f5efaa1b197d90861811d8497844bf6b8e3cac9fb729bdbceb7d78bf324ceac87035afed4eff6b87efdea86974751e0d9ee16eb55482e287e2bdbf80d63dd5c83a1b16336b4ad078e2d09ce1255cf614209dd7a16228f242ef65c4b79fd2a71276c7a79747f69344c28692384b91b38f85c7bc10ae3f9ea3df0d8ffde7374d3a20f2ab662019b8770853bd39e21573) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x040a521e7f62b87f49a3f96b3c33b3f92db0f6bb0e708b6929eb59829bfddee5005e98176447c65e2054703be2fd10df0cca3815ceb23335da24867b07563b6d4696b27e3da1cb00a120bdb1f506113c0df675c1923a791523d83b45a13102c101ff42b0097527d2b1d88646b1e68513b7f61533bce07fef8bbd17a592f3d7dc5e148a165633337607495e614eba86b410ae2cb3d04d352036f95c34417364368b862a29199668bab9ff5261f94fb6e5a00f8eef9d0a3906e57720dd315f7921) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x0f07a4dba873d6a94e491900c012798c4fabc655b547246881b8f32dc445a1c4b526f6df1c44147e840e5e19afe0b6961294f805495eed4fe60a9f7598bd74222ae3499b74266c75cf28c6f60710fc03900f6932086a56e746b0ee345c5f3bf1009058242c0583a7457a2e4453dd3b9a27f73d5880273338aad994a9fa6f7920e103611dec931e2bdebfa181a129bd130e002aafdcd6e3adcd33ec7381b4e1ee4ea00eb5d9aa23dabab75904097fb85580786a923121512aa6e3c2c2fea6c2c6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x1652363a9bd3609c22f6c5f10c8768241de0d1c618e704b0e325394b315a7ef87ed5168d497ccf2c3a49d1d4896af16d09e1eb819ca6af9192af93b67f5a7421dba6341219ba2bd75a9e12811de4b51df938389f7cc9779a75c19057ef83a4010ab86d7781a14b40516ed6fcbca26854a57b2db78a306efcde40f68adf013dbc571f99e7474592016fab08f5dedc12f10dd07ea9e487477f24f901fca69ba33acfffd74fc545cc745e1130fbfc3fe35b7d9cf21f94a9aad692c1df2cefeceefb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x0faee564e739a7e9d9b2eff2f35979f8c893d0fb5de5271e87ae9fe3ea42f0ba75d7eb1dca9693890de995b40ed7dcd600161d6fa0462125050a0bf369d9858cc893669f3984463d40af2547cf1a6dfadadada5f3c70d05b3b774b8e3683464a06a7830e2c2bbce87a8680b2493aa25aba646bca8b5b818a09581b7bb1be131e08c4168a043e45d56eb41b8b00a6507012cf7fb8520bf61b78bd019df07865c0b1d267e889b104551595f5034c798fc9b69dcfa5b9dbc6002e186cf9abfe0802) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x0101c54987955e4eb4a0f6423fd7b3a2f06ff5f2b98213529d2174c52b33f8cac47c770821a4133b7f153e98e1669f2f057ca3fe1f9420a22afcb783ccbc950d5e0c3c8a3762d66c31b627e93f9e169fba3269fc3cdc1e904d37c900b80254df10abedc8e7cf31a272448329518cf12c1cdb0edcdc5c895f841092a98a0ff37c3556cd079f0d821a22b413a56f55b6bb0de003bc4059dffd6153580abcf4b27b8426d9439e4d4da431c193f1d62c55e7161b2f790f4b31413aa8cfc1a1c45cd8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x0568e06e680dcdbb2d68fe791e938363a7745910b3cb48d5b3a70aaa6f4e4fe2100334864bdd33033cec36ced33892cf0505e34bd60aaa951aa619535951ef24f633bc346797d240095e4826ecd461d6f8b0b7e61cb34a552f85ba7ea44ad32709f7e4e554d56b687ff494ed2d7dcc4861e1a67cb044a84327f9054b8e313beb68147d5adc70525b3dff7f358e864e060667f4ac5edfb803dee782e88cf9dad054d38b7192abfab52231b73b6410c2ad58920988189c07566290b4358d6696f9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x0389a5e8cda6286ab1e92f4c6b4e42cae46fd148359499b41e621d960892732247f291284f305c17377a7f703c804ff80ee8cbc431aca16be396de371af1f17959524dfbee3c6bde917c9155699d4a2bf6cc11bbe9c1393ce8bfb67d3765b5330d8321fb114c6aea1587d420ce7ca47126a75180656ed806d530302b35e3aaba0cec9ec31f94a15248c082c1143e625f1344754b953b5ddc1ae40f732696c6f99d900dc880a78c750460822ea36cc86e9350a25ee4e4d82696111477b18ee9e4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x041d34c5ddef9ac443dd7848cf29d87c9ee93f9a1433e0cf214e558e93d488374812a9d2b43791e8be6351ed6b0c8efb04bd817bcbf3426b059e7d0905931b309d41e46378a62d0ae0c335d754afd0f4aad27ef66e6cf81883999cc3e19d5cf300dcf814ace1aff20dd3e8cd77392190663679a83289becb9cb669b4c04c1328d11147e928d96e42272815b91d0602931219e805b8d2b35c3ce231c6ff70a93c3100b858e55e42c5f797fac45ae2c19b6afc3e9d4d3d24e0ccfd3ab23fdd973b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x0a85418bbb38c1ebe99c3e1b76e509a9e765bb876c6a567b12e1e07d80a45d8de1aa9d6425aee533d38c716be18e4cf5123d60d85aa0d15271761bf6fe5c75d291602d0bbccaf7ea30625fb18f4f2012286abe933de82871e27bc995aee08ccf0a4a905214907b3ed66515c29319e705b2892d1f54eeb61010cb68a135b5c0eceebdae1f3e510d49223a79abbd1e5ce412f38eb5ea519c65f950ac8b4a274ec8d2742073d4d4603f050c8751202830f8d19465fc6024a4d52c7183c47be42325) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x0dc42d2bf532bcce973671bc74419a7d43b504f66667356c00b68126501cdd69edc6dfea8ca9bf757f9286c30aafb31d07cceafd4ea4ec714a310648ea80180e439a6ccfdc6ddf62b9876bd5aef725b4cf999f25006635d7cff2ec0b70abb92e12cc523377fcbb5dfd41cc087fbd675b1309f700513d5ea90d2a3b08cf005377cb34f64242fbd775ba63d5368ea6a2bf0d3487eb537b7a8ccdf230728b71e41056ef93b27e5476df0cc4246bca3640b37c1cdf1af59910a7a474148d55901b95) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x0655de0cf51271c9490062e29b8da70ee4c82939b26218118519aaf6298f2ef60721ffa7daa6a37133077b0dabd296830949eff2b5b24843c956b09c9417f2fa4820fd35ae9a01d5f0430329795f5e39abe6fd35ef8e9fccd43af92246207a5d0b37866f86062eb555caffeae739def30bbc454f2c8bfb1a2480e2f91926cd12b53f85691710c75802cf921b8a5b0fc016f834c60d5e79ce20b3172b777dfffae9046d09e52aa188e45be26b0e3e8e77b8328530a6446fb441a3e145535367bd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x05b81eb847ac46ba0a7dd65998e59571ecd7ef546b7683388f631777015fa72f4e2463b4d193b8ab575b0aa8d077cbf105d25ba702f7c774572a60719894156141940a0a39e7ab838cb55524617826775b9ae494ad11213834dd86b1f02fbb5e12a932312f159aa63ff0817f8e4e478092fdfab946e5db0c05a0021374716d167cff0164ff823dfc39ec1f871233dbda0110bb37e8d5b4764fc40d6c7c62bddda525765a53385ead794d6442cf5b79fe14e2bf4a74874da68aab1507be8b31bc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x007a9f1614d062b255a27b83458a3aff3c81866153982a9ce763dcd10e908c44656c2edd264a1b61396efade79d80499058cae9125376748389dbdbad55088d1509c1a6614c57dcfd3e1cc47395ffd9ed195ebb60dab36cf6b6083ca10b49b791363970cdbd6072ae4e6ca782f508abf0a2d7ebd87c3eeaf07fb0c6158a16a807e1371e1802fa090ffb3813049f22e02054688c54a9d803f46fcc3f9576ccfcaa0c7f90b766330aaab3a4ae32134dba9e48fd6830b503687fba4c8053fa6a93b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x0faee564e739a7e9d9b2eff2f35979f8c893d0fb5de5271e87ae9fe3ea42f0ba75d7eb1dca9693890de995b40ed7dcd600161d6fa0462125050a0bf369d9858cc893669f3984463d40af2547cf1a6dfadadada5f3c70d05b3b774b8e3683464a06a7830e2c2bbce87a8680b2493aa25aba646bca8b5b818a09581b7bb1be131e08c4168a043e45d56eb41b8b00a6507012cf7fb8520bf61b78bd019df07865c0b1d267e889b104551595f5034c798fc9b69dcfa5b9dbc6002e186cf9abfe0802) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x190a43e654201a22f136074d73670943f55d9aecb573265aeb468a3981be4312fb9a4433226bf732ee30785d96777902129caa52e3c917b52a5986a3a2e0988c5b4599758dfdd8b8024d4c7fe2367d32fc76daa9ff49908e166bdde45f92047916bf8dbb99122b1ff4c9ee86139baf105ee10e43b5f0498922124f3586b8028b7e625f823adbd245f727af481e8b857f066ff52607848581ba0b3bb234fae345836e721e87da734004ad9b2d5bd9c5715cf4a319fe1446fcd44d903696d7cfd9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x157ccaf298e6f2f5bb8181cbaa6aa328017941016c64cfa74cc3e00f5cf2869f3c8860faa6ff5311ea350683ee5ff7c60d1e6e4b821dc8a93f62dc44a51ab22bc7abf454674c71ff827a180c3795023d2b1e68a8e7737751822f9c4bd6aacf000bb75ab2b25a7ab7fbe14bb31ee654e403414daa2555f7b5118f863e6bb7e21037bab85dbd91056da6ecada4865acde118c24c9e50c23fdffb2039a28462907531ba502403a4b5f4bf319d9eec76986d5e6b1073c144c9037d68c1d5c1206346) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x09401247b0ec3821e76eac4d2f7781b8a7103a3eca47bff3901144b312d388a85e73784b13283b13c790a3965b3ee30608a825b98c11eacfc5a49fc7a4926fda4530a264726bb64b7f770b03a7e0d8238656e983d1d0b09e1ba8b3a2cc8d95160f471fb3849b88618aad9d3887c4f3c4caf640b9df522199e31874b4fe25e3d47ffe876ba7581c1efcb61564fef5de411320363b8068921585104922eac63d5c761a91febb3c59c692cd1f7af390c7a9b194b267ed602ca04f6649b7f1c6c82f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x11b8b6aa6be5808d466a05c0a081ad49c76b4981c090ec40d5aaff4f76769d2a40977832b891edb15c3183acd4ef27440c4d690d911c273a99fc02ff972e6065ba27e20963fd31cce1dad2f43262c7134505342cbb50986af5e2ccfd23028c140dac1d43bcdfb3db56a04a6ffbbefef37920745f008740ac0d203a0c107060da2c2d76541cb99106a4f6b2a92901f1c10cb83b3a5f8cd8cfefddd33e00e4d1aa74c943a630119bf7e9af37a2502fde14e9c7c7ea128d0d8ac008492180630b5c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x0fc834b3e22f165ca01322359f1a444b9d908bdda1da37c73d859166e28eb2d18f364766fd1a9ce475088f5eb87273cb0102e1732224bcd7e357fd147b6f41919b90afa7c01a7ad1067f39c5f216f067ad224fd70182fe8cadfb05d0f42a5fb5004f21703cb18754d8e5dc7fe79dc7e2043bc50f7a583f399b5ca04d8941a92165403b4d845863dce7da1cff98d461b91979c4dc4e9fb3874aaabdfdc87ebd9f5f45c21ffdd8ad043643b2804edf9be567c641fad3f5a8b2b6abb8d6712f998f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x160966746459617c6cab57b84381ec97015be3cc8478361f399648f49ce8c5fb3585add8e721ce81c4a352067dad40f30c5f2faa59125982009f01206706e6298133570dc4f029776abc6aca7c143059200a50e6ddb67a0550759b442300af52167c1420b0fdd70b2c44ab737fbd32e2c470cc29418fa553d502e8b1eb6e3878007aba165eaf4ff1b6743863895b4be706e1193be3ad7c6a3968c0d787989d935451aa17ae9d60568f4fb0507be96308243090e3ccdf3075faf8ee54c8a2f803) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x0d211843d3116fe2962e44424d5e1bdda2bc55b0c07a4eec8c0d417d3597faeb202e986cb03711e879f3286c8574615f14e779485d1389631195cce6b413184128352544968c0c48df886eb7284361d514dc38999f77dbf5d743add4bbecd4301288339cffd03d1098cc0bed90dcd583bec892c5f3c6922831d21cb8b7150c76ac4612ea5489c7476c1bcba216eba61b0a7447b1fd3d5383f5b2acd06c322ddfea84fadba0fcd995ec5ee701a34b9846e93974dd3cdcc5754bc7f21705b0b58a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x0e9448fd828b81168cbaa65496078edf4690017ef6628e6cc5687082f255a16a9ad51bf31cd780cd03fd7946ce0b14460bdfcb61fa233217a63a372380068585f7fadc6978213e87c1cec52e52c5e84010446b4197e5e15ea7712f0603627eab0076cc785550ef9de1693c46481719f089d33d320fb58eb5e68c63f7dd3a4a511268506fe949ea89b320848d7c5ecf1a03ca948df7b1fa4905fc129a50b0b6e61faf0b05912f0c3eb397089a9752a228cb881331f7d6d9b1e44bfbf3f9090f49) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x090024be3e658d797ea05cdcf404ba80847cd69c3585217310973fbdd59b3ccdf9bec4437325f24816beefae2c2986b6073d93a3d5f5d2758dd6dafeed80c6e730a512471c227036b0cba91369f2c1043e8722c1d87de3ba901780a0824ad90204a467083e873a87884ddb1b6455d36314ac953c47dc86f01221c97b2c70a62f24b852c291d49845744c1812b85a2ebf15ab172859a93dd93be43b59d784079bedf952b6596ec6926a22ce8511f503805914b72752b022bb32faf521764cb268) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x17a51f0dc1e6bf2aa154ae6d97fdbf0f9549b8a8257fcf4a90229f0a001715515c6fa8ac0a97537cd0c87c5722014358147d464e2d080e68d648a9b9e85ae4b1e5d6001f08dd6e0fcdfd20c6932534de458127c9c39322227546d1d2b898b613072f7375c55fbb46a4e122a7e1c45de6d6319fa2c487cfbc5547c6dbf82b38c81e8bb765144e997fab37da639a14a8f018a22c427db84499cd2bba0c736bd9da03cd183568c27741b589f94ad59ae372a6833b2caafdd088fea7eeb2fdc6790d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x0101c54987955e4eb4a0f6423fd7b3a2f06ff5f2b98213529d2174c52b33f8cac47c770821a4133b7f153e98e1669f2f057ca3fe1f9420a22afcb783ccbc950d5e0c3c8a3762d66c31b627e93f9e169fba3269fc3cdc1e904d37c900b80254df10abedc8e7cf31a272448329518cf12c1cdb0edcdc5c895f841092a98a0ff37c3556cd079f0d821a22b413a56f55b6bb0de003bc4059dffd6153580abcf4b27b8426d9439e4d4da431c193f1d62c55e7161b2f790f4b31413aa8cfc1a1c45cd8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x157ccaf298e6f2f5bb8181cbaa6aa328017941016c64cfa74cc3e00f5cf2869f3c8860faa6ff5311ea350683ee5ff7c60d1e6e4b821dc8a93f62dc44a51ab22bc7abf454674c71ff827a180c3795023d2b1e68a8e7737751822f9c4bd6aacf000bb75ab2b25a7ab7fbe14bb31ee654e403414daa2555f7b5118f863e6bb7e21037bab85dbd91056da6ecada4865acde118c24c9e50c23fdffb2039a28462907531ba502403a4b5f4bf319d9eec76986d5e6b1073c144c9037d68c1d5c1206346) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x17e84dfa0ea7d745d5edac21925ebceab64e50cd3aac7bbadfdd0a0f22b53f529ca9878711942dda334748ddf03375ef16f3d4876216621270a06d9e98da5dce50f032593c39de8a5d8a24b5b161dc778ffc4b8541a5acbea543899d28846821151e33cd504aa31852e324a540cc4cabde2b9005060d2b3cd83891f4bc7dad1b790a62608ae8ba6c1922b21cab0b072002f87e1d6f2e2ca8707a250084343ef5e6559d5823cc68dd6f626d680b421997918442e03a09f6536cc7c9a778c2e6e0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x0c406abc6ba1e8c440436434ef7d9267464eff36edd585dfc75f577f365c9db3fb9c19c13e3e89c0a337a8b729523f32167a1833aab483ff1e412a71e267b60ba69b041aa8c5a59e6640cdaa6ff33e2a5bf1b60f32bd202bbb3dccc7aba613230756e1df0b2a0466aa7a27e21e9ca58698fbc22d840e5fdbc8cf1faaec79a41d833ca9d5f39011665fefcc17dca1390201d811237817821f0e9542d612bab688c8c376c13da0bd2c781263589a423cba089200ca81113526b8768dd3c737488a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x16c262c40999ca1e5a1e72b13beaa919bc10d08466df19e456a033684b013d4100a36ddb6cdc3887dd97e8db4b86818d08e52a91709b30f3ad36e2593789e280518ae5e4ce9821d378bcd7882f6f70c1a7cf9dd2d8b15f985f0c2c5bf08f54dc0452b9dde9a272149bfbb2a32c6a1f69f659cf130c30a27afd3fa3be26bd8989d17f2be11b386a318b6972593b7393c90c4f22e1ed7f148d35acc321c3a3ee2069e368ab8df3635dc5950258afa398228d4d2c53dd3c12bf1361623a69ba2fb4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x1487364b239f67fcc324212755b15f25999401cbd86cbf4a526807391fa6773593c9392810d6689a4a0558d89ab72f4f00d4801e639c8d4987569a262be2001af7f8e98ddbf41f37c054b21e1d6818a12f391dc206c558e9f04148dc00a530820fd747276d53488214eb0cf8bba8e4711a4c3c209078a01293ce06d900d3c1a3a2060a6bb9a8f94ba6896773ab2061ef0ac7f39533e34c6aedd26dda7abdb3e3489d17d1636a65017423a7ec696e4eb00bba6b15907b606c719ee4c3cd341958) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x031951f3615a669880243165f6eacc6f5fa02daca321907ccb06770cdcd9c92d368cf58cc4da05fe857e9fc551744c8201b4c54cabf0c8d0d8d49872393aecb32aae3b1a3441ecf7bf15bc1d1dfb2aece9ed92afed8a75c7508ec4be49fd8bf00059bceec915ff60237a600916ae589dfba6dffb71d552f65d80b042bcba249f906784869c6445303561565e0e17f0841977e319775541feba65f0600e082fadea21c5ab09b0f9f6c79cab5e902e3de712104ae6c254ebb000cac8f3dfac9726) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x013e98c54426b5c356a094af259f5a6c3e3a16dee1b4699157dcd7b4b3dccfab401dbf1b628b60293512b5ba8060c7b80f3360d8b7afc977b5ed76e640ede1cd785d0c021a0478d6be0f43288ad75dce019551110ab5d251bc6c789b8a4d9c74078c767bad0eb06bb1447818304a37280ffefdfd862b137572fc3e2131d03cdc89f2637227e7303e7ab685f87d5f386e00102910864b02ff09d9ef9b534486c11b9ff933e8d2445137fc01e0505986e28b0c4b1608e5cd646a8c5a63b4febd77) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x097aaa14ee186c44f4781526acfa3a83929f5e39c65ff1266b0133e18d4c6ad549087a2aff86235eb6080f2c6f4fe2d1046748aa1dbfa1ae72dd3116fb4ace512d11a4df272bf34fbddb6c8020791cfdfd29eb4508e8bfd54a1d8b7e16535f7904eb63f70a94be19eb06f2a337006b4583267b9d8ba72e8eec424a445b423118a68a0ea992345c8ef4a13cb68e8ad80b108e284b312f574cfa7afc3ab6d9598cb342807b7686c2326d4d7a257d73ed383a420287d2e3c38eb321bdbd2aa861e3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x1390ef409a99796aef7b741837f04ac5b0971436b71987ed2164e89950b9834257d50b1e1595e7d423b70abbe9ab5d33110ba5f262ee8cd728c8d20116827832198aa304fea6bf519d767260f947027f544903b9ec4ad73b0404f705ad1bb7e70b8f4bb943637d1830d31f24383f251ba5d64281472d5230fb974afdc27014af81689d5f830f17b76d4fe61b6bbe4a21128c6036642b9f636ab3215921545b3d886df46475f9a11a4ae9a173069675a4a02560a7dd717f7d204427a5b33563f9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x10f1197dcb5335bbc9fd9b0ee96ed160c1d8cf7cd5a2c23550f75c7d41014328934594c87d0fc79690575e3bcad723ae094a72493ff86d36163129d59cff970820a9ea2a9ff57bba76aeecfc378e14941030b91bdfd0710d2d531e368b1959ef035d6b262ecfbbe0277c7c09758fcba6fe5b3f35f6d3e2e35b45f22beb6873b4e4a3b4293e58230ad4318313c3c6ef5c11e4fa223503b33cb6bde56d611716631b55c3307946a72b7090f12b6f04695f2432836516d65cf70e76dfecd47f3eba) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x0568e06e680dcdbb2d68fe791e938363a7745910b3cb48d5b3a70aaa6f4e4fe2100334864bdd33033cec36ced33892cf0505e34bd60aaa951aa619535951ef24f633bc346797d240095e4826ecd461d6f8b0b7e61cb34a552f85ba7ea44ad32709f7e4e554d56b687ff494ed2d7dcc4861e1a67cb044a84327f9054b8e313beb68147d5adc70525b3dff7f358e864e060667f4ac5edfb803dee782e88cf9dad054d38b7192abfab52231b73b6410c2ad58920988189c07566290b4358d6696f9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x09401247b0ec3821e76eac4d2f7781b8a7103a3eca47bff3901144b312d388a85e73784b13283b13c790a3965b3ee30608a825b98c11eacfc5a49fc7a4926fda4530a264726bb64b7f770b03a7e0d8238656e983d1d0b09e1ba8b3a2cc8d95160f471fb3849b88618aad9d3887c4f3c4caf640b9df522199e31874b4fe25e3d47ffe876ba7581c1efcb61564fef5de411320363b8068921585104922eac63d5c761a91febb3c59c692cd1f7af390c7a9b194b267ed602ca04f6649b7f1c6c82f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x0c406abc6ba1e8c440436434ef7d9267464eff36edd585dfc75f577f365c9db3fb9c19c13e3e89c0a337a8b729523f32167a1833aab483ff1e412a71e267b60ba69b041aa8c5a59e6640cdaa6ff33e2a5bf1b60f32bd202bbb3dccc7aba613230756e1df0b2a0466aa7a27e21e9ca58698fbc22d840e5fdbc8cf1faaec79a41d833ca9d5f39011665fefcc17dca1390201d811237817821f0e9542d612bab688c8c376c13da0bd2c781263589a423cba089200ca81113526b8768dd3c737488a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x1187c1c4a41b057967c7555492ebbf1901b3879b0c245fc07eed3d75b8fe214d27b4b192d7787dd9efb6144cafdf0ef319040d583646a66954d38d4d0aaa83cf4988fecb448ed5c20d0e30b0f2ebac49d6c35c62800271c84148960455d8d8c302f15044e389412d432389b608bdfc7251ccdc555904248b09160d12c7dcfea3f6d675ca2450a3ad01fee0db94dc7a8d1937a1a1627390ff2e1bee480e4cb54037c7b8836049a39d758ca6c4427dee464ffee79576c66d33e9443c7716a8d37b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x028f518613b138505c6d90b6e0121e01fc99af5cea6ab138892fd2b360212342d70074b5533f45650fc0b9393fb67b7a0770e4d54774c2d27c041f17020003719f9ae0e02d894ee0426cd065cbf5c637f1f2c64714b70deefabd21f9bff17bb900874197fdf56dc904c80dc3c13cb6836cd55be0d154d9385023f48813cc7d27b4386f1c357dd239962f527d4be0b2861261781e283e1fced9e8724f2047843ef1d2de89b8350f2ef0e654e3e053aa0aef768ea4919129f6a5eb26bb7c485384) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x10cf8ebadc5b77f21fd9ac63f34ffb8b27b266f816f1151f9d0b74bd20722b4bb5146f6635e5486a82ff1ade692851580e294b151f624dab1bb74c7666cf3183e19b41917c61a0a837d0f1fada5ff601f07165d9ceaa1e74eef48108161b573005083a3136786a6fd87a67e01eb7f228be41714f472dd977839b07e59481aa13dae5255ca79b7e3ccd8c3e94586b55200614032b6ce4e08bb441c880a202faae212322f211774073a531da09ce865b7f1001c1d126ef190071e29b942accd31d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x0466cc739385018a0585249bf02ca21644f56aee02fc8617fc0b7339f34147f994ab016068b77ec03025284d28cb334b033f3e14fd9c2c9acdf961d48b6456540663f504a8cbf28f40ac43c0d1d6abe2386810a63893fd69995b32078d98c4b00c08708b17362f86be1222a05cdeab17adfd8679f0b03d18c5301f4d07aa51fa1885e1bb32570189260dda42bd7de0f70d12c41a910cc32154f2d2c1320e473669a5b071bab634f561c2f0a98f72324977c74b7041757907d6441d847ca103c3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x170489c51747e88f11af77fe2d5a8e3615e99924a106963d8c34a966f643a7eb66bbad37c2c333cce34a9971f2ca87a8115b884e4f6c964127d3741fb6fe8b19a81108fb38135498dc4e582bfec87981bb814294c8a5e09dc7fd06097d253c950045ebff141ac9afd3d848fe89b37373978bf030afd38ad713caaa28ff9138d0bd0f6c4a323cc96864e1b1b6aefe1b850feec0b7f1b911f2c320f30411c33737251637803ba4ff4ef1fd480b9b98305a5a5f9ab4faa92b169eda541879af36be) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x1583640fa782fb3c949c9a89b95e52818fae6fa7f130ffc5a8304ab7f78fc4d0050b0061a8e90b29f334fc7168084f4810486574b450bc33691aca553a6aad3123844d39c265ff52e5dc66f0d797a80cba141db073ba767a1021c654eb1a316b0193bd94baca5c7c0fcd370532502b6ac4eb19b3d10a3f4a48bda5858a888c5df42dc9153e70cdddd7393fe381aa1c6416e2203e42a66b43189b3789270d20ff285e3279667e01f18f686caed2c0a252d306afc2598a17ed518acac4e8b1b7ed) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x0bd2a8921e426f811f8ca3820348cff6dc8efc095010d4068717724a3a076a565e609be3f1c78c4b37a61dda5259a3750e70265a91f14d71b38ab1df6f14ffc11f8ff8c552401dc1ec2a70862905724a928888ab5000cab2c206f147f49a9e01019581dfea445b53898ad37d69dcd97f00db2023fa4049a3a3fe3158275aab62cc16f14f766dd9df07852f7c5df27b2111dc81ab19b80f5842c7763b036090e3a8368b6db669d80e74c0231073a46835f7dcb34aab2bbb79faad55940977dead) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x0d81babfefbd132108cd4e247204997823727cd2267020d505821c2ae0d5a73103d40fb8c876492ce84fa43b7c97352202344ed091fcb8a4173325899b70122da54d00e67f3265676204f06d952b21d92605a7d70e1a9fb7019201873755239f06730064af9a494bd52ecb00250c317bf067df6a6eda21bc92c9adfe746b056e65dfc4badd22b832060092b018cee22a096f0f6bd5fb0218e1b3a5ca8119e6c40bef5a6dc9cc74f34517d3a8997b1e0cb36479ccd6e46b3d9fe2de3159d0e8c0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x0389a5e8cda6286ab1e92f4c6b4e42cae46fd148359499b41e621d960892732247f291284f305c17377a7f703c804ff80ee8cbc431aca16be396de371af1f17959524dfbee3c6bde917c9155699d4a2bf6cc11bbe9c1393ce8bfb67d3765b5330d8321fb114c6aea1587d420ce7ca47126a75180656ed806d530302b35e3aaba0cec9ec31f94a15248c082c1143e625f1344754b953b5ddc1ae40f732696c6f99d900dc880a78c750460822ea36cc86e9350a25ee4e4d82696111477b18ee9e4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x11b8b6aa6be5808d466a05c0a081ad49c76b4981c090ec40d5aaff4f76769d2a40977832b891edb15c3183acd4ef27440c4d690d911c273a99fc02ff972e6065ba27e20963fd31cce1dad2f43262c7134505342cbb50986af5e2ccfd23028c140dac1d43bcdfb3db56a04a6ffbbefef37920745f008740ac0d203a0c107060da2c2d76541cb99106a4f6b2a92901f1c10cb83b3a5f8cd8cfefddd33e00e4d1aa74c943a630119bf7e9af37a2502fde14e9c7c7ea128d0d8ac008492180630b5c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x16c262c40999ca1e5a1e72b13beaa919bc10d08466df19e456a033684b013d4100a36ddb6cdc3887dd97e8db4b86818d08e52a91709b30f3ad36e2593789e280518ae5e4ce9821d378bcd7882f6f70c1a7cf9dd2d8b15f985f0c2c5bf08f54dc0452b9dde9a272149bfbb2a32c6a1f69f659cf130c30a27afd3fa3be26bd8989d17f2be11b386a318b6972593b7393c90c4f22e1ed7f148d35acc321c3a3ee2069e368ab8df3635dc5950258afa398228d4d2c53dd3c12bf1361623a69ba2fb4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x028f518613b138505c6d90b6e0121e01fc99af5cea6ab138892fd2b360212342d70074b5533f45650fc0b9393fb67b7a0770e4d54774c2d27c041f17020003719f9ae0e02d894ee0426cd065cbf5c637f1f2c64714b70deefabd21f9bff17bb900874197fdf56dc904c80dc3c13cb6836cd55be0d154d9385023f48813cc7d27b4386f1c357dd239962f527d4be0b2861261781e283e1fced9e8724f2047843ef1d2de89b8350f2ef0e654e3e053aa0aef768ea4919129f6a5eb26bb7c485384) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x0b089de7ee48558091087fccc178d589012ad887ba74494ae8f9cf9a83e4fe609d679b4dc9edb8d21051cd1a8eb5113616420b9bf9d9889b463ac6a54fca9758388d083d2021cdeb06bc324879e3295ca54fd7f52d28d074037fb004730923c9039674578c7ad67c991fe824b4631db3f2364169a046824142803dcdfdf6bc529b78528f27f72fe11a052b6b9fc199fb09f4b7f35160469f2031abf6d30be668820f018ecd195e91bb62909d9d3e7eafb3a6bb40321dca20db58544680915607) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x16b49b64c01860908a2c55bd6ec9a792bdcbdbe388163db9ebd49065fe0a8658a6bd1e5d7e08fe288c48f321bc7fc08b09dbda34423396476ad4ef81af816f8e8ab25f4c548e841a9c07f7a1698586477d79dc64e2a34ddd31d4e0b83aeb0c4212df349c91d43a78d9912aa35d94ad6943ad32954824982fe3d425606d6d2c90b84a8e934487879644296f7ddaf4f97901e4493caf0b408e47c095ad1c4393a22286e386f7291d736fa21813b8de5c92ccb94d80923e082db44f5ce306355066) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x16e0903fd39bec397180063fb1d34b97fb44a3964921a0f0e54213f80e2f1b0f155dc773281c2ce9c35a9841b4f0822f0f15d3e82d629849bdc901147897249ffd0a00380cf214be77bb596918134f31f7520971919ddbe94ff598096e010a86038fb77c5bc0ee5e8d04368d5bd7cc9ee3c3a149f8eb2eca49cfa2031666e7ba0e6d42940cf077ab82765503312e465b0f1fc38ea8e88f8724faf3b3ac9dca9e10c9c374f41875ed61116454a899d0aa413ff4109d50ed4838c3e74e5a63681e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x1242ac850b78779a40f548b2ec3e5dde33bf432def2c6790a8099096ad6933e2c7faa78bde8a4d4e2b586d6a4d1f4225062fdff88df3cb0df8d5e2097e53ce61b17e211c63579aa95dc63df0a1824ee36852af030034bc218b9b1ce229cb9c8c149807239b0e175e864c704ef55ae2cc2ec33c71186461caee8e7771c5ca4d2eda4388d8fdc15090e026b3654d049957114812fdd6b7f9fe01b98c1c03eca0b7fd62e0113d902ef37f3bc5191182c983251af153b36f478c3eac4d967a5820ee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x16e6319ec68d88c4ec5d017df123af94e924963d7e62cff44ac709e22282dc904f8367e30de2cb40af8a237a9641e82f00a18451fe0e97eb1c88b8a05aacf8fd3756c4703cae982bf8b9af0f864a0afbe62feb1a532aa8f8b332168b6c298055179319c180a36ea2b55096b645e8c42f31cfae50884cb06263ffe11b0a210d7f3bdb1ebf2acfeefda47cbfb717487e870255e5ac63c4ec740e2a3aec2e5134c6ce8afd43a1c793c42abd87fe0fa93c578dfd6e5d604510e1a8109b4b35b172d5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x0d6af0671af039e4046dfa84fc7aef856495f732e95a24e0958b9729ca4b87ccf8b115ed6d1b60265b838116f5c56c8e0e1732e3dcaaa2c0a44c5f58a3e2cba84005b2aaf4fa70b995d8c30f5d0c25c0a9f3b6388ac91da8f7c4c9fd084917e80c1152762adcb783bc96ae1e2c37d6870a174b5cbdb1adf5adbda7d88671247471b36c9d5573ecebbd068087f45dee5d16925acf0e18b5adeeb1d4659f2f8df4e8af39da572e425c796f486ba67e05f3b7c15747f35781294128e32cc66ab87f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x178fd42698e846ab09f28e4b945bf51a573a5f67b01a50e7de386e0c2cfbd4d436ca77d0586aebfd3ebcf0cb03d247d600f2b025bc852bd51eeb61f0394f3fe553a2353272f8673a1a1720bc472181d16f884dd78bb17b080f693bf1ceb139430d2786584df371d15ab7529aec1fb1890818961979210babfe275729d11678117629b50b6971a5734844c856f1ad4cf909f85560e3a5dd049dc357e6806b2ccc8661032eb206cd718e27fa266f7e2f86240e655f72538936185697a94c122f7d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x041d34c5ddef9ac443dd7848cf29d87c9ee93f9a1433e0cf214e558e93d488374812a9d2b43791e8be6351ed6b0c8efb04bd817bcbf3426b059e7d0905931b309d41e46378a62d0ae0c335d754afd0f4aad27ef66e6cf81883999cc3e19d5cf300dcf814ace1aff20dd3e8cd77392190663679a83289becb9cb669b4c04c1328d11147e928d96e42272815b91d0602931219e805b8d2b35c3ce231c6ff70a93c3100b858e55e42c5f797fac45ae2c19b6afc3e9d4d3d24e0ccfd3ab23fdd973b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x0fc834b3e22f165ca01322359f1a444b9d908bdda1da37c73d859166e28eb2d18f364766fd1a9ce475088f5eb87273cb0102e1732224bcd7e357fd147b6f41919b90afa7c01a7ad1067f39c5f216f067ad224fd70182fe8cadfb05d0f42a5fb5004f21703cb18754d8e5dc7fe79dc7e2043bc50f7a583f399b5ca04d8941a92165403b4d845863dce7da1cff98d461b91979c4dc4e9fb3874aaabdfdc87ebd9f5f45c21ffdd8ad043643b2804edf9be567c641fad3f5a8b2b6abb8d6712f998f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x1487364b239f67fcc324212755b15f25999401cbd86cbf4a526807391fa6773593c9392810d6689a4a0558d89ab72f4f00d4801e639c8d4987569a262be2001af7f8e98ddbf41f37c054b21e1d6818a12f391dc206c558e9f04148dc00a530820fd747276d53488214eb0cf8bba8e4711a4c3c209078a01293ce06d900d3c1a3a2060a6bb9a8f94ba6896773ab2061ef0ac7f39533e34c6aedd26dda7abdb3e3489d17d1636a65017423a7ec696e4eb00bba6b15907b606c719ee4c3cd341958) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x10cf8ebadc5b77f21fd9ac63f34ffb8b27b266f816f1151f9d0b74bd20722b4bb5146f6635e5486a82ff1ade692851580e294b151f624dab1bb74c7666cf3183e19b41917c61a0a837d0f1fada5ff601f07165d9ceaa1e74eef48108161b573005083a3136786a6fd87a67e01eb7f228be41714f472dd977839b07e59481aa13dae5255ca79b7e3ccd8c3e94586b55200614032b6ce4e08bb441c880a202faae212322f211774073a531da09ce865b7f1001c1d126ef190071e29b942accd31d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x16b49b64c01860908a2c55bd6ec9a792bdcbdbe388163db9ebd49065fe0a8658a6bd1e5d7e08fe288c48f321bc7fc08b09dbda34423396476ad4ef81af816f8e8ab25f4c548e841a9c07f7a1698586477d79dc64e2a34ddd31d4e0b83aeb0c4212df349c91d43a78d9912aa35d94ad6943ad32954824982fe3d425606d6d2c90b84a8e934487879644296f7ddaf4f97901e4493caf0b408e47c095ad1c4393a22286e386f7291d736fa21813b8de5c92ccb94d80923e082db44f5ce306355066) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x16e8f7907f9448d12ff6d2d5db462cb603d3d65691f00658b5da524caa92bb3a97451b1b56acb7f5c205394ea137bb700882280d8881d6c6323ec438d423f5694fd13a6d4cb773764ab1aa5f4c451bc112d6df349f4d02bf2730536821d52ff60885014b74ff7058fcd203adbed59e0d24b16f1b3114f1f9eebdab2d5c58cf404b1f9bec447f2b1afc9afa76859098ec18796fa8fef1fd674a5bc23dd6204bf736855e123e46262e489450018088b134dbe70459ec525945d24b619d857bbce5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x01df9017974be93b18af1de7f3bd83623bea55a23a588f529c1e58cca91103e9cb5e865160b41f1110bb2163f66de2940f84486ba56622f5cbe0d0ae166fcfe72231aef90ca7f9905fa797e536a7ad531c67973162a136059a00a6e6825797940a3383f4163365349e112037a963f1de6df3e45f1b58205a4c18cbfbddfdcb10ffc271f3239aa288aacf7f16650439d415243fe31938fb300a1ff3aaf17d18ce639945ab4698d69a160813f267f2eee0031dc6bd3975944f911fe57be6cd56d1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801' -storage - (Some 0x18b4558b569b0e5b227388c9d844dc37bc0ad40ee5d5098871d396e09b7f85db50b78b2b33fbf656d02e83b45d04962e0ac8336661fd1bee9f074f35f3413c81d22825c469c70afcbfc724ff25750b7598493ea501e5ee79e0fb2d1e8fb5ee9f0b95aa27a6f20c52438ef3daa6f03c8bc41db48fb24fe73921425b1b4906bc60ab7e4b4c290f3c5aeef9a40f094e3dbe0a031822e3366d77078f5e93a80f8035f6f2941593f4f30481399f91431ec85dfc81ce11b824e9b7c08da1634b8e9c83) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156' -storage - (Some 0x050db0ea21b45502d1672a82bca3e6305f8a37689460f225920f4de664a9b3df4912f035314ec9b35d972ba67a522b8d11031b259adaaab72858a94000b15200254698fce139fe4f647a3a38e759144d7c7a12fe263194e3443b95f0e863c9f804ab9bf6e3eb7dc3515644dd29e5572f1ba34a18feebd12da678d35fffeb65071d18bb2dde6b6e70fbb14458e5adee12113aa6dcc7d3f7c25b84031fef1ce34e8b7eb8921b9ccb08d7a49f4c54e0e2cafe9eb9a009d86f2d118c784848c67db9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327' -storage - (Some 0x0a300f596c740d3a332118e868fb8a0ea04688ebb394489785ecebf2739443b346b324e3fd9246050d0aa1d3aea9f1ce0ad93338ac85b6a66c0f3fa35c81ade175275570facec6395631a1d5a977afbfdd44dcd174d2d782105a1503d25e9baa1717a6f3d40df12d5003fbef8dd4e176fdafd6c1bf5e62908aa160ecfabbc1a9d608c32417a1221d589f70f5335603200c9e15e9288f7fb90cf7101301dbfde0ee2051b698310f855b1d876cddc553d4ac3a88f8de8a99d7645595b4ee64d3cc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca' -storage - (Some 0x10875427dc85c110b01f3bb782936f27a8cd5466fa0f0cf5917befb74c467104bf0a2fa605d465d902e1ce414f571a000468b7ccdef205be10db5fcf6c3d935f273a2f3bac6329c30c1d5493d77ab1068a93f5f3a93de9a96e57a77ccec573f413c396a7d9e079253c98302ca3e10dde046279848c9ae49e24b14158f9091e84bbcd61e13f09b57cb310a4c6a973acff0836fa3e258df34ad0c89e7b280e92f00acfc220eeb5bf8647a30d3971f08987f7191983a45396d68454d552c903cd13) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5' -storage - (Some 0x0a85418bbb38c1ebe99c3e1b76e509a9e765bb876c6a567b12e1e07d80a45d8de1aa9d6425aee533d38c716be18e4cf5123d60d85aa0d15271761bf6fe5c75d291602d0bbccaf7ea30625fb18f4f2012286abe933de82871e27bc995aee08ccf0a4a905214907b3ed66515c29319e705b2892d1f54eeb61010cb68a135b5c0eceebdae1f3e510d49223a79abbd1e5ce412f38eb5ea519c65f950ac8b4a274ec8d2742073d4d4603f050c8751202830f8d19465fc6024a4d52c7183c47be42325) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732' -storage - (Some 0x160966746459617c6cab57b84381ec97015be3cc8478361f399648f49ce8c5fb3585add8e721ce81c4a352067dad40f30c5f2faa59125982009f01206706e6298133570dc4f029776abc6aca7c143059200a50e6ddb67a0550759b442300af52167c1420b0fdd70b2c44ab737fbd32e2c470cc29418fa553d502e8b1eb6e3878007aba165eaf4ff1b6743863895b4be706e1193be3ad7c6a3968c0d787989d935451aa17ae9d60568f4fb0507be96308243090e3ccdf3075faf8ee54c8a2f803) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c' -storage - (Some 0x031951f3615a669880243165f6eacc6f5fa02daca321907ccb06770cdcd9c92d368cf58cc4da05fe857e9fc551744c8201b4c54cabf0c8d0d8d49872393aecb32aae3b1a3441ecf7bf15bc1d1dfb2aece9ed92afed8a75c7508ec4be49fd8bf00059bceec915ff60237a600916ae589dfba6dffb71d552f65d80b042bcba249f906784869c6445303561565e0e17f0841977e319775541feba65f0600e082fadea21c5ab09b0f9f6c79cab5e902e3de712104ae6c254ebb000cac8f3dfac9726) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9' -storage - (Some 0x0466cc739385018a0585249bf02ca21644f56aee02fc8617fc0b7339f34147f994ab016068b77ec03025284d28cb334b033f3e14fd9c2c9acdf961d48b6456540663f504a8cbf28f40ac43c0d1d6abe2386810a63893fd69995b32078d98c4b00c08708b17362f86be1222a05cdeab17adfd8679f0b03d18c5301f4d07aa51fa1885e1bb32570189260dda42bd7de0f70d12c41a910cc32154f2d2c1320e473669a5b071bab634f561c2f0a98f72324977c74b7041757907d6441d847ca103c3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7' -storage - (Some 0x16e0903fd39bec397180063fb1d34b97fb44a3964921a0f0e54213f80e2f1b0f155dc773281c2ce9c35a9841b4f0822f0f15d3e82d629849bdc901147897249ffd0a00380cf214be77bb596918134f31f7520971919ddbe94ff598096e010a86038fb77c5bc0ee5e8d04368d5bd7cc9ee3c3a149f8eb2eca49cfa2031666e7ba0e6d42940cf077ab82765503312e465b0f1fc38ea8e88f8724faf3b3ac9dca9e10c9c374f41875ed61116454a899d0aa413ff4109d50ed4838c3e74e5a63681e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18' -storage - (Some 0x01df9017974be93b18af1de7f3bd83623bea55a23a588f529c1e58cca91103e9cb5e865160b41f1110bb2163f66de2940f84486ba56622f5cbe0d0ae166fcfe72231aef90ca7f9905fa797e536a7ad531c67973162a136059a00a6e6825797940a3383f4163365349e112037a963f1de6df3e45f1b58205a4c18cbfbddfdcb10ffc271f3239aa288aacf7f16650439d415243fe31938fb300a1ff3aaf17d18ce639945ab4698d69a160813f267f2eee0031dc6bd3975944f911fe57be6cd56d1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/add_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7' -storage - (Some 0x110594337db827f5e6559d35aae9cdb28a727ad4fe9898737fd454a50ccbe28f152f6c9f3b0dd66f462bc0199ef204290d6324c2966a07481d449176f51464e6fc53c2b8ca76be490abc0df341587a719fe4131467ccd4a0ed2bf0bd993f7ce8192c6afb17be170babe59ab1b52ac010aac19544e888943ff0257dd4da52ea75b0da1ef7d8e2a29a28b506b9d9210a2b006dd5994ae3b78e81b217d2750caa0d29dcce23ff7e697403fa380a7df279a55a42bf990c10b1eb54a20b86f2aa97b4) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- mul.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- mul.out deleted file mode 100644 index 59ea5f063df75c15a77864d34db4d107f0613a29..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- mul.out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x080b4550187f35017cdf7084f2427586dcc9e3bb5f254d3059b1d0e9029f7a9a12f1f34581992dc99d26fbadb8a4bbf6184cf390e5a04138711e8b47eaf2ee31620ce75d15b8eed650b82d53c69363866953261b50f7cfec0bfaeadf87eae8050bf14d3e8b1914bd903f0044d4bf550b6b76ebc01be4716afaf0b4b1ebf025a979368539aa65ad9293f18dff874823eb0f58f4f1d138c902a335a80294c136517438ffb91545268060711734cebbab770e34ad18ef149ac3e4fa884ceb4b7443) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x00bc7bce08dce7ec829d7a13ab2faced9e717f30c7370b8d6cc7b1bb46d1898f0743505348d83ac3cefa91dfba9b0b230f62f20c8f71df32769d5b49c1a4cde32cf8f20a05ace136e4dd9737baaed000bbbca439f7cae438f3fafa6f3c599f250d771456237dcebfbb68264c96599e9c949ea7a425021f75a5e057472ab9a1ee30bddad75b57c0f2fdc436daddac8b7c0b022e6eca54d3cdab5fb2d33dd771992047dfce1146c59036f3ce011800e2939721431c83f971237002a0d555d62138) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x03a989f5e9c957726994e2af30bfd00313c8c1af1d9e6f353bd179d403b6221bdea2a8af62bb98b5982cc551699116f20492bd7a87456de1222bd45fb4e85b426a4db0a4581a2ed86cefd2d15ecd81873ed91f70db079866a19d399f41b648f813b5c3a67ba6db557ae831299ece46ab98ed6134014019675b885c3708f7bdd99ad3d57756fe2084f7fd0df9cd47027c186174431b56442231350b7facf00fb9ec214bc9af97ab093573e97dc5838d2b173d11b7cd064122607263fa116d16da) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x193633a1df3e9c976d71fc7d3fad74918da1fad919ca9cd1fc174886d5966cf26b17ff31641ba949d1b6ee785916d9ba0344ff7dbf56bfc10ac546ed2dd0a4cd826a0d1cddd189ba718c15d4adc35856566a85b09b493c91646213821754c05412caf16bc7366a6dc39ff27e8b08fa60037b50b6c84d2b51986fe5f2ba76ffab43fcb6a0cc79a07ad777549e38cb252407bd677f34d6e810d8cc5dafa0f6503c5e0f09ee20f561778a83491745727e6da8fa3f378d4cc6594a3673ff04ec8303) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x088b49ac24b1bb213a8f5928cb16fb8bf89e44bc2b6781ecec6d32baa1ac0bd0efb4beb89df3561434065ef6e9de873204ea33f8dc13c9a07edac755fe0137afd7d2d1b22b8d7577275e09c96a3e5d92a97148806d9cf11bc2aca2dbc53820c20d8d042fa14b47ff7b93784298bba93a50cfaa9a79d875dcbbc108d8169ed51ae4795c819235d95bc7331befe813369c0b1c68720930a710e635afe84a99518bee959921b04116b95076f13e5b9e74629edffb119900454ec11087e0b6305b32) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x0e4970556f8f0393b84dd0acfaa48537287b24a4d0c0a7bb1715961b20e179d5b95e97e8aa34958e71ddab72c04e2b921678b10e90e34486fef2db6785da364e836d37b9a214a35d3252c3dfe9277d4df333eb9839d437e3e5fb18bf67d74aae121289a9fdf6fbf2edde120e5b99f8c3b374ab7c13e1258ddb115d4b08680d9f62d5082f27bbcdbfd7512877c630340c09658ceed69e7603235f1fe2b86c6586d7595119ff74892da6f5618f4bb6d9e1a6e17fb3620a52826e4cdea473976061) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x080add8f0426f9505b5fdd4e17acfd5ab4c31d5d3e4cc0ecf91ba42598b3af9fcda50cb6dbcd5941c643d70cd877bcae0fbe1d50a3275743237fe7fd82520eb1d18c4eb32ce3d573a97bdd5f48af83c0ae02dda154df544f3456673ab943b5c8047efa1153f8c6b07bcf1aac4073f80b4d8e39bfc6b1ca2ec75f240bb1213a2c2feff0707cdc78467d39e9070c197b450bbea0c527b83f56af225ed946dc98e55e57ce7e6c9d479bcdf1f62b86dc7eaff5662878dc04dc20df57e67d5a06e1d0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x18cba79a989acbb00d64a7d7878cf2648874a1090d3e40b518355b1a384f48b4027f810dddc5be647023f666c4bde527128a028e952f95bad52b7cf076e6ca99ed5f8160848fcc02eeb780738ef5184a92cd8bfaf8c86c4b4bc15b5ef37932461114fc7d7203b105b0a609ec1770afa3a4a85b5802ee80e115d9f121822f2330db572d79990dbd58527cd13b703ab34b03a57838853edcb170450f5c7c20f61ca97bfcdd223278b9eb7c556a15ace5e959f27a67894d9af41821bc26ce2dfc42) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x09b08d80f11c18eae208f0cf4f0a3000a934c67afe4d01ae1bedd78c86753e251b210b0563ec9151004941601b1fcdf304285333862833f83569e4a6d769c740a4fb256d401d6cd475a6faaf06b3cf8ad2c14c8f00d29f268c050dabef06c9ac0aa45b530cbf92516bcc81b9bd662076d87dd7870aa4824906f61d6186b68925d96062b1a103463f48bce4fc8bbcf47e0aff4b0b2f74e46ae06f8b40991e6b13516396e264fcc78fbe7c94a68e114d6afbfc386ae75dc29783fccff5f93deb77) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x1647a67d6a6e7b6d058c4acd5a8d075fd6613bc63548109a74eb74e79f16ca6c73315d18492d551785fe7b53be40bec0004a62366b5f7167743bb723b6c3976e1cef9a55e0aa37578072bd0dba2079396a789044a49c631d879311efdcf2acf71184e8de0e688e4ab064d54e59e53aca91df0c3db5226d81b47ed64e80c5a5c6e5184490f59831bfd6acb491e39d056c0fb00969176fb34217462f4284eaedbbcf49dc0e00af5e6b20a7eeeb96f68ee9e629617ce7a6a593313b744df0d0e403) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x08c4b1133fb04221ec4b3c6157b6b3b47083f68737d0196ea6cdc2bf2e4cb701620817b0882027c0983671e11ef124e70c991a592c11c52c5e9e39c33532fa3affdda445eb4aa0912e6d99598cdcd0fcc725c2671ecae0b195882ddd122906d601d0a7bcead1c48603b7ca82f171181e7eae23937ee87817e6eb1ff6df5103d1a9c7072818f1fcc3796431797dc0aa5117b918e1f4e6c0a2a868ab37dcd6d16c4adab33fa39f7c2814c0ec4d6cf0a944a1ed86c87f7e93fab9861b99342ad0f3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x00b50d7a32f7d7161d1a64152001ce9ab734ce2c0bc15696e01b10022181df0842d14f91b652e8948cce811bcc1acd49032fee6edd84bad1a73f3c3720ab052762d628c53c0fa2385962fe538020ab3b657b6c647250159c1957bb58d10749e70e0d05f6a99698dae1b40d51853501f258f94caf25bdfe9a9befa4712f77fdc976f5929a856601f41039ae5747c13ad516e231331ab1067b732d0d23550cda733e3202da58e7f00c007d308595cf7309c73f1e23ed8d7d61508a67d9ff8160d8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x0a5729d3b49f1cbcea57a0a92e5156ef98847af34fd33ae5eb765730d455a754e0c163e3056944e07c883cf721ab151c18dc99c67cbf6ddfcc302662351372eb48150e7b9d233ae186690d17c36845c1c96ca58d5b1ec41d45d30d2d0523d98a03c295377a2ff5f1d694fb5c164a52330419bcfdf0e5f6d5f6f19f1a72c498cedfed51e7ca305879b63b49fa2a3accb912198ef4e8bca866b50fa5e8a753251e7ad324d4e3975052c24511c7db961d0a3ea7976d55db24e8d7d388403f1c71ec) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x17142c63772f51b91e3d71acca2ad4009aa42612994e7445f18f86f8a73abda7ae73b446be7c0f075675e1d137b8ec9e057f9e6b6aa1c4717a16ffc11a809401a18ede873063be42086e2bc8a4b36d6d0db0057fea2cfdca1a7d72390540b7c41638b5d0959f312f0b2fa27b219a41517db741d8ae5d771d94a676aafc8804b06202e92f30ec226fa6113650568d1c7708810cc0034b69645975e44a5bc741200ace0e4d4dc8cec65848c183e4369ead1e593a95e632cf2929662bcb732e2d7d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x017fdb444d88038e81a39c56455894927fa3444988b7cb56e79c3c75ce79681cdc0712622fc67d8461c6925ad806df130d6cc35fe316c3160c28a9282c05e3b3e80852bbf0d723e4e6304fbfbcd38cce06262dfca36fd0f72c04c502e54ac2c401dec7da47b690d2f4ad83163c384c311b8c87f8c3b29241fc280404a0eafb5021d562d45c234f38c3414f1c837d9db5061773f5102baa93e1b9f1efcafbe4519988e1996a2db13ec1d21e54d7c53b93e8ae35238854325b92d33f2cfd288025) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x16bad36d376c426b40fcef1d965b4611f5db43467ae56f0ca1d3ffbd239e951891218ad2f345b81b5b66aaaedcd961140684a5e081214f5a3bf55631cba5dc77c028b94a928383534fd3d8be6ff0e46503d0f9011bc65f09d4ac72f65dca7b4005b8ce787c8676857281ff7e6c2737fc8cfd47a36940744c910be339a1df4cee1aec93c1f7f0098a092550fb7ffd840d0ae3eb05453b4b44090a94c15caca731c6ce2b2e4b6414481dc20d170161d0d87154c59144b9690b8835ad60810438c0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x09ad873d26b23277ba021484b9299c6195b793f731d115dab378499db3259d471ce4600bc45665200f57b5706d16d3eb11c9042d0a78e40944cf028bfee568efb0ab6c13687fadd9b8bb139c21192c89550baa342877c80b38dfef721076056c0264ed93a026c52c1e102387b6f153c3163f206a638844a71086f40231281aae250e4cf2cfa99018977c64ea6a879ddc11fd3d07ef91f2a2168c02d071d311c90374e6a80203df70d948ff84180422bf45170ee34e673b71f3bb6ead5bcf19c9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x047701757c7a80a63adcbabf9b74040a28c402bce12bde5221f2aafc940c2c9b3b0c47fd8a8357ef17fc9ebdc248e93c0bd70fcd5398a637a1c746878e24825764e46be75b0616588683975fb99c7ea9ef211a462b9d991ae513f6dd6ce0c81d171a92cd782de9187726ac071d725f4a02323e08a9b6e75dda7b83dd0a6776dc1c14d4c245aa9c9560613c806389dab7174068f0d8d538b9f8e08542c7490037a7d1030c375c9a3aab4d2adb661e05b4ddfe73c7903f4c2e2def17335c4e8a2d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x0149d59edda997bea3f012cbff6d8ae6226da88fa75f0cc7a25ca5834aaa59b5a05ea0e758b7fc10df3bff61772ea1b114017d52c5e30b5b6e242137ae0565e2b0889980360cedd8bb7f6d07aa8f0f0e789a1a8bcb1e08cef63fee9456d4184d1231ec9fd8f71543b8d4ae7fc7d48775c874943f5025da80af37ce8b180819d2c50f438dd3f2d514cf0e1ba1a3a49e071057eb1af4e1c25fba2a9ed9006fff2799d201783d663858de05b679aa96b53cd9fce55cbc4696272cee0778d4db6ae2) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x07efa8f19fbf8165f850220dcf16a05239b9915055fce261f5dd1b109e64ceb51f4b8d23f571010c7d6acc4bd00bcbaf17b540ecebb5361c99a071f99e5a209df25e8024379cc722e0d030d3806dc49635b8c47f311154822fd30ea26a3e655e0952c84306362d3673e70d274964d12bf7d4871f77af3e7808cd7791d167783a30ad682e2a0f22b18bd49dde86d5a7ee13a27ff6eded20209c21dfc885b9b00935005aa1cf3dc6aec890d3cf3a98b555d4416b977999bb0bee0b32abe5d23795) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x171a38d9525ccb3115bde4d0f6d68ea0dbbbcaab7af24807addba4d2e3e16777f223c67a02d5475b4262bf90c63b02e600a4a8261c879c3d8938421443d3e881201be559f97292f6cef8af4edc5cff142b4a5b108e2cf07e2a5c99447e4f733019ff4b5719f6be0211c7cd1fa099a4c2fd3aa64ec639088a09966093a4f752dd1308ee63d99a93885e26e79911b85f8106ed5dfe89c103266bc588857db762c4a31b443e4721ca30c7787466c2be9e7f715303ff0d158b6118af53373ed667f0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x053d026216b40027f403b10af167f41989cfdb64687d997aa23e71d35062aea7a81356fde64e4d01e7356113e01a36140ee9ab3f43f8b13656d44d7cf2f4657d390ab0f12630078c6078145657cdada1fee6b105d34a2651f9c2770e37eb95630db82bd7a29e8068d7dec583ad46a49ef20ea77ea38153102977f5808c925817a146701ca5e673b09ebdc9d430c8092c0596125df4862ebbb9f312db3d1768e3d391da136cff325c58e90d0e337b3f18071eaaf86c2fe5be578cd4b48ed498cf) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x13937ed4f44301346c9fb71c0a598ca90d8571e9dd30e1d93d1b45f6cdc5c38d84ccafee0b81a6d70ada8e6f80b0aab616e9bd224c0e61528b41bce5dd86d289bc689d4ddc8fcb8f018e19f8939a897084123cad133a0aa332ecf59bcad791af075e5e37711c5e96485a897dcf82d75b9e40c4bf58ef4592570e7500f832820840f12047c5e7be7c40acbdd89faf0d1210253d1dc12130e420d0027a7908b13d827d1503ee0b8a34582910e1040dedd8601bb64617aec2b04e95e76356dcb220) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x1447bf58cf98d93fe16ebf1617f430d45ba8ff259bc609277c6d196556221ac8299cc865a4fcdbfe69a05221913ceb8e1904cf04e98129d25f5fd1b990c21ab4e6423e88f7215b89f21ae4f6b979773d2d43b33714b56ebbf75f4a0e8360c3a519280694e6f8ecb64f330f6c1c5c0a588c2468d89f661ce5dbe2a5a9639fb570ead89a4788b0ae580f9e417d5331a0e001b1622cf69c3e0c610ab3a47d29bb331e22b556a820e8a8206abdc91e1b258c44ea9644f3326a307aaaaccdeecaa948) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x07c172e7aa78488ff62ee0d11fd04615db340331de14f267cc87e261ac80df4aadad76852e755d0e7482b93cfe5a5b08102c9fb3f178486b9353e651f74bad37c0c2bad1fa61dced79078fcd6abf2aaabaf282619d6e1a49e63a2682d1fdb12215937a571973ed76179f05a66603d0dfbddcfd5b7459f75f04bba328b5cb76fa61bebd7034c10701972e40330f9cf27c0889cea90145991551ce64dcc3d7815f80ae4e65c2b77553a5ed8ec53a0698671af0834a8e1636e9f0da7cda98ff636b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x0568de4c43d5ddf7eb997963cd82935fd9cc3af0d8d26775595e2812293ea37d1c02bc2803b85b0fdacdad86f74c791d0017e526365f8d83ed0924745f66a14b306525ffe620d21da5df3da7f62f1694106f6097deff1d706b808320ca4df1bd1377f807008711e661d0ec7ef6c3eba5c4f1534c929e7f5afca8f2ab90e7ae0468623ab3f6e3def665281b5bd8c0fd710eb711619abc8966487996d763a0f0db66a5f898b227bff0c22c36defeb02a90a2a4f877962ca0b7f7f2c6c834e2c1f3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x0a334affaedd9118d8178f8d0fbb0e7ac89fb2dc000010668c9a4b65c66f65f3ae1aed9609cfef7038cd751949f04fc3115ed42575eabb4efa41b024775f7b71bf308e96efac8bd7a41c79c0150acd5c87318792c08ff2d23d8ccc7c189be7e4059742373637643e00943aaca573ecf667808e1ec1f7bca0391ce8f563c1efad8a9c65238e2f566a770fce14ebd9713506845dcc04208b5891d2f78a2ac4f6907f49853f25cfacfccb5bc95a97fc14945ae83de1166029ad5eb413cc7ad87f86) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x11e1a76b036b8845ad620367a792cb68a28ad8e1bb75e45f27d1d6a4fc92418f24030044ed1ee7bbfef133c8713931c619760a3ea671e13fa50424ac21a68d8edda3eacf807591a043cd9a469e420175cbbd8b6dc6943aaf57c9805c4f214b6d083d6f014f9f7a5fdd96a5552f091cc9705227dfb9e6c6ff052ebdb732ef5ce9d131552d1dc5c82c2880c1602ff8b223031313031dd4d0a71f70142a427e97f88487d2452acb85606d9a232dafc9a565895b095ded6514d128d5d182845d1d78) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x06c280a9a9a8d84441d3fbf1983c95f88ac6935bff9249d12974b5285ec180ae0614986a486140531ec7a201557247a903cf0d5e18c593dd71d0ef1af8adc98c3355817ef9729e2f438670ff4785618715fedbddf2f73408de48558293349471051b051f18077c7ddf5cd7c72f62395ba09971a60f0fcf9808875c7c9ca1f86050c85dce4013ba26c4170a8e63f9a4200eef8e1bf4cd1575cfa420a06f80b64fbdb927d7fec9b7a3ec4a9f40fe2bbb555b275501837b3145fece9eabf06dd9b5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x001fd17b0fe25eea2243b80db443e23ffb66459990d77f0f8c0daabeec844cb9d85665fb709b5fd44f91f87145af9ccf16ea4f0971c551355bb47d42fcc46e6fb5973249d0277ac3a36f79a04a422813a4b47ae6108f8f2c18d62ed2a5d378ec11012d4d516690abc205018c2c608be3684c69ea203dc478fa648b04e2285127ede6e2ca17f0f3de6f84b971c44c223d153e69505b2f41baa98d0f439dabe204d9b7d211ceede384000d8ab5b7b0d5c786b251535866ea9b79f0efdb794bab43) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x0dfa56f12e588e47e1b4a9779b8ba3e1f8aec6332f000e1191a3a9241db421cd2bd1f2674d1d65971e1bae15ac85705f02fe72dd8919a4ffc3f6361d41babb756ef436be44daa6564b2cddbb3f677373716c3f35b67aeba6e95a807753dc93d90eb26d4246ebc61132846d3f607a2644843ce7db26502d37a230609c0000ac6bc31cab911936b99d784ee982b986eb74105c50ea1e8ce885e4e0ae92e62235561cd21ca69d561b4d101b2c8895953c3261ced4d643804315615a625ec96199cc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x0c6047ec6e415dd2002c6d88d79fd756aeebec12890af2a4ef3f21786780aa4b996bdfec8de8df72930f3eef7a382e2a070dde3629e78565dad4b5c5909162cf678f0170cb8501d89aff66680d1a53a606a2d92f08df9816f6434cb77759c4f11778fe8ea72b96f3d3df2aed12d24dff9f2e659c326dce50af40a20a1fe7a5dab949803e191aad4b6bdacff2bf3257050b047d82cfda72ad42046998afc22c26c489b194ca6fefefdf34c763cce8ccf5dccd1c25e97569d05da0379009a06aef) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x0b21cb653932e8b05d8c935cd449b7d9382a2308e98d8c085d8c9ef183b6d3537195dfc3db8290321c54113c093b2d0100324822826d7108bc78373fa2bf6e8b7dfc4f56930915326a2f853fff2e66e427f18c761901158089f4534f0bb1103c0edc38f6e800b500c6e2c88c15c41cd1f4f9ca108b670123adfb6e066764c8671dd938eb03cc2cc88afee79e9c395e330a9f3ba8c8ec05d2e08720f45d77ef44a8cd254fd40967f28aad7652dc78346fad87237bf69ba6d49e9de50f840cdc7d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x0ebb4389d50140ddb952b8a0ca2ca472036a267c9f99445d7801abb8e0da3419349b7cd5758d2db0434afddc084c3c7f00d145002298452006b323697911974ef5d9b40f2bac4b304f8e512ad5df8fb343e8da6cad115520098bb1098a0a6e2411e2da3956a9d744f0ea464e4fddb94da23465f4b32e8bc44eeae6fbda605486b7d7815d90a40c21666f32806d5001d8133682f3236ac2d3d82c4ab48d48ee99180599b3af7723c6735443c19968788d6fd38b64a67f086175c237c4a6922a55) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x05deace89d55b9e4314b5fb8db2bcabcf8dffc2933ac3993ded7a9709b76fcbe58d390f57682928dd9ddb19524ec7c3b0142884d73c1ffaa7ffb201ffe573821ae92bcf1fa318655c2a47f7350e942acd70a014d5fed155e0ed9a815389da22d006b06604ca750ab0041de31f7fe5affe41a8eb5c159ab487cbcd70d6c0c393180acbb9c1113a4f72849f0e301db32dc047958cbb73754c21b27eb2cd849832e37dfda13e4c293c524b6c08e3942e0cf25b9782b7f48a9d59cc9ccce17deb9d3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x0c82d13cf3a2a85f888aba7d3024dec42cf940fb55047323315a6abe8d96309d9f2bdfbd7a4c9a5b89fa9f6fdc853f5d0deaa1760c184dfe66b68084478f585499d5b8eae6562ff5776efcb651e61b1147c76c55f5169fdac737bd92aecfbe7b1882a14935def144462758c3b088d1adba413dde26abfb9fcf2fab65fa3e262cc97001f88051f213388b80345df1ba1a072610d6d918562f0b5f7b1ff073e7a8426ef2d5722f526590e71735d21185cf58905ef6c5621d42bc676e5e3a239441) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x015edd2aebf511d69dc97bac7e4946443a2395a4a896e5d03df674bd7d0704e9ccf2c54b33e011850817f36a09938e590dda207d5be7105121e1ec23d8000af6a9bd122ce89e19521eee10b254f2128b34e98bec8fe0c72010b64b643b4d99b501b59d6c6c934a3d114fb9787fb2da8f830f1804ef239ae63a211648292923d388b26f57736dc8fce793326fffb440e601d922b33d830ac228b7ddd0481e3e89357556bf9da9cae0549dbb40e2b5e7dff76ee9de4c3a48dcd2a27cbe361d0b00) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x08b66387458bc668bcb6a8cbb22fb8776c980eb4f75856777a164503d78935a5754b144b6dd25942bfd30a16f90c796d0a725749727f727c26848434ee5ee0e55c68767184a843d738b02e52be0b720a53284d81fc25437a60651db6ee92604f0ecef2858749a6496c923b7c7e8e92d337077ea6a9834266857ab732d5f998a1cb0161fc8ffa8be17998996411864d28167cee2467f8d1d3da355f2ce67076e94bbdde4db911b99d40827283131d63f5887680b43865a4425621e47d025fe6f9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x0bcbcf739530433a8b0fa69fd40020339a2c1eb08a0d3712032cdfa2e599676d9b815636c3f731db06e48fb362d1104f015bbcaa8e137a18ac0f35083a8d2a0ab02c12fed6311189f2fa288180c3e9959360f76dda4c83cbc1e12e3b9d2df19801e8aee395a1dea81e942ef555469d1bc18bd3aeb94e6f9a2bf6a305dd2ce4612d3aaf69c8892a684544d7dc26c9f7e7073b312159e53e3bc2be81ab348e2e038822d4a6f380cfbb94bca8cd0099501f4ab5f3afe60a47f89afb6d230120a956) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x17a973ca78d77e4090408eecf5decb03e9672cca7aaab21b52597814ba3c557a97997efa71a2dfec15bc6767508189501903fac81ed8f8d31b7fcf6259939c9ec906889196f7c5a39ea8603fe3996fbebdce8c121dc7ea514d208c51d019ecd51066fe4e7311ad9d59b7b5b0a3c3a9a55c0576ab1e768df9a6cb888fdbaf6430f9a3c643c16157e17623a0da6e5f82720d487bd66d6e27cee42603408d29d4a6de0ab859bddcce105af9977083050cba11ce25341cb02062569228bdd78f733c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x059d9ffa51ad4cce6aa552c633f3e23ae56df32e55f28a0d1fb48587b230d6d52b5c46be3fc77d05bbb88d8a92a26a550d5544621ff4e3e83c716c4e9d81c28ec87329754b46fa62d7fe0c7f8b4d45db58028f7f86fa15661c503ea8ad946e8b095399a881d6e2bd9b1a941d6d3ee28249b1d035d544ff58aba4ef30f8161955ff2606666fcd35af8d5fa03ff92917520125e02c7ecfcc7f9ac1c2324e8b566bacd8a250e863c0494826c629f529fee87b2ef53726c9b7e02b9894c528d0d214) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x0567af503b136c79f62c3c426c51ca098f0f0ed75e5084cc59ec5e975fa5b2c347464d816d85f80f8a8589519381d25011a45beac93027f83ad76daedd06eb103226a36afa61783d5d96fa7e54bf5433788a87f41e51d61f791fc0fdd0d6389e143a7800cda14a046fc211f6dd73675eb56a887e026478d81cfcdf8dbae0fdcc34d0ed2e7d321da42d1ebf7d0024f0b409e1a753f7b9d67fcba28639b3f333b004c32e569cf8fe2b5a4c95804e6c45e5d3f1fdb1f25e476e7ac76868ebddf8a3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x18c9593b1c67b4cc38133e3061cd96d50dc073930df218abd91f1c4ba0d90028f2d92927cfbca7516b0df85fc9ba2b9714fa5f14b2942b9f39bc1366b81be9432ac33eaf04387b98f6e0fb8ad32de99d542510783f2d1e064a77e6f42af1c98416ebc9786dc213e6ebd40670dc2d904ff60a5bce43cb246bbc6733413228f0e540a510e2985b7aa3c0fc4f5e5347e72f11464839a8caf107af63e8216d38c3ddfeb1d16657c0eb876ed3ea3ff9333165cb48a26da3fd989695d789cc0855d07b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x0db4522335e284df12f38ef3a7e4598796247abc77f7b2e1e603e8bb6579d1e34c399374d3800aa032e71fd4463e0210002417766d430b498c89ee71fb8130657c412c0933e01aa4f1a7e80e2942effb42bb20d0c725ab2571e8b83a209fc07007c7de731caaee6522441d0b39285af51477474a87bf84fd5f65edb6dc641960e963e72e9cd4aff77e407591a086fbea158ab626b7a978b242ec2d872db7904704a400bdb76da784f5336ddf0ff06f401feb4eeaee5af6e4089447085119c513) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x112eb205ded147fb6311e3fc37e07103c0204de7fb9ac9599a9b42cec9c88a032fa10927591202f9bb96faef5a3e096919f859480a1c935dde21350f29c0c4a6aa99be84fbbaaa3a1b063e81634052e0c38237f34d0cb227b4aaa6256a350e6f0c18966b61c44ece02081a6d55608555d5ee655338c5e4165a02e2718fb26403515de65228ba00bdb784b3fe45186bb201fcdf242491736de4597a03b41c4a8035c680b45029e62088084ef938ca015e6bfa9dfffac2bcf8e077feab4c098d13) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x0d9954bf21fc9f7b23368690dc64f1e9123bc04f8840aef2e10bdc34a69868ce1868595664dfc9473ee489016419f2730cda11fc675b0c509b33b97f6ddc80fd07acabd7f730be7d64e1f4f113caf5c59259233d08ae1943158ef12e46491e0d193f910f15d0574b0a50831c4670c8a59665c02fb7b211befeba1e67a9cfbfaf8584821628c356771fc72f2a1e8c75621906c6b74057201a6214f135e406ff40069c3ff561efb6f2d18d0203fe8ecdb46cdb20afc6960fa34dbbea49c4c008da) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x0fb66ef421c6f80b62266297d6e9c65a6195229fc6ebab3cb3d27bec45fd4aaf30368cb5f4236d16e52711880941445a167f3a6b064ceadba41399f08276e67b54adba620b22081bad73f8b0f792e4521ac8b27c1af4648836c1e15702e9926a082360ba2ddbd29da654c41c091cacb79213cb4c1bdcc3533e2a9e8f5842cf2e86f8d7134035dcdd907a857f057e0ff014f112a508dc23b597e190b95b66b1ff51e20491dfac470b8507ce7fbf0c4c246fc7825e49b351319f6d972b7f0c6ffb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x0c2e1a40ab2a6d83f9f93455f16d13686c29b3f8b8901082930600465936e8cc3eb8e98d214738f8f01e0681572592d800335dc6701acc4d8065832b66782b1af548c39df4e2eb6b0621900f155b0bbe693a2cf4bf42042208bd6ee32b127eb61565fb0b7f257c93ebd5b3e5147be147f9441a3d650adf860192a09f1ef93fa3659b55138a0e89419c4d8ff8a9e3914d03e649eb3569eaaba156c8ebdcba385ebf74e457b18c1db7933285b0d70bd902b3b2a703ca5d8b907073836ae3f3802a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x0493817e28aa42a1ad3fec1032efc3555c24e0ac61cd6c0e3cade1d50723d83c6aaa0fa7448b79c1d92d2475cc37d95015d68c11ba7fa6869edd5342f4ee7de7df60004cfafffc8e3df465489b0479b6feebe86c559b43459f9974367f9ba802112a4d4de7daffe8f69741d2b57f06cdaf23ab81eb34ab70a5a71ef6b5a5f638c5b04fe02cd174a768f4bd9cd259ee1305b534f596c559a5b1223980e8f314c1857499b94df5b9faabe18d7665d1f1e981c47b1c4b16a3d6cb249910ac0b193e) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x0d7560e7bf910cd7c567efca055564120aa864e625ecea96fef527a3884176aac421fde3a1b0d8b99e4d0b77167fed43121653c79dc44d33c2a18d90f31cf5de78494bc99132a608d7f4f36470b2c4156feaa74b130dce1ce81ef352d167f7fc147c2918f2eebf339df2b09ed42e5a378c322c2eacc41db64a4c4c503b82a016a19c9a1420b1f8408fc6e9143081bcbd13e01059cf5755ace419ea052e288c2e89036782893b7a6e6babf720e269f65fc68529963502cd98f2d27c59419a7405) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x06e73f37c36181f4c7a3bb03020f928a86456be3a07aa159589ff7a7708f6c8baaf6759edbd7c112820a3b65e3af0a1c17990ff1ff16ebe8ba94018688e5cfd0fe45a599eb677da498dedc30f311c0f5b3f6bced41aeace904394fbb88cdb28202ff21172c79dce08cc135f614439ad58abb8b5a8c9fc9d9a577cccf0deb3a6582d4574513ec06d2c26daa75b8ab42b80bea79b78e9bf647315683a06681f87e2c181e272956e1e3b4af24de7667a018c0cc7f54d09833df13b9c7b55e859a2a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x18e3f183e245bd0e9f34b5f2fba7be0b00d472bc97c9a8fbbd31f0eb7336762caa0460466df22190b223ce5cad2953ff18c954ce23612f8ce76a8bb63a0a02cfdb73b051c6eb4687747ed58ecffdcbce1f25f400932168a40a09c99b8cc177d9047c3154f719e6b7174387fea6b8c5d3b0e57c1dc631b95d0195629c1dbe13ed561ace07e96f363b1311c2682d06cfa0020df2dec9dca112505a35318bdedcafdba9983fa89112a6093424d132038883e9487145d6748874fdb29f25549e649a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x023f7d9827bae1d216c3b5d53bf27895d873d326dfd52c8928f309a41a6b7118ed58986d2eb5823119ad11750e1578530174f8a442461f7cdf90bc7310f2098aec57ce96b8df596ef51044334cd7c6caac9ecfa07d54e0c4c32206d65e4ae14f0080401b835896d283524ec6c247f2752d340076c34c03ef1540fb18dff644320682b65e40f9673488123fb915ebe7ef0d308446fb822474a79ff5b8c60528f2f397a98043f4f552e3b7a8eccc1d5f06d83fda350d12773324d8157fa12d2872) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x0cf04cba242dc3d277316d573ab85865bff1003a6c9b2a14243ecbc70de0c8d42359d282a6c244cb32c8e2c9fa80c33a0d843f5af5f3197513f1104657b22cbdb037df46c59cf9866b3c92f89b02f80f43aef2e945b7fe51c4d20a746e23b10c0810b03243b4fce39e75155fb0be9dfe58c4fc9ae38c4842dcfb2adb108c28d23742d976febfa83db441bee72874341411344d26f4bf28ee81e8ce8440d6daed027d0f50a91475ab1896bb2abe00283c3fb5c3163b1e9f62dce0b3a2bfdceabe) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x0a7febe0b967b83cb0268100083eaabe0b795d8005c5d2b8420e1d7bf085c622beb84605052ceb840b70ee22c93e94dd0f1b1ef24d4c5d7a0fff4a85143ed3d25e720584984f63394247924a7c6f16b86e625f4c474024bda3a9477b42a8f07508cdd689342ead177dde1846863ab39fb05b2c39f003e2019d8905563ae8bc352fe1fd5dd9aa17d45a430ac8d2c455bc06bd5571d25153ac5728ebace1f558c0e0b6898e38e28e5855cb5615c4938f4f90e89c4c24780e4b725c633d41dec341) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x02588c524ece6aa9f6b39beb34dec76ac2e413a1c8278fd195ce8004522fae2c03f5d39db93d2e0518810b89d84824f402d8bef8c8c95ab3a1f12b146bb6f79bc1710716a3fe07f00be9c999bea287725c9f7304d7dc8d8113cab9ebbf65de9904d0faf527c399199fdf82288d0bad821df257abeb0af87e4a7a6d1152cdc130d9494a254e102695f69cf6a7e67d5b4c130e25fc5f1cea9fa2af715f28369331c8631e3b45ef5ba0c176140895fe3d4952ca830b024ba639af123e0663286aa6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x05f4e6e78054d5f57c0f966ae722143cd942ddd0701d1d250469001dfa00a7665f892cdb10ec01d73edd2fdb6b4b7e5904d839d8f2304f07af2aa949e2f6990e755c158a131a0021db8e9087b64c8fb299dbb88cbebc6df040f0855c6ea3c12c16e4126aba531a2716af104043884b45ae86643885a4352f846c00bebe06d95a864aecaadf90796a9fef2e94493556be0c62d8c4ae8a6da5831748c1f49d5652fff319ee3001a7043af456729cc75a0ce6cd1a8cb7b8faaf83bf16e220545b6d) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x06ede848560e5bb7548e1242039d23d2d295aae1bba28d81f1f575d659ddd845ead27be44da48500713866ce32bac98b190749654b979702c1eec434c0392c7906b729caf5a1de202c54ee3ba60d18cd47b0cfec9c1f6d7628553eff579b1e9c152d908065af0c2928aaa674a75e9d971fd05568b0dfab0997acc07e8d1671703b8f32d39f1b2d0d667267a11757e4480d989185c92e9e8059712501ed093f83d420f1b42e569d204add6bf80771de9d05d35d90e2a09991f185c37fed32a2d6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x08d2db820c7c621ab36801b50fa305664db97aa112fc3cb2e42ee763bf87a1e42351a4a33d8e193985f698517a03201d0233e3ab5f5a88b0ae54be152198c00aa8bb7dfd3c44ec1adeb854fbc8c127d7e82c45f923d3702c8c56d186861751bf011506a10f05647f4831a681f817781756f9c202573cbbf3793842fdff6b930a47bab336d68d5d92e7a9faeacf19388819a88ed556537dc025314de00503412eac8e2b3502db8310e1c853abdc13b5760a31c5df677fca11b8d894ee46737fae) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x0b418425a494a194b1e61a5e9c7f33ccd57fc0ade63a7ec39f6844b81a5bcc66ad0fdd5c5fafa9ec7b6e4f618100aa8901ff959e922a1917bde9c60f2b72d3dea0a953d06887031f7bb1962b30aad9dd7d2b7e368a96e09de7ef3ed072887f9316588eedcc134b01318669e3ba159456b66392a022244a424272b02358332d259f0c7401ad9b94a6ba6d75cbffe3cdb8040c35d5a9563fb48f1428fff211db8195da051cb85c693969ea681f7ef25084ddef35ab31d9af60079a8954923de8a0) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x01fb5b8374be433f9e1908c01a934c5d90f92e1f64f9826470450506dc83e07c8dcf56eae6e971bc2add7bab61fa376404f83291b88f355c33b77714bf4bb8e55972a86eb17610a40e9418a18cdc9427b33149670c80a1a3166b7ff97b60308c171744774facd14df4bc23aa5906744ab2fe93d54f921a0d726138cdd52acd3b920528ed3e512d1c6b602ec1b4abb143036c525e701d18ba9bae07862ef6c4e533cd5b48c09f57872c57ef5efd8e719e06984081c399fd6d91fa6f9f71e173ba) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x10fecc2b0b824a4e3cb949d0f604afa9565b1d993f606f0746e5debdf919cee12d2b6ec90f5a0777329d7be4b1811dfa0eb420652f106b375d19c616b29d83b240d95d571012970e4fe18a2fd103f4815a729ac5116f828125dea40871aca06a1352ca00fbe052193f5c87693b19c619541482f9fe4b96a5b87aa27d2e3c90b3daeadf706c4e03774bf15d75d1499b1401b9f225b3b2cd4c662f22fbc16101942259b0d60a584c1fff4214fdbad21266dbd1161d107c2db3882ea1e76db6bd8b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x1936c0b7c3d79501db11eae0e61003cf177cb88e6d227c4da44865fcdb91e61a3b08f3c8404c043e83bfcbb8502d7ca3073c348cdd192bcb578af92a18cb0fcd39fb4e42183d6d80469c8883c72d537960e405f39c739525cb223318c2f008230d62439b566ca428ae44e5c1b6a589cfe6b29a60fec77c63fe7559da0f076a9d832ab2b406ce333bfa1063b80e20be131836a637bc8a0e967dd3c8c57c7a3071676aea8b4b8d7dfefd755abf4f5c1188e87651535542802cc0bccf9c71db0be1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x051f4837d54a539bfd64b8f0aec82274813524579e0b61f8fc0bd65748796b6c374c9af207cb4916e77568937068a25a0a94831a3cb564b1e67c10842e3067f78d6895734d5c751cbf35ac2a54d590e655631c27779f9147acfefac0efdb45a11365ca69c824d8a4f583b72a8e82bbc61ec60e80b43eb9f31390f0b48a3d043b2fd87aaf803f037157d256146fc83d6501a7dcb3af681bdac8f39822d9a964dc603fcccc13357c6227a15f4e613eeb6826f021a06081270009e2633e3e814214) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x05e30ddd7d912be3fd43e86532d79aeb60c1a65ff69813195467403d0eee1f10d28e72962aa0da418c5473b11911616e059a71d47ff899d4301cabc9ea9a224fe014de235eb97004cad32ad3d96c96139c7694a34b7f058e4133916fb9074c0917ddcc61be042f8f8a488ac387708fbf17291cd032691def4af2ad59c454665cc4f30cd6dc1ebcdc3a644d51db8b456b0d7562d6eaf317472014711160ebf4c60186d1d5155f0338707035833aa77d2e63343df7ea054b52c2a47d23cde92c63) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x09796cb4112c32f3d673a13ba02ebda297c6c44b8b82cc731702788c64fcf552823d86380a0d87b03bcef9c3c374333309871fa678f0980eb27d2d8feecf92979d4248bcf5a3c52e43ac103f97c11572e37c32f89d497b3fbc737b8bbda81fa915a31a4b7a63e27df9d7ac93bd60b320f72c166170751f9c3581bbe37f4a7e87123e79d4744582a4124d569c3207a178148cbff1b45ebd7c72d9b66a713395c82873fd93be5836eae70f9c28c97c947ff5411c66d59102efd4b609ab6adfe148) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x0ef55120c52f8ff2fab3e0d8df060455e6bc568df494ecbbd0b3d42d9efc49ebc5819f9ea3f41c5d308d118af3850a9d03d7daf556a20e50204d80319dc73e78e03555a16a5d0ed40e4b324863226d72bcc3dd6313e846a40c101a7183e20031158b37855a1d9747b887739fe8b7789419db5a6e7451be477a584a958c42834c8f8cbf19fe0026a91dd0f3893ee44dc00f6f91258dc436c45da4b3e4516a83f563bc47aa8b2f5038f1fd1222fe6828886a1e93b0dc7b782bc631528d30439ac3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x164697d6f33b01d17a0346a14ce7ce19a9da7a9b50fcfda5d54506b5c8db71816025bbae72b2dc79206c0dbc212fd704015d7083f71040e8d96fc12891a1d25abfa31888b6a979293c6981b85ede61569e08a6106fa4dede8fd0d65e6ac1df5908cff6f38cd6f08391be6eebfd4d9d930d8186a5a74a7873e38e74a5afc1af0392711ef285017d01d82b7eb7d2ca08d30b7d1e5acb97dac61708a1e39eda8c3dff83ace70592c7fe4fdeb0615598a73f5f3f6f80b65674441aa1f3218bae3df1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x0f54bb273a6030da4bae7bbf62cba2232c4255610165e5598ba5411188edb6f20d99ee58e7a7af4d696cb304a07ebf2912c5133de2e27b0bdd1da07fccc0f9929dade6c7e37f39b3093c3e9cf5365f62b58d27b767c3ea8d64881c1f6de14b6b19a8433728071989d64002403928ea4126a9ac05e3928c5ca30dbec55bce1ef27e88e4fd321734588f7c31c447f81da21465cccdf04ae8e310780cf5225407de50c94a1a8eb65c475df88dcd5842efbaab2193de3f146eb78c06b9d2a38b2225) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x04d9a9124549958c1a11b2db4fe76b9b79f9328c316dddb2c09c2abd1415545b7397d65fe483d98fe4fb232a868ba67f010450d80cdac1738088013b5f00f0db1823caf600cb1577742e63a87bded90d4223dea6846ef35faf3c59e79b376a9b10f2cf9cd5ac868a172747bd67c9477f39ebf93c5dc150e51f4821de8839ee2f730910d6f8449d9de48714601607194819d26c8aa7499c58bf4e97ccbd28ab1f24ca0b43f091fef8e5eb04d6a12accedbc0da34cdadc495512a5a409172a40b7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x067fb21e2f1192ec16981ffd2f295a748295f255c572326f4fd3eab787d3ee33d229debd5e4450df3b90f972682eb9200a72287bd63c85a9a339acefa4ccfcbe80dd03575e9932b2a154635f31cedbe41a3c4c5365c5cfbaba1de4e22109701f06be87d222833d8038cfc9a11fa5e60bf83d9e9a7e2dadb4031ab2381119d4dde67020affbaa9c776696fb90d0a38a8119e58bb1a850334a2099a45f38039380918ba4c939b1373799cbaecc1604760e810d44a23da90eeb5b951a727da8d581) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x0ae2f725fef75b8f47a111dc998d4cf1176392d6ebd436fc090b564c867697ee592b20813ae421c15f79ea87574fcd2b19bdc85d98f0e9fd10de46907a12d97c3211df3a1ac8df43eb2fcea3d97ed8d704321b253dc7b8efd8fba71d468fea04053cc11354cb81bbfbfebdc2950e043e59bc0f391eb5552a6da2036cd02fc6d4adb7391eb5fc1f7abb621dce078036cb158c1e0d39e8598fd10c0f83d83070ceaff1afacc159f009253dce5076a601fc355c085f47461fa7486de2230245920a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x10f9b44ecd58d1f17624fa7681bf756fcb339346d3d412f03566ae196fdea24da42a257d4e345eef7601fb1b17e005550853a22b71d9d36707054970d5b1bdd6f5055e846fa5a4f124250f5a259e6aa4000d9c063d99e691c9c17709942cd22f0bfb15e32ec77bd2cc13875b34d8c44cebdc8734fd580c607cceb701030277705b1b9fd46e8b44dabef2d315c70119920efd6d775233e13dfab608788111cc3dbb1b2f6f92bbdfd5a482cd2bd865184153eea824351e79bbea60bdc964ee77ee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x16a05820a0a16664cfcc71cb648705640a056c9d9cc6c5993aff22f6b61c7508db19fbf0e544b9019293ff7ad93e59b002d91e6566ec18a8e3bfd8e3725fe7a027b055273b86f1f1ab5c02855825e24d08964ff0b16a24ccca158f5616eb762510d798c4e710e264a85f9ef00e18b0184382e07608fd2a213f829ddeb9b286c1d12cd547c5985ebdbd6aa490553a72df06eb478d6332ab4bd4d64c325824761b811c0ed8122b6e36f23f06ad1fac720e7f1e7b772e567c7c0a283969c5557807) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x13b51f50b39a82cc6ea6062033dfd349c523f80ecc88cdf69a80f5888f94b9890ee06bc735cba06cee58c5bb231b17e816309ef2d3e7825b96a2070521960fab9ae5caee8d35850d47d3e6a7a68112796292cee40bfdec31705e21ef45375261081030da70ad7c5f27909abc920150f17d14f46710e40bc0b761e7110f4ef6dd08faf8f70395fb6b659bb797f241cc2912a68dcd90bf184e54db5c48808dfa2cc9bb16569500abf7520936ba3d7192240e050651201cde83f51c10eaa66f5156) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x1939a758be0a4569e65da1c38df793a425ba148ec01fee063d8aef304cb0cecd4612034256e38bd365929604d27656f306384a1fdf4742e1f3ee39b2b6145e74d346e8b94eb6d1d55cc3293438ce7b4425f4b838f4de91dd352cef03b11100b406cb1ae2b40eaa79cfc619f6f0cd55d97550e4f6fb777063a92abfb46d9ffe9821c08ab9c798e0800e305354f3c6ee49067dd176aa3b4a561b8fe980ad7b660a41a5563ceb1de278aecfa963237c5a050fa588d155924fc1ced9c7a5528ee120) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x0603ab5573e02f442c3a466382998a95d95c4592b3cbe34eef323e588ab1d46b1d98b089e0646561bb6ab834d2ad2d780912ecc7bd31abc0a5f2fb5e6c56ece8a3149a8986d347d31968f9180b73b1fa6e8f05aa2adb4008d594f3fb06f1f4290933ad5563d42a45d156aa64819a59c34ac4432fd51bb104f6a32fe421edfa064acef05dd5f2bc91bc37f5ec0ec832ce15f13c5a9c3d281c0ee314f8ba6a80dfbdd009c2081decb62d06397a4355c740e3841a5d50e776c56de8390b2dbc4875) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x18870e8f4464f3bb7e79222f6eadc0c7e3e08ded07da9648f0759b74a4b09a18684f88469a88b1ec73ecd7175260dc630dfb9efafe23dfb8b26904a00a9407a7966ea4fa25615c31eaf9044d671369a8aec5c3efda6c4c1c4b80a7b8f6e65ebe1258d12a7b8e7e64271420f667231dd7b5724945ba1527e56319645135e3b33ec14fd90b53cafec63bdffda506e8f10404c3a7918ae658e54b5a78c7c076bbfc0ba4d0ef955bb09c0023172e870ba7fb94c44102ba8b3001c5431046f6b9e761) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x03d06662af3934ccdff4d28fac7281bc9ed149ea2e4ce9a2c7727a6cb84f31fd61ccaa2059be8fd41ff6c8425f5d7e510534d3851a56e72f97ebfacb9ccddcf4d4571d14ae4ac7aaf046ccd4ee903fb06681a8aba0d02fd5a1be5b45e40f84b117187fd5a26936ebdef1e288ebd03d9edb787cf2ed06538bb24f895b8007e6442b3b6f3f878d09ba6790e403b6c34c5b071c00b7237693870fb40823a08642de2db8ceaced2dc832c77f3754711fa39df03f1f57624e9a0570039de6f9bf89a9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x0f59ef1c5fd12c2e50a78f9dcd4ce371b890f356f3c66d2ef70bbef53d713dff17a9738cb09e8574f6e812cf1fc8459c08cd159f8e3385e32aeac4a7227d5c0b8a87469aa70bf9fe9c1064efec96ec6dbf9c2af429f0a48d66495688d244049b07ca45abecd4f97135fa8dd25e40cadd501f8753502f48cf3d102016c43e361e84ff2aeff5e40e289788d2f944d783ef058d9c8ec4d7e7b941e261b5f9e342b5006bd8c3cc50e8cf37280199463b06776d42303c1bfbe823e807ee74344f3803) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x124353c0c0e37e598ab5c76344ba2c82c40e24862eb4490b8d3ffe54b9c228db0a22b5a8a3d3ede1b2de18c436bbfe4c0b7ec4e4973d2e742e387484458916d35ab73f17e927f81b0bdae2b0b3b467c5081db4e9ea3f3d65c2c017f32db916b30f1e29e5074396a921ccdf5d2cfe54351169613d481aba30d0d903410b87f6b50403835cfaee9d2ef5c2cb237d11d5ee0b8f64e1cef69c652094de46cec9705dc9ca501c7c9c7af060303753de58fa97ad12e03f850fe9d65b0852acc5b58f26) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x1213d72767b0fa5c926a3b058ca3a9aa10fdc2b0d0b97adf91f660c13dfed4f7e57fb467ac0c9f189da2ad5ed8c04ebd0e92b1e90a842e6ca42cc66c26196084b833214a4b1fcbafb01837ad086790fbc757c537163be73772454a7d0feb28370581169867006417ef509317891b36f2e332953d3f637f6835b58e4cd3b5a1cc6091a1e17792d23d41cb206de73c1ba0108e8ed23b2b15cadf3bc89188569872d702b3a1c2f06684e294d77ebcd8409f736932c59c075ff97c926530afc09728) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x1326f98dbadf4dbaa18df0fd87271b7a34c8eadbdac18f92cf712066295078b4d12b48de1346a8c0f0fc2431f82c91460ea4d3ee221040d0b669be9f5b6e4a2e719b899770c2f17a345b746377d003953db1b5f9cee71d6e4af17b71dc0151f20f4d08e2fd406003967ddfb1a5d6c8d013896875df0cefd6d3395496d2ad5ef6694b2feae8952fa1ef1b52876133b57813da5a30be043006fe9333c14279abbbcffbc47fb46c67ed7c1264a39e53841e2d2c126f207dd055f373abcc2923e916) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x05c11a8356a82f725a9f484eb5376ef831351e4815ee9696bdecb4d0a31bdf671108321796129b3dd7e62692ddbf3a980143b29d8e132df1cb431e16b4307ba061c6db86d018a44f55568f686915b48c37606fc28ff29a68cc2e72b2fc56a196188aa6125a92876142aaeac49a4ea0b65ae6e53b1837f87134ee243055a420097eca13ada16878727ea0a3804a1638a00a41d0255bba9c8aac9296e01a181f9c0572a1b2e89349988b65f0c3548e2fa279c1d7a3a3a5d89b8c9c3787e0bc919a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x0cc59adfdf284b46ceef9e94fd82808ed58fb5b269ad57eb1f53b9faa586107ff1020d8dac3f3ccae3ca4a3f6f0e37f8195f2e52ee9347a5c2edaf78672fbebeabe0944f61908a4454a5ab7fe7a4a49291fce6dc8ba85570ba6ed43e41f3efc716267d38cb286e90dfe0177f4a757439ea52dc2f4e33b9d02d1578fc46c394bd8bd5c8d90b8743b085d0830d4ea51a8a125379289caf50e1373e331cc43643025c9c06f682e8bf2e2cd44f6ceb04f629f23fa2d5d12b04ed3ade91fb51adf9ea) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x146425b42bcb86ca1a9338b7f97911e2c29f558c7511e33a2940066fd97fd0ca98651bf28629af87c7223abf60bbe5e000f26c6480ecb410e87dd5117fcf874f044501d391ad264761dad919a66181ee47ad22c53de6343a2287add11fde2a960f05e7349a086d1df1fce0e711ee1fd825dfc26323b23d0f9d67bd5a31eafe29e8380793fa443f9ac86735e005dea9230ebe2471063b42e5468390f089670b7590c67e0fdc16854d6a8b84062676da2d2022c6232faf46755afacb84ecfd1358) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x08782d43237f97a5cf4b4df3849c5edaddc2116f998652cd1a0deeae26314bc7bc4e931b2658ff59437f6c23a630a70a1541e4c91e3f5c5cb5b75998c974f949033cea3da6ac0125300dede47b58eca3f72b103fcdc4b2c0b54773821ffd9cc10fa1d239fc77ba97c27d76fa05e70af53ebd44562697c5e7891ae502ebe8c801c0d8737a069b9a91762283361cab97d617d72a20886f0d7da28d33c4f3bbedb36b09f17554e9f45dfc25e9348ee841bf971be9d33a75af69ffcef3bebbde5480) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x18f273b9c39e27c942cd80c28d9ad000919c8d1e89a151ffccb0cd431eb246fd622fc1bbfdba7d4217cb988a408b2d3c14a9cd4d9a2991c8a7b4e4aaa7a85816ecb70caacc8c557777257aed3a207eac5beeac7e527c2c7a41e367a08a08d3f40654faabbeb87873fad510360e7af9dd0bf0a8644423966703f97f227a4a8db78e1a0ecb26e73cd2193c85837447fe030bb98c5d130636f451d4f88b73c6ebc07b3a6555f99f9ffcc31d4950d87716333153ae80a3ae8809e45a63d3fbc6f51a) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x144df1ee0d7578b9cc430784734fc61d537a691297d24791c55fd7f84a120de74992f28ea2d946f6bcf749bea383dde7092e9aee4033520ccc5cfdd1ea129d0d37d659c56e161c11d6b7186cade1f4c9da8890481bd7453aa291f96a395f72360de71a74c732f740daca5646ffc15cfbfa326a98183bcb39ca01ae1ab5eae7ba93786ea1668d85538f29ba018b1b272a0525940f76acffa8389d2fd16bf2782092193812f934084a151815da57b3f0728c04dde3b9ed4177d3f0ddf185eef422) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x1093a56c60d4e4272585ebe02b04111b3bcff524ca0ca47e87831109b63348de87b7b069cb75a269d888a4d0e74836c412b6042e961380470bd3c8f383dfb6326570ac12aa4779744b4d4232b4d559ba693c16ff79f44988b896a01709d373321353ebf4c9a0878cc8f19c7802bb63e617a905baede501780e5fbd7594b79bf04641ee85daa1b28971fd00be1bbe6de405a7718928c4aa21e76739c9831e9db84381b9337dda9bf63328171ca07710d93ed1b004f67f131d4eb2868b1a727aab) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x0419393d95c6e4facc4467b752de6cd554e2d2fb8af5005c4541d11d43ea41417484c39e40adfe4bd91763d77209e15916b9a914aa7dded7d5ca1eedc3c1c9210fdd75bcc68ab3c9a6fa2867e1560d26c90b025540adc2a7447f3d5b1b2c5677117e3d9eafb97c4bc8cea1e2950349db4d7b5e981054a55065a5cab48aff4e8c4ea4781cdf19c5625f4982bf76ffac1c018a891fbac1686e9c5be0a5ea8db50ce77fca81616f0a80e0ec2e21d9630d32c0d1e1e30d73e1838cbadc63f6123b61) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x056fa4dc97c55b5b48ec94eccdf82117f95f529130ae4fa66dc30360639db6c1a51a44ff24b8fccb3554521c2cbde8e50d2f31cf281e3ca0ec5bb392896881f7c0de3f4be17f38ab256e12be071682e114e4dd58f4f6dcfe28c91dc98fd6a2a9033c52d47c41780f056cd75cd26b8367e7d573ef896ba9fd22a01b4ecc4f2c666b89565766fb9ef1a69f52eaceb603e806f2310cfb040faa7b9cad64fb834a859287271bcd4eaf85056061c7a0fc0a347b4545967345c2b678130d1f00ba5446) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x07f5c7378ba427b8030cc07b74a7ac6be3f26bb7427d4de4199b390d611338cb53ead89f3d64a6d2fa82f361ed5d6a1c0136fff6b37faf56f46ee1ed69bd8292e92330fb65146221ee33d86b4471cca4a249fd66f7c3a6be6c9639380e767a57016bfaaa68ea57833c77c10997dcb6ea564d4d6994e43dc92f62e0e74f7493324d4ebeafd3e3574fee754fabc3fedc6e1767af50ddb2c80622f49931c320c34b5cccbdfbaac25f144added43d4e6a13ba9fab3a648c31d54fb70379bbc676f03) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x0db47b23ea8655d8bdea4a964d287dea93e2051d6b0898b8f227ccd5caddc06927a3417063b47ece53eec7a71aeea36308f478ad03a0e1a46e552cd5bcbb78c1ad774f8a1a21196ea186099c7c65c141b4400e3543630e5ff4951c2d634e43770ffff842b9065591f61bf71accceaea967060e3c8c4c3a6f3f5cceb6d9d43decc45081e6c73b25433ee07a1dd554de7e03b526741059c6037b20ab02d2183c2a63948a2d24b6745f8b99709eb440f70e839a6af23f1fb05c0434a25dfeec8518) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x096faaa2a2e6f86339533be33fb37dcfa202a757497dd6a2ead0d27a8943e909f2a8b1748cfef0ecb80ca7dffeecdd87198390e65d8f6cd3a77d006992ca2d2f8af52b5cca18acb0bf1b9631dc544c3572c9746f5e9d422dc73d2aabc9cce5df18ea4bdce226d443ce4252d77d42c5e5d95b80aa7630a3d5561b9df1b55732dd418a362e3042d80c83754817491437ed01443e49536534683d0f91a832ff6fb4b6fa3172f4ed6510bb1f5033d8fb287c7c9ae1f95ebf0e9121ccfe1f6d869249) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x1018f045f9c0bf23270c53e93e57d86534a92a07450d6ec23d7ddd0948f1bf28dc5712bb537afe14975348c0c139ee8f12931f846fa0fa8b90e43311dfe117e83f599e54bc48f8ff287ae41071d668a898a542779d2a5fcb4845d1ae97ee28290eec5e9f8228dc200d563969d9ecf5e67eda35cf2ad8399b23aacca233bb0a5f556164c3b79751a3f175f7f922b90b5e052d1b8786e0d4109ae7b8b55589cabf3bf4e63962ae3eb6a8ee96a0a202cdd49dcea4700142398c410bfd5ef1370a94) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x10773264c20e034bb3b1940aaf16c09b9514e9ab386a75bf242414aeca5d00837d926ddad1bf73d6e8e3868c65c2360d081d920c6986f04340e6d288b5d6cd0e293d808c797e50a138ea8f2eafcb62660dfc376ca37bd83383e613ef02947cb200cf62f889f8eadc8a75f2bbcbd5948af4def506b2a91af37710fabe09136ad998e72891b57316b2501d707b6e77d2dc10610a3f1b5c9d3551b234a22270225d579bff41a6bac7fd8d88f5a0b0bf5320b2435774adf05a59c98a4e02e25cc0f6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x0802ce52aa3827ca0c448659c5e752946d4559cbfe831a1a3fe1961e46c4d82fe7e7dce894eab491828b8204361ba67c188844521c610d755db8fdfa3a8d984e715e688a8de91b431b7a39e55527770ae6bfdd9dcd4d823870edb7b507fb8ba70337543622fa6d36faa7af085fcb810a9d6269fe5ea41e197ec3724662d436d0a5197eb21277160bc895dc0befe26336196f2d23ae192448908aa4afce25f76b24e3e482c57201651c6cde3ed02f04b7a51918a49ccd8e10dae597c64b6fe9eb) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x028ed975c6b20cdfe6407975052717080c11fb0139dfbda12c82c61225e07958f388a8977b7564487a3d09c54da95df203601bb8c797a8b17214b9b96250341adea5f0a70896302e4379a7819bc54722cd055e9ab4fbc74e833b2ed38e2a856211acf6aed8a4aefa31566ef473bed06c6c849c0efe391d335924cb41bc7da47f62c9d2a3df7d634ba6e10ea29fbd43c305a0acaccca51804a8ef4e24b4754322e13126345b83dde0fcbf5396bd746b21f8c223239441c21359e1e5c22aa203f4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x064a98dcc354faeddefd85c4875dd501248d76272170417169ed41ccaf87824316dd799a32bf72fa93c757aaa2de82de0bc452e4bf80f9d9019f47c74854c3a5c091c5ee1d36a09df9e532af952acf209251bf751aa2c901de2e767d146968f51196a5ee76b5fb38f9af32d3cf76026a1164ea220c66d70cb389785741dddcb8e47057989f7006175a759f4ff48afae001ec48cfbb0ba4f28fd1d98c623da183206479c49660a84b2effb8052889e0e671e1abbfe5595e43fa0812734aa4f0dd) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x0100000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x0000000000000000000000000000000000000000000000000000000000000000' -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x41ee112fba7c41314eb14660a396fee42bf2b5c0598bd3bcd42db2ff5b2ce027' -storage - (Some 0x06ef487290cf9a63c50b288f0d61a6df4b2285b575bc9f3ad69a0ab5ebcebd53a61fa08ca56e13ae9c737ca68571131c08d0a7218c15f0e0fe13522bd3c778825c94a4b5bb0f166d0a6ff98cfaaa26d8daa223f84b1f695df1409e60521625010af8d68419109eee57c2c2c90a832773be1a39ce99adfb59a7b4105d3ed36bd75c27f28f3c07a124092a550d5f5298470e3e8cc369b2d9e172f972122dd20587a20dbe37d00638b4f506f6b4f9e96c93ef4e2ecba8cb1fc7cd7760d950ea137b) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0xc442754d43fe94b94bc69cf090bcc64af22448dab9991e65123baf57f996dd73' -storage - (Some 0x0baba172361551b9b0efab885364e474ed868daa2bf79b2fefb2028fcca9081873dca5d7b20c638ea4d6b69553da5a7c0b175a2976fa0e2c4a7c7b9a795825b8c0fde5b3b6a01f189b9b9abfee5f925639c0d29c5c803df7a973b0bf0bf7edcf0854bbff06330652371c1076edf15ca6747db911d2aa0d624ba62eef7e158e8f72f7713207e772b84468ea05ed86738602288d131a5cd18b6d41a9e696bef6f31a196b241fad173b6ab21052da67b8a8c13f34b6083c8da2712dd578ff8179d8) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x8ba730fd4757e7b5a7a0b00a98c91539ce3878b0d6ea5628c5a675e233a95365' -storage - (Some 0x02ead5ffe35e4e026510bfa8ac4dd8c93203d4ca70eef6212861438c1c6cd2f9ac3fb80ad4d0dbeb62464429756098e10dee895535374bf9a3c286b740965a863cb75eeff96478e6fcbfc48e57309dfe2361869a3318d46f19dc82a05c48f3f80b05c98a156dd65796188c57fb389df353df45802a1970ea6521ba9d62792225bc109af013d57d93e875aac7c1ba8cd4126070d747e9f31a5775ced91a3baa2584ae466b8a9857e815118d18b416ee30a88ce70f314ae5ce644e85b08387e128) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x198da3ef817efc195ec0f8df2a6b9a23a849518d3358c39103be11650785ad5f' -storage - (Some 0x0076ec60c712a69a6b958f93ef7ca83c541367ab9bb7de3b06d70bf92b41abc866d50fcda0d488e05a6a8d8b2e7b2b790eb88abed2e1b3ee471267e039b658cc683da60f8c469330bcf99d23baacbc686778bbf384883ebdc30fd44504e9ef450dddccdb902fc57101ddb0ffa091fb619959ffb7742f91046a945d666e49e8963d47368443bdcc48d9c59e64d31c11c200a9f4caf68f46d7cc374dd9c4f4a5420021c61d9ca22bb5ab8d4570955466f0c685fbad338a8ac1f01114809f49a646) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0xe3b17a70a9422fe8a965618716f8e31903ea5744d8cd015eadbaa32b248cbd0d' -storage - (Some 0x162a4b7ddde8ef9894d765205541f2e60c9e316b18e1e48a64725f98e4844175183d4d5e06192a5127b8d780083daa8b0338056e76a497df055f943e68c45fa8a829cbe8289d731ed568081f671a260ebd624e44b7816f113c0c89aae5347751079c37d7eb00db6938449e00c74fe5ceb611197be4dd904bbbca4fe171007da62f9c925103d1d3f554434b289cdaa4f016ca00ccce538e727435017a72bc738e450bb6e14c9cc5a9e2e501a56b8419d1367a8d122a10fc0823c7dd9c5a517dee) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x60b29b8986a5b7708ef2438a385221bd5f99ec81ecabcc8d731ba2d3d1dff50d' -storage - (Some 0x02d1cbf6a5b7eb538f431ab1cca143b1ca02e33d90107f8e82871fb1f33f7310d6ace083fd7faa2a2c1857a4e72638ff175c8422c820d94e2956d27ee2f791eff19e705f0a62b17fc74ab6794a0dddea4d72faba9b8230c4f9dbaf1c44534876111d65a360e6d0c1937b600b7f37b5b5b4d326c08119a4ce905d9c9103a8260fd766294d7cb25f90b5d152b9e9418b9f0bce7a5a0111ff7c4ebea5e4f87b6a149e6357386f2461f70688514cb97b1013a0a0ff610c25dcddb81f1e48e8849f27) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0xe46e41c55be0e958ecfd46b3f69bb8b4803dd982894ad6b03d96806538284651' -storage - (Some 0x062e01652129da7f81d1ebf0f0530e2f9f7470d2ee453eac6abcaa84bedf8b2e98f4c8ea2b61032813cf7adc0796274604ab49a10604f75265c448dfba91b9b630bd96f490a0cb6cf68bdb2ffb6253c765c663840322e4ca3db73140251d93c5085c2bf6c8922ef5cf2fa85c531b59ddbfbb1197e081b4110d36d05655f5a10d818e29462221fcaa5d363c074a55be3400eb5b4334683f4186baa2aca2a676b6fbd627ad2b621364d2095b4e4d076fe06eaeebbe410e6146b800d4c3841dd2fc) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x3959963124bd47d8c84fb6beee98ed90066e7835ebd463c41323595fba944f5b' -storage - (Some 0x098a164689e471ce28502495326966b31e7db931bf8a613adf50888c1f60f6a1aa364ad27683cbc4caa9f4f3bad4431004473e376f1b7bf72354469f61dd9ed207a947676751db08af95b7e0c7ffbb58e89000927a85844bc0bb794b6fbb707e1168a86af2bdea39c3cbb9a4c10b129ac760989872a80122c1420c94210a6eff0e78250831e0df6787a2330c2ef4fce9135f3492f88dd277667d785feeacaab2385cf17d610b8368a5894928f5f685ecf4472107a1d60be8c1d0b54840ca37b3) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0x6c240a669e04c8ded73529373c01f741bf092fcc89ee795afde840a59b251c3d' -storage - (Some 0x04f20cc77326e57857147e59fefc56b44d83df17b7f875ab2e494783e5dc09620ec797196f88f3aeaea101d13c40721d0b69df47c3c997cdb0247cb6109b6dc75574c7f9b4fa34ac0009e2d0205c5e3fa2c409f8370a5d599fd92130a21c439b0cf49bf2ea294aa880a828eb335968ac27838a247b6f1b6c3b313e1fafe9460e56d513085c618fecc2ff1483567f9c5a07afbe632eadb9f19107abcd878b38812cee34b5f393cb1abcbae0e8fdb5d86f1053e36770600414b798a492a31ddc90) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/mul_bls12_381_g2.tz on storage None and input 'Pair 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 0xa0d55de572481bf7cdda17431faa763cf9bfbcbd76812667205017322be00c6e' -storage - (Some 0x14637664950ab9cf00089ca37749e38a61693d4cc526e0e45bbcef9db98454cc2bd1a87a93ee9f6e568388c49633a0e4116cec15613587b591007b3ef090e2af37072443c1d66cddc0f5cc1e45ffd093343a8cd09268d63f3fa0cfb07aac01da01ef73db6bef32a8c40dfa62f5bac884b271a71bd78566068c334a5ee087dc07d8f6d67d73f43f57bc2314bc8d927e47168d99dfa82a9812bd9b5a9bcd3e7c3fdc885865d2780fd08c93fcec32e3c0703e39ddd3f3b334fa552288efa9febcad) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- negate.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- negate.out deleted file mode 100644 index 292f661d45ee6a15f71662773a049cdaf07d1ffd..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- negate.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 -storage - (Some 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 -storage - (Some 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf3501687299151d018be22afc17ed11479aa6ef4c205379eb54f4bbd1e919a2a382c4843df694df7ef1910ac533cbb3e8ecb33e2eec16ab38ba0c80592e9b2f105c432736e54662e8e1f25ad65b7b0229800955022b8e5cec4c56a6be4fb995dc42de629955) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 -storage - (Some 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10b7719be4db7d6a7de406512066a2309df6ca1966315010e1cf28e81e13742df54577c6beb64e3f5ac12f3c897ab75d5149fa8d126e4fad68e275a7a36b21b650a9ccbcad5b0d8fe3fb5e91a83277294a8f24ab050c8c610a621e1e090cad784) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca -storage - (Some 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb818e1801cd57eaeb542c3a49b2b4e2c95ddc71cb806127e84f640980049b2662d04df1e82b2f2d7e59a9ed0e927ea015c104e3d756d7c2760f144b705d2cdd4bdfc4b1db5db1c8e4293a8b00b6e7a010f4088fc6196286cb9f3b63977c0cbe8e1) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 -storage - (Some 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd1362b34a1681a222674a06dccb99823a884404edf7668691f445437bc9fe1468096e12d37bfe869e4642c2d4d831f1fc001036c23229941761763e78750c44d6df95f1f598bd57cf6ddbbf7bed01aa8acd43d6062b9a9b8a74f6fc6884eaf0f6) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 -storage - (Some 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0f33ae9a02495781152d75855185e0eb192b88a30f85f72710d5ed190e1ed0b9069279b96cb20957344e8d58cd810cf20f9d84d97ea05441c8440259082701bc034c3759dcff0e98b91259ce05e10df347b3eeed1a72663fb0117950bd9ce379) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c -storage - (Some 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c3711bd4e94f2a14575b3dabd8673d80d683302a15b0d24dcfbf593f6610dd2930d044b1561b007e2ea0631a6589e8afb1d0b40842c2ce80fb6eab8d5c91e9fd4f851f350f4e182b96516acba6a809a3a1eeb8a15729edc92b03b1fcc12d69deb0f) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 -storage - (Some 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710d3658058c31ac8b988131c738a38db0e86dd467f04aae4336b75c8c0e5811e1db5890648af1ac8babc1432324ed28bb0954df14e1b66d36379070441e1d2ec4b29497fd94de7944cc170e96b9d899063fba25e4a0171af84385ef7af47ff8f2) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 -storage - (Some 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec74298191ac2fb2d6688e4103baaaef0c893c604402489c73e1fda888fd47c68ff75e3ddf9ee91edb6e7f63af69e36120916cd16e8fa8605097236a7bbf6d16166aaa3d5c8d7b79e806cc6c7581b2f64fa3fb2255623097beb04753bd0d87a355a56b4) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 -storage - (Some 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0e29d6aa4cd9cd5d9b19c18a3b76dd7dfb4603bd28dbdcd013bbb11239556965d91cee23ed3e8b0b1649dcce6a1b2572079f467f12b9d4fcc59ba60aa0b1eae7745c7fc6bd2c62651310166a182698c0b3b3812e9bcfd8d58a37cc53fd031b93) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/neg_bls12_381_g2.tz on storage None and input 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 -storage - (Some 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a752057df09f6b21e00af755abaac2d76a5ac0fe7cbaa41a59df442fdb1bb72a45be1a62011ade8a4fdcc6cff0d82e3b2e7e11c86ec76b71bf216be737be1bf2b757e4b06165f62ada1cf7d12211c60c42df8d58fecfa784ac190d63bcf57970c404) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- store.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- store.out deleted file mode 100644 index 4c3daa3f6251ea517bc73622069455807c0617c2..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- g2- store.out +++ /dev/null @@ -1,108 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 -storage - (Some 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -storage - (Some 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156 -storage - (Some 0x048e66c003cb07b01854c4e80e9b98d54bc9ed9a47193ae67676629a6edf46de3b8c46581bfa87764bd637d550a172f6167ceebaa1c1ea190460215c6e154e1226915289185cf04612cef778ebfe42fed44f853011b96c19b8a2cf350168729904e4105e5754ea825e0a601b9c5c60b710fd602ffec940d64d8e2f1e322cb82d89cc810d20493acbee4b17134cc17bbf0355d9302cff8d6bafec975a002475f21e1462a3012a3c63ec2ea920ed5bf3f8904f13b25aad41b0006923bd219d1156) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327 -storage - (Some 0x0279884628439bc4921371297859280eabd9d6c0e53cad71c8f8934739ba50d79ddd1544843235aba1a26a36bfb2ced515b40eb2039356276eee81389605b8ae6c904f8a27e885c4d159ae033471da9c141eba99ee5efad947dbfa999af6cfd10e89f82bebc80ff26cdb42a43ce189cd850aa9ee907011b14a3e441f1579b344ca548392c5ef1c0a0dec0c37685434d605616919129aebc3bcf44d3c0c99917259da7fba1dd439c1277ae9867389838f75b9b54e608b39ef13dd1e1f6f34d327) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca -storage - (Some 0x0664d0fddc05400c4fab60bef6dcd339ae3f99bcba072227f08d1c283f51397c8ac042fcb31dd0d52ee3986f7e9eb2eb024fdce315613dfa85c3e7cccdeee2c8536e373f1ed97451f49d1bfbb10bf074bd3e5bdea86f4a1d9cef681520476eb8011f91cd640137e50858031b17fd804186b02ecced72943a70f03aa0acfe8ff719cce17bfe61281a1f602f16d815a94f09b2d474cc03bf3959d6f0b0707dd819682c2dcf1868847cd38822958836f514de23039d1b2b9345c648c6883f33c1ca) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5 -storage - (Some 0x021e2fdfb66974000c5d51f648aceb27115721c2d1de3678929a17435e8eb039e0d8f89d4d093a700d100a8c9a01934c197a4e20085a20e451e22f46979eda8e5b7061280cb58e157e3f0a5073b6656c0574b47b5e0410574a3b452c6e447ccd069e5ea022fe4477e3d1a0d977b22a9cdc334696fc1e8c2d72eb8f252cb2e1bc153ded2b3555796173bc3d2b27cdb8af19f0db2807565282e9a5693dce3f680084e1598f5ac7baeff955132509af4b99516829f885b96475450803977b14b9b5) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732 -storage - (Some 0x015c946c13b84387740cf5819727445ee94c61f228c340efe76a8cf1b8017447a6ace3df4b7e75a45a05f84bfa6b8e3a027c66ee9b741edf50726225783b632f976d1013edef14c60189217e297bb5020cd6c0412a4a436b189f1233e37a5eba0acd635037368f1935ee3230f1c5cbec4b4bc2e1e3ff1b98565ae587e892256b1819864544a1f6a885b072a7327e9db90a638d10badf925882d7a55d3b24ab1b612b142b16860426ae1e78d2f0cfe830d6f8111196e199c009ed86af4262c732) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c -storage - (Some 0x185cddf00204fa60aa0d2d31a7f6e72282bd818d99b2592caf7f8bf7aecdc744edb257e30aec8d8d784fdec3429b4dd40c311f3decd4f1fec6d1bfc2d5d0a521f3969a3633b8834b4f145d8ef4995704339c31df383192f5968ebe313b421c370843c35546dea1249740ea2fcf739f6f3174aa29e66035c3719cdc3fe8de63171a60ea9d014c1d15b3cd59a76174af8e0ec08dbe0c97d6e36062d1ed24abd7df1283fa901202595a508418367616bc053321ea8c12776d4f7edf33ed2961bf9c) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9 -storage - (Some 0x0d842634253f976abc6b2f8717b67f07a04654495973639815bf7c4f8fe9ef66fb72737ece8efb14185f92c7d64696d318509f5e9d5016313639090c92ea510f416cd36737dd35f3a2ac5cb28fbbb81eceaf82eaef2c5a2bcd0a699d2f600d710ccab9e4ad4e3a0eb29a75ef0aa81f267c09771d033a647c30797614e858e44243536f9a266253740e3dbcdcdb1281f010ac32d557c97964138b3772252e7e12b1e2b3875ea6997a9b19c40a3cd85d1ddef1da1a113ce507767910850b7fb1b9) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7 -storage - (Some 0x0d1078cb857c9220d0767d2359193a6ecac1f925f6104b076daf32da2cb557b8674fa40d849f2be08b713eb6c42a2fff094506665ae13319746c7602208d7d57aec06a06c4955872cc172f79bc81a0a2f35721678b744765ae9f6b061ec7429800e64eef0c195db63adffd0752831911603726fb2c46f2e4dea0fe248db1804040b2116cc39d18097f0861c9edf693de0318176434767463a35fb0e4e1e502338eae73cd5504a5f89fd8b77191b6b671f955dcf53568fb8a7e2e2785caa553f7) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18 -storage - (Some 0x04b3ce0ec841968d60e14eadbd8f26db9409bde0465611d10c81ce13c01e7c8ce8859e836c9d481e672af7e1abb5fb0401b2d53814b8df9a7c1f6d77ba0626f3f1e5d301f5138a734b56de63596c49af4664151e3801e19b0618fce9c8d10d3a0bd73b3feca6193cb001e62c07d4cf59693147c7caa935ef5375218ebd5b8cbe458f11dac41574f4a3b5233195e485391261cb6b26c6119d858001aba299c1eff01acbbe3658b05a5420bc36de8a5d636af87ed01584272a2fc733ac02fc8f18) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/store_bls12_381_g2.tz on storage None and input 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7 -storage - (Some 0x068737d03f75944a6de3af8006cc46deabba7c08bd1c500094ead2c446b18a04093685cace99d6c7ddd2857455432193041bc6fd71097603e7a410cb79b338bd078a2ac96574afff4b84f205e08bf84c0eca52fe4fe7bd95602e7dd80d90a7521483214ace5e068f53c5fc0b8074427ca378ceca4f6ab8e02300f7853f86b0660449fee3d2c9b022f32f0f27d1c47c2d0838a322ce0e2778df346ff82758f57f7fc6ea1efd5a38a26f5fb08f30a4b3449153012f09cf53e6ac9b430a868ee6a7) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check empty.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check empty.out deleted file mode 100644 index 88e8d6786aee662054428652b77685a8af05f0f5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check empty.out +++ /dev/null @@ -1,9 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{}' -storage - (Some True) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(neg- pos).out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(neg- pos).out deleted file mode 100644 index 83312b878c136cbf9a43664cdd1230b00a6c3adb..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(neg- pos).out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d710ea71fe470a949a162b6eb7c208ae39ea757db9b95ce97497b99bf9f804f54f7792fbb5560d4fb7bb17ab3640dc4700 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500d4843f1486ebcfbcb9f7d628119b20e9079757dec1999c5487228e345190d1454f28d3a36d781964279de5e9fedcd24 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30d47802cbe19afdc9478272cd0160d92fc58b6ca4327e3aca5cfdfc68af3d8466bacb258b053d4281edb6d329a4cab02 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907706c1045e73c0f9e3b4af1b27a73feccafec4c8d252cf5019cd524e150bea2b71b74c064c9a2884024273e3dd5152ced7 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c285702090561b8033ad1b744ba6220f0a6c4bce2819bff957663db716b7e569a3df43008aa7eebfeb162bf42f4bc6f9990ed22 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da168ecb7ab4922d346c5cb3cf166d436ef6064fa0e8c60bc1af09f10a2106dd26fd17ef66367418ee64022cac1a577dc6 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620ba1fca4afa765a2780fb147aa13b6d7b18affcd22b4f5d2e75af94222adbda30add63ed4593dcbabcd835ea311f3069 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe354500041b1c97654caa094d820fb46b874d2ca25a3e44c99fbbe45ba0f5afad6982a1f589c528d857167b9ebb2e6b42de8f4b 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280ecf7b78dda0ca1625fbfd9cada5351ba3bd300c4f3643cc0d51bf1289c00256f35905f46c6e6e96857169d3f2b8d72f 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf10a822dc5de36b9396424657f0aa07601c5fc613dd00d7b12d9efeb2619d10fdd40c856fb23450ba4000ef73f1f3a5b0 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(pos- neg).out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(pos- neg).out deleted file mode 100644 index f1399c0d1dd76d2714aedad96237a802da467624..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(pos- neg).out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb813fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed0d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d904c892a52f7e4019610602d25200f8abc6d63b92a41e277858fdebde92b158045788a9721ebc3281749cb31a61b37cb10fb1f9796f2da579d6d98a2586f9dfb54c6eb3ef431d4dd13a95148bcf9da43be5e9c6c5c2358096b912d12c9c99b2de}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae47000061a18b3c1f7df46d06cc5028122f643d2597e3eac79531ff7900340df197e5f275958f4e3f32f9b6eb6e12f1fd7554504ecf2c868411032de16f54899cb4f00be27d3a1c34cbf4d774a539eca119233abc7d699bb9b57f4937ea4be707c7064}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d53097c2f7229e4a233d710de9342964f4c2212e4254bb0ea247123fa770a0c590f01947724608215615a9bc7053450e5800b30bd7bee89ae787756f49f163768ca9cec91b66da79fe324497af657d2434f42a38ed6ea27ea02d49541dc96c10b5b}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400ae8267265fec8d3bc9881aef2a50c6314ada633a748ff1fe4f50c115ac27e61b3f08a06138d4475a93f2f7596cc03ad00c7afd9d32055b0aa61a56ba94801d6d6e0f58743a2db627a3830fefb6003bfc4ea2b17dbf127f9a12ada5ea3a93bd1}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa52104bb1a188a359f1b3ef4b4c4173cd436268b048c2f6a8518a801c996de02891b4195d8bc28a6ab9c8977d19f3496fea16051fa21d3ddf3b30180a33963082865a4e09daae932d59eb966d09aeadc33724c5e17f2f396bda4e373c3329c34d49}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c111608110afbebdf04c1b030a2726132bc723bfe3946e00fcbab3d503b32d3f8be2565704347b52ffac5d2d95701238c1206ae177310b7f5e46f71bdb596153753366abc6ec100acb9e30708abeaa5eafd1356157082e9327d146cb42121fea604f359}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce181a2de2aa5d34e068002517d77c5d882ad965fa9857b8b21220ff0b61e8b1e2eccf7fb364f7348759af46e771b592780ef5b6782d2ca8644b36e422b92b4c9431952936228d532fb984905efc871b3eb68904869a4f525a9e73a3df577dc535}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c2478164a61644f8fe7544935ead55e43f8274e193a1a3bc97eae15e861d1918e5e3f9145949233d617ad76598fb3c396912f102cc36be4d1f2361bc00187301efac15a7168ae334c40595f0d6e50e540ceafd9aab613571452f6c6902311cec502b8}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce69006f59f72ae1bd4b7b12f6eb03b202c86a1923243cd9fe36bf93054ac242eeb2ce28cfd793022d1c2825626c66bf23c7f05b745411343699455f40f0bd449b956109552cf1af704a3cbf79442e76601c418df5cb047ab9f7e99559e01260ddcd6}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0feecaff571f244f2e07dcf17d5433b594792676aa63cd4a85ea213c35a74af2ef40f27981896eedce365dec4c43504211d4dc6970368ad273601d4a60b2af556bbce2d8d9ff5eab730ff179a2082595d0bbec9d04e26d878e5eed2631309a9f}' -storage - (Some False) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(pos- pos).out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(pos- pos).out deleted file mode 100644 index 98d925d1c287c6403ce072a3b575c7944d18a6fe..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- pairing_check(pos- pos).out +++ /dev/null @@ -1,1296 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1261406f7867f145efcfbf91a156d0f97fd489fbc6fc739d1006947ea0407801ddfbf451d5e6cd8c00540fa63afce7d709169febf275520034f038fe8142fe9d7a01cdcb3a28294acf7736a6feac00d4a71904495b46b047fee754c9bf2363ab 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x076d3b38b48759b0c38e4c49204f1b74b625f98257387308319636aaf01206aab51a37fa3c39080f25e333accff821500cb8cdf8f111299e7f7c2a53c231fac8d3fdd607076b78fa1ebea9bdb197e90fc9b972c47a7c7e69778521a16011dd87 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x05787fa85a0fee21b15083360acd358eb814743fd7d7e2bb961728c8896024d69c5bf517032f1df299a5ca43507a29e30cb991bd7b6636bdb6a3808973359f44681e94bab05d2f12c160f2da6bbd1dddb2ff4da601002bd79b2392cd65b2ffa9 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0338b37a92607a45711425e7ef58cdd202803fdc40f1ebaa3ff49ee7a0b7da9e33e700a0d737416257daa0c1baf8907713400d8bc5beecb6966c8c8e9c0bc00c65b282b2a0b5c2a599de848beac6cab2675ff9b2172b7bfd778b1c22aeacdbd4 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x15f3268289babb75d5dd0a4163ba96c5b564daa3e50b0b0aa6d7461114f62e1420fc38f832341811c7dcdda21c28570210fbb032364514e30661459552a4e81a81f5af855e0eaee3f5c5544a5c7301f416018112b2a29d40770a4390666ebd89 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x06c22184e04091e42352a14652a3672b9b5a46d8383f7e905e45065ed8ed2ed1b8d7f4691934ef8d1fd0551d76ac56da0372466f84edb965debef3e72cde69686e70fbe40abf06fdb826e196d5aa18fd219410987adfe71155fcd353e5a82ce5 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1112dab3a6686a4414b3b787c6ab334dcc779d9d7c016e03e3b33dc884a4d4d88b4ea788694219395c77b3e753213a620e5f154589d880f7d30bf66e9937f5ffb2ec4bb7d0d01cec7fd5d95ed403388113ce9c116bc02344fd26ca15cee07a42 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x148fbde315967a1372f1ec37e8d2c8060ee8f5bc2a46c7dc7524e7754354dcfd317bfff62b8e774e9ef7f7fbbe35450015e5f552d4333c90fd999801d7c45faac21d0d4029e556db0b8fdcf14947738229223ad5d8fce9841b43d194bd211b60 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x0c72c61e5a186398ec4683ff2df510f74570c02f66e4d5d47a735f7655e1a7d4a9b7436368d37133aab44cbbf5f001280b3196715bdf1c84251faa1995a677bbc0ba1b78a44ecef359df138e6cf0f3cd2b52fa0a44e59169348d962c0d46d37c 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x166f76ccdba2865ca5e3cfb6dfa3885edae19b5a0d749c8e94ad0deeb33a5149b1e7325f36bd9708cf7df5d1762a2e2f12fd8534db56b1f90e7b135fe82c8351d85af2f8e8b2d5ca395572965c596169fd5c6824ac1c2e983ab9645d4855a3d915387f450a01a680ea15a4e3f14ab42b9da10ff24f66eb470e32e6c263ff9e1fc723568c9297cd7e45624ce59e4c2dfa0a4f1870ca52412074421d90bc51cd2218089795b067c4ee2c9bbe15271351e838c23938ef1e7f6900ec2ed36365f7cd}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0423dd6f6dda9ba5209c9ef7f5aa04fa7d779f54b9da16bdff836ce906f09992f45539671c033314a7d41a3ce6c13dca0ab9812e89f6783b62a92ac2c87513dc101e0e2d03488221f48b5bea319d7156b3826aaa46831148ef618fa16ae4700013e6f936778807537aaee2b3c228b693921dcd46470bbf9f6fa0cf60179777c4f752a709cd60d0644b481ed0e028556615141f21d13ed6676d04b26da9805dd6a64f77e330385371efe67f022c9f63f072e42964f5b8a80b26805b418f833a47}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x14e7c39d87b5524990a5c1498f8835f916fff76c4235d0c90c2a83ee5fadcfa0da3e9abed31596a82ac20245f5fd6c42050a789aa6b62b09d01fbc0a1c7f72e1af1f40f0905cea56fc7e6612224164fc66dbd1329c565d829d3676a616437d531084e2780f9b4466740ac92300b55d8b4264675fa7d4289af60cd829eca49d151d1788da50d1ea9e5f6338facbaec52b0ed0546e4af63821d3c4b3172d14440cc78ab9ce85dd72dc42e757aa9edeb2d4dc087127c72c15fce569be23693e9f50}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x00e076d4f8fb121bbad0cf0aabccc381cd6af57ed52a084d6de8839244c8fd41c9e9e755bd5085e623cd1312b9eaa2e10b9ba2a34a6d627241e1bf0fd5bf16a9d80b92b079d7a7f540fc7229fd4ed753edb7e1d559a908dc9c614c6b445ce3400f18eb77d3811dc68e83260750a6a0744fc9a5514c3c139f823bc68f9bee77c26abb75f89dc6bb8a10bfd08a6933a6fe19396210665f90e9a0ba024a9a03ab008d9655fdafe2375cecf8a1a1fb50f26459c1d4e6d562d80618d425a15c566eda}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x08ece632050f4beef7be5f050d2d0dbbc80cf77dab7aa74931566cae5edcf551d4f49b9dc153f6f91bfcc5921f66e8e70fc99ecb955eae4bc78c8e498ead8d1bfd8e27796173ebf47e7751e62471ccafd0c178a1998be576c5155e8631befa5209b56048b0dc8ca8972c5c6a01d7df94020e9b3c308e6a6ddcb0b60788d0cd926a92a272eec99545f16782e60cb63ac103fbf2481c42075f1b039d82ad1b2a510a2941aa44f1e5657b9a6597480332ecf9e61e7f821a94256bc7c3ccd63c5d62}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x109a07058b74f8ac430d3971db89e3c157ba5f767b7ad5c1d8997d4f5d9b8a83869c7769283e4393b60252ce2752d1330e2d6ce8ff93cc432ad2e26fa09f86c35bffaf416ed9b7ac4734329d38930ae96310bfe466eab1d4bb7a59bd7c11160808f615fe5a7b24ea1a793555108f3a9b663e04a4e3b9678216f59fccfdf2d0beae68b84981593a2ce0a7fedc73eda3fd028e0132439b77288d6611a10bf8766ca8088a8446cb2fb85e84e7fb0bb3e2ce093b7d157ed6eb9305ddde0159fab752}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x0eb5349b1cc220b50c42ea66f08c2bc59b2bc4810cb8025883f980ac26a0c4d263e6ce53b17f6c5e81a621a329fb306c144974fea8b32f5074e2922a6652236548eba95a93f51f718acfb45c6009b6ce7821ecef3f5591c7d2a08f8b827b0fce01e6e4078f22b1b9e31b829e6bcf4f4f399de58a5b2d5a0d550fd39594c8444131dc804b4c5ccb78604fb9188e4a18330b0b5b720c533e35ffe4c3938a20604332e2224ed0f7bf8fadac4241fa29dae56822fb781704ada51b8b5c20a881e576}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x1686dfdabbf42256245bcd46e879b83ff1cadc1e98fab4483166f4e971de8ec66190669601ccc37817336827b5c7363510a5f6dce3d7f23cf8f7b8d73557814db44b2331b80820810a8e68c6297924735b3914d93e5a6fb855f43daf455c247803b6b085e9efff4601e5bce0e507b4b0165e116ab7bb9411514870cf652297e48d666b6c7d7de85243a5704c3c69197c09d44e7e54adf4642f5ba62f132cb2160a05e2d6c038d2660823645011702774450149eb5a3fad08f36edcee313aa7f3}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x18d844fded7a6bf849a2b75817a3b5c0e025c76c0743a18e9ce33e94e4bc2ad2d3ccb0b01c439df88953e70a3bcd06710126a5494220db0746a16c8300062ca151670be555ae2a68983a47768a494cf5a1141d211b3b6e6577ced1752a8ce690130b72778b6411e299ec3906082b8050c2e5194125e52f536e007df4d2820af73c1f028581312e3d37a8d939940d6e2c1449cca9263c7d05f52798aa6f01f38153e1f8b5d88e0e1b9b393e5e0f4af46005cca34e69a8608120a961fed9f1cdd5}' -storage - (Some False) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x042efbd6b57af4235a6344a3f2130041815a4fbb44839451667255d958e3e8ba7a1d06fad83af056cf839b77470015bf0958ef0ddb9c7b06b4d9615e52a1a5774817857116843b0e3991d3ee9513e5264a9f7a8eff1faf4579fe108c0e0c04fb 0x04a2dd29ddd4bafbeb5b7c26cf77463d4b6d0e42a7a3ceb1ee4691671033816ad592171e19d648ab899eca7da5e77e7c0089346cf8c7ecddf517f085525bd2f5f75838cc7aaaba59f478a3ce3aa4ca96e1e9ad84b09e0495c614eaa44b6c58cb0a1246eae260c24b1d13cac4c5f77921cffe250e49214574e146b164c109ab312f6b0d852fca9111ebc8a213b3bc5a69082c3580c9495bc7d7bb8a6be298fd81f8ba68ac1985b413f420e12754a8d08e4df01361ac7192782ba012d9cecf100c}' -storage - (Some False) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- signature_aggregation.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- signature_aggregation.out deleted file mode 100644 index 19bd514ce8a147f87922a68ddf68822f3ed7b7a5..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- signature_aggregation.out +++ /dev/null @@ -1,180 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x19d8a1f79d761f07f5849ed60c4d8372c271ebc3b8731e888b4fd3babc15d716e64f3df671f6e9f2a1726ab29431afbf0f1de63aadf3dcc954fd5b58bda50fa8f80655aae55eb1423a97aef6e16cd7d320871359764581e6abfa735aeeda45b6 0x1988b3f37c78bf39ad0000125cdd9de7b5b774b5221d137b9dbe24b7b69f0970feab7aa52e59087b0a427de9bb6deee2190a9857b2ed4c6dcd7e5c18af6a5170ed1d6046cac81c58a6d2ade394b829ff9b8e02580c975307fa744d0747c6e68208975d9efe381be5cd300b76b887d93dba7a1f144f2c7d9714d8a0e4749519a7d4d403d12e88a4aa83859d1025b3b68c152e565a57caea54be81e13f77b4ad73b88d3e5ebe7dd227d6f3c4aa678895b73f15b30407e13732ac60c74b81de9b6e; Pair 0x10463b3743defc3aee6d6596906938450a429285990ef50b41df63889c42bdc5f1c830cd403506db9df9f1254d3f2b1f1043260bd4122e695546b10d07b5e517c0d0e8f5f0c0de13683a4ca42f6001aaae072fb3d529a8792966f2e0d5e45301 0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801}' -storage - (Some True) -emitted operations - -big_map diff - - - -./octez-client --mode mockup run script michelson_test_scripts/opcodes/pairing_check.tz on storage None and input '{Pair 0x1273992fd0773410fcadbb55a6914c32c2314d03b4cd0b3da699e0c7b74bab001b4311fdd1bb58630b43b80be3974ca90282f633318822c082c93580febfd5421acd7ce3b0b38fe148c114a0c42ffd6faafb8ab0cff43d6471fc6ff222be6373 0x00ff54c7a2f6b5af235a704dafb1c2e166bdf67c2c6a4e54a9af84349b8676bcb0b1cc1f56f621af67921bbb82fa9806155d6024e64f6d5163ece546259169d2b054acfddfa45a8502b66ecf8582f11b23472b793a84e86599887de4f42cf8360c63251d615a4e7efee27db36d118b5761fe754c3ed3f5439ec6ec3f620378ff15d659ab0f563246cfd023b665daa3f80825788dd115e716fda26f9d55297d720b7bed0f935b254a9e99e0d3d0856421bf0ac3b1ff2bce61f0cdafa0139a7465; Pair 0x0e652b8a10100237ef90db2efe6e3aba6023659ef22d170f55871436fda45a613199fad02bff8a3dfbe00f5c4b7efe590f9287f0ef8c1458a3863459886cccd53cbb4dcb0e724891f667b30835018c8de3bc049a02105a0a55d36808a0e4b5c7 0x0a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c335771638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a0530f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf30468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899}' -storage - (Some True) -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- test_groth16.out b/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- test_groth16.out deleted file mode 100644 index bc6763804082e2da311976295b95fa6666765518..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/test_contract_bls12_381.ml/Parisb- Bls12_381 contract primitives- test_groth16.out +++ /dev/null @@ -1,9 +0,0 @@ - -./octez-client --mode mockup run script michelson_test_scripts/mini_scenarios/groth16.tz on storage Unit and input 'Pair (Pair 0xa1bb010000000000000000000000000000000000000000000000000000000000 0x0100000000000000000000000000000000000000000000000000000000000000) (Pair (Pair 0x0a2841423326ab08f5f406409775e43fa0f9a0b97631fa85d2dd9242507d25059e9cf48b8b98f99a0008671423a148ec106d70637056972ef49fb6f62de2e89ba3682b9972292b6bb4e6f53799a75d2f8001ccfde280d8ac05fc209352236cbd 0x0fced939fb1ad733f99669f50a383ef632f6d41dfbde434a6715afd5c7dfbb7bc5835e058ad8b590c7b38dd137d0bd0f0e1540f1b45d8aa626c360e2ea484a116243f7c802034de915db6b18d5303946f676e423cbd6046d37a82208d500625a11c7250ccb953a7ee49d704ad14de4b727733cff7cf06875d8b6444f3c0a8cbf0bd980e539c74bd5b37bb15fe816f23407d269193105fda71adf35fae9309d9d46729fcd4685699097a86f0460a2bc8b16293940cabfdcfe0f27e4107e74e90c) 0x0a1fb5a144ca3bdfe4ad0f183cf71dd7fdd28cbef4fcd47b5b419f65186703f62ecaaa1255fa21a6ebdd917ab1f9bd9707de7066865e2ff3875e22088619125a0d4088a622ab42224425ef89a5a149ce2db9c8292b62c7e7aaa7e87f3535304b)' -storage - Unit -emitted operations - -big_map diff - - diff --git a/tezt/tests/expected/ticket_receipt_and_rpc.ml/Parisb- Ticket updates in receipt.out b/tezt/tests/expected/ticket_receipt_and_rpc.ml/Parisb- Ticket updates in receipt.out deleted file mode 100644 index 3e1bc9c2e94a140bfca0ce7ec0cf1ffcdf15b63d..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/ticket_receipt_and_rpc.ml/Parisb- Ticket updates in receipt.out +++ /dev/null @@ -1,153 +0,0 @@ - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --arg '(Pair "[CONTRACT_HASH]" "[CONTRACT_HASH]")' -Node is bootstrapped. -Estimated gas: 7899.569 units (will add 100 for safety) -Estimated storage: 475 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.001138 - Expected counter: 1 - Gas limit: 8000 - Storage limit: 495 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.001138 - payload fees(the block proposer) ....... +ꜩ0.001138 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[CONTRACT_HASH]" "[CONTRACT_HASH]") - This transaction was successfully applied - Updated storage: - { Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "red" 1) ; - Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "green" 1) ; - Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "green" 1) } - Storage size: 525 bytes - Paid storage size diff: 325 bytes - Consumed gas: 3193.024 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.08125 - storage fees ........................... +ꜩ0.08125 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "red" - Account updates: - [CONTRACT_HASH] ... +1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "green" - Account updates: - [CONTRACT_HASH] ... +2 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair (Pair (Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "blue" 1)) - (Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "blue" 1))) - 0x0192ce5ac8f542c49e64c7b6c73c445515ddc20f9400) - This transaction was successfully applied - Updated storage: - (Some (Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "blue" 1))) - Storage size: 169 bytes - Paid storage size diff: 108 bytes - Consumed gas: 2818.019 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.027 - storage fees ........................... +ꜩ0.027 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "blue" - Account updates: - [CONTRACT_HASH] ... +1 - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "blue" 1)) - This transaction was successfully applied - Updated storage: - (Some (Pair 0x01c97ff8e547ecb335bdf832511361d68e928c6ec300 (Pair "blue" 1))) - Storage size: 88 bytes - Paid storage size diff: 42 bytes - Consumed gas: 1889.697 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0105 - storage fees ........................... +ꜩ0.0105 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "blue" - Account updates: - [CONTRACT_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"red"' -1 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"green"' -2 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"blue"' -0 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"blue"' -1 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"blue"' -1 - -./octez-client --mode mockup rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/all_ticket_balances' -[ { "ticketer": "[CONTRACT_HASH]", - "content_type": { "prim": "string" }, "content": { "string": "red" }, - "amount": "1" }, - { "ticketer": "[CONTRACT_HASH]", - "content_type": { "prim": "string" }, "content": { "string": "green" }, - "amount": "2" } ] - -./octez-client --mode mockup get all ticket balances for '[CONTRACT_HASH]' -Ticketer: [CONTRACT_HASH] -Content type: string -Content: "red" -Amount: 1 - -Ticketer: [CONTRACT_HASH] -Content type: string -Content: "green" -Amount: 2 - -./octez-client --mode mockup rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/all_ticket_balances' -[ { "ticketer": "[CONTRACT_HASH]", - "content_type": { "prim": "string" }, "content": { "string": "blue" }, - "amount": "1" } ] - -./octez-client --mode mockup get all ticket balances for '[CONTRACT_HASH]' -Ticketer: [CONTRACT_HASH] -Content type: string -Content: "blue" -Amount: 1 - -./octez-client --mode mockup rpc get '/chains/main/blocks/head/context/contracts/[CONTRACT_HASH]/all_ticket_balances' -[ { "ticketer": "[CONTRACT_HASH]", - "content_type": { "prim": "string" }, "content": { "string": "blue" }, - "amount": "1" } ] - -./octez-client --mode mockup get all ticket balances for '[CONTRACT_HASH]' -Ticketer: [CONTRACT_HASH] -Content type: string -Content: "blue" -Amount: 1 - -./octez-client --mode mockup rpc get '/chains/main/blocks/head/context/contracts/[PUBLIC_KEY_HASH]/all_ticket_balances' -Fatal error: - No service found at this URL - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Create and remove tickets.out b/tezt/tests/expected/tickets.ml/Parisb- Create and remove tickets.out deleted file mode 100644 index fb805354308b29ebc6f9e04e8f2a489584367dc3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Create and remove tickets.out +++ /dev/null @@ -1,220 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract add_clear_tickets transferring 200 from bootstrap1 running michelson_test_scripts/mini_scenarios/add_clear_tickets_015.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 610.029 units (will add 100 for safety) -Estimated storage: 398 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000443 - Expected counter: 1 - Gas limit: 711 - Storage limit: 418 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000443 - payload fees(the block proposer) ....... +ꜩ0.000443 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ200 - Script: - { parameter (or (pair %add nat string) (unit %clear)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { UNPAIR ; - DIG 2 ; - SWAP ; - DIG 2 ; - TICKET ; - ASSERT_SOME ; - CONS ; - NIL operation ; - PAIR } - { DROP 2 ; NIL (ticket string) ; NIL operation ; PAIR } } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 141 bytes - Paid storage size diff: 141 bytes - Consumed gas: 609.995 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.03525 - storage fees ........................... +ꜩ0.03525 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ200 - [CONTRACT_HASH] ... +ꜩ200 - -New contract [CONTRACT_HASH] originated. -Contract memorized as add_clear_tickets. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --entrypoint add --arg 'Pair 1 "A"' -Node is bootstrapped. -Estimated gas: 1751.651 units (will add 100 for safety) -Estimated storage: 105 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000453 - Expected counter: 1 - Gas limit: 1852 - Storage limit: 125 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000453 - payload fees(the block proposer) ....... +ꜩ0.000453 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: add - Parameter: (Pair 1 "A") - This transaction was successfully applied - Updated storage: - { Pair 0x01435e1f410af86271d7c8c3c98a8708157a45269200 (Pair "A" 1) } - Storage size: 180 bytes - Paid storage size diff: 105 bytes - Consumed gas: 1752.186 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.02625 - storage fees ........................... +ꜩ0.02625 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "A" - Account updates: - [CONTRACT_HASH] ... +1 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --entrypoint clear --arg Unit -Node is bootstrapped. -Estimated gas: 1941.323 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000466 - Expected counter: 2 - Gas limit: 2042 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000466 - payload fees(the block proposer) ....... +ꜩ0.000466 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: clear - This transaction was successfully applied - Updated storage: {} - Storage size: 141 bytes - Consumed gas: 1941.859 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "A" - Account updates: - [CONTRACT_HASH] ... -1 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --entrypoint add --arg 'Pair 1 "B"' -Node is bootstrapped. -Estimated gas: 1751.651 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000453 - Expected counter: 3 - Gas limit: 1852 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000453 - payload fees(the block proposer) ....... +ꜩ0.000453 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: add - Parameter: (Pair 1 "B") - This transaction was successfully applied - Updated storage: - { Pair 0x01435e1f410af86271d7c8c3c98a8708157a45269200 (Pair "B" 1) } - Storage size: 180 bytes - Consumed gas: 1752.186 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "B" - Account updates: - [CONTRACT_HASH] ... +1 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 2 --entrypoint add --arg 'Pair 1 "C"' -Node is bootstrapped. -Estimated gas: 2433.661 units (will add 100 for safety) -Estimated storage: 105 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000521 - Expected counter: 4 - Gas limit: 2534 - Storage limit: 125 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000521 - payload fees(the block proposer) ....... +ꜩ0.000521 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: add - Parameter: (Pair 1 "C") - This transaction was successfully applied - Updated storage: - { Pair 0x01435e1f410af86271d7c8c3c98a8708157a45269200 (Pair "C" 1) ; - Pair 0x01435e1f410af86271d7c8c3c98a8708157a45269200 (Pair "B" 1) } - Storage size: 219 bytes - Paid storage size diff: 105 bytes - Consumed gas: 2434.196 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.02625 - storage fees ........................... +ꜩ0.02625 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "C" - Account updates: - [CONTRACT_HASH] ... +1 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Minting then sending tickets to smart-contract rollup should succeed wit.out b/tezt/tests/expected/tickets.ml/Parisb- Minting then sending tickets to smart-contract rollup should succeed wit.out deleted file mode 100644 index 0b5df1b13f4a4434ea2562d15814f5fa694dce00..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Minting then sending tickets to smart-contract rollup should succeed wit.out +++ /dev/null @@ -1,55 +0,0 @@ - -./octez-client --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg '"[SMART_ROLLUP_HASH]"' -Node is bootstrapped. -Estimated gas: 2784.256 units (will add 100 for safety) -Estimated storage: 132 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000584 - Expected counter: 3 - Gas limit: 2885 - Storage limit: 152 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000584 - payload fees(the block proposer) ....... +ꜩ0.000584 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[SMART_ROLLUP_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 197 bytes - Paid storage size diff: 132 bytes - Consumed gas: 2674.291 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.033 - storage fees ........................... +ꜩ0.033 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [SMART_ROLLUP_HASH] - Parameter: { Pair 0x01f6719dc3bd86b5c531d6551553c467a31a54717800 (Pair "Ticket2" 1) ; - Pair 0x01f6719dc3bd86b5c531d6551553c467a31a54717800 (Pair "Ticket" 1) } - This transaction was successfully applied - Consumed gas: 109.932 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [SMART_ROLLUP_HASH] ... +1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket2" - Account updates: - [SMART_ROLLUP_HASH] ... +1 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Overdrafting ticket from implicit accounts must be rejected.out b/tezt/tests/expected/tickets.ml/Parisb- Overdrafting ticket from implicit accounts must be rejected.out deleted file mode 100644 index fbda5ce5a18b6e9e029f52dd849e19f02d2ceedf..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Overdrafting ticket from implicit accounts must be rejected.out +++ /dev/null @@ -1,210 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 1' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 2 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup --wait none transfer 2 tickets from bootstrap1 to bootstrap2 with entrypoint default and contents '"Ticket"' and type string and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 3 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transfer tickets: - Ticket content: "Ticket" - Ticket content type: string - Ticket ticketer: [CONTRACT_HASH] - Ticket amount: 2 - Destination: [PUBLIC_KEY_HASH] - From: [PUBLIC_KEY_HASH] - This operation FAILED. - -Error: - Attempted to set negative ticket balance value '-1' for key exprubCTZXvJKqgSzwRfVHM3SJSU8MUFST8FnrYTxTLwn8F9oGyh8P. - -./octez-client --mode mockup --wait none originate contract tickets_bag transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_bag_016.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 620.183 units (will add 100 for safety) -Estimated storage: 451 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 3 - Gas limit: 721 - Storage limit: 471 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (or (ticket %save string) (address %send)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { CONS ; NIL operation ; PAIR } - { SWAP ; - IF_CONS - { DIG 2 ; - CONTRACT %ticket (ticket string) ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } - { PUSH string "no ticket to send" ; FAILWITH } } } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 194 bytes - Paid storage size diff: 194 bytes - Consumed gas: 620.150 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0485 - storage fees ........................... +ꜩ0.0485 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_bag. - -./octez-client --mode mockup --wait none transfer 2 tickets from bootstrap1 to '[CONTRACT_HASH]' with entrypoint save and contents '"Ticket"' and type string and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 4 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transfer tickets: - Ticket content: "Ticket" - Ticket content type: string - Ticket ticketer: [CONTRACT_HASH] - Ticket amount: 2 - Destination: [CONTRACT_HASH] - Entrypoint: save - From: [PUBLIC_KEY_HASH] - This operation FAILED. - -Error: - Attempted to set negative ticket balance value '-1' for key exprubCTZXvJKqgSzwRfVHM3SJSU8MUFST8FnrYTxTLwn8F9oGyh8P. diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets between originated contracts and implicit accounts.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets between originated contracts and implicit accounts.out deleted file mode 100644 index 6b8e235c5ded092539f76afb3345197f3c5f1c23..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets between originated contracts and implicit accounts.out +++ /dev/null @@ -1,387 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none originate contract tickets_bag transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_bag_016.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 620.183 units (will add 100 for safety) -Estimated storage: 451 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 2 - Gas limit: 721 - Storage limit: 471 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (or (ticket %save string) (address %send)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { CONS ; NIL operation ; PAIR } - { SWAP ; - IF_CONS - { DIG 2 ; - CONTRACT %ticket (ticket string) ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } - { PUSH string "no ticket to send" ; FAILWITH } } } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 194 bytes - Paid storage size diff: 194 bytes - Consumed gas: 620.150 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0485 - storage fees ........................... +ꜩ0.0485 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_bag. - -./octez-client --mode mockup --wait none originate contract tickets_blackhole transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_blackhole_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 579.704 units (will add 100 for safety) -Estimated storage: 308 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000346 - Expected counter: 3 - Gas limit: 680 - Storage limit: 328 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000346 - payload fees(the block proposer) ....... +ꜩ0.000346 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (ticket %ticket string) ; - storage unit ; - code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 51 bytes - Paid storage size diff: 51 bytes - Consumed gas: 579.671 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01275 - storage fees ........................... +ꜩ0.01275 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_blackhole. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 3' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 4 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 3) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 3)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +3 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -3 - -./octez-client --mode mockup --wait none transfer 2 tickets from bootstrap1 to bootstrap2 with entrypoint default and contents '"Ticket"' and type string and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 1295.155 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000441 - Expected counter: 5 - Gas limit: 1396 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000441 - payload fees(the block proposer) ....... +ꜩ0.000441 - Transfer tickets: - Ticket content: "Ticket" - Ticket content type: string - Ticket ticketer: [CONTRACT_HASH] - Ticket amount: 2 - Destination: [PUBLIC_KEY_HASH] - From: [PUBLIC_KEY_HASH] - This tickets transfer was successfully applied - Paid storage size diff: 66 bytes - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... -2 - [PUBLIC_KEY_HASH] ... +2 - Consumed gas: 1295.089 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup get ticket balance for bootstrap2 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -2 - -./octez-client --mode mockup --wait none transfer 1 tickets from bootstrap2 to '[CONTRACT_HASH]' with entrypoint save and contents '"Ticket"' and type string and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 3206.843 units (will add 100 for safety) -Estimated storage: 110 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00063 - Expected counter: 1 - Gas limit: 3307 - Storage limit: 130 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00063 - payload fees(the block proposer) ....... +ꜩ0.00063 - Transfer tickets: - Ticket content: "Ticket" - Ticket content type: string - Ticket ticketer: [CONTRACT_HASH] - Ticket amount: 1 - Destination: [CONTRACT_HASH] - Entrypoint: save - From: [PUBLIC_KEY_HASH] - This tickets transfer was successfully applied - Paid storage size diff: 66 bytes - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... -1 - Consumed gas: 1296.552 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: save - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Updated storage: - { Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1) } - Storage size: 238 bytes - Paid storage size diff: 44 bytes - Consumed gas: 1910.859 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.011 - storage fees ........................... +ꜩ0.011 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap2 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --entrypoint send --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 4716.890 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000781 - Expected counter: 6 - Gas limit: 4817 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000781 - payload fees(the block proposer) ....... +ꜩ0.000781 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: send - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: {} - Storage size: 194 bytes - Consumed gas: 2864.303 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... -1 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Entrypoint: ticket - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Updated storage: Unit - Storage size: 51 bytes - Consumed gas: 1853.638 - - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -0 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -0 diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts with some Tez along.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts with some Tez along.out deleted file mode 100644 index ae7d4d6f731b952ff7454fc0ffa7f3a3b215e1ae..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts with some Tez along.out +++ /dev/null @@ -1,115 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send_with_tez transferring 1 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_with_tez_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 612.418 units (will add 100 for safety) -Estimated storage: 411 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000455 - Expected counter: 1 - Gas limit: 713 - Storage limit: 431 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000455 - payload fees(the block proposer) ....... +ꜩ0.000455 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ1 - Script: - { parameter address ; - storage unit ; - code { CAR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 1 ; - PUSH nat 1 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 154 bytes - Paid storage size diff: 154 bytes - Consumed gas: 612.385 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0385 - storage fees ........................... +ꜩ0.0385 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send_with_tez. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg '"[PUBLIC_KEY_HASH]"' -Node is bootstrapped. -Estimated gas: 1857.132 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00049 - Expected counter: 2 - Gas limit: 1958 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00049 - payload fees(the block proposer) ....... +ꜩ0.00049 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[PUBLIC_KEY_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 154 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1757.270 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0.000001 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x017c8454eff9ad796cd8baba365d2592ad1b60efb100 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Balance updates: - [CONTRACT_HASH] ... -ꜩ0.000001 - [PUBLIC_KEY_HASH] ... +ꜩ0.000001 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts with the wrong type mus.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts with the wrong type mus.out deleted file mode 100644 index 5d919fc8d60f02746cab5b6cdf0e43ab9fa31fef..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts with the wrong type mus.out +++ /dev/null @@ -1,195 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract send_ticket_list transferring 1 from bootstrap1 running michelson_test_scripts/mini_scenarios/send_ticket_list_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.205 units (will add 100 for safety) -Estimated storage: 402 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000446 - Expected counter: 1 - Gas limit: 715 - Storage limit: 422 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000446 - payload fees(the block proposer) ....... +ꜩ0.000446 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ1 - Script: - { parameter address ; - storage unit ; - code { CAR ; - CONTRACT (list (ticket string)) ; - ASSERT_SOME ; - PUSH mutez 0 ; - NIL (ticket string) ; - PUSH nat 1 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - CONS ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - UNIT ; - SWAP ; - PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 145 bytes - Paid storage size diff: 145 bytes - Consumed gas: 614.172 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.03625 - storage fees ........................... +ꜩ0.03625 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - -New contract [CONTRACT_HASH] originated. -Contract memorized as send_ticket_list. - -./octez-client --mode mockup --wait none originate contract tickets_list_blackhole transferring 1 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_list_blackhole_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 579.433 units (will add 100 for safety) -Estimated storage: 299 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000339 - Expected counter: 2 - Gas limit: 680 - Storage limit: 319 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000339 - payload fees(the block proposer) ....... +ꜩ0.000339 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ1 - Script: - { parameter (list (ticket string)) ; - storage unit ; - code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 42 bytes - Paid storage size diff: 42 bytes - Consumed gas: 579.400 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0105 - storage fees ........................... +ꜩ0.0105 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_list_blackhole. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 4063.855 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000711 - Expected counter: 3 - Gas limit: 4164 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000711 - payload fees(the block proposer) ....... +ꜩ0.000711 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Storage size: 145 bytes - Paid storage size diff: 66 bytes - Consumed gas: 2211.251 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Parameter: { Pair 0x011213b3979289bef70dc1d1a4fb7574f306bf7f2400 (Pair "Ticket" 1) } - This transaction was successfully applied - Updated storage: Unit - Storage size: 42 bytes - Consumed gas: 1853.656 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg '"[PUBLIC_KEY_HASH]"' -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 4 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[PUBLIC_KEY_HASH]" - This operation FAILED. - -Runtime error in contract [CONTRACT_HASH]: - 01: { parameter address ; - 02: storage unit ; - 03: code { CAR ; - 04: CONTRACT (list (ticket string)) ; - 05: ASSERT_SOME ; - 06: PUSH mutez 0 ; - 07: NIL (ticket string) ; - 08: PUSH nat 1 ; - 09: PUSH string "Ticket" ; - 10: TICKET ; - 11: ASSERT_SOME ; - 12: CONS ; - 13: TRANSFER_TOKENS ; - 14: NIL operation ; - 15: SWAP ; - 16: CONS ; - 17: UNIT ; - 18: SWAP ; - 19: PAIR } } -At line 5 characters 9 to 20, -script reached FAILWITH instruction -with Unit -Fatal error: - transfer simulation failed diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts.out deleted file mode 100644 index 4c081c37cc6d3bb2a3ca8399830bbbc244c0a340..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets from contracts to implicit accounts.out +++ /dev/null @@ -1,111 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 1' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 2 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets in bigmap.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets in bigmap.out deleted file mode 100644 index 74ef597a6ef7d87af7dccdf7979454f7332d5864..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets in bigmap.out +++ /dev/null @@ -1,296 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract receive_tickets_in_big_map transferring 200 from bootstrap1 running michelson_test_scripts/mini_scenarios/receive_tickets_in_big_map.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 582.883 units (will add 100 for safety) -Estimated storage: 340 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000352 - Expected counter: 1 - Gas limit: 683 - Storage limit: 360 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000352 - payload fees(the block proposer) ....... +ꜩ0.000352 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ200 - Script: - { parameter (big_map int (ticket string)) ; - storage (big_map int (ticket string)) ; - code { CAR ; NIL operation ; PAIR } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 83 bytes - Updated big_maps: - New map(4) of type (big_map int (ticket string)) - Paid storage size diff: 83 bytes - Consumed gas: 582.849 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.02075 - storage fees ........................... +ꜩ0.02075 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ200 - [CONTRACT_HASH] ... +ꜩ200 - -New contract [CONTRACT_HASH] originated. -Contract memorized as receive_tickets_in_big_map. - -./octez-client --mode mockup --wait none originate contract send_tickets_in_big_map transferring 200 from bootstrap1 running michelson_test_scripts/mini_scenarios/send_tickets_in_big_map_015.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 674.694 units (will add 100 for safety) -Estimated storage: 577 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000628 - Expected counter: 2 - Gas limit: 775 - Storage limit: 597 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000628 - payload fees(the block proposer) ....... +ꜩ0.000628 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ200 - Script: - { parameter address ; - storage unit ; - code { CAR ; - CONTRACT (big_map int (ticket string)) ; - IF_NONE - { PUSH string "Contract of type `big_map(ticket(string))` not found" ; - FAILWITH } - { EMPTY_BIG_MAP int (ticket string) ; - PUSH int 100 ; - SWAP ; - PAIR ; - LEFT (big_map int (ticket string)) ; - LOOP_LEFT - { UNPAIR ; - SWAP ; - DUP ; - DUG 2 ; - PUSH int 0 ; - COMPARE ; - LT ; - IF { PUSH int 1 ; - DUP 3 ; - SUB ; - SWAP ; - PUSH nat 1 ; - PUSH string "BLUE" ; - TICKET ; - ASSERT_SOME ; - DIG 3 ; - SWAP ; - SOME ; - SWAP ; - UPDATE ; - PAIR ; - LEFT (big_map int (ticket string)) } - { SWAP ; DROP ; RIGHT (pair (big_map int (ticket string)) int) } } ; - SWAP ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 320 bytes - Paid storage size diff: 320 bytes - Consumed gas: 674.661 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.08 - storage fees ........................... +ꜩ0.08 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - [PUBLIC_KEY_HASH] ... -ꜩ200 - [CONTRACT_HASH] ... +ꜩ200 - -New contract [CONTRACT_HASH] originated. -Contract memorized as send_tickets_in_big_map. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap2 to '[CONTRACT_HASH]' --burn-cap 30 --storage-limit 1000000 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 98835.369 units (will add 100 for safety) -Estimated storage: 10767 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.01019 - Expected counter: 1 - Gas limit: 98936 - Storage limit: 10787 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01019 - payload fees(the block proposer) ....... +ꜩ0.01019 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: Unit - Updated big_maps: - New temp(1) of type (big_map int (ticket string)) - Set temp(1)[22] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[48] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[20] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[67] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[30] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[33] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[42] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[13] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[50] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[84] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[44] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[41] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[4] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[73] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[5] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[28] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[19] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[9] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[86] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[76] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[8] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[97] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[80] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[45] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[87] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[1] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[26] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[38] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[65] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[99] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[69] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[2] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[81] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[82] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[64] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[92] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[90] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[98] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[37] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[66] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[32] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[71] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[51] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[56] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[14] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[12] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[85] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[47] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[74] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[18] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[10] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[35] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[96] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[27] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[77] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[62] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[58] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[25] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[94] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[60] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[7] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[53] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[11] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[17] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[83] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[72] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[6] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[88] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[75] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[3] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[70] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[52] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[95] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[68] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[78] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[23] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[79] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[59] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[100] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[24] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[21] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[49] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[93] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[39] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[63] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[55] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[15] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[16] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[31] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[43] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[29] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[54] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[89] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[36] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[46] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[91] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[61] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[34] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[57] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Set temp(1)[40] to (Pair 0x010d30dc625f57274f300abc4af284934bc05fc46c00 (Pair "BLUE" 1)) - Storage size: 320 bytes - Paid storage size diff: 67 bytes - Consumed gas: 49909.937 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01675 - storage fees ........................... +ꜩ0.01675 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Parameter: -1 - This transaction was successfully applied - Updated storage: 5 - Updated big_maps: - Clear map(4) - Copy temp(1) to map(5) - Storage size: 10783 bytes - Paid storage size diff: 10700 bytes - Consumed gas: 48926.421 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ2.675 - storage fees ........................... +ꜩ2.675 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "BLUE" - Account updates: - [CONTRACT_HASH] ... +100 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets with Ticket constructor (with complex parameters) from impl.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets with Ticket constructor (with complex parameters) from impl.out deleted file mode 100644 index 2f058a677b5e96f2b59e318340b11278147bb000..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets with Ticket constructor (with complex parameters) from impl.out +++ /dev/null @@ -1,61 +0,0 @@ - -./octez-client --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --entrypoint store --arg 'Pair 99 {Pair "garbage" (Ticket "[CONTRACT_HASH]" string "Ticket1" 1) ; Pair "garbage" (Ticket "[CONTRACT_HASH]" string "Ticket2" 2)}' -Node is bootstrapped. -Estimated gas: 4002.105 units (will add 100 for safety) -Estimated storage: 222 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000843 - Expected counter: 4 - Gas limit: 4103 - Storage limit: 242 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000843 - payload fees(the block proposer) ....... +ꜩ0.000843 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: store - Parameter: (Pair 99 - { Pair "garbage" (Ticket "[CONTRACT_HASH]" string "Ticket1" 1) ; - Pair "garbage" (Ticket "[CONTRACT_HASH]" string "Ticket2" 2) }) - This transaction was successfully applied - Updated storage: - { Pair 0x01b9ce1609aab1100170d2ea4f94e3407244090b1000 (Pair "Ticket2" 2) ; - Pair 0x01b9ce1609aab1100170d2ea4f94e3407244090b1000 (Pair "Ticket1" 1) } - Storage size: 287 bytes - Paid storage size diff: 222 bytes - Consumed gas: 4002.072 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0555 - storage fees ........................... +ꜩ0.0555 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket1" - Account updates: - [PUBLIC_KEY_HASH] ... -1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket2" - Account updates: - [PUBLIC_KEY_HASH] ... -2 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket2" - Account updates: - [CONTRACT_HASH] ... +2 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket1" - Account updates: - [CONTRACT_HASH] ... +1 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Send tickets with Ticket constructor from implicit account to originated.out b/tezt/tests/expected/tickets.ml/Parisb- Send tickets with Ticket constructor from implicit account to originated.out deleted file mode 100644 index f228d2fbf1efa99679990fd69a22d312414d5e8f..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Send tickets with Ticket constructor from implicit account to originated.out +++ /dev/null @@ -1,48 +0,0 @@ - -./octez-client --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --entrypoint save --arg 'Ticket "[CONTRACT_HASH]" string "Ticket" 1' -Node is bootstrapped. -Estimated gas: 3081.961 units (will add 100 for safety) -Estimated storage: 44 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000643 - Expected counter: 4 - Gas limit: 3182 - Storage limit: 64 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000643 - payload fees(the block proposer) ....... +ꜩ0.000643 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: save - Parameter: (Ticket "[CONTRACT_HASH]" string "Ticket" 1) - This transaction was successfully applied - Updated storage: - { Pair 0x01fb08747351ab3652f772910c4565880d8df616f800 (Pair "Ticket" 1) } - Storage size: 238 bytes - Paid storage size diff: 44 bytes - Consumed gas: 3081.895 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.011 - storage fees ........................... +ꜩ0.011 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... -1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... +1 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Sending ticket from contract storage to implicit accounts.out b/tezt/tests/expected/tickets.ml/Parisb- Sending ticket from contract storage to implicit accounts.out deleted file mode 100644 index aeeee4d4a8761777fbefb208b283bd98312a683c..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Sending ticket from contract storage to implicit accounts.out +++ /dev/null @@ -1,294 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none originate contract tickets_bag_implicit transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_bag_implicit_016.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 619.169 units (will add 100 for safety) -Estimated storage: 440 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000482 - Expected counter: 2 - Gas limit: 720 - Storage limit: 460 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000482 - payload fees(the block proposer) ....... +ꜩ0.000482 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (or (ticket %save string) (address %send)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { CONS ; NIL operation ; PAIR } - { SWAP ; - IF_CONS - { DIG 2 ; - CONTRACT (ticket string) ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } - { PUSH string "no ticket to send" ; FAILWITH } } } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 183 bytes - Paid storage size diff: 183 bytes - Consumed gas: 619.136 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.04575 - storage fees ........................... +ꜩ0.04575 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_bag_implicit. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 1' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 3 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup --wait none transfer 1 tickets from bootstrap1 to '[CONTRACT_HASH]' with entrypoint save and contents '"Ticket"' and type string and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 3176.332 units (will add 100 for safety) -Estimated storage: 44 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000626 - Expected counter: 4 - Gas limit: 3277 - Storage limit: 64 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000626 - payload fees(the block proposer) ....... +ꜩ0.000626 - Transfer tickets: - Ticket content: "Ticket" - Ticket content type: string - Ticket ticketer: [CONTRACT_HASH] - Ticket amount: 1 - Destination: [CONTRACT_HASH] - Entrypoint: save - From: [PUBLIC_KEY_HASH] - This tickets transfer was successfully applied - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... -1 - Consumed gas: 1266.515 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: save - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Updated storage: - { Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1) } - Storage size: 227 bytes - Paid storage size diff: 44 bytes - Consumed gas: 1910.352 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.011 - storage fees ........................... +ꜩ0.011 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -0 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --entrypoint send --arg '"[PUBLIC_KEY_HASH]"' -Node is bootstrapped. -Estimated gas: 2511.210 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000561 - Expected counter: 5 - Gas limit: 2612 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000561 - payload fees(the block proposer) ....... +ꜩ0.000561 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: send - Parameter: "[PUBLIC_KEY_HASH]" - This transaction was successfully applied - Updated storage: {} - Storage size: 183 bytes - Consumed gas: 2411.347 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... -1 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap2 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup get ticket balance for '[CONTRACT_HASH]' with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -0 diff --git a/tezt/tests/expected/tickets.ml/Parisb- Sending ticket of wrong type from implicit accounts must be rejected.out b/tezt/tests/expected/tickets.ml/Parisb- Sending ticket of wrong type from implicit accounts must be rejected.out deleted file mode 100644 index 24c16086d26f5338a365078a2d1401ba977b1013..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Sending ticket of wrong type from implicit accounts must be rejected.out +++ /dev/null @@ -1,129 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 1' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 2 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup --wait none transfer 2 tickets from bootstrap1 to bootstrap2 with entrypoint default and contents 0 and type nat and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -This simulation failed: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0 - Expected counter: 3 - Gas limit: 1040000 - Storage limit: 60000 bytes - Transfer tickets: - Ticket content: 0 - Ticket content type: nat - Ticket ticketer: [CONTRACT_HASH] - Ticket amount: 2 - Destination: [PUBLIC_KEY_HASH] - From: [PUBLIC_KEY_HASH] - This operation FAILED. - -Error: - Attempted to set negative ticket balance value '-2' for key expru2shUeN2Ah7TLWrM937cMzrqkGL4LirEXUQYVZU4YvjdqGrkB2. diff --git a/tezt/tests/expected/tickets.ml/Parisb- Sending tickets from storage to smart-contract rollup should succeed wit.out b/tezt/tests/expected/tickets.ml/Parisb- Sending tickets from storage to smart-contract rollup should succeed wit.out deleted file mode 100644 index d916565f422a604dc631a1568dcfc892b11a1996..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Sending tickets from storage to smart-contract rollup should succeed wit.out +++ /dev/null @@ -1,111 +0,0 @@ - -./octez-client --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --entrypoint mint -Node is bootstrapped. -Estimated gas: 2222.033 units (will add 100 for safety) -Estimated storage: 221 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 3 - Gas limit: 2323 - Storage limit: 241 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: mint - This transaction was successfully applied - Updated storage: - { Pair 0x017a22a4e42f88383dbb327d548e263b53f4f3b91100 (Pair "Ticket2" 1) ; - Pair 0x017a22a4e42f88383dbb327d548e263b53f4f3b91100 (Pair "Ticket" 1) } - Storage size: 309 bytes - Paid storage size diff: 221 bytes - Consumed gas: 2222 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.05525 - storage fees ........................... +ꜩ0.05525 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket2" - Account updates: - [CONTRACT_HASH] ... +1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... +1 - - -./octez-client --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --entrypoint send --arg '"[SMART_ROLLUP_HASH]"' -Node is bootstrapped. -Estimated gas: 3141.953 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000624 - Expected counter: 4 - Gas limit: 3242 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000624 - payload fees(the block proposer) ....... +ꜩ0.000624 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Entrypoint: send - Parameter: "[SMART_ROLLUP_HASH]" - This transaction was successfully applied - Updated storage: {} - Storage size: 220 bytes - Consumed gas: 3031.954 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket2" - Account updates: - [CONTRACT_HASH] ... -1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [CONTRACT_HASH] ... -1 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [SMART_ROLLUP_HASH] - Parameter: { Pair 0x017a22a4e42f88383dbb327d548e263b53f4f3b91100 (Pair "Ticket2" 1) ; - Pair 0x017a22a4e42f88383dbb327d548e263b53f4f3b91100 (Pair "Ticket" 1) } - This transaction was successfully applied - Consumed gas: 109.932 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket2" - Account updates: - [SMART_ROLLUP_HASH] ... +1 - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [SMART_ROLLUP_HASH] ... +1 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Sending tickets to either implicit accounts or originated contracts acce.out b/tezt/tests/expected/tickets.ml/Parisb- Sending tickets to either implicit accounts or originated contracts acce.out deleted file mode 100644 index 68e808e16d820e9f70b26ef3a4f2e123be3779be..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Sending tickets to either implicit accounts or originated contracts acce.out +++ /dev/null @@ -1,197 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none originate contract tickets_blackhole transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_blackhole_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 579.704 units (will add 100 for safety) -Estimated storage: 308 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000346 - Expected counter: 2 - Gas limit: 680 - Storage limit: 328 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000346 - payload fees(the block proposer) ....... +ꜩ0.000346 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (ticket %ticket string) ; - storage unit ; - code { CDR ; NIL operation ; PAIR } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 51 bytes - Paid storage size diff: 51 bytes - Consumed gas: 579.671 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01275 - storage fees ........................... +ꜩ0.01275 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_blackhole. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 1' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 3 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[CONTRACT_HASH]" 1' -Node is bootstrapped. -Estimated gas: 4063.823 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000715 - Expected counter: 4 - Gas limit: 4164 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000715 - payload fees(the block proposer) ....... +ꜩ0.000715 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[CONTRACT_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 2211.236 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Updated storage: Unit - Storage size: 51 bytes - Consumed gas: 1853.638 - diff --git a/tezt/tests/expected/tickets.ml/Parisb- Sending zero ticket from implicit accounts must be rejected.out b/tezt/tests/expected/tickets.ml/Parisb- Sending zero ticket from implicit accounts must be rejected.out deleted file mode 100644 index ca58a93b53c632eff2c213cc9e40e7e6ef7332f1..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tickets.ml/Parisb- Sending zero ticket from implicit accounts must be rejected.out +++ /dev/null @@ -1,174 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract tickets_send transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_send_016.tz --init Unit --burn-cap 1 -Node is bootstrapped. -Estimated gas: 614.216 units (will add 100 for safety) -Estimated storage: 415 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000457 - Expected counter: 1 - Gas limit: 715 - Storage limit: 435 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000457 - payload fees(the block proposer) ....... +ꜩ0.000457 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (pair address nat) ; - storage unit ; - code { CAR ; - UNPAIR ; - CONTRACT (ticket string) ; - IF_NONE - { PUSH string "Contract not found" ; FAILWITH } - { PUSH mutez 0 ; - DIG 2 ; - PUSH string "Ticket" ; - TICKET ; - ASSERT_SOME ; - TRANSFER_TOKENS ; - PUSH unit Unit ; - NIL operation ; - DIG 2 ; - CONS ; - PAIR } } } - Initial storage: Unit - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 158 bytes - Paid storage size diff: 158 bytes - Consumed gas: 614.183 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0395 - storage fees ........................... +ꜩ0.0395 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_send. - -./octez-client --mode mockup --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg 'Pair "[PUBLIC_KEY_HASH]" 1' -Node is bootstrapped. -Estimated gas: 1858.650 units (will add 100 for safety) -Estimated storage: 66 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 2 - Gas limit: 1959 - Storage limit: 86 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" 1) - This transaction was successfully applied - Updated storage: Unit - Storage size: 158 bytes - Paid storage size diff: 66 bytes - Consumed gas: 1758.787 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0165 - storage fees ........................... +ꜩ0.0165 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [PUBLIC_KEY_HASH] - Parameter: (Pair 0x01fca241ad513615858a813a6019c5a5b3977c27dc00 (Pair "Ticket" 1)) - This transaction was successfully applied - Consumed gas: 100.398 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Ticket" - Account updates: - [PUBLIC_KEY_HASH] ... +1 - - -./octez-client --mode mockup get ticket balance for bootstrap1 with ticketer '[CONTRACT_HASH]' and type string and content '"Ticket"' -1 - -./octez-client --mode mockup --wait none originate contract tickets_bag transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/tickets_bag_016.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 620.183 units (will add 100 for safety) -Estimated storage: 451 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000494 - Expected counter: 3 - Gas limit: 721 - Storage limit: 471 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000494 - payload fees(the block proposer) ....... +ꜩ0.000494 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter (or (ticket %save string) (address %send)) ; - storage (list (ticket string)) ; - code { UNPAIR ; - IF_LEFT - { CONS ; NIL operation ; PAIR } - { SWAP ; - IF_CONS - { DIG 2 ; - CONTRACT %ticket (ticket string) ; - ASSERT_SOME ; - PUSH mutez 0 ; - DIG 2 ; - TRANSFER_TOKENS ; - NIL operation ; - SWAP ; - CONS ; - PAIR } - { PUSH string "no ticket to send" ; FAILWITH } } } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 194 bytes - Paid storage size diff: 194 bytes - Consumed gas: 620.150 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.0485 - storage fees ........................... +ꜩ0.0485 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as tickets_bag. - -./octez-client --mode mockup --wait none transfer 0 tickets from bootstrap1 to '[CONTRACT_HASH]' with entrypoint save and contents '"Ticket"' and type string and ticketer '[CONTRACT_HASH]' --burn-cap 1 -Fatal error: - ticket quantity should not be zero or negative diff --git a/tezt/tests/expected/tx_sc_rollup.ml/Parisb- wasm_2_0_0 - tx kernel should run e2e (kernel_e2e).out b/tezt/tests/expected/tx_sc_rollup.ml/Parisb- wasm_2_0_0 - tx kernel should run e2e (kernel_e2e).out deleted file mode 100644 index 52a59d964c2fc51fd27d9d8887d909aa20c8d4dc..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tx_sc_rollup.ml/Parisb- wasm_2_0_0 - tx kernel should run e2e (kernel_e2e).out +++ /dev/null @@ -1,224 +0,0 @@ - -./octez-client --wait none transfer 0 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1000 --arg 'Pair (Pair "[SMART_ROLLUP_HASH]" "[PUBLIC_KEY_HASH]") (Pair 450 "Hello, Ticket!")' -Node is bootstrapped. -Estimated gas: 2329.875 units (will add 100 for safety) -Estimated storage: 67 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000606 - Expected counter: 3 - Gas limit: 2430 - Storage limit: 87 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000606 - payload fees(the block proposer) ....... +ꜩ0.000606 - Transaction: - Amount: ꜩ0 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: (Pair (Pair "[SMART_ROLLUP_HASH]" "[PUBLIC_KEY_HASH]") - (Pair 450 "Hello, Ticket!")) - This transaction was successfully applied - Updated storage: Unit - Storage size: 205 bytes - Paid storage size diff: 67 bytes - Consumed gas: 2222.857 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01675 - storage fees ........................... +ꜩ0.01675 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [CONTRACT_HASH] - To: [SMART_ROLLUP_HASH] - Parameter: (Pair "[PUBLIC_KEY_HASH]" - (Pair [MICHELINE_KT1_BYTES] (Pair "Hello, Ticket!" 450))) - This transaction was successfully applied - Consumed gas: 106.951 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Hello, Ticket!" - Account updates: - [SMART_ROLLUP_HASH] ... +450 - - -./octez-client --wait none send smart rollup message '[SMART_ROLLUP_EXTERNAL_MESSAGES]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 183.869 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000619 - Expected counter: 1 - Gas limit: 284 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000619 - payload fees(the block proposer) ....... +ꜩ0.000619 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 183.803 - -GET http://[HOST]:[PORT]/global/block/head/total_ticks -200 OK -"650000000000000" - - -./octez-client --wait none send smart rollup message '[SMART_ROLLUP_EXTERNAL_MESSAGES]' from bootstrap2 -Node is bootstrapped. -Estimated gas: 186.279 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000682 - Expected counter: 2 - Gas limit: 287 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000682 - payload fees(the block proposer) ....... +ꜩ0.000682 - Smart rollup messages submission: - This smart rollup messages submission was successfully applied - Consumed gas: 186.213 - -GET http://[HOST]:[PORT]/global/block/12/total_ticks -200 OK -"1550000000000000" - - -./octez-client --wait none execute outbox message of smart rollup '[SMART_ROLLUP_HASH]' from bootstrap1 for commitment hash '[SC_ROLLUP_COMMITMENT_HASH]' and output proof '[SMART_ROLLUP_BYTES]' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 6269.903 units (will add 100 for safety) -Estimated storage: 125 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.001625 - Expected counter: 8 - Gas limit: 6370 - Storage limit: 145 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.001625 - payload fees(the block proposer) ....... +ꜩ0.001625 - Smart rollup output message execution: - Address: [SMART_ROLLUP_HASH] - Cemented commitment: [SC_ROLLUP_COMMITMENT_HASH] - This smart output message execution was successfully applied - Paid storage size diff: 72 bytes - Consumed gas: 5060.896 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.018 - storage fees ........................... +ꜩ0.018 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Hello, Ticket!" - Account updates: - [SMART_ROLLUP_HASH] ... -220 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [SMART_ROLLUP_HASH] - To: [CONTRACT_HASH] - Entrypoint: receive_tickets - Parameter: (Pair [MICHELINE_KT1_BYTES] (Pair "Hello, Ticket!" 220)) - This transaction was successfully applied - Updated storage: - { Pair [MICHELINE_KT1_BYTES] (Pair "Hello, Ticket!" 220) } - Storage size: 175 bytes - Paid storage size diff: 53 bytes - Consumed gas: 1208.974 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.01325 - storage fees ........................... +ꜩ0.01325 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Hello, Ticket!" - Account updates: - [CONTRACT_HASH] ... +220 - - -./octez-client --wait none execute outbox message of smart rollup '[SMART_ROLLUP_HASH]' from bootstrap1 for commitment hash '[SC_ROLLUP_COMMITMENT_HASH]' and output proof '[SMART_ROLLUP_BYTES]' --burn-cap 10 -Node is bootstrapped. -Estimated gas: 5818.472 units (will add 100 for safety) -Estimated storage: 52 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.001577 - Expected counter: 9 - Gas limit: 5919 - Storage limit: 72 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.001577 - payload fees(the block proposer) ....... +ꜩ0.001577 - Smart rollup output message execution: - Address: [SMART_ROLLUP_HASH] - Cemented commitment: [SC_ROLLUP_COMMITMENT_HASH] - This smart output message execution was successfully applied - Consumed gas: 4601.209 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Hello, Ticket!" - Account updates: - [SMART_ROLLUP_HASH] ... -40 - Internal operations: - Internal Transaction: - Amount: ꜩ0 - From: [SMART_ROLLUP_HASH] - To: [CONTRACT_HASH] - Entrypoint: receive_tickets - Parameter: (Pair [MICHELINE_KT1_BYTES] (Pair "Hello, Ticket!" 40)) - This transaction was successfully applied - Updated storage: - { Pair [MICHELINE_KT1_BYTES] (Pair "Hello, Ticket!" 40) ; - Pair [MICHELINE_KT1_BYTES] (Pair "Hello, Ticket!" 220) } - Storage size: 227 bytes - Paid storage size diff: 52 bytes - Consumed gas: 1217.197 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.013 - storage fees ........................... +ꜩ0.013 - Ticket updates: - Ticketer: [CONTRACT_HASH] - Content type: string - Content: "Hello, Ticket!" - Account updates: - [CONTRACT_HASH] ... +40 - diff --git a/tezt/tests/expected/tzt_regression.ml/Parisb- Run TZT.out b/tezt/tests/expected/tzt_regression.ml/Parisb- Run TZT.out deleted file mode 100644 index 4716dccf1e3dd4d23270fcd85275bc225cc5eb45..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/tzt_regression.ml/Parisb- Run TZT.out +++ /dev/null @@ -1,69 +0,0 @@ - -./octez-client --protocol PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ --mode mockup --no-base-dir-warnings run unit tests from tzt_reference_test_suite/abs_00.tzt tzt_reference_test_suite/abs_01.tzt tzt_reference_test_suite/abs_02.tzt tzt_reference_test_suite/add_00.tc.tzt tzt_reference_test_suite/add_01.tc.tzt tzt_reference_test_suite/add_int-int_00.tzt tzt_reference_test_suite/add_int-nat_00.tzt tzt_reference_test_suite/add_int-nat_01.tzt tzt_reference_test_suite/add_int-timestamp_00.tzt tzt_reference_test_suite/add_mutez-mutez_00.tzt tzt_reference_test_suite/add_mutez-mutez_01.tzt tzt_reference_test_suite/add_nat-int_00.tzt tzt_reference_test_suite/add_nat-nat_00.tzt tzt_reference_test_suite/add_timestamp-int_00.tzt tzt_reference_test_suite/add_timestamp-int_01.tzt tzt_reference_test_suite/add_timestamp-int_02.tzt tzt_reference_test_suite/add_timestamp-int_03.tzt tzt_reference_test_suite/address_00.tzt tzt_reference_test_suite/address_00.tc.tzt tzt_reference_test_suite/address_01.tzt tzt_reference_test_suite/address_02.tzt tzt_reference_test_suite/amount_00.tzt tzt_reference_test_suite/and_bool-bool_00.tzt tzt_reference_test_suite/and_bool-bool_01.tzt tzt_reference_test_suite/and_bool-bool_02.tzt tzt_reference_test_suite/and_bool-bool_03.tzt tzt_reference_test_suite/and_bytes-bytes_00.tzt tzt_reference_test_suite/and_bytes-bytes_01.tzt tzt_reference_test_suite/and_bytes-bytes_02.tzt tzt_reference_test_suite/and_bytes-bytes_03.tzt tzt_reference_test_suite/and_bytes-bytes_04.tzt tzt_reference_test_suite/and_bytes-bytes_05.tzt tzt_reference_test_suite/and_bytes-bytes_06.tzt tzt_reference_test_suite/and_int-nat_00.tzt tzt_reference_test_suite/and_int-nat_01.tzt tzt_reference_test_suite/and_int-nat_02.tzt tzt_reference_test_suite/and_int-nat_03.tzt tzt_reference_test_suite/and_int-nat_04.tzt tzt_reference_test_suite/and_int-nat_05.tzt tzt_reference_test_suite/and_int-nat_06.tzt tzt_reference_test_suite/and_nat-nat_00.tzt tzt_reference_test_suite/and_nat-nat_01.tzt tzt_reference_test_suite/and_nat-nat_02.tzt tzt_reference_test_suite/apply_00.tzt tzt_reference_test_suite/apply_01.tzt tzt_reference_test_suite/apply_02.tzt tzt_reference_test_suite/balance_00.tzt tzt_reference_test_suite/blake2b_00.tzt tzt_reference_test_suite/blake2b_01.tzt tzt_reference_test_suite/car_00.tzt tzt_reference_test_suite/car_00.tc.tzt tzt_reference_test_suite/car_01.tzt tzt_reference_test_suite/cdr_00.tzt tzt_reference_test_suite/cdr_00.tc.tzt tzt_reference_test_suite/cdr_01.tzt tzt_reference_test_suite/chain_id_00.tzt tzt_reference_test_suite/chain_id_01.tzt tzt_reference_test_suite/checksignature_00.tzt tzt_reference_test_suite/checksignature_00.tc.tzt tzt_reference_test_suite/checksignature_01.tzt tzt_reference_test_suite/compare_00.tc.tzt tzt_reference_test_suite/compare_01.tc.tzt tzt_reference_test_suite/compare_02.tc.tzt tzt_reference_test_suite/compare_bool_00.tzt tzt_reference_test_suite/compare_bool_01.tzt tzt_reference_test_suite/compare_bool_02.tzt tzt_reference_test_suite/compare_bool_03.tzt tzt_reference_test_suite/compare_bytes_00.tzt tzt_reference_test_suite/compare_bytes_01.tzt tzt_reference_test_suite/compare_bytes_02.tzt tzt_reference_test_suite/compare_bytes_03.tzt tzt_reference_test_suite/compare_bytes_04.tzt tzt_reference_test_suite/compare_int_00.tzt tzt_reference_test_suite/compare_int_01.tzt tzt_reference_test_suite/compare_int_02.tzt tzt_reference_test_suite/compare_int_03.tzt tzt_reference_test_suite/compare_int_04.tzt tzt_reference_test_suite/compare_keyhash_00.tzt tzt_reference_test_suite/compare_keyhash_01.tzt tzt_reference_test_suite/compare_keyhash_02.tzt tzt_reference_test_suite/compare_mutez_00.tzt tzt_reference_test_suite/compare_mutez_01.tzt tzt_reference_test_suite/compare_mutez_02.tzt tzt_reference_test_suite/compare_mutez_03.tzt tzt_reference_test_suite/compare_mutez_04.tzt tzt_reference_test_suite/compare_mutez_05.tzt tzt_reference_test_suite/compare_nat_00.tzt tzt_reference_test_suite/compare_nat_01.tzt tzt_reference_test_suite/compare_nat_02.tzt tzt_reference_test_suite/compare_nat_03.tzt tzt_reference_test_suite/compare_nat_04.tzt tzt_reference_test_suite/compare_nat_05.tzt tzt_reference_test_suite/compare_never_00.tzt tzt_reference_test_suite/compare_pairintint_00.tzt tzt_reference_test_suite/compare_pairintint_01.tzt tzt_reference_test_suite/compare_pairintint_02.tzt tzt_reference_test_suite/compare_pairintint_03.tzt tzt_reference_test_suite/compare_string_00.tzt tzt_reference_test_suite/compare_string_01.tzt tzt_reference_test_suite/compare_string_02.tzt tzt_reference_test_suite/compare_string_03.tzt tzt_reference_test_suite/compare_string_04.tzt tzt_reference_test_suite/compare_timestamp_00.tzt tzt_reference_test_suite/compare_timestamp_01.tzt tzt_reference_test_suite/compare_timestamp_02.tzt tzt_reference_test_suite/compare_timestamp_03.tzt tzt_reference_test_suite/compare_timestamp_04.tzt tzt_reference_test_suite/compare_timestamp_05.tzt tzt_reference_test_suite/concat_00.tc.tzt tzt_reference_test_suite/concat_bytes_00.tzt tzt_reference_test_suite/concat_bytes_01.tzt tzt_reference_test_suite/concat_listbytes_00.tzt tzt_reference_test_suite/concat_listbytes_01.tzt tzt_reference_test_suite/concat_listbytes_02.tzt tzt_reference_test_suite/concat_liststring_00.tzt tzt_reference_test_suite/concat_liststring_01.tzt tzt_reference_test_suite/concat_liststring_02.tzt tzt_reference_test_suite/concat_liststring_03.tzt tzt_reference_test_suite/concat_liststring_04.tzt tzt_reference_test_suite/concat_string_00.tzt tzt_reference_test_suite/concat_string_01.tzt tzt_reference_test_suite/concat_string_02.tzt tzt_reference_test_suite/cons_int_00.tzt tzt_reference_test_suite/cons_int_01.tzt tzt_reference_test_suite/cons_int_02.tzt tzt_reference_test_suite/cons_lists_00.tc.tzt tzt_reference_test_suite/cons_string_00.tzt tzt_reference_test_suite/contract_00.tzt tzt_reference_test_suite/contract_01.tzt tzt_reference_test_suite/contract_02.tzt tzt_reference_test_suite/contract_03.tzt tzt_reference_test_suite/contract_04.tzt tzt_reference_test_suite/contract_05.tzt tzt_reference_test_suite/createcontract_00.tzt tzt_reference_test_suite/createcontract_01.tzt tzt_reference_test_suite/dig_00.tzt tzt_reference_test_suite/dig_01.tzt tzt_reference_test_suite/dig_02.tzt tzt_reference_test_suite/dig_03.tzt tzt_reference_test_suite/dig_04.tzt tzt_reference_test_suite/dip_00.tzt tzt_reference_test_suite/dip_00.tc.tzt tzt_reference_test_suite/dip_01.tzt tzt_reference_test_suite/dip_02.tzt tzt_reference_test_suite/dipn_00.tzt tzt_reference_test_suite/dipn_00.tc.tzt tzt_reference_test_suite/dipn_01.tzt tzt_reference_test_suite/dipn_01.tc.tzt tzt_reference_test_suite/dipn_02.tzt tzt_reference_test_suite/dipn_02.tc.tzt tzt_reference_test_suite/dipn_03.tzt tzt_reference_test_suite/drop_00.tzt tzt_reference_test_suite/drop_00.tc.tzt tzt_reference_test_suite/dropn_00.tzt tzt_reference_test_suite/dropn_00.tc.tzt tzt_reference_test_suite/dropn_01.tzt tzt_reference_test_suite/dropn_02.tzt tzt_reference_test_suite/dropn_03.tzt tzt_reference_test_suite/dugn_00.tzt tzt_reference_test_suite/dup_00.tzt tzt_reference_test_suite/dup_00.tc.tzt tzt_reference_test_suite/dupn_00.tzt tzt_reference_test_suite/dupn_00.tc.tzt tzt_reference_test_suite/dupn_01.tzt tzt_reference_test_suite/dupn_01.tc.tzt tzt_reference_test_suite/dupn_02.tzt tzt_reference_test_suite/dupn_03.tzt tzt_reference_test_suite/dupn_04.tzt tzt_reference_test_suite/ediv_int-int_00.tzt tzt_reference_test_suite/ediv_int-int_01.tzt tzt_reference_test_suite/ediv_int-int_02.tzt tzt_reference_test_suite/ediv_int-int_03.tzt tzt_reference_test_suite/ediv_mutez-mutez_00.tzt tzt_reference_test_suite/ediv_mutez-mutez_01.tzt tzt_reference_test_suite/ediv_mutez-mutez_02.tzt tzt_reference_test_suite/ediv_mutez-mutez_03.tzt tzt_reference_test_suite/ediv_mutez-nat_00.tzt tzt_reference_test_suite/ediv_mutez-nat_01.tzt tzt_reference_test_suite/ediv_mutez-nat_02.tzt tzt_reference_test_suite/ediv_mutez-nat_03.tzt tzt_reference_test_suite/ediv_mutez-nat_04.tzt tzt_reference_test_suite/ediv_mutez-nat_05.tzt tzt_reference_test_suite/ediv_mutez-nat_06.tzt tzt_reference_test_suite/emptybigmap_nat-nat_00.tzt tzt_reference_test_suite/emptymap_nat-nat_00.tzt tzt_reference_test_suite/emptymap_string-string_00.tzt tzt_reference_test_suite/emptyset_00.tc.tzt tzt_reference_test_suite/emptyset_nat_00.tzt tzt_reference_test_suite/eq_00.tzt tzt_reference_test_suite/eq_01.tzt tzt_reference_test_suite/eq_02.tzt tzt_reference_test_suite/eq_03.tzt tzt_reference_test_suite/eq_04.tzt tzt_reference_test_suite/exec_00.tzt tzt_reference_test_suite/exec_01.tzt tzt_reference_test_suite/exec_02.tzt tzt_reference_test_suite/exec_03.tzt tzt_reference_test_suite/failwith_00.tzt tzt_reference_test_suite/failwith_00.tc.tzt tzt_reference_test_suite/gas_exhaustion.tzt tzt_reference_test_suite/ge_00.tzt tzt_reference_test_suite/ge_01.tzt tzt_reference_test_suite/ge_02.tzt tzt_reference_test_suite/ge_03.tzt tzt_reference_test_suite/ge_04.tzt tzt_reference_test_suite/get_00.tc.tzt tzt_reference_test_suite/get_bigmapstringstring_00.tzt tzt_reference_test_suite/get_bigmapstringstring_01.tzt tzt_reference_test_suite/get_bigmapstringstring_02.tzt tzt_reference_test_suite/get_map_00.tc.tzt tzt_reference_test_suite/get_mapintint_00.tzt tzt_reference_test_suite/get_mapintint_01.tzt tzt_reference_test_suite/get_mapstringstring_00.tzt tzt_reference_test_suite/get_mapstringstring_01.tzt tzt_reference_test_suite/get_mapstringstring_02.tzt tzt_reference_test_suite/gt_00.tzt tzt_reference_test_suite/gt_00.tc.tzt tzt_reference_test_suite/gt_01.tzt tzt_reference_test_suite/gt_02.tzt tzt_reference_test_suite/gt_03.tzt tzt_reference_test_suite/gt_04.tzt tzt_reference_test_suite/if_00.tzt tzt_reference_test_suite/if_00.tc.tzt tzt_reference_test_suite/if_01.tzt tzt_reference_test_suite/if_01.tc.tzt tzt_reference_test_suite/ifcons_00.tc.tzt tzt_reference_test_suite/ifcons_listint_00.tzt tzt_reference_test_suite/ifcons_listint_01.tzt tzt_reference_test_suite/ifcons_listnat_00.tzt tzt_reference_test_suite/ifcons_listnat_01.tzt tzt_reference_test_suite/ifleft_00.tc.tzt tzt_reference_test_suite/ifleft_orintstring_00.tzt tzt_reference_test_suite/ifleft_orstringint_00.tzt tzt_reference_test_suite/ifnone_00.tc.tzt tzt_reference_test_suite/ifnone_optionint_00.tzt tzt_reference_test_suite/ifnone_optionnat_00.tzt tzt_reference_test_suite/implicitaccount_00.tzt tzt_reference_test_suite/int_00.tc.tzt tzt_reference_test_suite/int_nat_00.tzt tzt_reference_test_suite/int_nat_01.tzt tzt_reference_test_suite/isnat_00.tzt tzt_reference_test_suite/isnat_01.tzt tzt_reference_test_suite/iter_00.tc.tzt tzt_reference_test_suite/iter_listint_00.tzt tzt_reference_test_suite/iter_listint_01.tzt tzt_reference_test_suite/iter_listint_02.tzt tzt_reference_test_suite/iter_listint_03.tzt tzt_reference_test_suite/iter_liststring_00.tzt tzt_reference_test_suite/iter_liststring_01.tzt tzt_reference_test_suite/iter_mapintint_00.tzt tzt_reference_test_suite/iter_mapintint_01.tzt tzt_reference_test_suite/iter_mapintint_02.tzt tzt_reference_test_suite/iter_mapintint_03.tzt tzt_reference_test_suite/iter_mapintint_04.tzt tzt_reference_test_suite/iter_mapstringstring_00.tzt tzt_reference_test_suite/iter_setint_00.tzt tzt_reference_test_suite/iter_setint_01.tzt tzt_reference_test_suite/iter_setint_02.tzt tzt_reference_test_suite/iter_setstring_00.tzt tzt_reference_test_suite/iter_setstring_01.tzt tzt_reference_test_suite/iter_setstring_02.tzt tzt_reference_test_suite/join_tickets_00.tzt tzt_reference_test_suite/join_tickets_01.tzt tzt_reference_test_suite/join_tickets_02.tzt tzt_reference_test_suite/join_tickets_03.tzt tzt_reference_test_suite/keccak_00.tzt tzt_reference_test_suite/keccak_01.tzt tzt_reference_test_suite/le_00.tzt tzt_reference_test_suite/le_01.tzt tzt_reference_test_suite/le_02.tzt tzt_reference_test_suite/le_03.tzt tzt_reference_test_suite/le_04.tzt tzt_reference_test_suite/left_int-nat_00.tzt tzt_reference_test_suite/loop_00.tzt tzt_reference_test_suite/loop_00.tc.tzt tzt_reference_test_suite/loop_01.tzt tzt_reference_test_suite/loop_01.tc.tzt tzt_reference_test_suite/loop_02.tzt tzt_reference_test_suite/loopleft_00.tzt tzt_reference_test_suite/loopleft_01.tzt tzt_reference_test_suite/loopleft_02.tzt tzt_reference_test_suite/loopleft_03.tzt tzt_reference_test_suite/loopleft_04.tzt tzt_reference_test_suite/lsl_00.tzt tzt_reference_test_suite/lsl_01.tzt tzt_reference_test_suite/lsl_02.tzt tzt_reference_test_suite/lsl_03.tzt tzt_reference_test_suite/lsl_04.tzt tzt_reference_test_suite/lsl_05.tzt tzt_reference_test_suite/lsl_06.tzt tzt_reference_test_suite/lsr_00.tzt tzt_reference_test_suite/lsr_01.tzt tzt_reference_test_suite/lsr_02.tzt tzt_reference_test_suite/lsr_03.tzt tzt_reference_test_suite/lsr_04.tzt tzt_reference_test_suite/lsr_05.tzt tzt_reference_test_suite/lt_00.tzt tzt_reference_test_suite/lt_01.tzt tzt_reference_test_suite/lt_02.tzt tzt_reference_test_suite/lt_03.tzt tzt_reference_test_suite/lt_04.tzt tzt_reference_test_suite/macro_pack/assert_00.tzt tzt_reference_test_suite/macro_pack/assert_cmpeq_00.tzt tzt_reference_test_suite/macro_pack/assert_cmpge_00.tzt tzt_reference_test_suite/macro_pack/assert_cmpgt_00.tzt tzt_reference_test_suite/macro_pack/assert_cmple_00.tzt tzt_reference_test_suite/macro_pack/assert_cmplt_00.tzt tzt_reference_test_suite/macro_pack/assert_cmpneq_00.tzt tzt_reference_test_suite/macro_pack/assert_eq_00.tzt tzt_reference_test_suite/macro_pack/assert_ge_00.tzt tzt_reference_test_suite/macro_pack/assert_gt_00.tzt tzt_reference_test_suite/macro_pack/assert_le_00.tzt tzt_reference_test_suite/macro_pack/assert_left_00.tzt tzt_reference_test_suite/macro_pack/assert_lt_00.tzt tzt_reference_test_suite/macro_pack/assert_neq_00.tzt tzt_reference_test_suite/macro_pack/assert_none_00.tzt tzt_reference_test_suite/macro_pack/assert_right_00.tzt tzt_reference_test_suite/macro_pack/assert_some_00.tzt tzt_reference_test_suite/macro_pack/cadr_00.tzt tzt_reference_test_suite/macro_pack/carn_00.tzt tzt_reference_test_suite/macro_pack/carn_01.tzt tzt_reference_test_suite/macro_pack/cdrn_00.tzt tzt_reference_test_suite/macro_pack/cdrn_01.tzt tzt_reference_test_suite/macro_pack/cmpeq_00.tzt tzt_reference_test_suite/macro_pack/cmpge_00.tzt tzt_reference_test_suite/macro_pack/cmpgt_00.tzt tzt_reference_test_suite/macro_pack/cmple_00.tzt tzt_reference_test_suite/macro_pack/cmplt_00.tzt tzt_reference_test_suite/macro_pack/cmpneq_00.tzt tzt_reference_test_suite/macro_pack/fail_00.tzt tzt_reference_test_suite/macro_pack/ifcmpeq_00.tzt tzt_reference_test_suite/macro_pack/ifcmpge_00.tzt tzt_reference_test_suite/macro_pack/ifcmpgt_00.tzt tzt_reference_test_suite/macro_pack/ifcmple_00.tzt tzt_reference_test_suite/macro_pack/ifcmplt_00.tzt tzt_reference_test_suite/macro_pack/ifcmpneq_00.tzt tzt_reference_test_suite/macro_pack/ifeq_00.tzt tzt_reference_test_suite/macro_pack/ifge_00.tzt tzt_reference_test_suite/macro_pack/ifgt_00.tzt tzt_reference_test_suite/macro_pack/ifle_00.tzt tzt_reference_test_suite/macro_pack/iflt_00.tzt tzt_reference_test_suite/macro_pack/ifneq_00.tzt tzt_reference_test_suite/macro_pack/ifright_00.tzt tzt_reference_test_suite/macro_pack/ifsome_00.tzt tzt_reference_test_suite/macro_pack/mapcadr_00.tzt tzt_reference_test_suite/macro_pack/mapcar_00.tzt tzt_reference_test_suite/macro_pack/mapcdr_00.tzt tzt_reference_test_suite/macro_pack/papair_00.tzt tzt_reference_test_suite/macro_pack/setcadr_00.tzt tzt_reference_test_suite/macro_pack/setcar_00.tzt tzt_reference_test_suite/macro_pack/setcdr_00.tzt tzt_reference_test_suite/macro_pack/unpapair_00.tzt tzt_reference_test_suite/map_listint_00.tzt tzt_reference_test_suite/map_listint_01.tzt tzt_reference_test_suite/map_listint_02.tzt tzt_reference_test_suite/map_listint_03.tzt tzt_reference_test_suite/map_listint_04.tzt tzt_reference_test_suite/map_listint_05.tzt tzt_reference_test_suite/map_listint_06.tzt tzt_reference_test_suite/map_liststring_00.tzt tzt_reference_test_suite/map_liststring_01.tzt tzt_reference_test_suite/map_liststring_02.tzt tzt_reference_test_suite/map_liststring_04.tzt tzt_reference_test_suite/map_liststring_05.tzt tzt_reference_test_suite/map_liststring_06.tzt tzt_reference_test_suite/map_liststring_07.tzt tzt_reference_test_suite/map_liststring_08.tzt tzt_reference_test_suite/map_mapintint_00.tzt tzt_reference_test_suite/map_mapintint_01.tzt tzt_reference_test_suite/map_mapintstring_00.tzt tzt_reference_test_suite/map_mapintstring_01.tzt tzt_reference_test_suite/map_mapstringnat_00.tzt tzt_reference_test_suite/map_mapstringnat_01.tzt tzt_reference_test_suite/map_mapstringnat_02.tzt tzt_reference_test_suite/mem_bigmapnatnat_00.tzt tzt_reference_test_suite/mem_bigmapnatnat_01.tzt tzt_reference_test_suite/mem_bigmapnatnat_02.tzt tzt_reference_test_suite/mem_bigmapnatnat_03.tzt tzt_reference_test_suite/mem_bigmapnatnat_04.tzt tzt_reference_test_suite/mem_bigmapnatnat_05.tzt tzt_reference_test_suite/mem_bigmapstringnat_00.tzt tzt_reference_test_suite/mem_bigmapstringnat_01.tzt tzt_reference_test_suite/mem_bigmapstringnat_02.tzt tzt_reference_test_suite/mem_bigmapstringnat_03.tzt tzt_reference_test_suite/mem_bigmapstringnat_04.tzt tzt_reference_test_suite/mem_bigmapstringnat_05.tzt tzt_reference_test_suite/mem_mapintint_00.tzt tzt_reference_test_suite/mem_mapnatnat_00.tzt tzt_reference_test_suite/mem_mapnatnat_01.tzt tzt_reference_test_suite/mem_mapnatnat_02.tzt tzt_reference_test_suite/mem_mapnatnat_03.tzt tzt_reference_test_suite/mem_mapnatnat_04.tzt tzt_reference_test_suite/mem_mapnatnat_05.tzt tzt_reference_test_suite/mem_mapstringnat_00.tzt tzt_reference_test_suite/mem_mapstringnat_01.tzt tzt_reference_test_suite/mem_mapstringnat_02.tzt tzt_reference_test_suite/mem_mapstringnat_03.tzt tzt_reference_test_suite/mem_mapstringnat_04.tzt tzt_reference_test_suite/mem_mapstringnat_05.tzt tzt_reference_test_suite/mem_setint_00.tzt tzt_reference_test_suite/mem_setint_01.tzt tzt_reference_test_suite/mem_setstring_00.tzt tzt_reference_test_suite/mem_setstring_01.tzt tzt_reference_test_suite/mem_setstring_02.tzt tzt_reference_test_suite/mul_int-int_00.tzt tzt_reference_test_suite/mul_int-nat_00.tzt tzt_reference_test_suite/mul_mutez-nat_00.tzt tzt_reference_test_suite/mul_mutez-nat_01.tzt tzt_reference_test_suite/mul_nat-int_00.tzt tzt_reference_test_suite/mul_nat-mutez_00.tzt tzt_reference_test_suite/mul_nat-mutez_01.tzt tzt_reference_test_suite/mul_nat-nat_00.tzt tzt_reference_test_suite/neg_int_00.tzt tzt_reference_test_suite/neg_int_01.tzt tzt_reference_test_suite/neg_int_02.tzt tzt_reference_test_suite/neg_nat_00.tzt tzt_reference_test_suite/neg_nat_01.tzt tzt_reference_test_suite/neq_00.tzt tzt_reference_test_suite/neq_01.tzt tzt_reference_test_suite/neq_02.tzt tzt_reference_test_suite/neq_03.tzt tzt_reference_test_suite/neq_04.tzt tzt_reference_test_suite/never_00.tzt tzt_reference_test_suite/never_00.tc.tzt tzt_reference_test_suite/nil_nat_00.tzt tzt_reference_test_suite/none_int_00.tzt tzt_reference_test_suite/none_pair-nat-string.tzt tzt_reference_test_suite/not_bool_00.tzt tzt_reference_test_suite/not_bool_01.tzt tzt_reference_test_suite/not_bytes_00.tzt tzt_reference_test_suite/not_bytes_01.tzt tzt_reference_test_suite/not_bytes_02.tzt tzt_reference_test_suite/not_bytes_03.tzt tzt_reference_test_suite/not_bytes_04.tzt tzt_reference_test_suite/not_bytes_05.tzt tzt_reference_test_suite/not_int_00.tzt tzt_reference_test_suite/not_nat_00.tzt tzt_reference_test_suite/not_nat_01.tzt tzt_reference_test_suite/not_nat_02.tzt tzt_reference_test_suite/not_nat_03.tzt tzt_reference_test_suite/not_nat_04.tzt tzt_reference_test_suite/not_nat_05.tzt tzt_reference_test_suite/not_nat_06.tzt tzt_reference_test_suite/not_nat_07.tzt tzt_reference_test_suite/now_00.tzt tzt_reference_test_suite/or_bool-bool_00.tzt tzt_reference_test_suite/or_bool-bool_01.tzt tzt_reference_test_suite/or_bool-bool_02.tzt tzt_reference_test_suite/or_bool-bool_03.tzt tzt_reference_test_suite/or_bytes-bytes_00.tzt tzt_reference_test_suite/or_bytes-bytes_01.tzt tzt_reference_test_suite/or_bytes-bytes_02.tzt tzt_reference_test_suite/or_bytes-bytes_03.tzt tzt_reference_test_suite/or_bytes-bytes_04.tzt tzt_reference_test_suite/or_bytes-bytes_05.tzt tzt_reference_test_suite/or_bytes-bytes_06.tzt tzt_reference_test_suite/or_nat-nat_00.tzt tzt_reference_test_suite/or_nat-nat_01.tzt tzt_reference_test_suite/or_nat-nat_02.tzt tzt_reference_test_suite/or_nat-nat_03.tzt tzt_reference_test_suite/or_nat-nat_04.tzt tzt_reference_test_suite/or_nat-nat_05.tzt tzt_reference_test_suite/or_nat-nat_06.tzt tzt_reference_test_suite/pack_address_00.tzt tzt_reference_test_suite/pack_address_01.tzt tzt_reference_test_suite/pack_address_02.tzt tzt_reference_test_suite/pack_address_03.tzt tzt_reference_test_suite/pack_address_04.tzt tzt_reference_test_suite/pack_address_05.tzt tzt_reference_test_suite/pack_bool_00.tzt tzt_reference_test_suite/pack_bool_01.tzt tzt_reference_test_suite/pack_bytes_00.tzt tzt_reference_test_suite/pack_bytes_01.tzt tzt_reference_test_suite/pack_bytes_02.tzt tzt_reference_test_suite/pack_chainid_00.tzt tzt_reference_test_suite/pack_contract_00.tzt tzt_reference_test_suite/pack_key_00.tzt tzt_reference_test_suite/pack_key_01.tzt tzt_reference_test_suite/pack_key_02.tzt tzt_reference_test_suite/pack_key_03.tzt tzt_reference_test_suite/pack_keyhash_01.tzt tzt_reference_test_suite/pack_keyhash_02.tzt tzt_reference_test_suite/pack_keyhash_03.tzt tzt_reference_test_suite/pack_keyhash_04.tzt tzt_reference_test_suite/pack_lambda_comb_pairs.tzt tzt_reference_test_suite/pack_list-bool_00.tzt tzt_reference_test_suite/pack_list-bool_01.tzt tzt_reference_test_suite/pack_list-list-bool.tzt tzt_reference_test_suite/pack_list_large_00.tzt tzt_reference_test_suite/pack_map-bool-unit_00.tzt tzt_reference_test_suite/pack_operation_00.tc.tzt tzt_reference_test_suite/pack_option-unit_00.tzt tzt_reference_test_suite/pack_option-unit_01.tzt tzt_reference_test_suite/pack_or-unit-bool_00.tzt tzt_reference_test_suite/pack_or-unit-bool_01.tzt tzt_reference_test_suite/pack_pair-bool-unit_00.tzt tzt_reference_test_suite/pack_signature_00.tzt tzt_reference_test_suite/pack_signature_01.tzt tzt_reference_test_suite/pack_signature_02.tzt tzt_reference_test_suite/pack_signature_03.tzt tzt_reference_test_suite/pack_string_00.tzt tzt_reference_test_suite/pack_string_01.tzt tzt_reference_test_suite/pack_string_02.tzt tzt_reference_test_suite/pack_string_03.tzt tzt_reference_test_suite/pack_unit_00.tzt tzt_reference_test_suite/packunpack_address_00.tzt tzt_reference_test_suite/packunpack_bool_00.tzt tzt_reference_test_suite/packunpack_bytes_00.tzt tzt_reference_test_suite/packunpack_int_00.tzt tzt_reference_test_suite/packunpack_keyhash_00.tzt tzt_reference_test_suite/packunpack_mutez_00.tzt tzt_reference_test_suite/packunpack_nat_00.tzt tzt_reference_test_suite/packunpack_string_00.tzt tzt_reference_test_suite/packunpack_timestamp_00.tzt tzt_reference_test_suite/pair_00.tc.tzt tzt_reference_test_suite/pair_int-int_00.tzt tzt_reference_test_suite/pair_nat-string_00.tzt tzt_reference_test_suite/pair_pair-nat-string-pair-string-nat_00.tzt tzt_reference_test_suite/push_00.tc.tzt tzt_reference_test_suite/push_int_00.tzt tzt_reference_test_suite/push_string_00.tzt tzt_reference_test_suite/read_ticket_00.tzt tzt_reference_test_suite/right_nat-int_00.tzt tzt_reference_test_suite/self_00.tzt tzt_reference_test_suite/self_01.tzt tzt_reference_test_suite/self_in_lambda.tc.tzt tzt_reference_test_suite/sender_00.tzt tzt_reference_test_suite/setdelegate_00.tzt tzt_reference_test_suite/setdelegate_00.tc.tzt tzt_reference_test_suite/sha256_00.tzt tzt_reference_test_suite/sha256_01.tzt tzt_reference_test_suite/sha3_00.tzt tzt_reference_test_suite/sha3_01.tzt tzt_reference_test_suite/sha512_00.tzt tzt_reference_test_suite/sha512_01.tzt tzt_reference_test_suite/size_bytes_00.tzt tzt_reference_test_suite/size_listint_00.tzt tzt_reference_test_suite/size_listint_01.tzt tzt_reference_test_suite/size_listint_02.tzt tzt_reference_test_suite/size_listint_03.tzt tzt_reference_test_suite/size_mapintint_00.tzt tzt_reference_test_suite/size_mapstringnat_00.tzt tzt_reference_test_suite/size_mapstringnat_01.tzt tzt_reference_test_suite/size_mapstringnat_02.tzt tzt_reference_test_suite/size_mapstringnat_03.tzt tzt_reference_test_suite/size_setint_00.tzt tzt_reference_test_suite/size_setint_01.tzt tzt_reference_test_suite/size_setint_02.tzt tzt_reference_test_suite/size_setint_03.tzt tzt_reference_test_suite/size_setstring_00.tzt tzt_reference_test_suite/size_string_00.tzt tzt_reference_test_suite/slice_bytes_00.tzt tzt_reference_test_suite/slice_bytes_01.tzt tzt_reference_test_suite/slice_bytes_02.tzt tzt_reference_test_suite/slice_bytes_03.tzt tzt_reference_test_suite/slice_bytes_04.tzt tzt_reference_test_suite/slice_string_00.tzt tzt_reference_test_suite/slice_string_01.tzt tzt_reference_test_suite/slice_string_02.tzt tzt_reference_test_suite/slice_string_03.tzt tzt_reference_test_suite/slice_string_04.tzt tzt_reference_test_suite/slice_string_05.tzt tzt_reference_test_suite/some_00.tc.tzt tzt_reference_test_suite/some_int_00.tzt tzt_reference_test_suite/some_pairintint_00.tzt tzt_reference_test_suite/some_string_00.tzt tzt_reference_test_suite/source_00.tzt tzt_reference_test_suite/split_ticket_00.tzt tzt_reference_test_suite/split_ticket_01.tzt tzt_reference_test_suite/split_ticket_02.tzt tzt_reference_test_suite/split_ticket_03.tzt tzt_reference_test_suite/split_ticket_04.tzt tzt_reference_test_suite/sub_int-int_00.tzt tzt_reference_test_suite/sub_int-int_01.tzt tzt_reference_test_suite/sub_mutez-mutez_00.tzt tzt_reference_test_suite/sub_mutez-mutez_01.tzt tzt_reference_test_suite/sub_timestamp-int_00.tzt tzt_reference_test_suite/sub_timestamp-int_01.tzt tzt_reference_test_suite/sub_timestamp-int_02.tzt tzt_reference_test_suite/sub_timestamp-int_03.tzt tzt_reference_test_suite/sub_timestamp-int_04.tzt tzt_reference_test_suite/sub_timestamp-timestamp_00.tzt tzt_reference_test_suite/sub_timestamp-timestamp_01.tzt tzt_reference_test_suite/sub_timestamp-timestamp_02.tzt tzt_reference_test_suite/sub_timestamp-timestamp_03.tzt tzt_reference_test_suite/swap_00.tzt tzt_reference_test_suite/swap_00.tc.tzt tzt_reference_test_suite/swap_01.tc.tzt tzt_reference_test_suite/ticket_00.tzt tzt_reference_test_suite/ticket_01.tzt tzt_reference_test_suite/transfertokens_00.tzt tzt_reference_test_suite/transfertokens_00.tc.tzt tzt_reference_test_suite/transfertokens_01.tzt tzt_reference_test_suite/unit_00.tzt tzt_reference_test_suite/unpair_00.tc.tzt tzt_reference_test_suite/unpair_pairstringstring_00.tzt tzt_reference_test_suite/update_00.tc.tzt tzt_reference_test_suite/update_bigmapstringstring_00.tzt tzt_reference_test_suite/update_bigmapstringstring_01.tzt tzt_reference_test_suite/update_bigmapstringstring_02.tzt tzt_reference_test_suite/update_bigmapstringstring_03.tzt tzt_reference_test_suite/update_bigmapstringstring_04.tzt tzt_reference_test_suite/update_bigmapstringstring_05.tzt tzt_reference_test_suite/update_bigmapstringstring_06.tzt tzt_reference_test_suite/update_bigmapstringstring_07.tzt tzt_reference_test_suite/update_mapintint_00.tzt tzt_reference_test_suite/update_mapintint_01.tzt tzt_reference_test_suite/update_setint_00.tzt tzt_reference_test_suite/update_setint_01.tzt tzt_reference_test_suite/update_setint_02.tzt tzt_reference_test_suite/xor_bool-bool_00.tzt tzt_reference_test_suite/xor_bool-bool_01.tzt tzt_reference_test_suite/xor_bool-bool_02.tzt tzt_reference_test_suite/xor_bool-bool_03.tzt tzt_reference_test_suite/xor_bytes-bytes_00.tzt tzt_reference_test_suite/xor_bytes-bytes_01.tzt tzt_reference_test_suite/xor_bytes-bytes_02.tzt tzt_reference_test_suite/xor_bytes-bytes_03.tzt tzt_reference_test_suite/xor_bytes-bytes_04.tzt tzt_reference_test_suite/xor_bytes-bytes_05.tzt tzt_reference_test_suite/xor_bytes-bytes_06.tzt tzt_reference_test_suite/xor_nat-nat_00.tzt tzt_reference_test_suite/xor_nat-nat_01.tzt tzt_reference_test_suite/xor_nat-nat_02.tzt tzt_reference_test_suite/xor_nat-nat_03.tzt tzt_reference_test_suite/xor_nat-nat_04.tzt tzt_reference_test_suite/xor_nat-nat_05.tzt tzt_reference_test_suite/xor_nat-nat_06.tzt -tzt_reference_test_suite/transfertokens_01.tzt: -Got output: { Stack_elt - operation - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000000010501a9845b61ac052cdd0428af72a35bf75151dc754800ff00000000020014 } -Expected: { Stack_elt operation (Transfer_tokens 20 5 "KT1Q36KWPSba7dHsH5E4ZsQHehrChc51e19d" _) } - -tzt_reference_test_suite/transfertokens_00.tzt: -Got output: { Stack_elt - operation - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe60000000105000002298c03ed7d454a101eb7022bc95f7e5f41ac7800 } -Expected: { Stack_elt - operation - (Transfer_tokens Unit 5 "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" _) } - -tzt_reference_test_suite/ticket_01.tzt: -Got output: StaticError "Error:\n Contract_storage.Failure \"get_balance\"\n" -Expected: { Stack_elt (option (ticket string)) None } - -tzt_reference_test_suite/ticket_00.tzt: -Got output: StaticError "Error:\n Contract_storage.Failure \"get_balance\"\n" -Expected: { Stack_elt - (option (ticket string)) - (Some (Pair "KT1Q36KWPSba7dHsH5E4ZsQHehrChc51e19d" "Blue" 42)) } - -tzt_reference_test_suite/setdelegate_00.tzt: -Got output: { Stack_elt - operation - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe600000003ff002431516be31f3f7bb3c8169f930a024142696af7 } -Expected: { Stack_elt operation (Set_delegate (Some "tz1NwQ6hkenkn6aYYio8VnJvjtb4K1pfeU1Z") _) } - -tzt_reference_test_suite/createcontract_01.tzt: -Got output: { Stack_elt - operation - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000000020c000000001e02000000190502020000000a0320034f053d036d03420501036c0500036c00000002030b ; - Stack_elt address "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm" } -Expected: { Stack_elt - operation - (Create_contract - { code { DROP ; UNIT ; NIL operation ; PAIR } ; - storage unit ; - parameter unit } - None - 12 - Unit - _) ; - Stack_elt address _ } - -tzt_reference_test_suite/createcontract_00.tzt: -Got output: { Stack_elt - operation - 0x011d23c1d3d2f8a4ea5e8784b8f7ecf2ad304c0fe6000000020cff002431516be31f3f7bb3c8169f930a024142696af70000001e02000000190502020000000a0320034f053d036d03420501036c0500036c00000002030b ; - Stack_elt address "KT1Mjjcb6tmSsLm7Cb3DSQszePjfchPM4Uxm" } -Expected: { Stack_elt - operation - (Create_contract - { code { DROP ; UNIT ; NIL operation ; PAIR } ; - storage unit ; - parameter unit } - (Some "tz1NwQ6hkenkn6aYYio8VnJvjtb4K1pfeU1Z") - 12 - Unit - _) ; - Stack_elt address _ } - -Test results: Passed:621 Failed:7 Total:628 -Fatal error: - Some tests have failed diff --git a/tezt/tests/expected/views.ml/Parisb- Run views.out b/tezt/tests/expected/views.ml/Parisb- Run views.out deleted file mode 100644 index 93b71a2c4f0503ffbbb4d80484b550bba63d3fb3..0000000000000000000000000000000000000000 --- a/tezt/tests/expected/views.ml/Parisb- Run views.out +++ /dev/null @@ -1,213 +0,0 @@ - -./octez-client --mode mockup --wait none originate contract view_registers_callers transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/view_registers_callers.tz --init '{}' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 603.226 units (will add 100 for safety) -Estimated storage: 409 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.00045 - Expected counter: 1 - Gas limit: 704 - Storage limit: 429 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00045 - payload fees(the block proposer) ....... +ꜩ0.00045 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter unit ; - storage (list address) ; - code { CDR ; SOURCE ; CONS ; NIL operation ; PAIR } ; - view "calls_count" unit nat { CDR ; SIZE } ; - view "last_caller" - unit - (option address) - { CDR ; IF_CONS { DIP { DROP } ; SOME } { NONE address } } } - Initial storage: {} - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 152 bytes - Paid storage size diff: 152 bytes - Consumed gas: 603.192 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.038 - storage fees ........................... +ꜩ0.038 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as view_registers_callers. - -./octez-client --mode mockup --wait none originate contract view_check_caller transferring 0 from bootstrap1 running michelson_test_scripts/mini_scenarios/view_check_caller.tz --init None --burn-cap 1 -Node is bootstrapped. -Estimated gas: 628.309 units (will add 100 for safety) -Estimated storage: 465 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000508 - Expected counter: 2 - Gas limit: 729 - Storage limit: 485 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000508 - payload fees(the block proposer) ....... +ꜩ0.000508 - Origination: - From: [PUBLIC_KEY_HASH] - Credit: ꜩ0 - Script: - { parameter address ; - storage (option address) ; - code { CAR ; - DUP ; - UNIT ; - VIEW "calls_count" nat ; - IF_NONE { UNIT ; FAILWITH } {} ; - DIP { UNIT ; VIEW "last_caller" (option address) } ; - PUSH nat 0 ; - IFCMPEQ - { IF_NONE { UNIT ; FAILWITH } { IF_NONE {} { UNIT ; FAILWITH } } ; - NONE address } - { IF_NONE { UNIT ; FAILWITH } { IF_NONE { UNIT ; FAILWITH } {} } ; - SOME } ; - NIL operation ; - PAIR } } - Initial storage: None - No delegate for this contract - This origination was successfully applied - Originated contracts: - [CONTRACT_HASH] - Storage size: 208 bytes - Paid storage size diff: 208 bytes - Consumed gas: 628.275 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.052 - storage fees ........................... +ꜩ0.052 - [PUBLIC_KEY_HASH] ... -ꜩ0.06425 - storage fees ........................... +ꜩ0.06425 - -New contract [CONTRACT_HASH] originated. -Contract memorized as view_check_caller. - -./octez-client --mode mockup --wait none transfer 1 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 3582.580 units (will add 100 for safety) -Estimated storage: no bytes added -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000665 - Expected counter: 3 - Gas limit: 3683 - Storage limit: 0 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000665 - payload fees(the block proposer) ....... +ꜩ0.000665 - Transaction: - Amount: ꜩ1 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: None - Storage size: 208 bytes - Consumed gas: 3583.116 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - - -./octez-client --mode mockup --wait none transfer 1 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 -Node is bootstrapped. -Estimated gas: 1285.773 units (will add 100 for safety) -Estimated storage: 27 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000389 - Expected counter: 4 - Gas limit: 1386 - Storage limit: 47 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000389 - payload fees(the block proposer) ....... +ꜩ0.000389 - Transaction: - Amount: ꜩ1 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - This transaction was successfully applied - Updated storage: { 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78 } - Storage size: 179 bytes - Paid storage size diff: 27 bytes - Consumed gas: 1286.351 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00675 - storage fees ........................... +ꜩ0.00675 - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - - -./octez-client --mode mockup --wait none transfer 1 from bootstrap1 to '[CONTRACT_HASH]' --burn-cap 1 --arg '"[CONTRACT_HASH]"' -Node is bootstrapped. -Estimated gas: 3586.212 units (will add 100 for safety) -Estimated storage: 27 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000665 - Expected counter: 5 - Gas limit: 3687 - Storage limit: 47 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000665 - payload fees(the block proposer) ....... +ꜩ0.000665 - Transaction: - Amount: ꜩ1 - From: [PUBLIC_KEY_HASH] - To: [CONTRACT_HASH] - Parameter: "[CONTRACT_HASH]" - This transaction was successfully applied - Updated storage: (Some 0x000002298c03ed7d454a101eb7022bc95f7e5f41ac78) - Storage size: 235 bytes - Paid storage size diff: 27 bytes - Consumed gas: 3586.748 - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.00675 - storage fees ........................... +ꜩ0.00675 - [PUBLIC_KEY_HASH] ... -ꜩ1 - [CONTRACT_HASH] ... +ꜩ1 - diff --git a/tezt/tests/sc_rollup.ml b/tezt/tests/sc_rollup.ml index 419a4c665155b34c29aaf4c7eb7d4e3e57b8a8b7..5e7699ac7e5d4d2a0c044fa9c4afa9308a758768 100644 --- a/tezt/tests/sc_rollup.ml +++ b/tezt/tests/sc_rollup.ml @@ -44,7 +44,7 @@ open Sc_rollup_helpers let default_wasm_pvm_revision = function | Protocol.Alpha -> "2.0.0-r5" - | ParisB | ParisC -> "2.0.0-r4" + | ParisC -> "2.0.0-r4" let max_nb_ticks = 50_000_000_000_000 diff --git a/tezt/tests/sc_rollup_migration.ml b/tezt/tests/sc_rollup_migration.ml index e86dae423603819ef147ab29bcee39d0fc7d0b90..45110add747d2f8af0322fb73f8519f30fbf468c 100644 --- a/tezt/tests/sc_rollup_migration.ml +++ b/tezt/tests/sc_rollup_migration.ml @@ -17,7 +17,7 @@ open Sc_rollup_helpers let block_time_to_trigger_constant_update_on_migration = function | Protocol.Alpha -> Some 5 - | ParisB | ParisC -> Some 8 + | ParisC -> Some 8 let test_l1_migration_scenario ?parameters_ty ?(src = Constant.bootstrap1.alias) ?variant ?(tags = []) ?(timeout = 10) ?(commitment_period = 10) ~kind